import difflib
import re
import sys
sectionheader_re = re.compile(r'^==+\s(.*)\s*$')
anchor_re = re.compile(r'^\[\[([^]]+)\]\]')
class Reader(object):
def __init__(self):
self.d = {}
self.getline = self._getsec
self.section = None
def _getsec(self, line):
m = sectionheader_re.match(line)
if not m:
return
self.anchors = anchors = []
self.d[m.group(1)] = anchors
self.getline = self._getanchor
def _getanchor(self, line):
m = anchor_re.match(line)
if not m:
return self._getsec(line)
self.anchors.append(m.group(1))
def diffsort(self, key):
a = [s + '\n' for s in self.d[key]]
b = sorted(a, key=str.lower)
return difflib.unified_diff(a, b, fromfile=key+' unsorted',
tofile=key+' sorted')
def main():
try:
fname = sys.argv[1]
f = open(fname, 'r')
except IndexError:
f = sys.stdin
reader = Reader()
for line in f:
reader.getline(line)
for key in sorted(reader.d.keys(), key=str.lower):
sys.stdout.writelines(reader.diffsort(key))
if __name__ == '__main__':
main()