Lua 轉 HTML

lua-users home
wiki

此腳本會將 Lua 原始檔轉換成 HTML。

[!] 版本注意事項:原始碼在處理 Lua 5.1 時,需要針對 _VERSION 進行一些小幅更動才行。對於正確的 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 中維護此功能的最新主控副本?)有一個擴充項目(最近在 GuestBookDavidManura 中提到),我們或許希望看到適切的語法標記翻譯程式輸入/輸出,例如

$ 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 和我也曾提到,希望能對在此 wiki 中經常發布的 C 程式碼,進行 C 語法標記 (GuestBook)。為了避免重複發明輪子,我們或許可以只使用現有的 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 (diff)