def _highlight(code, language, options, is_block): # Use our own lexer for ANSI if language == 'ansi': lexer = ansilexer.AnsiLexer() else: try: lexer = get_lexer_by_name(language) except ValueError: logger.warning( "No lexer found for language '{}', code highlighting disabled". format(language)) lexer = TextLexer() if (isinstance(lexer, BashSessionLexer) or isinstance(lexer, ansilexer.AnsiLexer)): class_ = 'm-console' else: class_ = 'm-code' if isinstance(lexer, ansilexer.AnsiLexer): formatter = ansilexer.HtmlAnsiFormatter(**options) else: formatter = HtmlFormatter(nowrap=True, **options) parsed = highlight(code, lexer, formatter).rstrip() if not is_block: parsed.lstrip() return class_, parsed
def _highlight(code, language, options, *, is_block, filters=[]): # Use our own lexer for ANSI if language == 'ansi': lexer = ansilexer.AnsiLexer() else: try: lexer = get_lexer_by_name(language) except ValueError: logger.warning( "No lexer found for language '{}', code highlighting disabled". format(language)) lexer = TextLexer() if (isinstance(lexer, BashSessionLexer) or isinstance(lexer, ansilexer.AnsiLexer)): class_ = 'm-console' else: class_ = 'm-code' # Pygments wants the underscored option if 'hl-lines' in options: options['hl_lines'] = options['hl-lines'] del options['hl-lines'] if isinstance(lexer, ansilexer.AnsiLexer): formatter = ansilexer.HtmlAnsiFormatter(**options) else: formatter = HtmlFormatter(nowrap=True, **options) global filters_pre # First apply local pre filters, if any for filter in filters: f = filters_pre.get((lexer.name, filter)) if f: code = f(code) # Then a global pre filter, if any f = filters_pre.get(lexer.name) if f: code = f(code) highlighted = highlight(code, lexer, formatter).rstrip() # Strip whitespace around if inline code, strip only trailing whitespace if # a block if not is_block: highlighted = highlighted.lstrip() global filters_post # First apply local post filters, if any for filter in filters: f = filters_post.get((lexer.name, filter)) if f: highlighted = f(highlighted) # Then a global post filter, if any f = filters_post.get(lexer.name) if f: highlighted = f(highlighted) return class_, highlighted
def _highlight(code, language, options, *, is_block, filters=[]): # Use our own lexer for ANSI if language == 'ansi': lexer = ansilexer.AnsiLexer() else: try: lexer = get_lexer_by_name(language) except ValueError: logger.warning( "No lexer found for language '{}', code highlighting disabled". format(language)) lexer = TextLexer() if (isinstance(lexer, BashSessionLexer) or isinstance(lexer, ansilexer.AnsiLexer)): class_ = 'm-console' else: class_ = 'm-code' if isinstance(lexer, ansilexer.AnsiLexer): formatter = ansilexer.HtmlAnsiFormatter(**options) else: formatter = HtmlFormatter(nowrap=True, **options) global filters_pre # First apply local pre filters, if any for filter in filters: f = filters_pre.get((lexer.name, filter)) if f: code = f(code) # Then a global pre filter, if any f = filters_pre.get(lexer.name) if f: code = f(code) parsed = highlight(code, lexer, formatter).rstrip() if not is_block: parsed.lstrip() global filters_post # First apply local post filters, if any for filter in filters: f = filters_post.get((lexer.name, filter)) if f: parsed = f(parsed) # Then a global post filter, if any f = filters_post.get(lexer.name) if f: parsed = f(parsed) return class_, parsed