在网页上显示源代码的格式化

5
我正在开发一个Markdown命令行程序,希望在html输出中格式化源代码块,而不是简单的<pre><code>....</code></pre>
我的要求如下:
1. 每行代码前都要显示行号。 2. 代码本身可选择,以便我可以只复制代码(而不复制行号)到剪贴板。
我尝试使用DIV,因为表格的格式似乎很糟糕,但我对任何东西都持开放态度。
我尝试过以下方法:
1. 表格有一行,第一列是预先/代码格式化的行号块,第二列是源代码。问题:带有行号的第一列总是占用大量空间(自动调整宽度似乎会混淆)。 2. 表格有多行,与一行的问题相同。 3. DIV,我似乎无法使DIV按照我想要的方式布局。
请问有人能给我指点如何达到我的要求吗?
这里是一个示例(显然,我使用Markdown来显示示例):
01 |  Source code line 1
02 |  Source code line 2
03 |  Last line of source code

现在,如果我点击并选择第一行,并向下拖动多行,我不希望选择包括行号列,否则这将非常容易。那么,有什么建议吗?
我不需要的一个额外功能是,如果我将窗口缩小到无法容纳源代码,我不需要它分成两行。我能理解这个功能的工作方式是对每行进行单独格式化,而不是对每列进行单独格式化,因此当换行发生时,行号也会调整其位置。由于我只想复制源代码,所以我认为我需要单独格式化每一列。
以下是我尝试过的内容:
<html><body>
<style>
.lines
{
    background-color: #c0c0ff;
    border-left: 1px solid black;
    border-top: 1px solid black;
    border-bottom: 1px solid black;
    float: left;
    border-right: 1px solid #a0a0a0;
    margin-left: 20px;
    padding-left: 2px;
    padding-right: 2px;
}
.code
{
    background-color: #c0c0ff;
    border-top: 1px solid black;
    border-bottom: 1px solid black;
    float: left;
    padding-left: 2px;
}
</style>

<pre class='lines'><code>01
02
03</code></pre>
<pre class='code'><code>SELECT *
FROM TABLE
WHERE A = B
</code></pre>
</body></html>

这段代码的背景色存在问题,我希望背景色能够一直延伸到浏览器窗口的右侧,但实际上它只延伸到了代码的右侧,就像这样:

+----+-------------+
| 01 | SELECT *    |
| 02 | FROM TABLE  |
| 03 | WHERE A = B |
+----+-------------+

当我需要类似于这样的东西时:
+----+--------------------------------------------------------------------------+
| 01 | SELECT *                                                                 |
| 02 | FROM TABLE                                                               |
| 03 | WHERE A = B                                                              |
+----+--------------------------------------------------------------------------+
1个回答

4
你可以为行号单独创建一个 <pre> 标签,并使用 float: left 使其与源代码的 <pre> 标签相邻。 编辑: 演示
第二次编辑: 带有完整背景的演示

我会贴出一个例子,因为我在这方面遇到了一些问题,也许你可以告诉我哪里出了问题。 - Lasse V. Karlsen
哦,演示,让我看看。 - Lasse V. Karlsen
这个演示给了我所有我需要的东西,谢谢。这个演示会一直存在还是我应该发布一个答案来备用? - Lasse V. Karlsen
演示应该保持在线。(我无法控制JSBin) - SLaks
@Harry:那是在早期版本中使用的。行号将由服务器端脚本生成。 - SLaks
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接