📄 man2html1.tcl
字号:
# man2html1.tcl --## This file defines procedures that are used during the first pass of the# man page to html conversion process. It is sourced by h.tcl.## Copyright (c) 1996 by Sun Microsystems, Inc.## SCCS: @(#) man2html1.tcl 1.2 96/03/21 10:48:29## Global variables used by these scripts:## state - state variable that controls action of text proc.# # curFile - tail of current man page.## file - file pointer; for both xref.tcl and contents.html## NAME_file - array indexed by NAME and containing file names used# for hyperlinks.## KEY_file - array indexed by KEYWORD and containing file names used# for hyperlinks.## lib - contains package name. Used to label section in contents.html## inDT - in dictionary term. # text --## This procedure adds entries to the hypertext arrays NAME_file# and KEY_file.## DT: might do this: if first word of $dt matches $name and [llength $name==1]# and [llength $dt > 1], then add to NAME_file. ## Arguments:# string - Text to index.proc text string { global state curFile NAME_file KEY_file inDT switch $state { NAME { foreach i [split $string ","] { lappend NAME_file([string trim $i]) $curFile } } KEY { foreach i [split $string ","] { lappend KEY_file([string trim $i]) $curFile } } DT - OFF - DASH {} default { puts stderr "text: unknown state: $state" } }}# macro --## This procedure is invoked to process macro invocations that start# with "." (instead of ').## Arguments:# name - The name of the macro (without the ".").# args - Any additional arguments to the macro.proc macro {name args} { switch $name { SH { global state switch $args { NAME { if {$state == "INIT" } { set state NAME } } DESCRIPTION {set state DT} INTRODUCTION {set state DT} KEYWORDS {set state KEY} default {set state OFF} } } TP { global inDT set inDT 1 } TH { global lib state inDT set inDT 0 set state INIT if {[llength $args] != 5} { set args [join $args " "] puts stderr "Bad .TH macro: .$name $args" } set lib [lindex $args 3] ;# Tcl or Tk } }}# dash --## This procedure is invoked to handle dash characters ("\-" in# troff). It only function in pass1 is to terminate the NAME state.## Arguments:# None.proc dash {} { global state if {$state == "NAME"} { set state DASH }}# newline --## This procedure is invoked to handle newlines in the troff input.# It's only purpose is to terminate a DT (dictionary term).## Arguments:# None.proc newline {} { global inDT set inDT 0}# initGlobals, tab, font, char, macro2 --## These procedures do nothing during the first pass. ## Arguments:# None.proc initGlobals {} {}proc tab {} {}proc font type {}proc char name {}proc macro2 {name args} {}# doListing --## Writes an ls like list to a file. Searches NAME_file for entries# that match the input pattern.## Arguments:# file - Output file pointer.# pattern - glob style match patternproc doListing {file pattern} { global NAME_file set max_len 0 foreach name [lsort [array names NAME_file]] { set ref $NAME_file($name) if [string match $pattern $ref] { lappend type $name if {[string length $name] > $max_len} { set max_len [string length $name] } } } if [catch {llength $type} ] { puts stderr " doListing: no names matched pattern ($pattern)" return } incr max_len set ncols [expr 90/$max_len] set nrows [expr int( ceil( [llength $type] / $ncols. ) ) ]# ? max_len ncols nrows set index 0 foreach f $type { lappend row([expr $index % $nrows]) $f incr index } puts -nonewline $file "<PRE>" for {set i 0} {$i<$nrows} {incr i} { foreach name $row($i) { set str [format "%-*s" $max_len $name] regsub $name $str "<A HREF=\"$NAME_file($name).html\">$name</A>" str puts -nonewline $file $str } puts $file {} } puts $file "</PRE>"}# doContents --## Generates a HTML contents file using the NAME_file array# as its input database.## Arguments:# file - name of the contents file.# packageName - string used in the title and sub-heads of the HTML page. Normally# name of the package without version numbers.proc doContents {file packageName} { global footer set file [open $file w] puts $file "<HTML><HEAD><TITLE>$packageName Manual</TITLE></HEAD><BODY>" puts $file "<H3>$packageName</H3>" doListing $file "*.1" puts $file "<HR><H3>$packageName Commands</H3>" doListing $file "*.n" puts $file "<HR><H3>$packageName Library</H3>" doListing $file "*.3" puts $file $footer puts $file "</BODY></HTML>" close $file}# do --## This is the toplevel procedure that searches a man page# for hypertext links. It builds a data base consisting of# two arrays: NAME_file and KEY file. It runs the man2tcl # program to turn the man page into a script, then it evals # that script.## Arguments:# fileName - Name of the file to scan.proc do fileName { global curFile set curFile [file tail $fileName] set file stdout puts " Pass 1 -- $fileName" flush stdout if [catch {eval [exec man2tcl [glob $fileName]]} msg] { global errorInfo puts stderr $msg puts "in" puts $errorInfo exit 1 }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -