[Lxml-checkins] r53871 - in lxml/trunk: . doc

scoder at codespeak.net scoder at codespeak.net
Sat Apr 19 16:10:12 CEST 2008


Author: scoder
Date: Sat Apr 19 16:10:12 2008
New Revision: 53871

Modified:
   lxml/trunk/   (props changed)
   lxml/trunk/doc/mklatex.py
Log:
 r4007 at delle:  sbehnel | 2008-04-19 16:08:51 +0200
 fix inter-document links in doc PDF


Modified: lxml/trunk/doc/mklatex.py
==============================================================================
--- lxml/trunk/doc/mklatex.py	(original)
+++ lxml/trunk/doc/mklatex.py	Sat Apr 19 16:10:12 2008
@@ -112,6 +112,21 @@
     header = []
     titles = {}
 
+    replace_relative_hyperrefs = re.compile(
+        r'\\href\{([^/}]+)[.]([^.]+)\}\{([^}]+)\}').sub
+    def build_hyperref(match):
+        basename, extension, linktext = match.groups()
+        outname = BASENAME_MAP.get(basename, basename)
+        if '#' in basename or extension != 'html':
+            return r'\href{http://codespeak.net/lxml/%s.%s}{%s}' % (
+                outname, extension, linktext)
+        else:
+            return r"\hyperref[_part_%s.tex]{%s}" % (outname, linktext)
+    def fix_relative_hyperrefs(line):
+        if r'\href' not in line:
+            return line
+        return replace_relative_hyperrefs(build_hyperref, line)
+
     # Building pages
     for section, text_files in SITE_STRUCTURE:
         for filename in text_files:
@@ -132,7 +147,8 @@
 
                 final_name = os.path.join(dirname, "_part_%s" % outname)
 
-                title, hd = tex_postprocess(outpath, final_name, not header)
+                title, hd = tex_postprocess(outpath, final_name, not header,
+                                            process_line=fix_relative_hyperrefs)
                 if not header:
                     header = hd
                 titles[outname] = title
@@ -171,6 +187,11 @@
 
     master.write("\\tableofcontents\n\n")
 
+    def write_chapter(title, outname):
+        master.write(
+            "\\chapter{%s}\n\\label{_part_%s}\n\n\\input{_part_%s}\n\n" % (
+                title, outname, outname))
+
     for section, text_files in SITE_STRUCTURE:
         master.write("\\part{%s}\n\n" % section)
         for filename in text_files:
@@ -184,12 +205,9 @@
                 basename = os.path.splitext(os.path.basename(filename))[0]
                 basename = BASENAME_MAP.get(basename, basename)
                 outname = basename + '.tex'
-                ## TODO: true title
-                master.write("\\chapter{%s}\n\n" % titles[outname])
-                master.write("\\input{_part_%s}\n\n" % outname)
+                write_chapter(titles[outname], outname)
 
-    master.write("\\chapter{Changes}\n\n")
-    master.write("\\input{_part_%s}\n\n" % chgname)
+    write_chapter("Changes", chgname)
 
     master.write("\end{document}\n")
                 


More information about the lxml-checkins mailing list