def process_pages(): for name in text.keys(): txt = text[name] if name in inner: txt = filter_out_indirect(txt) html = HtmlFormatter(env, context, txt).generate() html = html.replace("/wiki/Guide", "#Guide") top = top_element[depth[name]] db = html2docbook(html) if name in inner: # replace list items with XIncludes, FIXME: this is ugly r = re.compile('<itemizedlist[^>]*>') db = r.sub(r'', db) r = re.compile('</itemizedlist>') db = r.sub(r'', db) r = re.compile( '<listitem>\s*<para>\s*<link\s*linkend="(Guide[a-zA-Z0-9]*)">[^<]*</link>\s*</para>\s*</listitem>' ) db = r.sub( r'<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="\1.xml"/>\n', db) db = db.replace("<__top_element__>", "<" + top + " id=\"" + name + "\">") db = db.replace("</__top_element__>", "</" + top + ">") open("docbook/" + name + ".xml", "w").write(db.encode('utf-8'))
def _format_html(self, event): ticket = event.target short_changes = {} long_changes = {} chrome = Chrome(self.env) for field, old_value in event.changes.items(): new_value = ticket[field] if (new_value and '\n' in new_value) or \ (old_value and '\n' in old_value): long_changes[field.capitalize()] = HTML( "<pre>\n%s\n</pre>" % ('\n'.join( diff_cleanup( difflib.unified_diff( wrap(old_value, cols=60).split('\n'), wrap(new_value, cols=60).split('\n'), lineterm='', n=3))))) else: short_changes[field.capitalize()] = (old_value, new_value) try: req = Mock(href=Href(self.env.abs_href()), abs_href=self.env.abs_href(), authname=event.author, perm=MockPerm(), chrome=dict(warnings=[], notices=[]), args={}) context = Context.from_request(req, event.realm, event.target.id) formatter = HtmlFormatter(self.env, context, event.comment) temp = formatter.generate(True) except Exception, e: self.log.error(exception_to_unicode(e, traceback=True)) temp = 'Comment in plain text: %s' % event.comment
def process_pages(): for name in text.keys(): txt = text[name] if name in inner: txt = filter_out_indirect(txt) html = HtmlFormatter(env, context, txt).generate() html = html.replace("/wiki/Guide", "#Guide") top = top_element[depth[name]] db = html2docbook(html) if name in inner: # replace list items with XIncludes, FIXME: this is ugly r = re.compile('<itemizedlist[^>]*>') db = r.sub(r'', db); r = re.compile('</itemizedlist>') db = r.sub(r'', db); r = re.compile('<listitem>\s*<para>\s*<link\s*linkend="(Guide[a-zA-Z0-9]*)">[^<]*</link>\s*</para>\s*</listitem>') db = r.sub(r'<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="\1.xml"/>\n', db); db = db.replace("<__top_element__>", "<" + top + " id=\"" + name + "\">") db = db.replace("</__top_element__>", "</" + top + ">") open("docbook/" + name + ".xml", "w").write(db.encode('utf-8'))
def _parse_text(self): env, context = self.create_trac_ctx( self.settings['website_url'], self.headers['author']['name'] if ('author' in self.headers and 'name' in self.headers['author']) else self.settings['author']['name'], str(self.headers['timezone']) if 'timezone' in self.headers else str(self.settings['timezone']), self.filename if self.filename.startswith('/') else '/'+self.filename) formatter = HtmlFormatter(env, context, self.text) self.text = formatter.generate()
def _parse_text(self): env, context = self.create_trac_ctx( self.settings['website_url'], self.headers['author']['name'] \ if ('author' in self.headers \ and 'name' in self.headers['author']) \ else self.settings['author']['name'], str(self.headers['timezone']) \ if 'timezone' in self.headers \ else str(self.settings['timezone']), self.filename \ if self.filename.startswith('/') \ else '/'+self.filename) formatter = HtmlFormatter(env, context, self.text) self.text = formatter.generate()
def _wiki_to_html(self, req, resource, wikitext): context = Context(resource, href=req.href, perm=req.perm) # HtmlFormatter relies on the .req even though that's not always present # in a Context. Seems like a known dark spot in Trac's API. Check # comments in trac.mimeview.api.Context.__call__() context.req = req return HtmlFormatter(self.env, context, wikitext).generate()
def _format_html(self, event): ticket = event.target short_changes = {} long_changes = {} chrome = Chrome(self.env) for field, old_value in event.changes.items(): new_value = ticket[field] if (new_value and '\n' in new_value) or \ (old_value and '\n' in old_value): long_changes[field.capitalize()] = HTML( "<pre>\n%s\n</pre>" % ( '\n'.join( diff_cleanup( difflib.unified_diff( wrap(old_value, cols=60).split('\n'), wrap(new_value, cols=60).split('\n'), lineterm='', n=3 ) ) ) ) ) else: short_changes[field.capitalize()] = (old_value, new_value) if event.comment: try: req = Mock( href=Href(self.env.abs_href()), abs_href=self.env.abs_href(), authname=event.author, perm=MockPerm(), chrome=dict( warnings=[], notices=[] ), args={} ) context = Context.from_request(req, event.realm, event.target.id) formatter = HtmlFormatter(self.env, context, event.comment) temp = formatter.generate(True) except Exception, e: self.log.error(exception_to_unicode(e, traceback=True)) temp = 'Comment in plain text: %s'%event.comment
def wiki_to_html(event, wikitext): if wikitext is None: return "" try: req = Mock(href=Href(self.env.abs_href()), abs_href=self.env.abs_href, authname=event.author, perm=MockPerm(), chrome=dict(warnings=[], notices=[]), args={}) context = Context.from_request(req, event.realm, event.target.id) formatter = HtmlFormatter(self.env, context, wikitext) return formatter.generate(True) except Exception, e: raise self.log.error("Failed to render %s", repr(wikitext)) self.log.error(exception_to_unicode(e, traceback=True)) return wikitext
def _format_email(self, authname, sender, recipients, subject, text, mode, links=[], attachments=[]): if text: req = Mock( href=Href(self.env.abs_href()), abs_href=self.env.abs_href, authname=authname, perm=MockPerm(), chrome=dict( warnings=[], notices=[] ), args={} ) context = Context.from_request(req) formatter = HtmlFormatter(self.env, context, text) try: htmlmessage = formatter.generate(True) except Exception, e: self.log.error("Failed to render %s", repr(text)) self.log.error(exception_to_unicode(e, traceback=True)) htmlmessage = text
def render_wiki_to_html_without_req(event, wikitext): if wikitext is None: return "" try: req = Mock( href=Href(self.env.abs_href()), abs_href=self.env.abs_href, authname=event.author, perm=MockPerm(), chrome=dict( warnings=[], notices=[] ), args={} ) context = Context.from_request(req, event.realm, event.target.id) formatter = HtmlFormatter(self.env, context, wikitext) return formatter.generate(True) except Exception, e: raise self.log.error("Failed to render %s", repr(wikitext)) self.log.error(exception_to_unicode(e, traceback=True)) return wikitext
def parse_html(self, args, context, wiki): """ Parse html string to docx args[1] = paragraph, context, wiki, args[3] = spec_name""" try: html_code = HtmlFormatter(self.env, context, wiki).generate() #print('inside parse_html before DocumentHTMLParser') DocumentHTMLParser(self.document, args[1], html_code) #print('inside parse_html after DocumentHTMLParser') return html_code except AttributeError: self.wiki2doc.errorlog.append( ("HtmlFormatter could not parse" +\ " the following wikitext: {}".format(wiki), get_base_url(self.req) + 'wiki/' + args[3]))
def _get_wiki_data(self, context, selected_state, selected_owner, tag_list): """Get all page data for pages matching criteria.""" #self.log.debug(" +++ in _get_wiki_data") page_metas = [] page_datas = {} returnList = [] db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute(""" SELECT name, owner, state, priority, time, author FROM wikimeta WHERE current=1 order by priority desc, time desc """) for row in cursor: #self.log.debug(" +++ in _get_page_meta, found row with state %s" % row[2]) if selected_owner == 'all' or selected_owner == row[1]: if selected_state == row[2] or (selected_state == 'all (non-obsolete)' and 'obsolete' != row[2]): page_metas.append(PageMeta(row[0], row[1], row[2], int(row[3]), int(row[4]), row[5])) for page_meta in page_metas: page_tags = page_meta._get_tags(self.env) if set(tag_list).issubset(page_tags): # passes all tests, so get the data: page = WikiPage(self.env, page_meta.name) if page is not None: page_data = page_meta.__getitems__() page_data['html'] = Markup(HtmlFormatter(self.env, context('wiki', page_meta.name), page.text).generate()) page_data['tags'] = page_tags page_data['last_modified'] = page.time.strftime("%Y.%m.%d") returnList.append(page_data) if len(returnList) > 1 and selected_state == 'planned': for index in range(0,len(returnList)): if index > 0: returnList[index]['raisable'] = 'True' returnList[index]['prev_priority'] = returnList[index - 1]['priority'] if index < len(returnList) - 1: returnList[index]['lowerable'] = 'True' returnList[index]['next_priority'] = returnList[index + 1]['priority'] return returnList
def formatter(self): return HtmlFormatter(self.env, self.context, self.input)
#!/usr/bin/env python # found on trac google group: # http://groups.google.com/group/trac-dev/browse_thread/thread/2c97c6c514487778?q= import sys from trac.test import EnvironmentStub, Mock, MockPerm from trac.mimeview import Context from trac.wiki.formatter import HtmlFormatter from trac.web.href import Href env = EnvironmentStub() req = Mock(href=Href('/'), abs_href=Href('http://www.example.com/'), authname='anonymous', perm=MockPerm(), args={}) context = Context.from_request(req, 'wiki') wiki = '= Trac Wiki to HTML Demo =' print HtmlFormatter(env, context, wiki).generate()
try: wiki = open(sys.argv[1]).read().decode(ENC_IN) except IOError: wiki = sys.argv[1] # parse string as tracwiki if not a file else: wiki = '= The Trac Wiki to HTML converter =' if len(sys.argv) > 2: out_file = open(sys.argv[2],'w') else: out_file = sys.stdout out_file.write(('''<html><head><link rel="stylesheet" href="%s" type="text/css" /> </head><body>''' % CSS_FILE).encode(ENC_OUT)) out_file.write(HtmlFormatter(env, context, wiki).generate().encode(ENC_OUT)) out_file.write(''' </body> </html> '''.encode(ENC_OUT)) if not os.path.exists(CSS_FILE): CSS = ''' body { background: #fff; color: #000; margin: 10px; padding: 0; } body, th, td { font: normal 13px Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif; } h1, h2, h3, h4 { font-family: Arial,Verdana,'Bitstream Vera Sans',Helvetica,sans-serif; font-weight: bold;