source: tol/tolsh/tolsh.vfs/lib/tcllib1.10/doctools/mpformats/idx.html @ 8597867d

1941-docker-image-to-testdevel
Last change on this file since 8597867d was 8597867d, checked in by Jorge Pérez <josp.jorge@…>, 16 years ago

closes #976, se incluye tcllib1.10, base64 debe eliminarse del raiz de lib ya que esta incluido en tcllib

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@2556 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 6.1 KB
Line 
1## -*- tcl -*-
2# ### ### ### ######### ######### #########
3##
4# $Id$
5#
6# Index Formatting Engine : docidx --> HTML.
7# Single-pass
8#
9# Copyright (c) 2003-2007 Andreas Kupries <andreas_kupries@sourceforge.net>
10# Freely redistributable.
11
12# ### ### ### ######### ######### #########
13## Requisites
14
15dt_source _idx_common.tcl
16dt_source _html.tcl
17
18# ### ### ### ######### ######### #########
19## API implementation
20
21rename idx_postprocess {}
22rename fmt_postprocess idx_postprocess
23
24proc fmt_plain_text {text} {return {}}
25
26proc fmt_index_begin {l t} {
27    global la ti
28    set la $l
29    set ti $t
30    return {}
31}
32
33proc fmt_key {text} {
34    global key lk ch
35    set lk $text
36    set key($lk) {}
37    set ch([F $lk]) .
38    return {}
39}
40
41proc fmt_manpage {f l} {Ref [dt_fmap $f] $l}
42proc fmt_url     {u l} {Ref $u           $l}
43
44proc fmt_index_end {} {
45    LoadKwid
46    set lines {}
47    BeginHeader ; Meta  ; EndHeader
48    BeginBody   ; Title ; Navbar
49    BeginIndex  ; Keys  ; EndIndex
50    EndBody
51    return [join $lines \n]
52}
53
54# ### ### ### ######### ######### #########
55## Helper commands
56
57proc Ref {r l} {
58    global  key  lk
59    lappend key($lk) $r $l
60    return {}
61}
62
63proc F {text} {
64    return [string toupper [string index $text 0]]
65}
66
67proc LoadKwid {} {
68    global kwid
69    # Engine parameter - load predefined keyword anchors.
70    set             ki [Get kwid]
71    if {![llength  $ki]} return
72    array set kwid $ki
73    return
74}
75
76proc BeginHeader {} {
77    global la ti
78    upvar 1 lines lines
79    lappend lines [markup <html>]
80    lappend lines [ht_comment [c_provenance]]
81    lappend lines [ht_comment "CVS: \$Id\$ $la"]
82    lappend lines [markup <head>]
83    lappend lines "[markup <title>] $la [markup </title>]"
84    return
85}
86
87proc Meta {} {
88    # Engine parameter - insert 'meta'
89    set meta [Get meta]
90    if {$meta == {}} return
91    upvar 1 lines lines
92    lappend lines [markup $meta]
93    return
94}
95
96proc EndHeader {} {
97    upvar 1 lines lines
98    lappend lines [markup </head>]
99    return
100}
101
102proc BeginBody {} {
103    upvar 1 lines lines
104    lappend lines [markup <body>]
105    # Engine parameter - insert 'meta'
106    set header [Get header]
107    if {$header == {}} return
108    lappend lines [markup $header]
109    return
110}
111
112proc Title {} {
113    global la ti
114    upvar 1 lines lines
115    if {($la != {}) && ($ti != {})} {
116        set title "$la -- $ti"
117    } elseif {$la != {}} {
118        set title $la
119    } elseif {$ti != {}} {
120        set title $ti
121    }
122    lappend lines "[markup <h3>] $title [markup </h3>]"
123    return
124}
125
126proc Navbar {} {
127    global ch cnt dot
128    upvar 1 lines lines
129
130    set nav {}
131    foreach c [lsort -dict [array names ch]] {
132        set ref c[incr cnt]
133        set ch($c) $ref
134        lappend nav [ALink $ref $c]
135    }
136
137    lappend lines [markup "<hr><div class=\"#idxnav\">"]
138    lappend lines [join $nav $dot]
139    lappend lines [markup </div>]
140    return
141}
142
143proc BeginIndex {} {
144    upvar 1 lines lines
145    lappend lines [markup "<hr><table class=\"#idx\" width=\"100%\">"]
146    return
147}
148
149proc Keys {} {
150    global key
151    upvar 1 lines lines
152    set lc {}
153    foreach k [lsort -dict [array names key]] {
154        set c [F $k] ; if {$lc != $c} { Section $c ; set lc $c }
155        BeginKey   $k
156        References $k
157        EndKey
158    }
159    return
160}
161
162proc Section {c} {
163    global ch
164    upvar 1 lines lines
165    lappend lines [markup {<tr class="#idxheader"><th colspan="2">}]
166    lappend lines [markup "<a name=\"$ch($c)\">Keywords: $c</a>"]
167    lappend lines [markup </th></tr>]
168    return
169}
170
171proc BeginKey {k} {
172    upvar 1 lines lines
173    lappend lines [markup "<tr class=\"[Row]\" valign=top>"]
174    lappend lines [BeginColLeft][SetAnchor $k][markup </td>]
175    lappend lines [BeginColRight]
176    return
177}
178
179proc EndKey {} {
180    upvar 1 lines lines
181    lappend lines [markup </td></tr>]
182    return
183}
184
185proc References {k} {
186    global key dot
187    upvar 1 lines lines
188    set refs {}
189    foreach {ref label} $key($k) {
190        lappend refs [markup "<a href=\"$ref\"> $label </a>"]
191    }
192    lappend lines [join $refs $dot]
193    return
194}
195
196proc EndIndex {} {
197    upvar 1 lines lines
198    lappend lines [markup </table>]
199    # Engine parameter - insert 'footer'
200    set  footer [Get footer]
201    if {$footer == {}} return
202    lappend lines [markup "<hr>"]
203    lappend lines [markup $footer]
204    return
205}
206
207proc EndBody {} {
208    upvar 1 lines lines
209    lappend lines [markup "</body></html>"]
210    return
211}
212
213proc ALink {dst label} {
214    markup "<a href=\"#$dst\"> $label </a>"
215}
216
217proc BeginColLeft {} {
218    return [markup {<td class="#idxleft" width="35%">}]
219}
220
221proc BeginColRight {} {
222    return [markup {<td class="#idxright" width="65%">}]
223}
224
225proc SetAnchor {text} {
226    return [markup "<a name=[Anchor $text]> $text </a>"]
227}
228
229proc Anchor {text} {
230    global kwid cnt
231    if {[info exists kwid($text)]} {
232        return "\"$kwid($text)\""
233    }
234    set anchor key$cnt
235    incr cnt
236    return "\"$anchor\""
237}
238
239proc Row {} {
240    global even
241    set res [expr {$even
242    ? "\#idxeven"
243    : "\#idxodd"}]
244    Flip
245    return $res
246}
247
248proc Flip {} {
249    global even
250    set    even [expr {1-$even}]
251    return
252}
253
254# ### ### ### ######### ######### #########
255## Engine state
256
257# key  : string -> dict(ref -> label) "key formatting"
258# ch   : string -> '.'                "key starting characters"
259# lk   : string                       "last key"
260# la   : string "index label"
261# ti   : string "index title"
262# cnt  : int
263# kwid : string -> ...
264# even : bool
265
266global key  ; array set key  {}
267global ch   ; array set ch   {}
268global lk   ; set       lk   {}
269global la   ; set       la   {}
270global ti   ; set       ti   {}
271global cnt  ; set       cnt  0
272global kwid ; array set kwid {}
273global even ; set       even 1
274global dot  ; set dot   [markup { &#183; }]
275
276# ### ### ### ######### ######### #########
277## Engine parameters
278
279global    __var
280array set __var {
281    meta   {}
282    header {}
283    footer {}
284    kwid   {}
285}
286proc Get               {varname}      {global __var ; return $__var($varname)}
287proc idx_listvariables {}             {global __var ; return [array names __var]}
288proc idx_varset        {varname text} {
289    global __var
290    if {![info exists __var($varname)]} {return -code error "Unknown engine variable \"$varname\""}
291    set __var($varname) $text
292    return
293}
294
295##
296# ### ### ### ######### ######### #########
Note: See TracBrowser for help on using the repository browser.