如何利用HTML/CSS和Javascript可视化地显示Python代码块?

如何利用HTML/CSS和Javascript可视化地显示Python代码块?,javascript,html,css,Javascript,Html,Css,我想像StackOverflow那样显示代码块: def func(A): result = 0 n = len(A) while n > 1: n = n/2 result = result + min(A[1,...,n]) return result 一旦代码被指定为代码块,它会正确地为所有代码着色、设置格式和空格。我希望这也发生在我的网站上。顺便说一下,所有代码块都将是python 字体、背景和间距似乎很容易实现(只

我想像StackOverflow那样显示代码块:

def func(A):
    result = 0
    n = len(A)
    while n > 1:
        n = n/2
        result = result + min(A[1,...,n])
    return result
一旦代码被指定为代码块,它会正确地为所有代码着色、设置格式和空格。我希望这也发生在我的网站上。顺便说一下,所有代码块都将是python

字体、背景和间距似乎很容易实现(只需指定一个类,其中背景为灰色,字体为该字体,间距为单空格)

但是,我想知道如何适当地给文本上色?我假设我需要使用JavaScript,并循环遍历代码块中的所有单词,检查它们是否匹配我已预设为特定颜色的单词列表

如果我在此处的任何地方做出了任何错误的假设,或可能使我的方法复杂化的事情,请告知我。

更新2021-05-14:
  • 更新了代码段,以便在使用
    文件://
    协议时可以运行
  • 更改了CodeMirror的链接以指向正确的CDN
代码片段仍然需要internet连接才能下载CodeMirror

更新2020-11-09: 已经过了相当长的一段时间,但是如果您只想突出显示代码,那么有一种比实现只读、功能齐全的代码编辑器更简单的替代方法:

CodeMirror有一个插件,可以精确地完成高亮显示部分,而没有完整编辑器的所有奇特功能,唯一的缺点是您没有渲染行号的选项,但是


CodeMirror运行模式突出显示示例
定义函数(A):
结果=0
n=len(A)
当n>1时:
n=n/2
结果=结果+最小值(A[1,…,n])
返回结果
window.onload=函数(){ var codelement=document.getElementById('python_-code'); //添加用于着色的代码镜像类(默认为主题) codelement.classList.add('cm-s-default'); var code=codelement.innerText; codelement.innerHTML=“”; CodeMirror.runMode( 代码, “python”, 代码元素 ); }; 更新2021-05-14:
  • 更新了代码段,以便在使用
    文件://
    协议时可以运行
  • 更改了CodeMirror的链接以指向正确的CDN
代码片段仍然需要internet连接才能下载CodeMirror

更新2020-11-09: 已经过了相当长的一段时间,但是如果您只想突出显示代码,那么有一种比实现只读、功能齐全的代码编辑器更简单的替代方法:

CodeMirror有一个插件,可以精确地完成高亮显示部分,而没有完整编辑器的所有奇特功能,唯一的缺点是您没有渲染行号的选项,但是


CodeMirror运行模式突出显示示例
定义函数(A):
结果=0
n=len(A)
当n>1时:
n=n/2
结果=结果+最小值(A[1,…,n])
返回结果
window.onload=函数(){ var codelement=document.getElementById('python_-code'); //添加用于着色的代码镜像类(默认为主题) codelement.classList.add('cm-s-default'); var code=codelement.innerText; codelement.innerHTML=“”; CodeMirror.runMode( 代码, “python”, 代码元素 ); };
有很多库可以这样做……我假设有人已经创建了类似的东西,但是我可以用谷歌搜索哪些库呢?我一直在寻找我不想要的结果。或者是普通的库……有很多库都是这样做的……我假设有人已经创建了这样的库,但是我可以用谷歌搜索什么来找到这些库呢?我一直在寻找我不想要的结果。或者是公共图书馆……由于某种原因,更新后的答案对我不起作用。我所做的只是将代码块复制粘贴到一个html文件中,然后在chrome中打开该文件。我得到一个空白网页。不知道我做错了什么。当我在堆栈溢出上按“Run code snippet”时,我实际上得到了彩色代码。@Minamael,我刚刚更新了答案,它假设您将使用http服务器来加载文件,并且仅从文件系统打开它们,您使用的是
文件://
协议,该协议有一些限制,除了链接被删除之外“神族“这意味着代码镜像链接的协议部分被填充为
文件:
,而不是
http:
https:
,这是代码的原意。由于某种原因,更新后的答案对我不起作用。我所做的只是将代码块复制粘贴到一个html文件中,然后在chrome中打开该文件。我得到一个空白网页。不知道我做错了什么。当我在堆栈溢出上按“Run code snippet”时,我实际上得到了彩色代码。@Minamael,我刚刚更新了答案,它假设您将使用http服务器来加载文件,并且仅从文件系统打开它们,您使用的是
文件://
协议,该协议有一些限制,除了链接被删除之外“protocolless”,这意味着代码镜像链接的协议部分填充了
文件:
,而不是
http:
https:
,这是代码的初衷