TCL2HTML
 

 

    Tcl2Html 是本人编写的一个小软件,它能把 Tcl/Tk 的源程序转变成 HTML 文件,便于在网上交流程序。

    编程的人可能对 C/C++,Java,C# 等所谓的 System Language 比较熟悉, Tcl/Tk 则属于一类被称为 “Scripting Language” 的 “另类” 语言。其实说 Scripting Language 另类有些冤枉,因为一来 Scripting Language 的历史之悠久并不逊色于 System Language。自二十世纪六十年代以来两者就并存于各操作系统之中。二来 Scripting Language 家族中的 VBScript, Perl 等传播之广并不在 System Language 之下,后起之秀诸如 Python, Ruby 等也为写书人赚了不少银子。不过 Tcl/Tk 对大多数人来说确实算是比较陌生。

    Tcl/Tk 由核心语言部分 Tcl 和界面编程部分 Tk 所组成,除此之外还有许多其它的软件包可供下载。与其它 Scripting Language 类似,用 Tcl/Tk 编程远比用 System Language 方便。以 C 语言为例,据统计每一行 C 程序平均对应于 5 行汇编语言指令,而 Tcl/Tk 的这一数字是 100 到 1000!也就是说一行 Tcl/Tk 程序平均对应于数十行乃至上百行 System Language 程序。别的倒也罢了,在编写用户界面 (GUI) 方面,Tcl/Tk 委实可以让埋首于 MFC,Java 等的人有耳目一新之感。即使考虑到 VC++,Java,C# 等各有大型的 (很不幸也都是昂贵的) 编程环境 (IDE) 的支持, Tcl/Tk 在编程简洁性上依然有其独特的优势。尤其是在必须直接对源程序进行修改的时候,用 IDE 产生的程序往往因为含有冗余 code 而给阅读和修改带来额外的复杂性,这时候逻辑清晰,语法简明的 Tcl/Tk 所具有的优势就更为明显。由于 Tcl/Tk 在界面编程方面的长处,目前流行的几种主要的 Scripting Language,象 Perl 和 Python 在界面编程上都采取了仿照 Tcl/Tk 的方法。由于 Python 是最近才流行的, Perl 也是在较 新的版本中才有了所谓的 Perl-Tk 的,在这些语言还不存在,或还没有与 Tcl/Tk 相似的界面编程功能的时候 Tcl/Tk 的 “大隐于市” 实在是编程界的一种奇怪的现象。或许是因为传统上人们认为 Scripting Language 只是用来处理文本数据的缘故吧。也或许是由于 Scripting Language 运行速度较慢,在计算机硬件不发达的时候往往达不到人们对运行速度的要求。

    而今天,硬件的发展使得速度瓶颈对许多软件来说已是昨日黄花,这给 Scripting Language 创造了在更多方面与 System Language 一争雄长的机遇。即使有 Perl 和 Python 等语言的竞争,Tcl/Tk 依然有其便利之处,语言功能的比较或许是各有千秋,但对于业余编程的人来说, Tcl/Tk 的一个有利之处是它有一些很不错的免费编译器,其中最出色的是 TclPro,它是一个商业软件,但 TclPro 1.4 (含 Tcl/Tk 8.3.2) 可以免费下载,它们可以将 Tcl/Tk 编译成可执行文件。编译器对于象 C++ 这样的“编译型”语言自然不新鲜,但 Scripting Language 通常是由所谓的 Interpreter 来运行的,因而要求用户机器安装相应的 Interpreter,这样的一层额外要求对于软件的传播带有不可忽视的负面影响。因此拥有象 TclPro 这样的编译器,免除用户安装 Tcl/Tk Interpreter 的麻烦是 Tcl/Tk 的一个显著优势。

   王婆卖瓜吆喝了半天,除了真心实意要替 Tcl/Tk 呐喊几声外,也是为 Tcl2Html 作点背景介绍。如果你从来没有用过 Tcl/Tk 的话,不妨试着用一下,Tcl/Tk 的 Interpreter 是可以免费下载的。你会发现学习 Tcl/Tk 比 C++,Java,C# 等容易多了,很值得一试。

   顺便说一下 Tcl2Html 本身就是用 Tcl/Tk 编写并用 TclPro 编译的,下载文件 tcl2html.zip,解压缩后直接运行 tcl2html.exe 就可以了。

   希望这个小软件能对 Tcl/Tk 在网上的传播交流起到一些帮助。


Download Tcl2Html 1.0 for Windows (1.7MB)


Tcl2Html 1.0 的用户界面:

.

用 Tcl2Html 1.0 产生的 HTML 文件:

#!/bin/sh
# the next line restarts using wish
exec wish "$0" "$@"

# timer --
# This script generates a counter with start and stop buttons.

label .counter -text 0.00 -relief raised -width 10
button .start -text Start -command {
    if $stopped {
        set stopped 0
        tick
    }
}
button .stop -text Stop -command {set stopped 1}
pack .counter -side bottom -fill both
pack .start -side left -fill both -expand yes
pack .stop -side right -fill both -expand yes

set seconds 0
set hundredths 0
set stopped 1

proc tick {} {
    global seconds hundredths stopped
    if $stopped return
    after 50 tick
    set hundredths [expr $hundredths + 5]
    if {$hundredths >= 100} {
        set hundredths 0
        set seconds [expr $seconds + 1]
    }
    .counter config -text [format "%d.%02d" $seconds $hundredths]
}

bind . <Control-c> {destroy .}
bind . <Control-q> {destroy .}
focus .

二零零二年三月




作者:卢昌海 网址:http://www.changhai.org

©Tcl/Tk中文网 2003-2008
ALL RIGHTS RESERVED