【问题标题】:Syntax highlighting in <pre> tags<pre> 标签中的语法高亮
【发布时间】:2012-05-18 05:47:29
【问题描述】:

是否有任何库可以让我在&lt;pre&gt; 标签中显示代码并根据语言突出显示语法?我在想象这样的事情:

<pre class="python">
class MyClass:
    """A simple example class"""
    i = 12345
    def f(self):
        return 'hello world'
</pre>

...pre.python 的 CSS 将适当地突出显示 Python 代码。

这样的东西存在吗?

【问题讨论】:

    标签: python html css syntax-highlighting pre


    【解决方案1】:

    SyntaxHighlighter:

    <pre class="brush: python">
       # python code here
    </pre>
    

    还有highlight.js 可以选择自动检测语法并适当地突出显示它;但是,您需要同时使用 &lt;pre&gt;&lt;code&gt; 标记来包装您的代码。

    如果您正在寻找服务器端示例,可以使用 GeSHiPygments 用于 Python。

    【讨论】:

    • 你不需要将
       与 highlight.js 一起使用,你可以使用任何你想要的标记。 <pre> 只是一个默认值(和 HTML5 推荐,FWIW)
    • 跳到最后一条评论,您可以使用如下代码执行此操作:``` document.addEventListener('DOMContentLoaded', (event) => { document.querySelectorAll('pre'). forEach((el) => { hljs.highlightElement(el); }); }); ``` 参见highlightjs.org/usage的“自定义用法”
    【解决方案2】:

    我更喜欢highlight.js。支持112 languages

    从浏览器控制台使用此代码注入预览您的页面:

    // Highlight 22 popular code types. TODO: Inline for speed and security.
    function loadjscssfile(filename, filetype){  // http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
        if(filetype=="js"){
            var fileref=document.createElement('script')
            fileref.setAttribute("type","text/javascript")
            fileref.setAttribute("src", filename)
        }
        else if(filetype=="css"){
            var fileref=document.createElement("link")
            fileref.setAttribute("rel", "stylesheet")
            fileref.setAttribute("type", "text/css")
            fileref.setAttribute("href", filename)
        }
        if(typeof fileref!="undefined") document.getElementsByTagName("head")[0].appendChild(fileref)
    }
    loadjscssfile("//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/vs.min.css", "css")
    loadjscssfile("//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/highlight.min.js", "js")
    setTimeout("var a = document.querySelectorAll('.code'); for(var i=0; i < a.length; ++i) hljs.highlightBlock(a[i])", 600)
    

    【讨论】:

    • 试了预览 - 太棒了!我找不到暗模式选项,但这个 dracula.css 做得很好。
    【解决方案3】:

    不确定这是否是您所追求的,但是当我想要文档中的语法高亮代码块时,我将文档写入 Pandoc-Markdown,然后使用 Pandoc 将文档处理为 html。

    您可以使用 pandoc-markdown 语法获得突出显示的代码块,如下所示:

    ~~~{.python}
    class MyClass:
        """A simple example class"""
        i = 12345
        def f(self):
            return 'hello world'
    ~~~
    

    【讨论】:

      【解决方案4】:

      是的。您可以使用SyntaxHighlighter。它易于使用,正是您需要的东西。只需在 pre 块中添加 code 标签即可。

      它突出显示了大约 23 种语言,包括 Python。

      【讨论】:

        【解决方案5】:

        首先下载或使用 CDN强调文本

            <link rel="stylesheet" href="{{asset("assets/css/prism.css")}}">
            <link rel="stylesheet" href="{{asset("assets/css/prism-unescaped-markup.min.css")}}">
        
        <script src="{{asset("assets/js/prism.js")}}"></script>
        <script src="{{asset("assets/js/prism-unescaped-markup.min.js")}}"></script>
        

        使用 HTML(仅 HTML)

        <script type="text/plain" class="language-markup">
        <!DOCTYPE html>
        <html>
          <head>
            <title>Hello World</title>
          </head>
          <body>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra nec nulla vitae mollis.</p>
          </body>
        </html>
        </script>
        

        任意

            <code class="language-css">
               p { color: red }
            </code>
        

        【讨论】:

          猜你喜欢
          • 2023-04-08
          • 1970-01-01
          • 2013-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-27
          • 1970-01-01
          相关资源
          最近更新 更多