183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh'Provides "Strip trailing whitespace" under the "Format" menu.'
283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh__author__ = "Roger D. Serwy <roger.serwy at gmail.com>"
483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass RstripExtension:
683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    menudefs = [
883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        ('format', [None,
983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh               ('Strip trailing whitespace', '<<do-rstrip>>'),
1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh       ]),]
1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def __init__(self, editwin):
1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.editwin = editwin
1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.editwin.text.bind("<<do-rstrip>>", self.do_rstrip)
1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def do_rstrip(self, event=None):
1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        text = self.editwin.text
1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        undo = self.editwin.undo
2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        undo.undo_block_start()
2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        end_line = int(float(text.index('end'))) + 1
2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        for cur in range(1, end_line):
2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            txt = text.get('%i.0' % cur, '%i.0 lineend' % cur)
2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            cut = len(txt.rstrip())
2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            text.delete('%i.%i' % (cur, cut), '%i.0 lineend' % cur)
2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        undo.undo_block_stop()
30