# HG changeset patch # User amit # Date 1285842572 -19800 # Node ID 5574cfc2b28d590e63488db1e0851a98f96af96f # Parent 54f7842305119a9780a98f934ae13137f811e6f1 Adding the sphinx builder script simplecomment diff -r 54f784230511 -r 5574cfc2b28d simplecomment.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simplecomment.py Thu Sep 30 15:59:32 2010 +0530 @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.webapp + ~~~~~~~~~~~~~~~~~~~~~~ + + A web application builder. + + :copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import os +import sys +import codecs +import shutil +import cPickle +from os import path +from hashlib import md5 +from types import ListType, TupleType +import re + + +import jinja2 as j2 + +#from mercurial import commands, ui +#from mercurial.hg import repository + +from sphinx.builders.html import StandaloneHTMLBuilder +from sphinx.errors import SphinxError +from sphinx.web.dbutils import PidDb +from sphinx.web.webconfig import WebConfig +from sphinx.writers.html import HTMLTranslator + + + + + + +class SimpleCommentHTMLBuilder(StandaloneHTMLBuilder): + """ Static html pages with paragraph ids. + """ + def init(self): + self.app.add_javascript('simplecomment.js') + self.id_file_loc=os.path.join(self.outdir,'paragraph_id.py') + self.id_file=open(self.id_file_loc,'w') + self.beginning="p_list= " + self.id_dictionary={} + + StandaloneHTMLBuilder.init(self) + + def get_target_uri(self, docname, typ=None): + return docname + self.link_suffix + + def write_doc(self, docname, doctree): + StandaloneHTMLBuilder.write_doc(self, docname, doctree) + + def prepare_writing(self, docnames): + StandaloneHTMLBuilder.prepare_writing(self, docnames) + + def finish(self): + StandaloneHTMLBuilder.finish(self) + self.add_pids_to_paragraphs() + self.id_file.write(self.beginning+str(self.id_dictionary)) + + + def add_pids_to_paragraphs(self): + all_files=[] + for path,dir,filenames in os.walk(self.outdir): + for filename in filenames: + all_files.append(os.path.join(path, filename)) + + for element in all_files : + if element.split('.')[1]=='html': + self.id_list=[] + self.taggen(element) + self.id_dictionary[self.chapter.split('/')[-1]]=self.id_list + + else : + pass + + def retag(self,s): + self.biggest_id += 1 + id_name="%s_%x" % (self.chapter.split('/')[-1],self.biggest_id) + self.id_list.append(id_name) + + return '

' %id_name + + + + + def taggen(self,html_file_name): + tagged = re.compile('

]*>', re.M) + self.biggest_id=0 + self.chapter=html_file_name.split('.')[0] + + try: + f = open(html_file_name).read() + f1 = re.sub('

',self.retag, f ) + + + if f1 != f: + tmpname = html_file_name+ '.tmp' + fp = open(tmpname, 'w') + fp.write(f1) + fp.close() + os.rename(tmpname,html_file_name) + + except IOError: + pass + + +