msgQ: some code doc and minor cleanup
[charm.git] / doc / markupSanitizer.py
1 #!/usr/bin/python
2
3 from bs4 import BeautifulSoup
4 import sys
5 import os
6
7 # Accept filename as user input
8 argc = len( sys.argv )
9 if (argc < 2): raise Exception
10 fileName = sys.argv[1];
11
12 # Construct a DOM object
13 soup = BeautifulSoup(open(fileName), "lxml")
14
15 # Assuming, tt tags are not spewed recklessly by latex2html,
16 # replace them with code tags
17 for t in soup('tt'):
18     t.wrap( soup.new_tag('code') )
19     t.unwrap()
20
21 # Rewrap all div class=alltt blocks in pre tags
22 for d in soup('div','alltt'):
23     d.wrap( soup.new_tag('pre') )
24     d.unwrap()
25
26 # Remove br and span tags from within pre sections
27 for p in soup('pre'):
28     for b in p('br'):
29         b.extract()
30     for s in p('span'):
31         s.unwrap()
32
33 # Remove all useless class 'arabic' spans
34 for s in soup('span','arabic'):
35     s.unwrap()
36
37 # Extract the navigation bar
38 navmenu = soup.find('div', 'navigation')
39 if navmenu:
40     navmenu.extract()
41
42 # Wrap the remaining contents within a div
43 if not soup.find('div', id='maincontainer'):
44     soup.body['id'] = 'maincontainer'
45     soup.body.name = 'div'
46     soup.find('div', id='maincontainer').wrap( soup.new_tag('body') )
47
48 if navmenu:
49     # If this navmenu doesn't already have a TOC, insert one
50     if not navmenu.find('ul','manual-toc'):
51         # Add a toc within the navmenu
52         navmenuTOC = BeautifulSoup(open("tmp-navmenu.html"), "lxml")
53         navmenuTOC = navmenuTOC.find('ul','manual-toc').extract()
54         navmenuTOC.append( BeautifulSoup("".join([
55         '<li><a href="http://charm.cs.illinois.edu">PPL Homepage</a></li>',
56         '<li><a href="http://charm.cs.illinois.edu/help">Other Manuals</a></li>'])
57         ) )
58         navmenu.append(navmenuTOC)
59
60     # Insert navigation symbols to prev and next links
61     prevsymbol = soup.new_tag('span')
62     prevsymbol['class'] = 'navsymbol'
63     prevsymbol.string = u'\xab'
64     prv = navmenu.find('li',id='nav-prev')
65     if prv:
66         prv.find('a').insert(0, prevsymbol)
67
68     nextsymbol = soup.new_tag('span')
69     nextsymbol['class'] = 'navsymbol'
70     nextsymbol.string = u'\xbb'
71     nxt = navmenu.find('li',id='nav-next')
72     if nxt:
73         nxt.find('a').append(nextsymbol)
74
75     # Reinsert the navigation bar at the end
76     soup.body.append(navmenu)
77
78 # Extract the title
79 titl = soup.find('title')
80
81 # Replace the head section with the user-supplied head markup
82 soup.find('head').extract()
83 newhead = BeautifulSoup(open("../assets/head.html"), "lxml")
84 newhead = newhead.find('head').extract()
85 newhead.append(titl)
86 soup.html.body.insert_before(newhead)
87
88 # Print cleaned up markup to stdout
89 print( soup.prettify(formatter="html") )
90