示例#1
0
 def render_block_code(self, token):
     code = token.children[0].content
     try:
         # default to 'lean' if no language is specified
         lexer = get_lexer(
             token.language) if token.language else get_lexer('lean')
     except:
         lexer = get_lexer('text')
     return highlight(code, lexer, self.formatter)
示例#2
0
 def render_block_code(self, token):
     # replace math before highlighting
     code = replace_math(token.children[0].content, self.math)
     try:
         # default to 'lean' if no language is specified
         lexer = get_lexer(
             token.language) if token.language else get_lexer('lean')
     except:
         lexer = get_lexer('text')
     return highlight(code, lexer, self.formatter)
示例#3
0
 def render_block_code(self, token):
     code = token.children[0].content
     if token.language:
         lexer = get_lexer(token.language)
     else:
         lexer = guess_lexer(code)
     return highlight(code, lexer, self.formatter)
    def render_lowrisc_code(self, token, directive):
        code = token.children[0].content
        # parser seems to get confused (eg by `~`) and makes empty calls
        if len(code) == 0:
            log.warn('Unexpected empty code block. Check for `~`')
            return ""
        # waveforms look like embedded code in the markdown
        # but the WaveDrom javascript wants it in a script tag
        if token.language == "wavejson":
            if self.wavejs:
                return '<script type="WaveDrom">' + code + '</script>'
            else:
                try:
                    wvobj = hjson.loads(code, use_decimal=True)
                except ValueError as err:
                    log.warn('wavejson parse failed at line ' +
                             str(err.lineno) + ': ' + err.msg)
                    return '<pre>Error line '  + str(err.lineno) + \
                        ': ' + err.msg + " in:\n" + code[:err.pos] + \
                        '</pre><pre style="color:red">' + \
                        code[err.pos:] + '</pre>'
                self.num_svg += 1
                return wavesvg.convert(wvobj, self.num_svg - 1)
        else:
            # pygments.util.ClassNotFound subclass of ValueError
            lexer = None
            if (token.language):
                if token.language == 'hjson':
                    lexer = HjsonLexer()
                else:
                    try:
                        lexer = get_lexer(token.language)
                    except ValueError:
                        log.info('Failed to get lexer for language=' +
                                 token.language)
                        lexer = None
            if lexer == None:
                try:
                    lexer = guess_lexer(code)
                    log.info('Guess lexer as ' + lexer.name)
                except ValueError:
                    log.info('Failed to guess lexer for code=' + code)
                    lexer = None
            if lexer:
                if directive == '.good':
                    self.formatter.cssstyles='background:#e0ffe0; ' \
                        'border-left-color: #108040;'
                elif directive == '.bad':
                    self.formatter.cssstyles='background:#ffe0e0; ' \
                        'border-left-color: #c04030'
                else:
                    self.formatter.cssstyles = ''

                return highlight(code, lexer, self.formatter)
            else:
                return super().render_block_code(token)