/kai/lib/highlight.py

https://bitbucket.org/bbangert/kai/ · Python · 28 lines · 21 code · 6 blank · 1 comment · 3 complexity · aa1e3480ea557b4604506a801ac3b30f MD5 · raw file

  1. from docutils.parsers import rst
  2. from pygments import highlight
  3. from pygments.lexers import get_lexer_by_name, get_all_lexers
  4. from pygments.formatters import HtmlFormatter
  5. from kai.lib.pygmentsupport import code_block
  6. __all__ = ['code_highlight']
  7. langdict = {}
  8. for lang in get_all_lexers():
  9. langdict[lang[1][0]] = lang[0]
  10. formatter = HtmlFormatter(linenos=True, cssclass="syntax", encoding='utf-8')
  11. def code_highlight(code, truncate_lines=None):
  12. # Ensure that code-block is regged properly
  13. rst.directives.register_directive('code-block', code_block)
  14. source = code.code
  15. if truncate_lines:
  16. split_source = source.split('\n')
  17. if len(split_source) > truncate_lines:
  18. source = split_source[:truncate_lines-1]
  19. source.append('...')
  20. source = ''.join(source)
  21. lexer = get_lexer_by_name(code.language, stripall=True)
  22. return highlight(source, lexer, formatter).decode('utf-8')