hgbook

annotate en/fblinks @ 18:e6f4088ebe52

Generate a PDF file with a feedback link on each paragraph.
author Bryan O'Sullivan <bos@serpentine.com>
date Tue Jul 04 16:41:31 2006 -0700 (2006-07-04)
parents
children ce3339dbeb6f
rev   line source
bos@18 1 #!/usr/bin/python
bos@18 2
bos@18 3 import errno
bos@18 4 import os
bos@18 5 import re
bos@18 6 import sys
bos@18 7
bos@18 8 hg_id = sys.argv[1][:12]
bos@18 9
bos@18 10 dest_dir = sys.argv[2]
bos@18 11
bos@18 12 empty_re = re.compile('^\s*$')
bos@18 13 line_re = re.compile('^(\w+)(.*)')
bos@18 14
bos@18 15 try:
bos@18 16 os.makedirs(dest_dir)
bos@18 17 except OSError, err:
bos@18 18 if err.errno != errno.EEXIST:
bos@18 19 raise
bos@18 20
bos@18 21 def feedback(name, text, line):
bos@18 22 return r'\marginpar{\scriptsize \href{http://www.sourcecontrol.org/book/feedback.cgi?id=%s&file=%s&line=%d}{Feedback?}}' % (hg_id, name, line)
bos@18 23
bos@18 24 for name in sys.argv[3:]:
bos@18 25 if not name.endswith('.tex'):
bos@18 26 continue
bos@18 27 dest_name = os.path.join(dest_dir, name)
bos@18 28 ifp = open(name)
bos@18 29 ofp = open(dest_name, 'w')
bos@18 30 new_par = True
bos@18 31 line_num = 0
bos@18 32 for line in ifp:
bos@18 33 line_num += 1
bos@18 34 if new_par:
bos@18 35 m = line_re.match(line)
bos@18 36 if m:
bos@18 37 line = m.group(1) + feedback(name, line, line_num) + m.group(2)
bos@18 38 new_par = False
bos@18 39 elif not line.strip():
bos@18 40 new_par = True
bos@18 41 ofp.write(line)