Example #1
0
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'))
Example #2
0
    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
Example #3
0
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'))
Example #4
0
 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()
Example #5
0
 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()
Example #6
0
 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()
Example #7
0
    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
Example #8
0
 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
Example #10
0
 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
Example #11
0
    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]))
Example #12
0
 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
Example #13
0
 def formatter(self):
     return HtmlFormatter(self.env, self.context, self.input)
Example #14
0
#!/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()
Example #15
0
    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;