doc: Sanitize latex2html output by using python lib BeautifulSoup
authorRamprasad Venkataraman <ramv@illinois.edu>
Mon, 6 Aug 2012 19:43:24 +0000 (14:43 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Mon, 6 Aug 2012 19:45:13 +0000 (14:45 -0500)
Shell-bound regex just wont cut it.
The right tool for the job makes the world look rosy.

doc/l2h_sanitize_markup.sh
doc/markupSanitizer.py [new file with mode: 0755]

index 81a1477ab441cc2e3f60274ab7e7b989dcc155fb..d7ee67660b7f33469fa3e66479086f5a81e76f89 100755 (executable)
@@ -26,18 +26,9 @@ do
     # Munge through the markup and... 
        # Relativize all paths
        # Replace placeholder with script tag
-       # Remove all closing tt tags
-       # and also remove the closing div matching the div.alltt
-       # Replace div.alltt with pre tag
-       # Delete tt tag that is no longer supported in html5
-       # Remove all br tags in between pre tags
-       # and finally delete the line if it just has whitespace
        sed -e 's!'$cwd'/!!g' \
            -e 's|replace_with_script|script|g' \
-               -e '/<\/TT>/{N;s|<\/TT>||g;/\n<\/DIV>/{s|<\/DIV>|</code></pre>|g}}' \
-               -e 's|<DIV CLASS="alltt"[^>]*>|<pre><code>|g' \
-               -e 's|<TT>||g' \
-               -e '/<pre>/,/<\/pre>/s|<BR>||g' \
-               -e '/^\w*$/d' \
        tmp > $f || die "error running sed on $f"
+    ../markupSanitizer.py $f > tmp
+    cat tmp > $f
 done
diff --git a/doc/markupSanitizer.py b/doc/markupSanitizer.py
new file mode 100755 (executable)
index 0000000..9b23ee3
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+
+from bs4 import BeautifulSoup
+import sys
+import os
+
+# Accept filename as user input
+argc = len( sys.argv )
+if (argc < 2): raise Exception
+fileName = sys.argv[1];
+
+# Construct a DOM object
+soup = BeautifulSoup(open(fileName), "lxml")
+
+# Assuming, tt tags are not spewed recklessly by latex2html,
+# replace them with code tags
+for t in soup('tt'):
+    t.wrap( soup.new_tag('code') )
+    t.unwrap()
+
+# Rewrap all div class=alltt blocks in pre tags
+for d in soup('div','alltt'):
+    d.wrap( soup.new_tag('pre') )
+    d.unwrap()
+
+# Remove br tags required within pre sections
+for p in soup('pre'):
+    for b in p('br'):
+        b.extract()
+
+# Print cleaned up markup to stdout
+print( soup.prettify(formatter="html") )
+