bos@18: #!/usr/bin/python bos@18: bos@18: import errno bos@18: import os bos@18: import re bos@18: import sys bos@18: bos@21: hg_id = sys.argv[1] bos@18: bos@18: dest_dir = sys.argv[2] bos@18: bos@21: empty_re = re.compile(r'^\s*$') bos@21: line_re = re.compile(r'^(\w+)(.*)') bos@18: bos@18: try: bos@18: os.makedirs(dest_dir) bos@18: except OSError, err: bos@18: if err.errno != errno.EEXIST: bos@18: raise bos@18: bos@23: def feedback(name, text, ctx_id): bos@23: return r'\marginpar{\scriptsize \href{http://demesne:8000/book/feedback/submit/%s/%s/%d/}{Feedback}}' % (hg_id, name, ctx_id) bos@21: bos@21: ctxs = {} bos@21: try: bos@21: cfp = open(os.path.join(dest_dir, 'rev-' + hg_id + '.ctx'), 'r+') bos@21: for line in cfp: bos@21: f, l, c = line.split(':', 2) bos@21: ctxs[(f, int(l))] = c.strip() bos@21: except IOError, err: bos@21: if err.errno != errno.ENOENT: raise bos@21: cfp = open(os.path.join(dest_dir, 'rev-' + hg_id + '.ctx'), 'w+') bos@21: bos@21: changes = 0 bos@18: bos@18: for name in sys.argv[3:]: bos@18: if not name.endswith('.tex'): bos@18: continue bos@18: dest_name = os.path.join(dest_dir, name) bos@18: ifp = open(name) bos@18: ofp = open(dest_name, 'w') bos@18: new_par = True bos@18: line_num = 0 bos@23: par_num = 0 bos@18: for line in ifp: bos@18: line_num += 1 bos@18: if new_par: bos@18: m = line_re.match(line) bos@18: if m: bos@23: par_num += 1 bos@21: ls = line.strip() bos@23: if ctxs.get((name, par_num)) != ls: bos@23: ctxs[(name, par_num)] = ls bos@21: changes += 1 bos@23: line = m.group(1) + feedback(name, line, par_num) + m.group(2) bos@18: new_par = False bos@18: elif not line.strip(): bos@18: new_par = True bos@18: ofp.write(line) bos@21: bos@21: if changes: bos@21: cfp.seek(0) bos@21: print '%s: %d changes' % (cfp.name, changes) bos@21: ctxs = ctxs.items() bos@21: ctxs.sort() bos@21: for ((file, line), content) in ctxs: bos@21: cfp.write('%s:%d: %s\n' % (file, line, content))