1# -*- tcl -*-
2# rules/manpage-html
3#
4# (c) 2001 Andreas Kupries <andreas_kupries@sourceforge.net>
5#
6# [expand] definitions to convert a tcl based manpage definition into
7# a manpage based upon HTML markup. Additional definition files allow
8# the conversion into nroff and XML.
9#
10# This conversion is for standalone manpages ...
11#
12################################################################
13
14proc here {} [list return [file dirname [info script]]]
15
16source [file join [here] manpage.api]       ; # api, defines all required commands with errors.
17source [file join [here] trf]               ; # site pages policy and trf configuration
18
19proc state {} [list return [file join [file dirname [state]] .. htdocs state]]
20
21# Called before the first pass
22proc init_hook {} {setpasses 2}
23
24# Called before the first output.
25proc begin_hook {} {
26    # Reset the syn flag
27    global state
28    set state(syn) 0
29    set state(req) 0
30    return
31}
32
33# Called after the last output.
34proc end_hook {} {}
35
36################################################################
37## Backend for *roff markup
38
39
40proc manpage_begin {command section version} {
41    global __command ; set __command $command
42    global __section ; set __section $section
43    global __version ; set __version $version
44
45    set     hdr ""
46    append  hdr "[ht_comment {}]\n"
47    append  hdr "[ht_comment "CVS: \$Id\$ $command.$section"]\n"
48    append  hdr "[ht_comment {}]\n"
49    append  hdr [page_begin trf/mp/$command][nav_link [trf/sf/txt]]<br>[site_xref]<br>[mp_xref]
50    append  hdr [page_content]
51    return $hdr
52}
53
54##proc moddesc {module} {}
55proc moddesc {shortdesc} {
56    global __command
57    global __section
58    global __version
59    return "<hr><h2> $shortdesc $__version -- [string trimleft $__command :]($__section)</h2>\n"
60}
61proc titledesc {description} {
62    global __command
63    set hdr ""
64    append  hdr "[section NAME]\n"
65    append  hdr "[para] $__command - $description"
66    return $hdr
67}
68
69proc copyright {args} {}
70proc comment {args} {}
71
72proc manpage_end {} {return [page_end]}
73
74proc section     {name}     {return "<h2>$name</h2>"}
75proc para        {}         {return <p>}
76
77global    state
78array set state {req 0 syn 0 call {}}
79
80proc require {pkg {version {}}} {
81    global state
82    set state(req) 1
83    set result "[x_synopsis]package require <b>$pkg"
84    if {$version != {}} {
85	append result " $version"
86    }
87    append result "</b><br>\n"
88    return $result
89}
90
91proc call {cmd args} {
92    global state
93    if {[exppass] == 1} {
94	set oldcolor [bgcolor]
95	proc bgcolor {} {return lightyellow}
96	append state(call) "[trtop][td]$cmd [join $args " "]</td></tr>\n"
97	proc bgcolor {} [list return $oldcolor]
98    }
99    return "[lst_item "$cmd [join $args " "]"]"
100}
101
102proc description {} {
103    global state
104
105    set result ""
106    if {$state(call) != {}} {
107	append result [x_synopsis]
108	if {$state(req)} {append result <br>}
109	append result [btable][tr][td][table]$state(call)</table></td></tr></table>\n
110    }
111    append result [section DESCRIPTION]
112
113    return $result
114}
115
116proc x_synopsis {} {
117    global state
118    if {!$state(syn)} {
119	global oldcolor
120	set state(syn) 1
121	return [section SYNOPSIS]\n
122    } else {
123	return ""
124    }
125}
126
127################################################################
128
129global    list_state
130array set list_state {level -1}
131
132proc list_begin  {what} {
133    global list_state
134
135    switch -exact -- $what {
136	enum        {set result <ol>}
137	bullet      {set result <ul>}
138	definitions {set result <dl>}
139	default     {return -code error "Unknown list type $what"}
140    }
141
142    incr list_state(level)
143    set  list_state(l,$list_state(level)) $what
144
145    return $result
146}
147
148proc list_end {} {
149    global list_state
150
151    set what $list_state(l,$list_state(level))
152    catch {unset list_state(l,$list_state(level))}
153
154    incr list_state(level) -1
155
156    switch -exact -- $what {
157	enum        {set result </ol>}
158	bullet      {set result </ul>}
159	definitions {set result </dl>}
160    }
161    return $result
162}
163
164proc lst_item {text} {return <dt>$text<dd>}
165proc bullet {} {return <li>}
166proc enum {} {return <li>}
167
168################################################################
169
170proc see_also {args} {return "[section {SEE ALSO}]\n[join $args ", "]"}
171proc keywords {args} {return "[section KEYWORDS]\n[join $args ", "]"}
172
173proc nl     {}     {return <br>}
174proc arg    {text} {return <i>$text</i>}
175proc cmd    {text} {return <b>$text</b>}
176proc emph   {text} {return <i>$text</i>}
177proc strong {text} {return <b>$text</b>}
178proc opt    {text} {return ?$text?}
179
180################################################################
181# HTML specific commands
182
183proc ht_comment {text}   {return "<! -- $text -->"}
184
185################################################################
186
187proc setx {v string} {
188    upvar $v _
189    set _ $string
190    return
191}
192
193proc appendx {v string} {
194    upvar $v _
195    append _ $string
196    return
197}
198
199################################################################
200