Lua 到 Html

lua-users home
wiki

此脚本将 Lua 源文件转换为 HTML。

[!] 版本说明: 源代码需要在 _VERSION 处理方面进行少量更改才能在 Lua 5.1 下运行。可能需要进行一些其他更改才能正确突出显示 5.1 语法。

有一个 Lua 4.0 版本 [3],以及一个 Lua 5.0 版本 [4],它与删除了所有 % 符号的相同文件。

这是一个示例网页列表 [5]

运行 Lua 4.0 版本,如下所示: lua -f lua2html.lua x.lua > x.html

以及 Lua 5.0 版本,如下所示: lua lua52html.lua x.lua > x.html


这个特定的 Wiki 使用 Mike Pall 的一些技巧 Perl 代码进行 Lua 语法高亮显示。它支持完整的 Lua 5.1 语法。您可以通过修改嵌入的 CSS 来自定义它。独立的 lua2html.pl 可以找到 [这里]

Mike 和 John,这是 wiki 使用的此源代码的最新版本吗?(也许此函数的最新主副本可以保存在 wiki 上?)我们可能希望看到的一个扩展(如最近在 留言簿DavidManura 中提到的)是正确地突出显示解释器输入/输出,例如

$ lua
Lua 5.1  Copyright (C) 1994-2006 Lua.org, PUC-Rio
> = 1 + math.sqrt(2)
2.4142135623731
> print("math.sqrt(2)")
math.sqrt(2)
>

这应该不难添加,如果需要,我愿意自己打补丁。

wiki 可能会为此提供不同的环境,例如
{{{!LuaInteractive
$ lua
Lua 5.1  Copyright (C) 1994-2006 Lua.org, PUC-Rio
> = 1 + math.sqrt(2)
2.4142135623731
>
}}}

RiciLake 和我也有过对 C 语法高亮显示的愿望(留言簿)来突出显示经常发布在这个 wiki 上的 C 代码。也许,为了避免重复造轮子,我们可以直接使用现有的 Syntax-Highlight-Engine-Kate 与 C 模块 [1],类似于下面显示的 Lua。也有一些替代方案,例如 GNU enscript。

--DavidManura


以下 Perl 代码演示了如何使用 Syntax-Highlight-Engine-Kate [2] Perl 模块来突出显示 Lua 语法。它比 Mike 上面的 Perl 代码有更多负担,并且从 0.2 版本开始,它会在某些 Lua 语法上出错(即需要打补丁)

use strict;
use Syntax::Highlight::Engine::Kate::Lua;

my $sh = Syntax::Highlight::Engine::Kate::Lua->new(
    substitutions => {
       "<" => "&lt;",
       ">" => "&gt;",
       "&" => "&amp;",
       " " => "&nbsp;",
       "\t" => "&nbsp;&nbsp;&nbsp;",
       "\n" => "<BR>\n",
    },
    format_table => {
       Alert => ['<span class="alert">', '</span>'],
       BaseN => ['<span class="basen">', '</span>'],
       BString => ['<span class="bstring">', '</span>'],
       Char => ['<cpan class="char">', '</span>'],
       Comment => ['<span class="comment">', '</span>'],
       DataType => ['<span class="datatype">', '</span>'],
       DecVal => ['<span class="decval">', '</span>'],
       Error => ['<span class="error">', '</span>'],
       Float => ['<span class="float">', '</span>'],
       Function => ['<span class="function">', '</span>'],
       IString => ['<span class="istring">', '</span>'],
       Keyword => ['<span class="keyword">', '</span>'],
       Normal => ['', ''],
       Operator => ['<span class="operator">', '</span>'],
       Others => ['<span class="others">', '</span>'],
       RegionMarker => ['<span class="regionmarker">', '</span>'],
       Reserved => ['<span class="reserved">', '</span>'],
       String => ['<span class="string">', '</span>'],
       Variable => ['<span class="variable">', '</span>'],
       Warning => ['<span class="warning">', '</span>'],
    },
);

my $html = $sh->highlightText(qq(
local function test(y, z, ...)
  for x in 1,y do
    print(x)
  end -- loop
  local w = y * 2 + math.random()
  print(2, y, 'test"2', "test\"'2'", [[math.random]], #z, 3, ...)
));

my $css = qq(
<style type="text/css">
  span.comment  { color: #00a000; }
  span.string   { color: #0000c0; }
  span.keyword  { color: #a00000; font-weight: bold; }
  span.reserved { color: #a0a000; font-weight: bold; }
</style>
);

$html = qq(
<html>
<head>
$css
</head>
<body>
$html
</body>
);

print $html;

最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2007 年 1 月 2 日下午 8:03 GMT (差异)