Mercurial > public > src > rhodecode
changeset 165:ea893ffb7f00
implemented pygmentize codes into webhelpers. Together with color_dict caching into pylons globals
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 21 May 2010 02:07:49 +0200 |
parents | 1231bbe1ab36 |
children | 664cc7341278 |
files | pylons_app/lib/app_globals.py pylons_app/lib/helpers.py |
diffstat | 2 files changed, 89 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/pylons_app/lib/app_globals.py Wed May 19 21:33:10 2010 +0200 +++ b/pylons_app/lib/app_globals.py Fri May 21 02:07:49 2010 +0200 @@ -21,3 +21,4 @@ self.baseui = make_ui('hgwebdir.config') self.paths = self.baseui.configitems('paths') self.base_path = self.paths[0][1].replace('*', '') + self.changeset_annotation_colors = {}
--- a/pylons_app/lib/helpers.py Wed May 19 21:33:10 2010 +0200 +++ b/pylons_app/lib/helpers.py Fri May 21 02:07:49 2010 +0200 @@ -3,7 +3,7 @@ Consists of functions to typically be used within templates, but also available to Controllers. This module is available to both as 'h'. """ -from pylons import url +from pylons import url, app_globals as g from pylons.i18n.translation import _, ungettext from webhelpers.html import (literal, HTML, escape) from webhelpers.html.builder import make_tag @@ -19,7 +19,7 @@ from webhelpers.text import (chop_at, collapse, convert_accented_entities, convert_misc_entities, lchop, plural, rchop, remove_formatting, replace_whitespace, urlify) - +from webhelpers.number import (format_byte_size, format_bit_size) from webhelpers.pylonslib import Flash as _Flash from webhelpers.pylonslib.secure_form import secure_form @@ -50,25 +50,6 @@ if form_errors and form_errors.has_key(field_name): return literal(tmpl % form_errors.get(field_name)) -class _FileSizeFormat(object): - """ - Formats the value like a 'human-readable' file size (i.e. 13 KB, 4.1 MB, - 102 bytes, etc). - """ - def __call__(self, bytes): - try: - bytes = float(bytes) - except TypeError: - return u"0 bytes" - - if bytes < 1024: - return ungettext("%(size)d byte", "%(size)d bytes", bytes) % {'size': bytes} - if bytes < 1024 * 1024: - return _("%.1f KB") % (bytes / 1024) - if bytes < 1024 * 1024 * 1024: - return _("%.1f MB") % (bytes / (1024 * 1024)) - return _("%.1f GB") % (bytes / (1024 * 1024 * 1024)) - class _FilesBreadCrumbs(object): def __call__(self, repo_name, rev, paths): @@ -82,14 +63,96 @@ return literal(' / '.join(url_l)) def pygmentize(code, **kwargs): - ''' + """ Filter for chunks of html to replace code tags with pygmented code - ''' - return literal(highlight(code, guess_lexer(code), HtmlFormatter(**kwargs))) + """ + code = code.splitlines() + _html, _html2 = [], [] + _html.append("""<table class="code-highlighttable">""") + _html.append("""<tr>""") + _html.append("""<td class="linenos">""") + _html.append("""<div class="linenodiv">""") + _html.append("""<pre>""") + for cnt, code in enumerate(code, 1): + #generete lines nos + _html.append("""<a id="A%s" href="#A%s">%s</a>\n""" \ + % (cnt, cnt, cnt)) + #propagate second list with code + _html2.append("""%s""" % (highlight(code, get_lexer_by_name('python'), + HtmlFormatter(nowrap=True)))) + _html.append("""</pre>""") + _html.append("""</div>""") + _html.append("""</td>""") + _html.append("""<td class="code">""") + _html.append("""<div class="code-highlight">""") + _html.append("""<pre>""") + _html.extend(_html2) + _html.append("""</pre>""") + _html.append("""</div>""") + _html.append("""</td>""") + _html.append("""</tr>""") + _html.append("""</table>""") + return literal(''.join(_html)) + #return literal(highlight(code, get_lexer_by_name('python'), HtmlFormatter(**kwargs))) + +def pygmentize_annotation(annotate_list, repo_name): + """ + Generate a dict of + @param annotate_lists: + """ + import random + color_dict = g.changeset_annotation_colors + def gen_color(): + return [str(random.randrange(0, 255)) for _ in xrange(3)] + def get_color_string(cs): + if color_dict.has_key(cs): + col = color_dict[cs] + else: + color_dict[cs] = gen_color() + col = color_dict[cs] + return "color: rgb(%s) ! important;" % (','.join(col)) + _html, _html2, _html3 = [], [], [] + _html.append("""<table class="code-highlighttable">""") + _html.append("""<tr>""") + _html.append("""<td class="linenos">""") + _html.append("""<div class="linenodiv">""") + _html.append("""<pre>""") + for line in annotate_list: + #lines + _html.append("""<a id="A%s" href="#S%s">%s</a>\n""" \ + % (line[0], line[0], line[0])) + #annotation tags + _html2.append("""%s\n""" % link_to(line[1].raw_id, + url('changeset_home', repo_name=repo_name, revision=line[1].raw_id), + title=_('author') + ':%s rev:%s %s' % (line[1].author, line[1].revision, + line[1].message,), + style=get_color_string(line[1].raw_id))) + #code formated with pygments + _html3.append("""%s""" % (highlight(line[2], get_lexer_by_name('python') + , HtmlFormatter(nowrap=True)))) + _html.append("""</pre>""") + _html.append("""</div>""") + _html.append("""</td>""") + _html.append("""<td class="linenos">""") + _html.append("""<div class="linenodiv">""") + _html.append("""<pre>""") + _html.extend(_html2) + _html.append("""</pre>""") + _html.append("""</div>""") + _html.append("""</td>""") + _html.append("""<td class="code">""") + _html.append("""<div class="code-highlight">""") + _html.append("""<pre>""") + _html.extend(_html3) + _html.append("""</pre>""") + _html.append("""</div>""") + _html.append("""</td>""") + _html.append("""</tr>""") + _html.append("""</table>""") + return literal(''.join(_html)) files_breadcrumbs = _FilesBreadCrumbs() -filesizeformat = _FileSizeFormat() link = _Link() flash = _Flash() get_error = _GetError()