hgbook
annotate en/fblinks @ 48:e8ab09bf5d7d
Force the \grafix macro to use the PDF image
It would seem that the \includegraphics macro is moody and sometimes it
prefers the png over the pdf. This should force it to always use the right
file type.
It would seem that the \includegraphics macro is moody and sometimes it
prefers the png over the pdf. This should force it to always use the right
file type.
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Mon Jul 24 15:58:33 2006 -0400 (2006-07-24) |
parents | ce3339dbeb6f |
children |
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@21 | 8 hg_id = sys.argv[1] |
bos@18 | 9 |
bos@18 | 10 dest_dir = sys.argv[2] |
bos@18 | 11 |
bos@21 | 12 empty_re = re.compile(r'^\s*$') |
bos@21 | 13 line_re = re.compile(r'^(\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@23 | 21 def feedback(name, text, ctx_id): |
bos@23 | 22 return r'\marginpar{\scriptsize \href{http://demesne:8000/book/feedback/submit/%s/%s/%d/}{Feedback}}' % (hg_id, name, ctx_id) |
bos@21 | 23 |
bos@21 | 24 ctxs = {} |
bos@21 | 25 try: |
bos@21 | 26 cfp = open(os.path.join(dest_dir, 'rev-' + hg_id + '.ctx'), 'r+') |
bos@21 | 27 for line in cfp: |
bos@21 | 28 f, l, c = line.split(':', 2) |
bos@21 | 29 ctxs[(f, int(l))] = c.strip() |
bos@21 | 30 except IOError, err: |
bos@21 | 31 if err.errno != errno.ENOENT: raise |
bos@21 | 32 cfp = open(os.path.join(dest_dir, 'rev-' + hg_id + '.ctx'), 'w+') |
bos@21 | 33 |
bos@21 | 34 changes = 0 |
bos@18 | 35 |
bos@18 | 36 for name in sys.argv[3:]: |
bos@18 | 37 if not name.endswith('.tex'): |
bos@18 | 38 continue |
bos@18 | 39 dest_name = os.path.join(dest_dir, name) |
bos@18 | 40 ifp = open(name) |
bos@18 | 41 ofp = open(dest_name, 'w') |
bos@18 | 42 new_par = True |
bos@18 | 43 line_num = 0 |
bos@23 | 44 par_num = 0 |
bos@18 | 45 for line in ifp: |
bos@18 | 46 line_num += 1 |
bos@18 | 47 if new_par: |
bos@18 | 48 m = line_re.match(line) |
bos@18 | 49 if m: |
bos@23 | 50 par_num += 1 |
bos@21 | 51 ls = line.strip() |
bos@23 | 52 if ctxs.get((name, par_num)) != ls: |
bos@23 | 53 ctxs[(name, par_num)] = ls |
bos@21 | 54 changes += 1 |
bos@23 | 55 line = m.group(1) + feedback(name, line, par_num) + m.group(2) |
bos@18 | 56 new_par = False |
bos@18 | 57 elif not line.strip(): |
bos@18 | 58 new_par = True |
bos@18 | 59 ofp.write(line) |
bos@21 | 60 |
bos@21 | 61 if changes: |
bos@21 | 62 cfp.seek(0) |
bos@21 | 63 print '%s: %d changes' % (cfp.name, changes) |
bos@21 | 64 ctxs = ctxs.items() |
bos@21 | 65 ctxs.sort() |
bos@21 | 66 for ((file, line), content) in ctxs: |
bos@21 | 67 cfp.write('%s:%d: %s\n' % (file, line, content)) |