summaryrefslogtreecommitdiffstats
path: root/tools/man2html.tcl
blob: cb60887ba65e1f01675ba8a26b86f9b1bde33ff0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/proj/tcl/install/5.x-sparc/bin/tclsh7.5

if [catch {

# man2html.tcl --
#
# This file contains procedures that work in conjunction with the
# man2tcl program to generate a HTML files from Tcl manual entries.
#
# Copyright (c) 1996 by Sun Microsystems, Inc.
#
# SCCS: @(#) man2html.tcl 1.5 96/04/11 20:21:43
#

set homeDir /home/rjohnson/Projects/tools/generic

# sarray -
#
# Save an array to a file so that it can be sourced.
#
# Arguments:
# file -		Name of the output file
# args -		Name of the arrays to save
#
proc sarray {file args} {
    set file [open $file w]
    foreach a $args {
	upvar $a array
	if ![array exists array] {
	    puts "sarray: \"$a\" isn't an array"
	    break
	}	
    
	foreach name [lsort [array names array]] {
	    regsub -all " " $name "\\ " name1
	    puts $file "set ${a}($name1) \{$array($name)\}"
	}
    }
    close $file
}



# footer --
#
# Builds footer info for HTML pages
#
# Arguments:
# None

proc footer {packages} {
    lappend f "<HR>"
    set h {[}
    foreach package $packages {
	lappend h "<A HREF=\"../$package/contents.html\">$package</A>"
	lappend h "|"
    }
    lappend f [join [lreplace $h end end {]} ] " "]
    lappend f "<HR>"
    lappend f "<PRE>Copyright &#169; 1989-1994 The Regents of the University of California."
    lappend f "Copyright &#169; 1994-1996 Sun Microsystems, Inc."
    lappend f "</PRE>"
    return [join $f "\n"]
}




# doDir --
#
# Given a directory as argument, translate all the man pages in
# that directory.
#
# Arguments:
# dir -			Name of the directory.

proc doDir dir {
    foreach f [lsort [glob $dir/*.\[13n\]]] {
	do $f	;# defined in man2html1.tcl & man2html2.tcl
    }
}


if {$argc < 2} {
    puts stderr "usage: $argv0 html_dir tcl_dir packages..."
    puts stderr "usage: $argv0 -clean html_dir"
    exit 1
}
	
if {[lindex $argv 0] == "-clean"} {
    set html_dir [lindex $argv 1]
    puts -nonewline "recursively remove: $html_dir? "
    flush stdout
    if {[gets stdin] == "y"} {
	puts "removing: $html_dir"
	exec rm -r $html_dir
    }
    exit 0
}

set html_dir [lindex $argv 0]
set tcl_dir  [lindex $argv 1]
set packages [lrange $argv 2 end]

#### need to add glob capability to packages ####

# make sure there are doc directories for each package

foreach i $packages {
    if ![file exists $tcl_dir/$i/doc] {
	puts stderr "Error: doc directory for package $i is missing"
	exit 1
    }
    if ![file isdirectory $tcl_dir/$i/doc] {
	puts stderr "Error: $tcl_dir/$i/doc is not a directory"
	exit 1
    }
}


# we want to start with a clean sheet

if [file exists $html_dir] {
    puts stderr "Error: HTML directory already exists"
    exit 1
} else {
    exec mkdir $html_dir
}

set footer [footer $packages]


# make the hyperlink arrays and contents.html for all packages
	
foreach package $packages {
    global homeDir
    exec mkdir $html_dir/$package
    
    # build hyperlink database arrays: NAME_file and KEY_file
    #
    puts "\nScanning man pages in $tcl_dir/$package/doc..."
    source $homeDir/man2html1.tcl
    
    doDir $tcl_dir/$package/doc

    # clean up the NAME_file and KEY_file database arrays
    #
    catch {unset KEY_file()}
    foreach name [lsort [array names NAME_file]] {
	set file_name $NAME_file($name)
	if {[llength $file_name] > 1} {
	    set file_name [lsort $file_name]
	    puts stdout "Warning: '$name' multiply defined in: $file_name; using last"
	    set NAME_file($name) [lindex $file_name end]
	}
    }
#   sarray $html_dir/$package/xref.tcl NAME_file KEY_file

    # build the contents file from NAME_file
    #
    puts "\nGenerating contents.html for $package"
    doContents $html_dir/$package/contents.html $lib ;# defined in man2html1.tcl

    # now translate the man pages to HTML pages
    #
    source $homeDir/man2html2.tcl
    puts "\nBuilding html pages from man pages in $tcl_dir/$package/doc..."
    doDir $tcl_dir/$package/doc

    unset NAME_file
}

	

} result] {
    global errorInfo
    puts stderr $result
    puts stderr "in"
    puts stderr $errorInfo
}