view apps/snippet/highlight.py @ 54:898881bbfdea

Tie snippets to their authors, enable a couple more lexer languages
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Mon, 07 Feb 2011 04:43:09 -0600
parents b7c1c22fdfe8
children 892c7fbd3b35
line wrap: on
line source

from pygments.lexers import get_all_lexers, get_lexer_by_name, guess_lexer
from pygments.styles import get_all_styles
from pygments.formatters import HtmlFormatter
from pygments.util import ClassNotFound
from pygments import highlight

LEXER_LIST_ALL = sorted([(i[1][0], i[0]) for i in get_all_lexers()])
LEXER_LIST = (
    ('bash', 'bash'),
    ('c', 'C'),
    ('c++', 'C++'),
    ('java', 'Java'),
    ('matlab', 'MATLAB'),
    ('octave', 'Octave'),
    ('perl', 'Perl'),
    ('php', 'PHP'),
    ('python', 'Python'),
    ('text', 'Text only'),
)
LEXER_DEFAULT = 'octave'


class NakedHtmlFormatter(HtmlFormatter):
    def wrap(self, source, outfile):
        return self._wrap_code(source)
    def _wrap_code(self, source):
        for i, t in source:
            yield i, t

def pygmentize(code_string, lexer_name='text'):
    return highlight(code_string, get_lexer_by_name(lexer_name),
                     NakedHtmlFormatter())

def guess_code_lexer(code_string, default_lexer='unknown'):
    try:
        return guess_lexer(code_string).name
    except ClassNotFound:
        return default_lexer