# HG changeset patch # User Marcin Kuzminski # Date 2011-01-28 10:49:06 # Node ID 63c91390853c3d61246bcccae34eb368e4586263 # Parent 5da1286ddd28400db6ff19f1751d7c7ab39c220e fixed line number look diff --git a/rhodecode/lib/helpers.py b/rhodecode/lib/helpers.py --- a/rhodecode/lib/helpers.py +++ b/rhodecode/lib/helpers.py @@ -5,6 +5,7 @@ available to Controllers. This module is """ import random import hashlib +import StringIO from pygments.formatters import HtmlFormatter from pygments import highlight as code_highlight from pylons import url, app_globals as g @@ -217,6 +218,8 @@ class _FilesBreadCrumbs(object): files_breadcrumbs = _FilesBreadCrumbs() class CodeHtmlFormatter(HtmlFormatter): + """My code Html Formatter for source codes + """ def wrap(self, source, outfile): return self._wrap_div(self._wrap_pre(self._wrap_code(source))) @@ -224,8 +227,72 @@ class CodeHtmlFormatter(HtmlFormatter): def _wrap_code(self, source): for cnt, it in enumerate(source): i, t = it - t = '
%s
' % (cnt + 1, t) + t = '
%s
' % (cnt + 1, t) yield i, t + + def _wrap_tablelinenos(self, inner): + dummyoutfile = StringIO.StringIO() + lncount = 0 + for t, line in inner: + if t: + lncount += 1 + dummyoutfile.write(line) + + fl = self.linenostart + mw = len(str(lncount + fl - 1)) + sp = self.linenospecial + st = self.linenostep + la = self.lineanchors + aln = self.anchorlinenos + nocls = self.noclasses + if sp: + lines = [] + + for i in range(fl, fl + lncount): + if i % st == 0: + if i % sp == 0: + if aln: + lines.append('%*d' % + (la, i, mw, i)) + else: + lines.append('%*d' % (mw, i)) + else: + if aln: + lines.append('%*d' % (la, i, mw, i)) + else: + lines.append('%*d' % (mw, i)) + else: + lines.append('') + ls = '\n'.join(lines) + else: + lines = [] + for i in range(fl, fl + lncount): + if i % st == 0: + if aln: + lines.append('%*d' % (la, i, mw, i)) + else: + lines.append('%*d' % (mw, i)) + else: + lines.append('') + ls = '\n'.join(lines) + + # in case you wonder about the seemingly redundant
here: since the + # content in the other cell also is wrapped in a div, some browsers in + # some configurations seem to mess up the formatting... + if nocls: + yield 0, ('' % self.cssclass + + '
' + '
' +
+                      ls + '
') + else: + yield 0, ('' % self.cssclass + + '
' +
+                      ls + '
') + yield 0, dummyoutfile.getvalue() + yield 0, '
' + + def pygmentize(filenode, **kwargs): """pygmentize function using pygments