diff options
Diffstat (limited to 'tcllib/support/devel/sak')
61 files changed, 13521 insertions, 0 deletions
diff --git a/tcllib/support/devel/sak/doc/cmd.tcl b/tcllib/support/devel/sak/doc/cmd.tcl new file mode 100644 index 0000000..564ac94 --- /dev/null +++ b/tcllib/support/devel/sak/doc/cmd.tcl @@ -0,0 +1,44 @@ +# -*- tcl -*- +# Implementation of 'doc'. + +# Available variables +# * argv - Cmdline arguments +# * base - Location of sak.tcl = Top directory of Tcllib distribution +# * cbase - Location of all files relevant to this command. +# * sbase - Location of all files supporting the SAK. + +if {![llength $argv]} { + set format * +} else { + set format [lindex $argv 0]* + set argv [lrange $argv 1 end] +} + +package require sak::util +if {![sak::util::checkModules argv]} return + +set matches 0 +foreach f { + html nroff tmml text wiki latex dvi ps pdf list validate imake ishow index +} { + if {![string match $format $f]} continue + incr matches +} +if {!$matches} { + puts " No format matching \"$format\"" + return +} + +# ### + +package require sak::doc + +foreach f { + html nroff tmml text wiki latex dvi ps pdf list validate imake ishow index +} { + if {![string match $format $f]} continue + sak::doc::$f $argv +} + +## +# ### diff --git a/tcllib/support/devel/sak/doc/doc.tcl b/tcllib/support/devel/sak/doc/doc.tcl new file mode 100644 index 0000000..59ab9b7 --- /dev/null +++ b/tcllib/support/devel/sak/doc/doc.tcl @@ -0,0 +1,262 @@ +# -*- tcl -*- +# sak::doc - Documentation facilities + +package require sak::util +package require sak::doc::auto + +namespace eval ::sak::doc {} + +# ### +# API commands + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::index {modules} { + # The argument (= set of modules) is irrelevant to this command. + global base + + # First locate all manpages in the CVS workspace. + set manpages [auto::findManpages $base] + auto::saveManpages $manpages + + # Then scan the found pages and extract the information needed for + # keyword index and table of contents. + array set meta [auto::scanManpages $manpages] + + # Sort through the extracted data. + array set kwic {} ; # map: keyword -> list (file...) + array set title {} ; # map: file -> description + array set cat {} ; # map: category -> list (file...) + array set name {} ; # map: file -> label + set apps {} ; # list (file...) + array set mods {} ; # map: module -> list(file...) + + foreach page [array names meta] { + unset -nocomplain m + array set m $meta($page) + + # Collect keywords and file mapping for index. + foreach kw $m(keywords) { + lappend kwic($kw) $page + } + # Get page title, relevant for display order + if {$m(desc) eq ""} { + set m(desc) $m(shortdesc) + } + set title($page) $m(desc) + # Get page name/title, relevant for display order. + set name($page) $m(title) + # Get page category, for sectioning and display order in the + # table of contents + if {$m(category) ne ""} { + set c $m(category) + } else { + set c Unfiled + } + lappend cat($c) $page + + # Type of documented entity + set type [lindex [file split $page] 0] + if {$type eq "apps"} { + lappend apps $page + } else { + lappend mods([lindex [file split $page] 1]) $page + } + } + + #parray meta + #parray kwic + #parray title + #parray name + #parray cat + #puts "apps = $apps" + #parray mods + + auto::saveKeywordIndex kwic name + auto::saveTableOfContents title name cat apps mods + auto::saveSimpleTableOfContents1 title name apps toc_apps.txt + auto::saveSimpleTableOfContents2 title name mods toc_mods.txt + auto::saveSimpleTableOfContents3 title name cat toc_cats.txt + return +} + +proc ::sak::doc::imake {modules} { + global base + # The argument (= set of modules) is irrelevant to this command. + auto::saveManpages [auto::findManpages $base] + return +} + +proc ::sak::doc::ishow {modules} { + if {[catch { + set manpages [auto::loadManpages] + } msg]} { + puts stderr "Unable to use manpage listing '[auto::manpages]'\n$msg" + } else { + puts [join $manpages \n] + } + return +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::validate {modules} {Gen null null $modules} +proc ::sak::doc::html {modules} {Gen html html $modules} +proc ::sak::doc::nroff {modules} {Gen nroff n $modules} +proc ::sak::doc::tmml {modules} {Gen tmml tmml $modules} +proc ::sak::doc::text {modules} {Gen text txt $modules} +proc ::sak::doc::wiki {modules} {Gen wiki wiki $modules} +proc ::sak::doc::latex {modules} {Gen latex tex $modules} + +proc ::sak::doc::dvi {modules} { + latex $modules + file mkdir [file join doc dvi] + cd [file join doc dvi] + + foreach f [lsort -dict [glob -nocomplain ../latex/*.tex]] { + + set target [file rootname [file tail $f]].dvi + if {[file exists $target] + && [file mtime $target] > [file mtime $f]} { + continue + } + + puts "Gen (dvi): $f" + exec latex $f 1>@ stdout 2>@ stderr + } + cd ../.. + return +} + +proc ::sak::doc::ps {modules} { + dvi $modules + file mkdir [file join doc ps] + cd [file join doc ps] + foreach f [lsort -dict [glob -nocomplain ../dvi/*.dvi]] { + + set target [file rootname [file tail $f]].ps + if {[file exists $target] + && [file mtime $target] > [file mtime $f]} { + continue + } + + puts "Gen (ps): $f" + exec dvips -o $target $f >@ stdout 2>@ stderr + } + cd ../.. + return +} + +proc ::sak::doc::pdf {modules} { + dvi $modules + file mkdir [file join doc pdf] + cd [file join doc pdf] + foreach f [lsort -dict [glob -nocomplain ../ps/*.ps]] { + + set target [file rootname [file tail $f]].pdf + if {[file exists $target] + && [file mtime $target] > [file mtime $f]} { + continue + } + + puts "Gen (pdf): $f" + exec ps2pdf $f $target >@ stdout 2>@ stderr + } + cd ../.. + return +} + +proc ::sak::doc::list {modules} { + Gen list l $modules + + set FILES [glob -nocomplain doc/list/*.l] + set LIST [open [file join doc list manpages.tcl] w] + + foreach file $FILES { + set f [open $file r] + puts $LIST [read $f] + close $f + } + close $LIST + + eval file delete -force $FILES + return +} + +# ### ### ### ######### ######### ######### +## Implementation + +proc ::sak::doc::Gen {fmt ext modules} { + global distribution + global tcl_platform + + getpackage doctools doctools/doctools.tcl + + set null 0 ; if {![string compare $fmt null]} {set null 1} + set hidden 0 ; if {![string compare $fmt desc]} {set hidden 1} + + if {!$null} { + file mkdir [file join doc $fmt] + set prefix "Gen ($fmt)" + } else { + set prefix "Validate " + } + + foreach m $modules { + set mpath [sak::util::module2path $m] + + ::doctools::new dt \ + -format $fmt \ + -module $m + + set fl [glob -nocomplain [file join $mpath *.man]] + + if {[llength $fl] == 0} { + dt destroy + continue + } + + foreach f $fl { + if {!$null} { + set target [file join doc $fmt \ + [file rootname [file tail $f]].$ext] + if {[file exists $target] + && [file mtime $target] > [file mtime $f]} { + continue + } + } + if {!$hidden} {puts "$prefix: $f"} + + dt configure -file $f + if {$null} { + dt configure -deprecated 1 + } + + set fail [catch { + set data [dt format [get_input $f]] + } msg] + + set warnings [dt warnings] + if {[llength $warnings] > 0} { + puts stderr [join $warnings \n] + } + + if {$fail} { + puts stderr $msg + continue + } + + if {!$null} { + write_out $target $data + } + } + dt destroy + } +} + +# ### ### ### ######### ######### ######### + +package provide sak::doc 1.0 + +## +# ### diff --git a/tcllib/support/devel/sak/doc/doc_auto.tcl b/tcllib/support/devel/sak/doc/doc_auto.tcl new file mode 100644 index 0000000..f04e9df --- /dev/null +++ b/tcllib/support/devel/sak/doc/doc_auto.tcl @@ -0,0 +1,311 @@ +# -*- tcl -*- +# sak::doc::auto - Documentation facilities, support for automatic +# list of manpages, keyword index, and table of contents. + +package require sak::util + +namespace eval ::sak::doc::auto { + set here [file dirname [file normalize [info script]]] +} + +getpackage fileutil fileutil/fileutil.tcl +getpackage doctools doctools/doctools.tcl +getpackage textutil::repeat textutil/repeat.tcl + +# ### +# API commands + +proc ::sak::doc::auto::manpages {} { + variable here + return [file join $here manpages.txt] +} + +proc ::sak::doc::auto::kwic {} { + variable here + return [file join $here kwic.txt] +} + +proc ::sak::doc::auto::toc {{name toc.txt}} { + variable here + return [file join $here $name] +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::auto::findManpages {base} { + set top [file normalize $base] + set manpages {} + foreach page [concat \ + [glob -nocomplain -directory $top/modules */*.man] \ + [glob -nocomplain -directory $top/apps *.man]] { + lappend manpages [fileutil::stripPath $top $page] + } + return [lsort -dict $manpages] +} + +proc ::sak::doc::auto::saveManpages {manpages} { + fileutil::writeFile [manpages] [join [lsort -dict $manpages] \n]\n + return +} + +proc ::sak::doc::auto::loadManpages {} { + return [lsort -dict [split [fileutil::cat [manpages]] \n]] +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::auto::scanManpages {manpages} { + ::doctools::new dt -format list + set data {} + puts Scanning... + foreach page $manpages { + puts ...$page + if {![file size $page]} { puts "\tEMPTY, IGNORED" ; continue } + dt configure -ibase $page + lappend data $page [lindex [dt format [fileutil::cat $page]] 1] + } + + dt destroy + return $data +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::auto::saveKeywordIndex {kv nv} { + upvar 1 $kv kwic $nv name + # kwic: keyword -> list (files) + # name: file -> label + + TagsBegin + Tag+ index_begin [list {Keyword Index} {}] + + # Handle the keywords in dictionary order for nice display. + foreach kw [lsort -dict [array names kwic]] { + set tmp [Sortable $kwic($kw) name max _] + + Tag+ key [list $kw] + foreach item [lsort -dict -index 0 $tmp] { + foreach {label file} $item break + Tag+ manpage [FmtR max $file] [list $label] + } + } + + Tag+ index_end + + fileutil::writeFile [kwic] [join $lines \n] + return +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::auto::saveTableOfContents {tv nv cv av mv} { + upvar 1 $tv title $nv name $cv cat $av apps $mv mods + # title: file -> description + # name: file -> label + # cat: category -> list (file...) + + TagsBegin + Tag+ toc_begin [list {Table Of Contents} {}] + + # The man pages are sorted in several ways for the toc. + # 1. First section by category. Subsections are categories. + # Sorted by category name, in dictionary order. + # Inside the subsections the files, sorted by label and + # description. + # 2. Second section for types. Subsections are modules and apps. + # Apps first, then modules. For apps items directly, sorted + # by name and description. For modules one sub-subsection + # per module, elements the packages, sorted by label and + # description. + + Tag+ division_start [list {By Categories}] + foreach c [lsort -dict [array names cat]] { + Tag+ division_start [list $c] + foreach item [lsort -dict -index 0 [Sortable $cat($c) name maxf maxl]] { + foreach {label file} $item break + Tag+ item \ + [FmtR maxf $file] \ + [FmtR maxl $label] \ + [list $title($file)] + } + Tag+ division_end + } + Tag+ division_end + + Tag+ division_start [list {By Type}] + # Not handled: 'no applications' + Tag+ division_start [list {Applications}] + foreach item [lsort -dict -index 0 [Sortable $apps name maxf maxl]] { + foreach {label file} $item break + Tag+ item \ + [FmtR maxf $file] \ + [FmtR maxl $label] \ + [list $title($file)] + } + Tag+ division_end + # Not handled: 'no modules' + Tag+ division_start [list {Modules}] + foreach m [lsort -dict [array names mods]] { + Tag+ division_start [list $m] + foreach item [lsort -dict -index 0 [Sortable $mods($m) name maxf maxl]] { + foreach {label file} $item break + Tag+ item \ + [FmtR maxf $file] \ + [FmtR maxl $label] \ + [list $title($file)] + } + Tag+ division_end + } + Tag+ division_end + Tag+ division_end + Tag+ toc_end + + fileutil::writeFile [toc] [join $lines \n] + return +} + +proc ::sak::doc::auto::saveSimpleTableOfContents1 {tv nv dv fname} { + upvar 1 $tv title $nv name $dv data + # title: file -> description + # name: file -> label + # data: list(file...) + + TagsBegin + Tag+ toc_begin [list {Table Of Contents} {}] + + # The man pages are sorted in several ways for the toc. + # Subsections are the modules or apps, whatever is in data. + + # Not handled: 'no applications' + Tag+ division_start [list {Applications}] + foreach item [lsort -dict -index 0 [Sortable $data name maxf maxl]] { + foreach {label file} $item break + Tag+ item \ + [FmtR maxf $file] \ + [FmtR maxl $label] \ + [list $title($file)] + } + Tag+ division_end + Tag+ toc_end + + fileutil::writeFile [toc $fname] [join $lines \n] + return +} + +proc ::sak::doc::auto::saveSimpleTableOfContents2 {tv nv dv fname} { + upvar 1 $tv title $nv name $dv data + # title: file -> description + # name: file -> label + # data: module -> list (file...) + + TagsBegin + Tag+ toc_begin [list {Table Of Contents} {}] + + # The man pages are sorted in several ways for the toc. + # Subsections are the modules or apps, whatever is in data. + + # Not handled: 'no modules' + Tag+ division_start [list {Modules}] + foreach m [lsort -dict [array names data]] { + Tag+ division_start [list $m] + foreach item [lsort -dict -index 0 [Sortable $data($m) name maxf maxl]] { + foreach {label file} $item break + Tag+ item \ + [FmtR maxf $file] \ + [FmtR maxl $label] \ + [list $title($file)] + } + Tag+ division_end + } + Tag+ division_end + Tag+ toc_end + + fileutil::writeFile [toc $fname] [join $lines \n] + return +} + +proc ::sak::doc::auto::saveSimpleTableOfContents3 {tv nv cv fname} { + upvar 1 $tv title $nv name $cv cat + # title: file -> description + # name: file -> label + # cat: category -> list (file...) + + TagsBegin + Tag+ toc_begin [list {Table Of Contents} {}] + + Tag+ division_start [list {By Categories}] + foreach c [lsort -dict [array names cat]] { + Tag+ division_start [list $c] + foreach item [lsort -dict -index 0 [Sortable $cat($c) name maxf maxl]] { + foreach {label file} $item break + Tag+ item \ + [FmtR maxf $file] \ + [FmtR maxl $label] \ + [list $title($file)] + } + Tag+ division_end + } + Tag+ division_end + Tag+ toc_end + + fileutil::writeFile [toc $fname] [join $lines \n] + return +} + +proc ::sak::doc::auto::Sortable {files nv mfv mnv} { + upvar 1 $nv name $mfv maxf $mnv maxn + # Generate a list of files sortable by name, and also find the + # max length of all relevant names. + set maxf 0 + set maxn 0 + set tmp {} + foreach file $files { + lappend tmp [list $name($file) $file] + Max maxf $file + Max maxn $name($file) + } + return $tmp +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::auto::Max {v str} { + upvar 1 $v max + set x [string length $str] + if {$x <= $max} return + set max $x + return +} + +proc ::sak::doc::auto::FmtR {v str} { + upvar 1 $v max + return [list $str][textutil::repeat::blank \ + [expr {$max - [string length [list $str]]}]] +} + +## ### ### ### ######### ######### ######### + +proc ::sak::doc::auto::Tag {n args} { + if {[llength $args]} { + return "\[$n [join $args]\]" + } else { + return "\[$n\]" + } + #return \[[linsert $args 0 $n]\] +} + +proc ::sak::doc::auto::Tag+ {n args} { + upvar 1 lines lines + lappend lines [eval [linsert $args 0 ::sak::doc::auto::Tag $n]] + return +} + +proc ::sak::doc::auto::TagsBegin {} { + upvar 1 lines lines + set lines {} + return +} + +## ### ### ### ######### ######### ######### + +package provide sak::doc::auto 1.0 diff --git a/tcllib/support/devel/sak/doc/help.txt b/tcllib/support/devel/sak/doc/help.txt new file mode 100644 index 0000000..015d1f0 --- /dev/null +++ b/tcllib/support/devel/sak/doc/help.txt @@ -0,0 +1,42 @@ + + doc -- Generate and/or validate documentation + + sak doc ?format? ?module...? + + Convert the documentation for the specified module into the + given format. Modules can be specified by their plain name, or + as relative path. + + The special format 'validate' causes the tool to syntax check + of the input without generating actual output. When output is + generated it is written into the sub-directory 'doc'/format of + the current working directory. + + The special format 'imake' scans the checkout for manpages and + saves the list of found files into a file in the support + directory. This files will be put into CVS. The special format + 'ishow' will dump the contents of this list to stdout. Both + have been added to make it easy to verify that a checkout has + all manpages it should have. These two formats ignore any + module information they are given. + + The format is actually a glob and output is generated for all + known formats matching it. It is implicitly padded with a * to + allow the use of prefixes. + + The known output formats (beyond 'validate') are + + - dvi See latex, + conversion to dvi (via 'latex' application) + - html HTML pages + - latex LaTeX pages + - list A list of manpages + - nroff Manpages + - ps See dvi, + conversion to PostScript (via 'dvips' application) + - pdf See ps, + conversion to PDF (via 'ps2pdf' application) + - text Plain text + - tmml TMML (Tcl Manpage Markup Language) + - wiki Wiki markup (Tcler's Wiki) + + - validate Validate syntax, no output + - imake Make list of all manpages and save in checkout, no output. + - ishow Print list of manpages saved in checkout to stdout. diff --git a/tcllib/support/devel/sak/doc/kwic.txt b/tcllib/support/devel/sak/doc/kwic.txt new file mode 100644 index 0000000..2dc3f98 --- /dev/null +++ b/tcllib/support/devel/sak/doc/kwic.txt @@ -0,0 +1,3762 @@ +[index_begin {Keyword Index} {}] +[key .ddt] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[key .dtx] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] +[key /dev/null] +[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[key /dev/random] +[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[key /dev/zero] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero] +[key 3DES] +[manpage modules/des/des.man des] +[manpage modules/des/tcldes.man tcldes] +[manpage modules/des/tcldesjr.man tcldes] +[key {abstract syntax tree}] +[manpage modules/grammar_me/me_util.man grammar::me::util] +[manpage modules/grammar_me/me_ast.man grammar::me_ast] +[key acceptance] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[key acceptor] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[key active] +[manpage modules/transfer/connect.man transfer::connect] +[key adaptors] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[key {adjacency list}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {adjacency matrix}] +[manpage modules/struct/graphops.man struct::graph::op] +[key adjacent] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key adjusting] +[manpage modules/textutil/adjust.man textutil::adjust] +[key adler32] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[key aes] +[manpage modules/aes/aes.man aes] +[key after] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key alias] +[manpage modules/interp/tcllib_interp.man interp] +[key amazon] +[manpage modules/amazon-s3/S3.man S3] +[key ambiguous] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[key {American Express}] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[key AMEX] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[key angle] +[manpage modules/math/math_geometry.man math::geometry] +[manpage modules/units/units.man units] +[key {anonymous procedure}] +[manpage modules/lambda/lambda.man lambda] +[key ansi] +[manpage modules/term/ansi_cattr.man term::ansi::code::attr] +[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl] +[manpage modules/term/ansi_cmacros.man term::ansi::code::macros] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key appender] +[manpage modules/log/loggerAppender.man logger::appender] +[manpage modules/log/loggerUtils.man logger::utils] +[key application] +[manpage apps/nns.man nns] +[manpage apps/nnsd.man nnsd] +[manpage apps/nnslog.man nnslog] +[key {approximation algorithm}] +[manpage modules/struct/graphops.man struct::graph::op] +[key arc] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key arcfour] +[manpage modules/rc4/rc4.man rc4] +[key archive] +[manpage modules/tar/tar.man tar] +[key {argument integrity}] +[manpage modules/tepam/tepam_introduction.man tepam] +[manpage modules/tepam/tepam_procedure.man tepam::procedure] +[key {argument processing}] +[manpage modules/cmdline/cmdline.man cmdline] +[key {argument validation}] +[manpage modules/tepam/tepam_introduction.man tepam] +[manpage modules/tepam/tepam_procedure.man tepam::procedure] +[key arguments] +[manpage modules/tepam/tepam_introduction.man tepam] +[manpage modules/tepam/tepam_procedure.man tepam::procedure] +[key argv] +[manpage modules/cmdline/cmdline.man cmdline] +[key argv0] +[manpage modules/cmdline/cmdline.man cmdline] +[key array] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[key {articulation point}] +[manpage modules/struct/graphops.man struct::graph::op] +[key ascii85] +[manpage modules/base64/ascii85.man ascii85] +[key asn] +[manpage modules/asn/asn.man asn] +[key assembler] +[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm] +[key assert] +[manpage modules/control/control.man control] +[key assign] +[manpage modules/struct/struct_list.man struct::list] +[key AST] +[manpage modules/grammar_me/me_ast.man grammar::me_ast] +[key asynchronous] +[manpage modules/cache/async.man cache::async] +[key {attribute control}] +[manpage modules/term/ansi_cattr.man term::ansi::code::attr] +[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl] +[key {augmenting network}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {augmenting path}] +[manpage modules/struct/graphops.man struct::graph::op] +[key authentication] +[manpage modules/http/autoproxy.man autoproxy] +[manpage modules/sasl/sasl.man SASL] +[manpage modules/sasl/ntlm.man SASL::NTLM] +[manpage modules/sasl/scram.man SASL::SCRAM] +[manpage modules/sasl/gtoken.man SASL::XGoogleToken] +[key automatic] +[manpage modules/nns/nns_auto.man nameserv::auto] +[key {automatic documentation}] +[manpage modules/tepam/tepam_doc_gen.man tepam::doc_gen] +[key automaton] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[key aycock] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[key bank] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/iban.man valtype::iban] +[key base32] +[manpage modules/base32/base32.man base32] +[manpage modules/base32/base32core.man base32::core] +[manpage modules/base32/base32hex.man base32::hex] +[key base64] +[manpage modules/base64/base64.man base64] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[key bash] +[manpage modules/string/token_shell.man string::token::shell] +[key bee] +[manpage modules/bee/bee.man bee] +[key {bench language}] +[manpage modules/bench/bench_intro.man bench_intro] +[manpage modules/bench/bench_lang_intro.man bench_lang_intro] +[manpage modules/bench/bench_lang_spec.man bench_lang_spec] +[key benchmark] +[manpage modules/bench/bench.man bench] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wcsv.man bench::out::csv] +[manpage modules/bench/bench_wtext.man bench::out::text] +[manpage modules/bench/bench_intro.man bench_intro] +[manpage modules/bench/bench_lang_intro.man bench_lang_intro] +[manpage modules/bench/bench_lang_spec.man bench_lang_spec] +[key ber] +[manpage modules/asn/asn.man asn] +[key {Bessel functions}] +[manpage modules/math/special.man math::special] +[key bfs] +[manpage modules/struct/graphops.man struct::graph::op] +[key bibliography] +[manpage modules/bibtex/bibtex.man bibtex] +[key bibtex] +[manpage modules/bibtex/bibtex.man bibtex] +[key bignums] +[manpage modules/math/bignum.man math::bignum] +[key bind] +[manpage modules/uev/uevent.man uevent] +[key bipartite] +[manpage modules/struct/graphops.man struct::graph::op] +[key BitTorrent] +[manpage modules/bee/bee.man bee] +[key bittorrent] +[manpage modules/bee/bee.man bee] +[key blanks] +[manpage modules/textutil/repeat.man textutil::repeat] +[key {block cipher}] +[manpage modules/aes/aes.man aes] +[manpage modules/blowfish/blowfish.man blowfish] +[manpage modules/des/des.man des] +[manpage modules/des/tcldes.man tcldes] +[manpage modules/des/tcldesjr.man tcldes] +[key {blocking flow}] +[manpage modules/struct/graphops.man struct::graph::op] +[key blowfish] +[manpage modules/blowfish/blowfish.man blowfish] +[key {Book Number}] +[manpage modules/valtype/isbn.man valtype::isbn] +[key breadth-first] +[manpage modules/struct/struct_tree.man struct::tree] +[key bridge] +[manpage modules/struct/graphops.man struct::graph::op] +[key BWidget] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[key C] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[key C++] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[manpage modules/stooop/stooop.man stooop] +[manpage modules/stooop/switched.man switched] +[key cache] +[manpage modules/cache/async.man cache::async] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[key {caesar cipher}] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[key calculus] +[manpage modules/math/calculus.man math::calculus] +[key callback] +[manpage modules/cache/async.man cache::async] +[manpage modules/hook/hook.man hook] +[manpage modules/lambda/lambda.man lambda] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[manpage modules/uev/uevent_onidle.man uevent::onidle] +[key callbacks] +[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe] +[key capitalize] +[manpage modules/textutil/textutil_string.man textutil::string] +[key {card for credit}] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[key cardinality] +[manpage modules/struct/struct_set.man struct::set] +[key cat] +[manpage modules/fileutil/fileutil.man fileutil] +[key {catalog package}] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key catalogue] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[key cell-phone] +[manpage modules/valtype/imei.man valtype::imei] +[key cer] +[manpage modules/asn/asn.man asn] +[key CFG] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[key CFL] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[key CGI] +[manpage modules/ncgi/ncgi.man ncgi] +[key cgraph] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graph1.man struct::graph_v1] +[key changelog] +[manpage modules/doctools/changelog.man doctools::changelog] +[manpage modules/doctools/cvs.man doctools::cvs] +[key channel] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[manpage modules/transfer/connect.man transfer::connect] +[manpage modules/transfer/copyops.man transfer::copy] +[manpage modules/transfer/tqueue.man transfer::copy::queue] +[manpage modules/transfer/ddest.man transfer::data::destination] +[manpage modules/transfer/dsource.man transfer::data::source] +[manpage modules/transfer/receiver.man transfer::receiver] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key {channel transformation}] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[manpage modules/virtchannel_transform/hex.man tcl::transform::hex] +[manpage modules/virtchannel_transform/identity.man tcl::transform::identity] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key {character input}] +[manpage modules/term/receive.man term::receive] +[manpage modules/term/term_bind.man term::receive::bind] +[key {character output}] +[manpage modules/term/ansi_send.man term::ansi::send] +[manpage modules/term/term_send.man term::send] +[key chat] +[manpage modules/irc/irc.man irc] +[manpage modules/multiplexer/multiplexer.man multiplexer] +[manpage modules/irc/picoirc.man picoirc] +[key checkbox] +[manpage modules/html/html.man html] +[manpage modules/javascript/javascript.man javascript] +[key checkbutton] +[manpage modules/html/html.man html] +[key Checking] +[manpage modules/valtype/valtype_common.man valtype::common] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/iban.man valtype::iban] +[manpage modules/valtype/imei.man valtype::imei] +[manpage modules/valtype/isbn.man valtype::isbn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key checksum] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/crc/sum.man sum] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[key chop] +[manpage modules/textutil/textutil_string.man textutil::string] +[key cipher] +[manpage modules/pki/pki.man pki] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[key cksum] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/crc/sum.man sum] +[key class] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[manpage modules/stooop/stooop.man stooop] +[manpage modules/stooop/switched.man switched] +[key {class methods}] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key {class variables}] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key cleanup] +[manpage modules/try/tcllib_try.man try] +[key client] +[manpage modules/nns/nns_client.man nameserv] +[manpage modules/nns/nns_auto.man nameserv::auto] +[manpage modules/nns/nns_common.man nameserv::common] +[manpage apps/nns.man nns] +[manpage modules/nns/nns_intro.man nns_intro] +[manpage apps/nnslog.man nnslog] +[key cloud] +[manpage modules/amazon-s3/S3.man S3] +[key {cmdline processing}] +[manpage modules/cmdline/cmdline.man cmdline] +[key {color control}] +[manpage modules/term/ansi_cattr.man term::ansi::code::attr] +[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl] +[key columns] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key comm] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[manpage modules/interp/deleg_method.man deleg_method] +[manpage modules/interp/deleg_proc.man deleg_proc] +[manpage modules/nns/nns_protocol.man nameserv::protocol] +[key command] +[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse] +[key {command line processing}] +[manpage modules/cmdline/cmdline.man cmdline] +[key {command prefix}] +[manpage modules/lambda/lambda.man lambda] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key comment] +[manpage modules/jpeg/jpeg.man jpeg] +[manpage modules/png/png.man png] +[key common] +[manpage modules/struct/struct_list.man struct::list] +[key {common prefix}] +[manpage modules/textutil/textutil_string.man textutil::string] +[key communication] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[key comparison] +[manpage modules/struct/struct_list.man struct::list] +[key {complete graph}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {complex numbers}] +[manpage modules/math/qcomplex.man math::complexnumbers] +[manpage modules/math/fourier.man math::fourier] +[key compression] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[manpage modules/zip/encode.man zipfile::encode] +[key computations] +[manpage modules/math/bigfloat.man math::bigfloat] +[key {concatenation channel}] +[manpage modules/virtchannel_base/cat.man tcl::chan::cat] +[manpage modules/virtchannel_base/facade.man tcl::chan::facade] +[key {connected component}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {connected fifos}] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[key connection] +[manpage modules/transfer/connect.man transfer::connect] +[key constants] +[manpage modules/math/constants.man math::constants] +[manpage modules/units/units.man units] +[key CONTAINER] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[key contents] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[key {context-free grammar}] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[key {context-free languages}] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key control] +[manpage modules/control/control.man control] +[manpage modules/term/term.man term] +[manpage modules/term/ansi_code.man term::ansi::code] +[manpage modules/term/ansi_cattr.man term::ansi::code::attr] +[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl] +[manpage modules/term/ansi_cmacros.man term::ansi::code::macros] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[manpage modules/term/ansi_send.man term::ansi::send] +[manpage modules/term/imenu.man term::interact::menu] +[manpage modules/term/ipager.man term::interact::pager] +[manpage modules/term/receive.man term::receive] +[manpage modules/term/term_bind.man term::receive::bind] +[manpage modules/term/term_send.man term::send] +[key {control structure}] +[manpage modules/generator/generator.man generator] +[key conversion] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[manpage modules/math/roman.man math::roman] +[manpage modules/doctools/mpexpand.man mpexpand] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage apps/tcldocstrip.man tcldocstrip] +[manpage modules/units/units.man units] +[key cooked] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key cookie] +[manpage modules/ncgi/ncgi.man ncgi] +[key copy] +[manpage modules/fileutil/multi.man fileutil::multi] +[manpage modules/fileutil/multiop.man fileutil::multi::op] +[manpage modules/transfer/copyops.man transfer::copy] +[manpage modules/transfer/tqueue.man transfer::copy::queue] +[manpage modules/transfer/ddest.man transfer::data::destination] +[manpage modules/transfer/dsource.man transfer::data::source] +[manpage modules/transfer/receiver.man transfer::receiver] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key coroutine] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[manpage modules/generator/generator.man generator] +[key Cost] +[manpage modules/treeql/treeql.man treeql] +[key counter] +[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter] +[key counting] +[manpage modules/counter/counter.man counter] +[key CPARAM] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[key crc] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/crc/sum.man sum] +[key crc16] +[manpage modules/crc/crc16.man crc16] +[key crc32] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/crc/sum.man sum] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[key {credit card}] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[key cron] +[manpage modules/cron/cron.man cron] +[key cryptography] +[manpage modules/blowfish/blowfish.man blowfish] +[key CSS] +[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults] +[key csv] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wcsv.man bench::out::csv] +[manpage modules/csv/csv.man csv] +[key currying] +[manpage modules/lambda/lambda.man lambda] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key {cut edge}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {cut vertex}] +[manpage modules/struct/graphops.man struct::graph::op] +[key CVS] +[manpage modules/rcs/rcs.man rcs] +[key cvs] +[manpage modules/doctools/cvs.man doctools::cvs] +[key {cvs log}] +[manpage modules/doctools/cvs.man doctools::cvs] +[key {cyclic redundancy check}] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/crc/sum.man sum] +[key {data analysis}] +[manpage modules/math/statistics.man math::statistics] +[key {data destination}] +[manpage modules/transfer/ddest.man transfer::data::destination] +[manpage modules/transfer/receiver.man transfer::receiver] +[key {data entry form}] +[manpage modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox] +[key {data exchange}] +[manpage modules/yaml/huddle.man huddle] +[manpage modules/json/json.man json] +[manpage modules/json/json_write.man json::write] +[manpage modules/yaml/yaml.man yaml] +[key {data integrity}] +[manpage modules/aes/aes.man aes] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/des/des.man des] +[manpage modules/pki/pki.man pki] +[manpage modules/rc4/rc4.man rc4] +[manpage modules/crc/sum.man sum] +[manpage modules/des/tcldes.man tcldes] +[manpage modules/des/tcldesjr.man tcldes] +[key {data source}] +[manpage modules/transfer/dsource.man transfer::data::source] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key {data structures}] +[manpage modules/struct/record.man struct::record] +[key database] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[key dataflow] +[manpage modules/page/page_util_flow.man page_util_flow] +[key DE] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[key debug] +[manpage modules/debug/debug.man debug] +[manpage modules/debug/debug_caller.man debug::caller] +[manpage modules/debug/debug_heartbeat.man debug::heartbeat] +[manpage modules/debug/debug_timestamp.man debug::timestamp] +[key decimal] +[manpage modules/math/decimal.man math::decimal] +[key declare] +[manpage modules/term/ansi_code.man term::ansi::code] +[key decompression] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[manpage modules/zip/decode.man zipfile::decode] +[manpage modules/zip/mkzip.man zipfile::mkzip] +[key decryption] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[key deferal] +[manpage modules/uev/uevent_onidle.man uevent::onidle] +[key define] +[manpage modules/term/ansi_code.man term::ansi::code] +[key degree] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key {degree constrained spanning tree}] +[manpage modules/struct/graphops.man struct::graph::op] +[key degrees] +[manpage modules/math/constants.man math::constants] +[key delegation] +[manpage modules/interp/deleg_method.man deleg_method] +[manpage modules/interp/deleg_proc.man deleg_proc] +[key depth-first] +[manpage modules/struct/struct_tree.man struct::tree] +[key der] +[manpage modules/asn/asn.man asn] +[key DES] +[manpage modules/des/des.man des] +[manpage modules/des/tcldes.man tcldes] +[manpage modules/des/tcldesjr.man tcldes] +[key deserialization] +[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx] +[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json] +[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure] +[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc] +[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json] +[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure] +[key diameter] +[manpage modules/struct/graphops.man struct::graph::op] +[key dict] +[manpage modules/dicttool/dicttool.man dicttool] +[key diff] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage modules/struct/struct_list.man struct::list] +[key {diff -n format}] +[manpage modules/rcs/rcs.man rcs] +[key difference] +[manpage modules/struct/struct_set.man struct::set] +[key differential] +[manpage modules/struct/struct_list.man struct::list] +[key {differential equations}] +[manpage modules/math/calculus.man math::calculus] +[key dijkstra] +[manpage modules/struct/graphops.man struct::graph::op] +[key {directory access}] +[manpage modules/ldap/ldap.man ldap] +[manpage modules/ldap/ldapx.man ldapx] +[key {directory traversal}] +[manpage modules/fileutil/traverse.man fileutil_traverse] +[key Discover] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[key {discrete items}] +[manpage modules/struct/pool.man struct::pool] +[key {disjoint set}] +[manpage modules/struct/disjointset.man struct::disjointset] +[key dispatcher] +[manpage modules/term/term_bind.man term::receive::bind] +[key distance] +[manpage modules/math/math_geometry.man math::geometry] +[manpage modules/struct/graphops.man struct::graph::op] +[manpage modules/units/units.man units] +[key DNS] +[manpage modules/dns/tcllib_dns.man dns] +[key do] +[manpage modules/control/control.man control] +[key docidx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx] +[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse] +[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[key {docidx commands}] +[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro] +[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax] +[key {docidx language}] +[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro] +[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax] +[key {docidx markup}] +[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro] +[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[key {docidx syntax}] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro] +[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax] +[key docstrip] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] +[key doctoc] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc] +[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse] +[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[key {doctoc commands}] +[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro] +[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax] +[key {doctoc language}] +[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro] +[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax] +[key {doctoc markup}] +[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro] +[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[key {doctoc syntax}] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro] +[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax] +[key doctools] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage modules/doctools/changelog.man doctools::changelog] +[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults] +[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx] +[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html] +[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json] +[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff] +[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text] +[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki] +[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx] +[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json] +[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse] +[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros] +[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse] +[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc] +[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html] +[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json] +[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff] +[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text] +[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki] +[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc] +[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json] +[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse] +[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[key {doctools commands}] +[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro] +[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax] +[key {doctools language}] +[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro] +[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax] +[key {doctools markup}] +[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro] +[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax] +[key {doctools syntax}] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro] +[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax] +[key document] +[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref] +[key documentation] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage apps/tcldocstrip.man tcldocstrip] +[manpage modules/tepam/tepam_doc_gen.man tepam::doc_gen] +[key DOM] +[manpage modules/treeql/treeql.man treeql] +[key dom] +[manpage modules/amazon-s3/xsxp.man xsxp] +[key {domain name service}] +[manpage modules/dns/tcllib_dns.man dns] +[key e] +[manpage modules/math/constants.man math::constants] +[key EAN] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/isbn.man valtype::isbn] +[key EAN13] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/isbn.man valtype::isbn] +[key earley] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[key EBNF] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key eccentricity] +[manpage modules/struct/graphops.man struct::graph::op] +[key edge] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key emacs] +[manpage modules/doctools/changelog.man doctools::changelog] +[manpage modules/doctools/cvs.man doctools::cvs] +[key email] +[manpage modules/imap4/imap4.man imap4] +[manpage modules/mime/mime.man mime] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/mime/smtp.man smtp] +[key emptiness] +[manpage modules/struct/struct_set.man struct::set] +[key {empty interpreter}] +[manpage modules/interp/tcllib_interp.man interp] +[key EN] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[key encoding] +[manpage modules/base64/ascii85.man ascii85] +[manpage modules/base64/base64.man base64] +[manpage modules/base64/uuencode.man uuencode] +[manpage modules/base64/yencode.man yencode] +[key encryption] +[manpage modules/aes/aes.man aes] +[manpage modules/blowfish/blowfish.man blowfish] +[manpage modules/des/des.man des] +[manpage modules/pki/pki.man pki] +[manpage modules/rc4/rc4.man rc4] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[manpage modules/des/tcldes.man tcldes] +[manpage modules/des/tcldesjr.man tcldes] +[key {entry mask}] +[manpage modules/tepam/tepam_introduction.man tepam] +[key equal] +[manpage modules/struct/struct_list.man struct::list] +[key equality] +[manpage modules/struct/struct_list.man struct::list] +[key {equivalence class}] +[manpage modules/struct/disjointset.man struct::disjointset] +[key error] +[manpage modules/try/tcllib_throw.man try] +[manpage modules/try/tcllib_try.man try] +[key {error function}] +[manpage modules/math/special.man math::special] +[key {European Article Number}] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/isbn.man valtype::isbn] +[key event] +[manpage modules/hook/hook.man hook] +[manpage modules/uev/uevent.man uevent] +[manpage modules/uev/uevent_onidle.man uevent::onidle] +[key {event management}] +[manpage modules/virtchannel_core/events.man tcl::chan::events] +[key events] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key examples] +[manpage modules/bench/bench_lang_intro.man bench_lang_intro] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[key exception] +[manpage modules/try/tcllib_try.man try] +[key {exchange format}] +[manpage modules/yaml/huddle.man huddle] +[manpage modules/json/json.man json] +[manpage modules/json/json_write.man json::write] +[key exclusion] +[manpage modules/struct/struct_set.man struct::set] +[key execution] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[key exif] +[manpage modules/exif/exif.man exif] +[manpage modules/jpeg/jpeg.man jpeg] +[key exit] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key export] +[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx] +[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html] +[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json] +[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff] +[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text] +[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki] +[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc] +[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html] +[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json] +[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff] +[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text] +[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[key expression] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key {extended namespace}] +[manpage modules/namespacex/namespacex.man namespacex] +[key faq] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[key {fetching information}] +[manpage modules/uri/uri.man uri] +[key FFT] +[manpage modules/math/fourier.man math::fourier] +[key fifo] +[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe] +[key file] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[manpage modules/uri/uri.man uri] +[key {file recognition}] +[manpage modules/fumagic/cfront.man fileutil::magic::cfront] +[manpage modules/fumagic/cgen.man fileutil::magic::cgen] +[manpage modules/fumagic/filetypes.man fileutil::magic::filetype] +[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype] +[manpage modules/fumagic/rtcore.man fileutil::magic::rt] +[key {file type}] +[manpage modules/fumagic/cfront.man fileutil::magic::cfront] +[manpage modules/fumagic/cgen.man fileutil::magic::cgen] +[manpage modules/fumagic/filetypes.man fileutil::magic::filetype] +[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype] +[manpage modules/fumagic/rtcore.man fileutil::magic::rt] +[key {file utilities}] +[manpage modules/fileutil/fileutil.man fileutil] +[manpage modules/fumagic/cfront.man fileutil::magic::cfront] +[manpage modules/fumagic/cgen.man fileutil::magic::cgen] +[manpage modules/fumagic/filetypes.man fileutil::magic::filetype] +[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype] +[manpage modules/fumagic/rtcore.man fileutil::magic::rt] +[manpage modules/fileutil/multi.man fileutil::multi] +[manpage modules/fileutil/multiop.man fileutil::multi::op] +[key filesystem] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[key filter] +[manpage modules/generator/generator.man generator] +[manpage modules/struct/struct_list.man struct::list] +[key final] +[manpage modules/try/tcllib_try.man try] +[key finance] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/iban.man valtype::iban] +[key find] +[manpage modules/struct/disjointset.man struct::disjointset] +[key finite] +[manpage modules/struct/pool.man struct::pool] +[key {finite automaton}] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[key {FIPS 180-1}] +[manpage modules/sha1/sha1.man sha1] +[manpage modules/sha1/sha256.man sha256] +[key {first permutation}] +[manpage modules/struct/struct_list.man struct::list] +[key Fisher-Yates] +[manpage modules/struct/struct_list.man struct::list] +[key flatten] +[manpage modules/struct/struct_list.man struct::list] +[key floating-point] +[manpage modules/math/bigfloat.man math::bigfloat] +[manpage modules/math/fuzzy.man math::fuzzy] +[key flow] +[manpage modules/control/control.man control] +[key {flow network}] +[manpage modules/struct/graphops.man struct::graph::op] +[key folding] +[manpage modules/struct/struct_list.man struct::list] +[key foldl] +[manpage modules/generator/generator.man generator] +[key foldr] +[manpage modules/generator/generator.man generator] +[key foreach] +[manpage modules/generator/generator.man generator] +[key form] +[manpage modules/html/html.man html] +[manpage modules/ncgi/ncgi.man ncgi] +[key {format conversion}] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[key formatter] +[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref] +[key formatting] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wcsv.man bench::out::csv] +[manpage modules/bench/bench_wtext.man bench::out::text] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/adjust.man textutil::adjust] +[manpage modules/textutil/textutil_string.man textutil::string] +[manpage modules/textutil/tabify.man textutil::tabify] +[key {formatting engine}] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref] +[key {Fourier transform}] +[manpage modules/math/fourier.man math::fourier] +[key FR] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key frame] +[manpage modules/term/ansi_cmacros.man term::ansi::code::macros] +[key ftp] +[manpage modules/ftp/ftp.man ftp] +[manpage modules/ftp/ftp_geturl.man ftp::geturl] +[manpage modules/ftpd/ftpd.man ftpd] +[manpage modules/uri/uri.man uri] +[key ftpd] +[manpage modules/ftpd/ftpd.man ftpd] +[key ftpserver] +[manpage modules/ftpd/ftpd.man ftpd] +[key {full outer join}] +[manpage modules/struct/struct_list.man struct::list] +[key {generate event}] +[manpage modules/uev/uevent.man uevent] +[key {generate permutations}] +[manpage modules/struct/struct_list.man struct::list] +[key generation] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[key generator] +[manpage modules/generator/generator.man generator] +[key geocoding] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[key geodesy] +[manpage modules/map/map_slippy.man map::slippy] +[manpage modules/mapproj/mapproj.man mapproj] +[key geography] +[manpage modules/map/map_slippy.man map::slippy] +[key {get character}] +[manpage modules/term/receive.man term::receive] +[key gets] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key global] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key gopher] +[manpage modules/uri/uri.man uri] +[key gps] +[manpage modules/gpx/gpx.man gpx] +[manpage modules/nmea/nmea.man nmea] +[key gpx] +[manpage modules/gpx/gpx.man gpx] +[key grammar] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[manpage modules/grammar_me/me_cpu.man grammar::me::cpu] +[manpage modules/grammar_me/me_cpucore.man grammar::me::cpu::core] +[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm] +[manpage modules/grammar_me/me_tcl.man grammar::me::tcl] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_me/me_vm.man grammar::me_vm] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key graph] +[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[manpage modules/struct/graph1.man struct::graph_v1] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/struct/stack.man struct::stack] +[key {graph walking}] +[manpage modules/page/page_util_flow.man page_util_flow] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[key {green threads}] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key grep] +[manpage modules/fileutil/fileutil.man fileutil] +[key GUID] +[manpage modules/uuid/uuid.man uuid] +[key hashing] +[manpage modules/md4/md4.man md4] +[manpage modules/md5/md5.man md5] +[manpage modules/md5crypt/md5crypt.man md5crypt] +[manpage modules/otp/otp.man otp] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[manpage modules/sha1/sha1.man sha1] +[manpage modules/sha1/sha256.man sha256] +[key heartbeat] +[manpage modules/debug/debug_heartbeat.man debug::heartbeat] +[key heuristic] +[manpage modules/struct/graphops.man struct::graph::op] +[key hex] +[manpage modules/base32/base32hex.man base32::hex] +[key hexadecimal] +[manpage modules/virtchannel_transform/hex.man tcl::transform::hex] +[key histogram] +[manpage modules/counter/counter.man counter] +[key hook] +[manpage modules/hook/hook.man hook] +[manpage modules/uev/uevent.man uevent] +[key horspool] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[key HTML] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[manpage modules/doctools/mpexpand.man mpexpand] +[key html] +[manpage modules/html/html.man html] +[manpage modules/htmlparse/htmlparse.man htmlparse] +[manpage modules/javascript/javascript.man javascript] +[manpage modules/ncgi/ncgi.man ncgi] +[key http] +[manpage modules/http/autoproxy.man autoproxy] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[manpage modules/uri/uri.man uri] +[manpage modules/websocket/websocket.man websocket] +[key huddle] +[manpage modules/yaml/huddle.man huddle] +[manpage modules/yaml/yaml.man yaml] +[key {human readable}] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wtext.man bench::out::text] +[key hyphenation] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/adjust.man textutil::adjust] +[key i18n] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key IBAN] +[manpage modules/valtype/iban.man valtype::iban] +[key ident] +[manpage modules/ident/ident.man ident] +[key identification] +[manpage modules/ident/ident.man ident] +[key identity] +[manpage modules/virtchannel_transform/identity.man tcl::transform::identity] +[key idle] +[manpage modules/uev/uevent_onidle.man uevent::onidle] +[key image] +[manpage modules/jpeg/jpeg.man jpeg] +[manpage modules/png/png.man png] +[manpage modules/tiff/tiff.man tiff] +[key imap] +[manpage modules/imap4/imap4.man imap4] +[key IMEI] +[manpage modules/valtype/imei.man valtype::imei] +[key import] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx] +[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc] +[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[key {in-memory channel}] +[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe] +[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan] +[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string] +[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable] +[key in-order] +[manpage modules/struct/struct_tree.man struct::tree] +[key inclusion] +[manpage modules/struct/struct_set.man struct::set] +[key {Incr Tcl}] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[key indenting] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/adjust.man textutil::adjust] +[key {independent set}] +[manpage modules/struct/graphops.man struct::graph::op] +[key index] +[manpage modules/doctools/docidx_intro.man docidx_intro] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx] +[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html] +[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json] +[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff] +[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text] +[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx] +[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json] +[key {index formatter}] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[key info] +[manpage modules/namespacex/namespacex.man namespacex] +[key {inner join}] +[manpage modules/struct/struct_list.man struct::list] +[key {input mode}] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key integer] +[manpage modules/math/roman.man math::roman] +[key integration] +[manpage modules/math/calculus.man math::calculus] +[key {inter-thread communication}] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[key {International Article Number}] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/isbn.man valtype::isbn] +[key {International Bank Account Number}] +[manpage modules/valtype/iban.man valtype::iban] +[key {International Mobile Equipment Identity}] +[manpage modules/valtype/imei.man valtype::imei] +[key {International Standard Book Number}] +[manpage modules/valtype/isbn.man valtype::isbn] +[key internationalization] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key internet] +[manpage modules/asn/asn.man asn] +[manpage modules/ftp/ftp.man ftp] +[manpage modules/ftp/ftp_geturl.man ftp::geturl] +[manpage modules/imap4/imap4.man imap4] +[manpage modules/ldap/ldap.man ldap] +[manpage modules/ldap/ldapx.man ldapx] +[manpage modules/mime/mime.man mime] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox] +[manpage modules/pop3d/pop3d_udb.man pop3d::udb] +[manpage modules/mime/smtp.man smtp] +[manpage modules/websocket/websocket.man websocket] +[key {internet address}] +[manpage modules/dns/tcllib_ip.man tcllib_ip] +[key interpolation] +[manpage modules/math/interpolate.man math::interpolate] +[key interpreter] +[manpage modules/interp/deleg_method.man deleg_method] +[manpage modules/interp/deleg_proc.man deleg_proc] +[manpage modules/interp/tcllib_interp.man interp] +[manpage modules/wip/wip.man wip] +[key intersection] +[manpage modules/struct/struct_set.man struct::set] +[key interval] +[manpage modules/math/bigfloat.man math::bigfloat] +[key ip] +[manpage modules/dns/tcllib_ip.man tcllib_ip] +[key ipc] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[key ipv4] +[manpage modules/dns/tcllib_ip.man tcllib_ip] +[key ipv6] +[manpage modules/dns/tcllib_ip.man tcllib_ip] +[key irc] +[manpage modules/irc/irc.man irc] +[manpage modules/irc/picoirc.man picoirc] +[key isA] +[manpage modules/valtype/valtype_common.man valtype::common] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/iban.man valtype::iban] +[manpage modules/valtype/imei.man valtype::imei] +[manpage modules/valtype/isbn.man valtype::isbn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key ISBN] +[manpage modules/valtype/isbn.man valtype::isbn] +[key isthmus] +[manpage modules/struct/graphops.man struct::graph::op] +[key iterator] +[manpage modules/generator/generator.man generator] +[key javascript] +[manpage modules/javascript/javascript.man javascript] +[manpage modules/json/json.man json] +[manpage modules/json/json_write.man json::write] +[key jfif] +[manpage modules/jpeg/jpeg.man jpeg] +[key join] +[manpage modules/struct/struct_list.man struct::list] +[key jpeg] +[manpage modules/exif/exif.man exif] +[manpage modules/jpeg/jpeg.man jpeg] +[key JSON] +[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json] +[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json] +[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json] +[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[key json] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/yaml/huddle.man huddle] +[manpage modules/json/json.man json] +[manpage modules/json/json_write.man json::write] +[key justification] +[manpage modules/textutil/adjust.man textutil::adjust] +[key {keyword index}] +[manpage modules/doctools/docidx_intro.man docidx_intro] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[key keywords] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[key knuth] +[manpage modules/soundex/soundex.man soundex] +[key l10n] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key lambda] +[manpage modules/lambda/lambda.man lambda] +[key LaTeX] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] +[key latex] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[key latitute] +[manpage modules/map/map_slippy.man map::slippy] +[key ldap] +[manpage modules/ldap/ldap.man ldap] +[manpage modules/ldap/ldapx.man ldapx] +[manpage modules/uri/uri.man uri] +[key {ldap client}] +[manpage modules/ldap/ldap.man ldap] +[manpage modules/ldap/ldapx.man ldapx] +[key ldif] +[manpage modules/ldap/ldapx.man ldapx] +[key {least squares}] +[manpage modules/math/linalg.man math::linearalgebra] +[key {left outer join}] +[manpage modules/struct/struct_list.man struct::list] +[key lemon] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[key {level graph}] +[manpage modules/struct/graphops.man struct::graph::op] +[key lexer] +[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse] +[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse] +[key lexing] +[manpage modules/string/token.man string::token] +[manpage modules/string/token_shell.man string::token::shell] +[key limitsize] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[key line] +[manpage modules/math/math_geometry.man math::geometry] +[key {linear algebra}] +[manpage modules/math/linalg.man math::linearalgebra] +[key {linear equations}] +[manpage modules/math/linalg.man math::linearalgebra] +[key {linear program}] +[manpage modules/math/optimize.man math::optimize] +[key lines] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key list] +[manpage modules/struct/struct_list.man struct::list] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/wip/wip.man wip] +[key listener] +[manpage modules/term/receive.man term::receive] +[manpage modules/term/term_bind.man term::receive::bind] +[key {literate programming}] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] +[key LL(k)] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key {local searching}] +[manpage modules/struct/graphops.man struct::graph::op] +[key localization] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key location] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[manpage modules/map/map_slippy.man map::slippy] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[key log] +[manpage modules/debug/debug.man debug] +[manpage modules/debug/debug_caller.man debug::caller] +[manpage modules/debug/debug_heartbeat.man debug::heartbeat] +[manpage modules/debug/debug_timestamp.man debug::timestamp] +[manpage modules/doctools/cvs.man doctools::cvs] +[manpage modules/log/log.man log] +[manpage modules/log/logger.man logger] +[key {log level}] +[manpage modules/log/log.man log] +[manpage modules/log/logger.man logger] +[key logger] +[manpage modules/log/logger.man logger] +[manpage modules/log/loggerAppender.man logger::appender] +[manpage modules/log/loggerUtils.man logger::utils] +[key {longest common subsequence}] +[manpage modules/struct/struct_list.man struct::list] +[key longitude] +[manpage modules/map/map_slippy.man map::slippy] +[key loop] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key luhn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[key luhn-5] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[key macros] +[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros] +[key mail] +[manpage modules/imap4/imap4.man imap4] +[manpage modules/mime/mime.man mime] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/mime/smtp.man smtp] +[key mailto] +[manpage modules/uri/uri.man uri] +[key {maker note}] +[manpage modules/exif/exif.man exif] +[key man_macros] +[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros] +[key manpage] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[manpage modules/doctools/mpexpand.man mpexpand] +[key map] +[manpage modules/generator/generator.man generator] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[manpage modules/map/map_slippy.man map::slippy] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[manpage modules/mapproj/mapproj.man mapproj] +[manpage modules/struct/struct_list.man struct::list] +[key markup] +[manpage modules/doctools/docidx_intro.man docidx_intro] +[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro] +[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[manpage modules/doctools/doctoc_intro.man doctoc_intro] +[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro] +[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/doctools/doctools_intro.man doctools_intro] +[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro] +[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax] +[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[manpage modules/doctools/mpexpand.man mpexpand] +[manpage apps/tcldocstrip.man tcldocstrip] +[key MasterCard] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[key matching] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[manpage modules/struct/graphops.man struct::graph::op] +[key math] +[manpage modules/math/math.man math] +[manpage modules/math/bigfloat.man math::bigfloat] +[manpage modules/math/bignum.man math::bignum] +[manpage modules/math/calculus.man math::calculus] +[manpage modules/math/qcomplex.man math::complexnumbers] +[manpage modules/math/constants.man math::constants] +[manpage modules/math/decimal.man math::decimal] +[manpage modules/math/fuzzy.man math::fuzzy] +[manpage modules/math/math_geometry.man math::geometry] +[manpage modules/math/interpolate.man math::interpolate] +[manpage modules/math/linalg.man math::linearalgebra] +[manpage modules/math/optimize.man math::optimize] +[manpage modules/math/polynomials.man math::polynomials] +[manpage modules/math/rational_funcs.man math::rationalfunctions] +[manpage modules/math/special.man math::special] +[manpage modules/simulation/annealing.man simulation::annealing] +[manpage modules/simulation/montecarlo.man simulation::montecarlo] +[manpage modules/simulation/simulation_random.man simulation::random] +[key mathematics] +[manpage modules/math/fourier.man math::fourier] +[manpage modules/math/statistics.man math::statistics] +[key matrices] +[manpage modules/math/linalg.man math::linearalgebra] +[key matrix] +[manpage modules/csv/csv.man csv] +[manpage modules/math/linalg.man math::linearalgebra] +[manpage modules/report/report.man report] +[manpage modules/struct/matrix.man struct::matrix] +[manpage modules/struct/matrix1.man struct::matrix_v1] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/struct/stack.man struct::stack] +[key {max cut}] +[manpage modules/struct/graphops.man struct::graph::op] +[key maximum] +[manpage modules/math/optimize.man math::optimize] +[key {maximum flow}] +[manpage modules/struct/graphops.man struct::graph::op] +[key md4] +[manpage modules/md4/md4.man md4] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[key md5] +[manpage modules/md5/md5.man md5] +[manpage modules/md5crypt/md5crypt.man md5crypt] +[key md5crypt] +[manpage modules/md5crypt/md5crypt.man md5crypt] +[key medicare] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[key {mega widget}] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[key membership] +[manpage modules/struct/struct_set.man struct::set] +[key menu] +[manpage modules/term/ansi_cmacros.man term::ansi::code::macros] +[manpage modules/term/imenu.man term::interact::menu] +[key merge] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[manpage modules/uev/uevent_onidle.man uevent::onidle] +[key {merge find}] +[manpage modules/struct/disjointset.man struct::disjointset] +[key merging] +[manpage modules/bench/bench.man bench] +[key message] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[manpage modules/log/log.man log] +[key {message catalog}] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key {message level}] +[manpage modules/log/log.man log] +[key {message package}] +[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat] +[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c] +[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de] +[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en] +[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr] +[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c] +[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de] +[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] +[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] +[key message-digest] +[manpage modules/md4/md4.man md4] +[manpage modules/md5/md5.man md5] +[manpage modules/md5crypt/md5crypt.man md5crypt] +[manpage modules/otp/otp.man otp] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[manpage modules/sha1/sha1.man sha1] +[manpage modules/sha1/sha256.man sha256] +[key metakit] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[key method] +[manpage modules/interp/deleg_method.man deleg_method] +[manpage modules/interp/tcllib_interp.man interp] +[key {method reference}] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key mime] +[manpage modules/fumagic/cfront.man fileutil::magic::cfront] +[manpage modules/fumagic/cgen.man fileutil::magic::cgen] +[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype] +[manpage modules/fumagic/rtcore.man fileutil::magic::rt] +[manpage modules/mime/mime.man mime] +[manpage modules/mime/smtp.man smtp] +[key {minimal spanning tree}] +[manpage modules/struct/graphops.man struct::graph::op] +[key minimum] +[manpage modules/math/optimize.man math::optimize] +[key {minimum cost flow}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {minimum degree spanning tree}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {minimum diameter spanning tree}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {mobile phone}] +[manpage modules/valtype/imei.man valtype::imei] +[key module] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[key {montecarlo simulation}] +[manpage modules/simulation/montecarlo.man simulation::montecarlo] +[key move] +[manpage modules/fileutil/multi.man fileutil::multi] +[manpage modules/fileutil/multiop.man fileutil::multi::op] +[key multi-file] +[manpage modules/fileutil/multi.man fileutil::multi] +[manpage modules/fileutil/multiop.man fileutil::multi::op] +[key multiplexer] +[manpage modules/multiplexer/multiplexer.man multiplexer] +[key multiprecision] +[manpage modules/math/bigfloat.man math::bigfloat] +[manpage modules/math/bignum.man math::bignum] +[key {my method}] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key {name service}] +[manpage modules/nns/nns_client.man nameserv] +[manpage modules/nns/nns_auto.man nameserv::auto] +[manpage modules/nns/nns_common.man nameserv::common] +[manpage modules/nns/nns_protocol.man nameserv::protocol] +[manpage modules/nns/nns_server.man nameserv::server] +[manpage apps/nns.man nns] +[manpage modules/nns/nns_intro.man nns_intro] +[manpage apps/nnsd.man nnsd] +[manpage apps/nnslog.man nnslog] +[key {namespace unknown}] +[manpage modules/namespacex/namespacex.man namespacex] +[key {namespace utilities}] +[manpage modules/namespacex/namespacex.man namespacex] +[key narrative] +[manpage modules/debug/debug.man debug] +[manpage modules/debug/debug_caller.man debug::caller] +[manpage modules/debug/debug_heartbeat.man debug::heartbeat] +[manpage modules/debug/debug_timestamp.man debug::timestamp] +[key {National Provider Identifier}] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[key neighbour] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key net] +[manpage modules/ftp/ftp.man ftp] +[manpage modules/ftp/ftp_geturl.man ftp::geturl] +[manpage modules/imap4/imap4.man imap4] +[manpage modules/mime/mime.man mime] +[manpage modules/mime/smtp.man smtp] +[manpage modules/websocket/websocket.man websocket] +[key nettool] +[manpage modules/nettool/nettool.man nettool] +[key network] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox] +[manpage modules/pop3d/pop3d_udb.man pop3d::udb] +[key news] +[manpage modules/nntp/nntp.man nntp] +[manpage modules/uri/uri.man uri] +[key {next permutation}] +[manpage modules/struct/struct_list.man struct::list] +[key nmea] +[manpage modules/nmea/nmea.man nmea] +[key nntp] +[manpage modules/nntp/nntp.man nntp] +[key nntpclient] +[manpage modules/nntp/nntp.man nntp] +[key no-op] +[manpage modules/control/control.man control] +[key node] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[manpage modules/struct/struct_tree.man struct::tree] +[key nominatim] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[key normalization] +[manpage modules/bench/bench.man bench] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[manpage modules/stringprep/unicode.man unicode] +[key NPI] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[key nroff] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff] +[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[manpage modules/doctools/mpexpand.man mpexpand] +[key NTLM] +[manpage modules/sasl/ntlm.man SASL::NTLM] +[key NTP] +[manpage modules/ntp/ntp_time.man ntp_time] +[key null] +[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[key {number theory}] +[manpage modules/math/numtheory.man math::numtheory] +[key oauth] +[manpage modules/oauth/oauth.man oauth] +[key object] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[manpage modules/stooop/stooop.man stooop] +[manpage modules/stooop/switched.man switched] +[key {object oriented}] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[manpage modules/stooop/stooop.man stooop] +[manpage modules/stooop/switched.man switched] +[key observer] +[manpage modules/hook/hook.man hook] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[key odie] +[manpage modules/cron/cron.man cron] +[manpage modules/nettool/nettool.man nettool] +[manpage modules/processman/processman.man processman] +[key on-idle] +[manpage modules/uev/uevent_onidle.man uevent::onidle] +[key {one time pad}] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[key optimization] +[manpage modules/math/optimize.man math::optimize] +[manpage modules/simulation/annealing.man simulation::annealing] +[key {ordered list}] +[manpage modules/struct/prioqueue.man struct::prioqueue] +[key otp] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[key {outer join}] +[manpage modules/struct/struct_list.man struct::list] +[key package] +[manpage modules/csv/csv.man csv] +[key {package indexing}] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[key page] +[manpage modules/page/page_intro.man page_intro] +[manpage modules/page/page_pluginmgr.man page_pluginmgr] +[manpage modules/page/page_util_flow.man page_util_flow] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[manpage modules/page/page_util_peg.man page_util_peg] +[manpage modules/page/page_util_quote.man page_util_quote] +[key pager] +[manpage modules/term/ipager.man term::interact::pager] +[key paragraph] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/adjust.man textutil::adjust] +[key PARAM] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[key {parameter entry form}] +[manpage modules/tepam/tepam_introduction.man tepam] +[manpage modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox] +[key parser] +[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse] +[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse] +[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[manpage modules/amazon-s3/xsxp.man xsxp] +[key {parser generator}] +[manpage apps/page.man page] +[manpage modules/page/page_intro.man page_intro] +[manpage modules/page/page_pluginmgr.man page_pluginmgr] +[manpage modules/page/page_util_flow.man page_util_flow] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[manpage modules/page/page_util_peg.man page_util_peg] +[manpage modules/page/page_util_quote.man page_util_quote] +[key parsing] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bibtex/bibtex.man bibtex] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[manpage modules/grammar_me/me_cpu.man grammar::me::cpu] +[manpage modules/grammar_me/me_cpucore.man grammar::me::cpu::core] +[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm] +[manpage modules/grammar_me/me_tcl.man grammar::me::tcl] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_me/me_vm.man grammar::me_vm] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage modules/htmlparse/htmlparse.man htmlparse] +[manpage modules/yaml/huddle.man huddle] +[manpage modules/string/token_shell.man string::token::shell] +[manpage modules/yaml/yaml.man yaml] +[key {parsing expression}] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key {parsing expression grammar}] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage modules/page/page_util_peg.man page_util_peg] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key {partial application}] +[manpage modules/lambda/lambda.man lambda] +[key partition] +[manpage modules/struct/disjointset.man struct::disjointset] +[key {partitioned set}] +[manpage modules/struct/disjointset.man struct::disjointset] +[key passive] +[manpage modules/transfer/connect.man transfer::connect] +[key password] +[manpage modules/otp/otp.man otp] +[key patch] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[key patching] +[manpage modules/rcs/rcs.man rcs] +[key PEG] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[manpage modules/page/page_util_peg.man page_util_peg] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key performance] +[manpage modules/bench/bench.man bench] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wcsv.man bench::out::csv] +[manpage modules/bench/bench_wtext.man bench::out::text] +[manpage modules/bench/bench_intro.man bench_intro] +[manpage modules/bench/bench_lang_intro.man bench_lang_intro] +[manpage modules/bench/bench_lang_spec.man bench_lang_spec] +[manpage modules/profiler/profiler.man profiler] +[key permutation] +[manpage modules/struct/struct_list.man struct::list] +[key persistence] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[key phone] +[manpage modules/valtype/imei.man valtype::imei] +[key pi] +[manpage modules/math/constants.man math::constants] +[key {plain text}] +[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text] +[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text] +[key {plane geometry}] +[manpage modules/math/math_geometry.man math::geometry] +[key plugin] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[key {plugin management}] +[manpage modules/pluginmgr/pluginmgr.man pluginmgr] +[key {plugin search}] +[manpage modules/pluginmgr/pluginmgr.man pluginmgr] +[key png] +[manpage modules/png/png.man png] +[key point] +[manpage modules/math/math_geometry.man math::geometry] +[key {polynomial functions}] +[manpage modules/math/polynomials.man math::polynomials] +[key pool] +[manpage modules/struct/pool.man struct::pool] +[manpage modules/struct/queue.man struct::queue] +[key pop] +[manpage modules/pop3/pop3.man pop3] +[key pop3] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox] +[manpage modules/pop3d/pop3d_udb.man pop3d::udb] +[key post-order] +[manpage modules/struct/struct_tree.man struct::tree] +[key pre-order] +[manpage modules/struct/struct_tree.man struct::tree] +[key prefix] +[manpage modules/textutil/textutil_string.man textutil::string] +[manpage modules/textutil/trim.man textutil::trim] +[key prime] +[manpage modules/math/numtheory.man math::numtheory] +[key prioqueue] +[manpage modules/struct/prioqueue.man struct::prioqueue] +[manpage modules/struct/queue.man struct::queue] +[key {priority queue}] +[manpage modules/struct/prioqueue.man struct::prioqueue] +[key proc] +[manpage modules/lambda/lambda.man lambda] +[key procedure] +[manpage modules/interp/deleg_proc.man deleg_proc] +[manpage modules/tepam/tepam_introduction.man tepam] +[manpage modules/tepam/tepam_procedure.man tepam::procedure] +[key {procedure documentation}] +[manpage modules/tepam/tepam_doc_gen.man tepam::doc_gen] +[key processman] +[manpage modules/processman/processman.man processman] +[key producer] +[manpage modules/hook/hook.man hook] +[key profile] +[manpage modules/profiler/profiler.man profiler] +[key projection] +[manpage modules/mapproj/mapproj.man mapproj] +[key prospero] +[manpage modules/uri/uri.man uri] +[key protocol] +[manpage modules/asn/asn.man asn] +[manpage modules/ldap/ldap.man ldap] +[manpage modules/ldap/ldapx.man ldapx] +[manpage modules/nns/nns_protocol.man nameserv::protocol] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox] +[manpage modules/pop3d/pop3d_udb.man pop3d::udb] +[key proxy] +[manpage modules/http/autoproxy.man autoproxy] +[key {public key cipher}] +[manpage modules/pki/pki.man pki] +[key publisher] +[manpage modules/hook/hook.man hook] +[key {push down automaton}] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key queue] +[manpage modules/csv/csv.man csv] +[manpage modules/htmlparse/htmlparse.man htmlparse] +[manpage modules/struct/stack.man struct::stack] +[manpage modules/transfer/tqueue.man transfer::copy::queue] +[key quoting] +[manpage modules/page/page_util_quote.man page_util_quote] +[key radians] +[manpage modules/math/constants.man math::constants] +[manpage modules/units/units.man units] +[key radiobutton] +[manpage modules/html/html.man html] +[key radius] +[manpage modules/struct/graphops.man struct::graph::op] +[key random] +[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[key {random numbers}] +[manpage modules/simulation/simulation_random.man simulation::random] +[key {rational functions}] +[manpage modules/math/rational_funcs.man math::rationalfunctions] +[key raw] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key rc4] +[manpage modules/rc4/rc4.man rc4] +[key RCS] +[manpage modules/rcs/rcs.man rcs] +[key {RCS patch}] +[manpage modules/rcs/rcs.man rcs] +[key read] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key reading] +[manpage modules/bench/bench_read.man bench::in] +[key receiver] +[manpage modules/term/receive.man term::receive] +[manpage modules/term/term_bind.man term::receive::bind] +[manpage modules/transfer/receiver.man transfer::receiver] +[key reconnect] +[manpage modules/nns/nns_auto.man nameserv::auto] +[key record] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/struct/record.man struct::record] +[key {recursive descent}] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key reduce] +[manpage modules/generator/generator.man generator] +[manpage modules/struct/struct_list.man struct::list] +[key reference] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[key {reflected channel}] +[manpage modules/virtchannel_base/cat.man tcl::chan::cat] +[manpage modules/virtchannel_core/core.man tcl::chan::core] +[manpage modules/virtchannel_core/events.man tcl::chan::events] +[manpage modules/virtchannel_base/facade.man tcl::chan::facade] +[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe] +[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan] +[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random] +[manpage modules/virtchannel_base/std.man tcl::chan::std] +[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string] +[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow] +[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable] +[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[manpage modules/virtchannel_core/transformcore.man tcl::transform::core] +[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[manpage modules/virtchannel_transform/hex.man tcl::transform::hex] +[manpage modules/virtchannel_transform/identity.man tcl::transform::identity] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key regex] +[manpage modules/string/token.man string::token] +[key {regular expression}] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/textutil_split.man textutil::split] +[manpage modules/textutil/trim.man textutil::trim] +[key {regular grammar}] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[key {regular languages}] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[key {remote communication}] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[key {remote execution}] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[key remove] +[manpage modules/fileutil/multi.man fileutil::multi] +[manpage modules/fileutil/multiop.man fileutil::multi::op] +[key repeating] +[manpage modules/struct/struct_list.man struct::list] +[key repetition] +[manpage modules/struct/struct_list.man struct::list] +[manpage modules/textutil/repeat.man textutil::repeat] +[key report] +[manpage modules/report/report.man report] +[key reshuffle] +[manpage modules/struct/struct_list.man struct::list] +[key {residual graph}] +[manpage modules/struct/graphops.man struct::graph::op] +[key resolver] +[manpage modules/dns/tcllib_dns.man dns] +[key {resource management}] +[manpage modules/try/tcllib_try.man try] +[key restore] +[manpage modules/nns/nns_auto.man nameserv::auto] +[key return] +[manpage modules/try/tcllib_throw.man try] +[key reverse] +[manpage modules/struct/struct_list.man struct::list] +[key {rfc 821}] +[manpage modules/mime/mime.man mime] +[manpage modules/mime/smtp.man smtp] +[manpage modules/smtpd/smtpd.man smtpd] +[key {rfc 822}] +[manpage modules/mime/mime.man mime] +[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox] +[manpage modules/mime/smtp.man smtp] +[key {rfc 868}] +[manpage modules/ntp/ntp_time.man ntp_time] +[key {rfc 959}] +[manpage modules/ftp/ftp.man ftp] +[manpage modules/ftp/ftp_geturl.man ftp::geturl] +[manpage modules/ftpd/ftpd.man ftpd] +[key {rfc 977}] +[manpage modules/nntp/nntp.man nntp] +[key {rfc 1034}] +[manpage modules/dns/tcllib_dns.man dns] +[key {rfc 1035}] +[manpage modules/dns/tcllib_dns.man dns] +[key {rfc 1036}] +[manpage modules/nntp/nntp.man nntp] +[key {rfc 1320}] +[manpage modules/md4/md4.man md4] +[manpage modules/md5/md5.man md5] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[key {rfc 1321}] +[manpage modules/md4/md4.man md4] +[manpage modules/md5/md5.man md5] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[key {rfc 1413}] +[manpage modules/ident/ident.man ident] +[key {rfc 1886}] +[manpage modules/dns/tcllib_dns.man dns] +[key {rfc 1939}] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/pop3d/pop3d.man pop3d] +[key {rfc 2030}] +[manpage modules/ntp/ntp_time.man ntp_time] +[key {rfc 2045}] +[manpage modules/mime/mime.man mime] +[key {rfc 2046}] +[manpage modules/mime/mime.man mime] +[key {rfc 2049}] +[manpage modules/mime/mime.man mime] +[key {rfc 2104}] +[manpage modules/md4/md4.man md4] +[manpage modules/md5/md5.man md5] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[manpage modules/sha1/sha1.man sha1] +[manpage modules/sha1/sha256.man sha256] +[key {rfc 2141}] +[manpage modules/uri/urn-scheme.man uri_urn] +[key {rfc 2251}] +[manpage modules/ldap/ldap.man ldap] +[manpage modules/ldap/ldapx.man ldapx] +[key {rfc 2255}] +[manpage modules/uri/uri.man uri] +[key {rfc 2289}] +[manpage modules/otp/otp.man otp] +[key {rfc 2396}] +[manpage modules/uri/uri.man uri] +[key {rfc 2554}] +[manpage modules/mime/smtp.man smtp] +[key {RFC 2718}] +[manpage modules/oauth/oauth.man oauth] +[key {rfc 2821}] +[manpage modules/mime/smtp.man smtp] +[manpage modules/smtpd/smtpd.man smtpd] +[key {rfc 2849}] +[manpage modules/ldap/ldapx.man ldapx] +[key {rfc 3207}] +[manpage modules/mime/smtp.man smtp] +[key {rfc 3513}] +[manpage modules/dns/tcllib_ip.man tcllib_ip] +[key {rfc 4511}] +[manpage modules/ldap/ldap.man ldap] +[key {RFC 5849}] +[manpage modules/oauth/oauth.man oauth] +[key {rfc 6455}] +[manpage modules/websocket/websocket.man websocket] +[key rfc3501] +[manpage modules/imap4/imap4.man imap4] +[key rfc3548] +[manpage modules/base32/base32.man base32] +[manpage modules/base32/base32hex.man base32::hex] +[key {right outer join}] +[manpage modules/struct/struct_list.man struct::list] +[key RIPEMD] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[key {roman numeral}] +[manpage modules/math/roman.man math::roman] +[key roots] +[manpage modules/math/calculus.man math::calculus] +[key rot] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[key rot13] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[key rounding] +[manpage modules/math/fuzzy.man math::fuzzy] +[key rows] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[key rpc] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[key rsa] +[manpage modules/pki/pki.man pki] +[key running] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[key s3] +[manpage modules/amazon-s3/S3.man S3] +[key SASL] +[manpage modules/sasl/sasl.man SASL] +[manpage modules/sasl/ntlm.man SASL::NTLM] +[manpage modules/sasl/scram.man SASL::SCRAM] +[manpage modules/sasl/gtoken.man SASL::XGoogleToken] +[key scanl] +[manpage modules/generator/generator.man generator] +[key SCCS] +[manpage modules/rcs/rcs.man rcs] +[key SCRAM] +[manpage modules/sasl/scram.man SASL::SCRAM] +[key secure] +[manpage modules/comm/comm.man comm] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/transfer/connect.man transfer::connect] +[manpage modules/transfer/receiver.man transfer::receiver] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key security] +[manpage modules/aes/aes.man aes] +[manpage modules/blowfish/blowfish.man blowfish] +[manpage modules/crc/cksum.man cksum] +[manpage modules/crc/crc16.man crc16] +[manpage modules/crc/crc32.man crc32] +[manpage modules/des/des.man des] +[manpage modules/md4/md4.man md4] +[manpage modules/md5/md5.man md5] +[manpage modules/md5crypt/md5crypt.man md5crypt] +[manpage modules/otp/otp.man otp] +[manpage modules/pki/pki.man pki] +[manpage modules/rc4/rc4.man rc4] +[manpage modules/ripemd/ripemd128.man ripemd128] +[manpage modules/ripemd/ripemd160.man ripemd160] +[manpage modules/sha1/sha1.man sha1] +[manpage modules/sha1/sha256.man sha256] +[manpage modules/crc/sum.man sum] +[manpage modules/des/tcldes.man tcldes] +[manpage modules/des/tcldesjr.man tcldes] +[key seed] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[key selectionbox] +[manpage modules/javascript/javascript.man javascript] +[key {semantic markup}] +[manpage modules/doctools/docidx_intro.man docidx_intro] +[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref] +[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq] +[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro] +[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax] +[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref] +[manpage modules/doctools/doctoc_intro.man doctoc_intro] +[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref] +[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq] +[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro] +[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools/doctools_intro.man doctools_intro] +[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref] +[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq] +[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro] +[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax] +[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref] +[key send] +[manpage modules/comm/comm.man comm] +[key serialization] +[manpage modules/bee/bee.man bee] +[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx] +[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html] +[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json] +[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff] +[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text] +[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki] +[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure] +[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc] +[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html] +[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json] +[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff] +[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text] +[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki] +[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/struct_tree.man struct::tree] +[key server] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[manpage modules/nns/nns_common.man nameserv::common] +[manpage modules/nns/nns_server.man nameserv::server] +[manpage modules/nns/nns_intro.man nns_intro] +[manpage apps/nnsd.man nnsd] +[key service] +[manpage modules/log/logger.man logger] +[key services] +[manpage modules/ftpd/ftpd.man ftpd] +[manpage modules/smtpd/smtpd.man smtpd] +[key set] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/struct/struct_set.man struct::set] +[key sha1] +[manpage modules/sha1/sha1.man sha1] +[key sha256] +[manpage modules/sha1/sha256.man sha256] +[key shell] +[manpage modules/string/token_shell.man string::token::shell] +[key {shortest path}] +[manpage modules/struct/graphops.man struct::graph::op] +[key shuffle] +[manpage modules/struct/struct_list.man struct::list] +[key {simulated annealing}] +[manpage modules/simulation/annealing.man simulation::annealing] +[key simulation] +[manpage modules/simulation/simulation_random.man simulation::random] +[key singleton] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[key {size limit}] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[key skiplist] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/struct/skiplist.man struct::skiplist] +[key slippy] +[manpage modules/map/map_slippy.man map::slippy] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[key smtp] +[manpage modules/mime/mime.man mime] +[manpage modules/mime/smtp.man smtp] +[manpage modules/smtpd/smtpd.man smtpd] +[key smtpd] +[manpage modules/smtpd/smtpd.man smtpd] +[key Snit] +[manpage modules/snit/snit.man snit] +[key snit] +[manpage modules/interp/deleg_method.man deleg_method] +[manpage modules/interp/tcllib_interp.man interp] +[key SNTP] +[manpage modules/ntp/ntp_time.man ntp_time] +[key socket] +[manpage modules/comm/comm.man comm] +[manpage modules/comm/comm_wire.man comm_wire] +[manpage modules/smtpd/smtpd.man smtpd] +[key soundex] +[manpage modules/soundex/soundex.man soundex] +[key source] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] +[key spacing] +[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer] +[key {spatial interpolation}] +[manpage modules/math/interpolate.man math::interpolate] +[key {special functions}] +[manpage modules/math/special.man math::special] +[key specification] +[manpage modules/bench/bench_lang_spec.man bench_lang_spec] +[key speed] +[manpage modules/profiler/profiler.man profiler] +[key split] +[manpage modules/textutil/textutil_split.man textutil::split] +[key {squared graph}] +[manpage modules/struct/graphops.man struct::graph::op] +[key ssl] +[manpage modules/comm/comm.man comm] +[manpage modules/imap4/imap4.man imap4] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/transfer/connect.man transfer::connect] +[manpage modules/transfer/receiver.man transfer::receiver] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key stack] +[manpage modules/struct/queue.man struct::queue] +[key {standard io}] +[manpage modules/virtchannel_base/std.man tcl::chan::std] +[key state] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key {state (de)serialization}] +[manpage modules/namespacex/namespacex.man namespacex] +[key {statistical distribution}] +[manpage modules/simulation/simulation_random.man simulation::random] +[key statistics] +[manpage modules/counter/counter.man counter] +[manpage modules/math/math.man math] +[manpage modules/math/statistics.man math::statistics] +[key stdin] +[manpage modules/virtchannel_base/std.man tcl::chan::std] +[key stdout] +[manpage modules/virtchannel_base/std.man tcl::chan::std] +[key {stochastic modelling}] +[manpage modules/simulation/montecarlo.man simulation::montecarlo] +[key {stream cipher}] +[manpage modules/rc4/rc4.man rc4] +[key {stream copy}] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[key string] +[manpage modules/string/token.man string::token] +[manpage modules/string/token_shell.man string::token::shell] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/adjust.man textutil::adjust] +[manpage modules/textutil/expander.man textutil::expander] +[manpage modules/textutil/repeat.man textutil::repeat] +[manpage modules/textutil/textutil_split.man textutil::split] +[manpage modules/textutil/textutil_string.man textutil::string] +[manpage modules/textutil/tabify.man textutil::tabify] +[manpage modules/textutil/trim.man textutil::trim] +[key stringprep] +[manpage modules/stringprep/stringprep.man stringprep] +[manpage modules/stringprep/stringprep_data.man stringprep::data] +[manpage modules/stringprep/unicode_data.man unicode::data] +[key {strongly connected component}] +[manpage modules/struct/graphops.man struct::graph::op] +[key struct] +[manpage modules/struct/pool.man struct::pool] +[manpage modules/struct/record.man struct::record] +[key structure] +[manpage modules/control/control.man control] +[key {structured queries}] +[manpage modules/treeql/treeql.man treeql] +[key style] +[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults] +[key subcommand] +[manpage modules/tepam/tepam_introduction.man tepam] +[manpage modules/tepam/tepam_procedure.man tepam::procedure] +[key subgraph] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key subject] +[manpage modules/hook/hook.man hook] +[key submitbutton] +[manpage modules/javascript/javascript.man javascript] +[key subscriber] +[manpage modules/hook/hook.man hook] +[key subsequence] +[manpage modules/struct/struct_list.man struct::list] +[key subst] +[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse] +[key sum] +[manpage modules/crc/sum.man sum] +[key swapping] +[manpage modules/struct/struct_list.man struct::list] +[key {symmetric difference}] +[manpage modules/struct/struct_set.man struct::set] +[key synchronous] +[manpage modules/cache/async.man cache::async] +[key {syntax tree}] +[manpage modules/grammar_me/me_util.man grammar::me::util] +[key table] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/html/html.man html] +[manpage modules/report/report.man report] +[key {table of contents}] +[manpage modules/doctools/doctoc_intro.man doctoc_intro] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc] +[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html] +[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json] +[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff] +[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text] +[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc] +[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json] +[key tabstops] +[manpage modules/textutil/tabify.man textutil::tabify] +[key tallying] +[manpage modules/counter/counter.man counter] +[key {tape archive}] +[manpage modules/tar/tar.man tar] +[key tar] +[manpage modules/tar/tar.man tar] +[key tcl] +[manpage modules/math/bigfloat.man math::bigfloat] +[manpage modules/math/bignum.man math::bignum] +[manpage modules/math/decimal.man math::decimal] +[key {Tcl module}] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[key {Tcl syntax}] +[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse] +[key {tcler's wiki}] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[key tcllib] +[manpage modules/csv/csv.man csv] +[key TclOO] +[manpage modules/ooutil/ooutil.man oo::util] +[manpage modules/tool/meta.man oo::util] +[manpage modules/tool/tool.man tool] +[manpage modules/tool/tool_dict_ensemble.man tool::dict_ensemble] +[key TCLPARAM] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[key TDPL] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key {temp file}] +[manpage modules/fileutil/fileutil.man fileutil] +[key {template processing}] +[manpage modules/textutil/expander.man textutil::expander] +[key terminal] +[manpage modules/term/term.man term] +[manpage modules/term/ansi_code.man term::ansi::code] +[manpage modules/term/ansi_cattr.man term::ansi::code::attr] +[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl] +[manpage modules/term/ansi_cmacros.man term::ansi::code::macros] +[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix] +[manpage modules/term/ansi_send.man term::ansi::send] +[manpage modules/term/imenu.man term::interact::menu] +[manpage modules/term/ipager.man term::interact::pager] +[manpage modules/term/receive.man term::receive] +[manpage modules/term/term_bind.man term::receive::bind] +[manpage modules/term/term_send.man term::send] +[key test] +[manpage modules/fileutil/fileutil.man fileutil] +[key Testing] +[manpage modules/valtype/valtype_common.man valtype::common] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/iban.man valtype::iban] +[manpage modules/valtype/imei.man valtype::imei] +[manpage modules/valtype/isbn.man valtype::isbn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key testing] +[manpage modules/bench/bench.man bench] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wcsv.man bench::out::csv] +[manpage modules/bench/bench_wtext.man bench::out::text] +[manpage modules/bench/bench_intro.man bench_intro] +[manpage modules/bench/bench_lang_intro.man bench_lang_intro] +[manpage modules/bench/bench_lang_spec.man bench_lang_spec] +[key TeX] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/adjust.man textutil::adjust] +[key text] +[manpage modules/bench/bench_read.man bench::in] +[manpage modules/bench/bench_wtext.man bench::out::text] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[key {text comparison}] +[manpage modules/soundex/soundex.man soundex] +[key {text conversion}] +[manpage modules/rcs/rcs.man rcs] +[key {text differences}] +[manpage modules/rcs/rcs.man rcs] +[key {text display}] +[manpage modules/term/imenu.man term::interact::menu] +[manpage modules/term/ipager.man term::interact::pager] +[key {text expansion}] +[manpage modules/textutil/expander.man textutil::expander] +[key {text likeness}] +[manpage modules/soundex/soundex.man soundex] +[key {text processing}] +[manpage modules/bibtex/bibtex.man bibtex] +[manpage modules/yaml/huddle.man huddle] +[manpage apps/page.man page] +[manpage modules/page/page_intro.man page_intro] +[manpage modules/page/page_pluginmgr.man page_pluginmgr] +[manpage modules/page/page_util_flow.man page_util_flow] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[manpage modules/page/page_util_peg.man page_util_peg] +[manpage modules/page/page_util_quote.man page_util_quote] +[manpage modules/yaml/yaml.man yaml] +[key {text widget}] +[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow] +[key threads] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key throw] +[manpage modules/try/tcllib_throw.man try] +[key thumbnail] +[manpage modules/jpeg/jpeg.man jpeg] +[key tie] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[key tif] +[manpage modules/tiff/tiff.man tiff] +[key tiff] +[manpage modules/exif/exif.man exif] +[manpage modules/tiff/tiff.man tiff] +[key tile] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[key time] +[manpage modules/ntp/ntp_time.man ntp_time] +[key timestamp] +[manpage modules/png/png.man png] +[key timestamps] +[manpage modules/debug/debug_timestamp.man debug::timestamp] +[key {tip 219}] +[manpage modules/virtchannel_base/cat.man tcl::chan::cat] +[manpage modules/virtchannel_core/core.man tcl::chan::core] +[manpage modules/virtchannel_core/events.man tcl::chan::events] +[manpage modules/virtchannel_base/facade.man tcl::chan::facade] +[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe] +[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan] +[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random] +[manpage modules/virtchannel_base/std.man tcl::chan::std] +[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string] +[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow] +[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable] +[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[manpage modules/virtchannel_core/transformcore.man tcl::transform::core] +[key {tip 230}] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[manpage modules/virtchannel_transform/hex.man tcl::transform::hex] +[manpage modules/virtchannel_transform/identity.man tcl::transform::identity] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key {tip 234}] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key {tip 317}] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[key Tk] +[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow] +[key tls] +[manpage modules/comm/comm.man comm] +[manpage modules/imap4/imap4.man imap4] +[manpage modules/pop3/pop3.man pop3] +[manpage modules/pop3d/pop3d.man pop3d] +[manpage modules/mime/smtp.man smtp] +[manpage modules/transfer/connect.man transfer::connect] +[manpage modules/transfer/receiver.man transfer::receiver] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key TMML] +[manpage modules/doctools/doctools.man doctools] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/dtplite/pkg_dtplite.man dtplite] +[manpage apps/dtplite.man dtplite] +[manpage modules/doctools/mpexpand.man mpexpand] +[key toc] +[manpage modules/doctools/doctoc_intro.man doctoc_intro] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc] +[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html] +[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json] +[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff] +[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text] +[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki] +[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc] +[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json] +[key {toc formatter}] +[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref] +[key tokenization] +[manpage modules/string/token.man string::token] +[manpage modules/string/token_shell.man string::token::shell] +[key TOOL] +[manpage modules/tool/tool.man tool] +[manpage modules/tool/tool_dict_ensemble.man tool::dict_ensemble] +[key {top-down parsing languages}] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key torrent] +[manpage modules/bee/bee.man bee] +[key touch] +[manpage modules/fileutil/fileutil.man fileutil] +[key TPDL] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[key trace] +[manpage modules/debug/debug.man debug] +[manpage modules/debug/debug_caller.man debug::caller] +[manpage modules/debug/debug_heartbeat.man debug::heartbeat] +[manpage modules/debug/debug_timestamp.man debug::timestamp] +[key transducer] +[manpage modules/grammar_aycock/aycock.man grammar::aycock] +[manpage modules/grammar_fa/fa.man grammar::fa] +[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor] +[manpage modules/grammar_fa/dexec.man grammar::fa::dexec] +[manpage modules/grammar_fa/faop.man grammar::fa::op] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_peg/peg.man grammar::peg] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage apps/pt.man pt] +[manpage modules/pt/pt_astree.man pt::ast] +[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl] +[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea] +[manpage modules/pt/pt_json_language.man pt::json_language] +[manpage modules/pt/pt_param.man pt::param] +[manpage modules/pt/pt_pexpression.man pt::pe] +[manpage modules/pt/pt_pexpr_op.man pt::pe::op] +[manpage modules/pt/pt_pegrammar.man pt::peg] +[manpage modules/pt/pt_peg_container.man pt::peg::container] +[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg] +[manpage modules/pt/pt_peg_export.man pt::peg::export] +[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container] +[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json] +[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg] +[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container] +[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json] +[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg] +[manpage modules/pt/pt_peg_import.man pt::peg::import] +[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container] +[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json] +[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg] +[manpage modules/pt/pt_peg_interp.man pt::peg::interp] +[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container] +[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam] +[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json] +[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param] +[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg] +[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam] +[manpage modules/pt/pt_peg_language.man pt::peg_language] +[manpage modules/pt/pt_peg_introduction.man pt::pegrammar] +[manpage modules/pt/pt_pgen.man pt::pgen] +[manpage modules/pt/pt_rdengine.man pt::rde] +[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit] +[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo] +[manpage modules/pt/pt_util.man pt::util] +[manpage modules/pt/pt_to_api.man pt_export_api] +[manpage modules/pt/pt_from_api.man pt_import_api] +[manpage modules/pt/pt_introduction.man pt_introduction] +[manpage modules/pt/pt_parse_peg.man pt_parse_peg] +[manpage modules/pt/pt_parser_api.man pt_parser_api] +[manpage modules/pt/pt_peg_op.man pt_peg_op] +[key transfer] +[manpage modules/transfer/connect.man transfer::connect] +[manpage modules/transfer/copyops.man transfer::copy] +[manpage modules/transfer/tqueue.man transfer::copy::queue] +[manpage modules/transfer/ddest.man transfer::data::destination] +[manpage modules/transfer/dsource.man transfer::data::source] +[manpage modules/transfer/receiver.man transfer::receiver] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key transformation] +[manpage modules/page/page_util_peg.man page_util_peg] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[manpage modules/virtchannel_transform/hex.man tcl::transform::hex] +[manpage modules/virtchannel_transform/identity.man tcl::transform::identity] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key transmitter] +[manpage modules/transfer/transmitter.man transfer::transmitter] +[key {travelling salesman}] +[manpage modules/struct/graphops.man struct::graph::op] +[key traversal] +[manpage modules/fileutil/traverse.man fileutil_traverse] +[key tree] +[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm] +[manpage modules/grammar_me/me_util.man grammar::me::util] +[manpage modules/htmlparse/htmlparse.man htmlparse] +[manpage modules/struct/queue.man struct::queue] +[manpage modules/struct/stack.man struct::stack] +[manpage modules/struct/struct_tree.man struct::tree] +[manpage modules/struct/struct_tree1.man struct::tree_v1] +[manpage modules/treeql/treeql.man treeql] +[key {tree query language}] +[manpage modules/treeql/treeql.man treeql] +[key {tree walking}] +[manpage modules/page/page_util_flow.man page_util_flow] +[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon] +[manpage modules/page/page_util_norm_peg.man page_util_norm_peg] +[key TreeQL] +[manpage modules/treeql/treeql.man treeql] +[key trimming] +[manpage modules/textutil/textutil.man textutil] +[manpage modules/textutil/trim.man textutil::trim] +[key twitter] +[manpage modules/oauth/oauth.man oauth] +[key type] +[manpage modules/fileutil/fileutil.man fileutil] +[manpage modules/fumagic/cfront.man fileutil::magic::cfront] +[manpage modules/fumagic/cgen.man fileutil::magic::cgen] +[manpage modules/fumagic/filetypes.man fileutil::magic::filetype] +[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype] +[manpage modules/fumagic/rtcore.man fileutil::magic::rt] +[manpage modules/snit/snit.man snit] +[key {Type checking}] +[manpage modules/valtype/valtype_common.man valtype::common] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/iban.man valtype::iban] +[manpage modules/valtype/imei.man valtype::imei] +[manpage modules/valtype/isbn.man valtype::isbn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key uevent] +[manpage modules/hook/hook.man hook] +[key unbind] +[manpage modules/uev/uevent.man uevent] +[key uncapitalize] +[manpage modules/textutil/textutil_string.man textutil::string] +[key undenting] +[manpage modules/textutil/adjust.man textutil::adjust] +[key unicode] +[manpage modules/stringprep/stringprep.man stringprep] +[manpage modules/stringprep/stringprep_data.man stringprep::data] +[manpage modules/stringprep/unicode.man unicode] +[manpage modules/stringprep/unicode_data.man unicode::data] +[key union] +[manpage modules/struct/disjointset.man struct::disjointset] +[manpage modules/struct/struct_set.man struct::set] +[key unit] +[manpage modules/units/units.man units] +[key {unknown hooking}] +[manpage modules/namespacex/namespacex.man namespacex] +[key untie] +[manpage modules/tie/tie.man tie] +[manpage modules/tie/tie_std.man tie] +[key update] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[key uri] +[manpage modules/uri/uri.man uri] +[manpage modules/uri/urn-scheme.man uri_urn] +[key url] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_import.man doctools::idx::import] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_import.man doctools::toc::import] +[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[manpage modules/uri/uri.man uri] +[manpage modules/uri/urn-scheme.man uri_urn] +[key urn] +[manpage modules/uri/urn-scheme.man uri_urn] +[key US-NPI] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[key utilities] +[manpage modules/namespacex/namespacex.man namespacex] +[key uuencode] +[manpage modules/base64/uuencode.man uuencode] +[key UUID] +[manpage modules/uuid/uuid.man uuid] +[key Validation] +[manpage modules/valtype/valtype_common.man valtype::common] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/iban.man valtype::iban] +[manpage modules/valtype/imei.man valtype::imei] +[manpage modules/valtype/isbn.man valtype::isbn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key {Value checking}] +[manpage modules/valtype/valtype_common.man valtype::common] +[manpage modules/valtype/cc_amex.man valtype::creditcard::amex] +[manpage modules/valtype/cc_discover.man valtype::creditcard::discover] +[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[manpage modules/valtype/ean13.man valtype::gs1::ean13] +[manpage modules/valtype/iban.man valtype::iban] +[manpage modules/valtype/imei.man valtype::imei] +[manpage modules/valtype/isbn.man valtype::isbn] +[manpage modules/valtype/luhn.man valtype::luhn] +[manpage modules/valtype/luhn5.man valtype::luhn5] +[manpage modules/valtype/usnpi.man valtype::usnpi] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key vectors] +[manpage modules/math/linalg.man math::linearalgebra] +[key verhoeff] +[manpage modules/valtype/verhoeff.man valtype::verhoeff] +[key vertex] +[manpage modules/struct/graph.man struct::graph] +[manpage modules/struct/graphops.man struct::graph::op] +[key {vertex cover}] +[manpage modules/struct/graphops.man struct::graph::op] +[key {virtual channel}] +[manpage modules/virtchannel_base/cat.man tcl::chan::cat] +[manpage modules/virtchannel_core/core.man tcl::chan::core] +[manpage modules/virtchannel_core/events.man tcl::chan::events] +[manpage modules/virtchannel_base/facade.man tcl::chan::facade] +[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo] +[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2] +[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe] +[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan] +[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random] +[manpage modules/virtchannel_base/std.man tcl::chan::std] +[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string] +[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow] +[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable] +[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero] +[manpage modules/virtchannel_base/randseed.man tcl::randomseed] +[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32] +[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64] +[manpage modules/virtchannel_core/transformcore.man tcl::transform::core] +[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter] +[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32] +[manpage modules/virtchannel_transform/hex.man tcl::transform::hex] +[manpage modules/virtchannel_transform/identity.man tcl::transform::identity] +[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize] +[manpage modules/virtchannel_transform/observe.man tcl::transform::observe] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[manpage modules/virtchannel_transform/rot.man tcl::transform::rot] +[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key {virtual machine}] +[manpage modules/grammar_me/me_cpu.man grammar::me::cpu] +[manpage modules/grammar_me/me_cpucore.man grammar::me::cpu::core] +[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm] +[manpage modules/grammar_me/me_tcl.man grammar::me::tcl] +[manpage modules/grammar_me/me_intro.man grammar::me_intro] +[manpage modules/grammar_me/me_vm.man grammar::me_vm] +[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp] +[manpage modules/pt/pt_param.man pt::param] +[key VISA] +[manpage modules/valtype/cc_visa.man valtype::creditcard::visa] +[key vwait] +[manpage modules/coroutine/tcllib_coroutine.man coroutine] +[manpage modules/coroutine/coro_auto.man coroutine::auto] +[manpage modules/smtpd/smtpd.man smtpd] +[key wais] +[manpage modules/uri/uri.man uri] +[key widget] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[key {widget adaptors}] +[manpage modules/snit/snit.man snit] +[manpage modules/snit/snitfaq.man snitfaq] +[key wiki] +[manpage modules/doctools2idx/idx_container.man doctools::idx] +[manpage modules/doctools/docidx.man doctools::idx] +[manpage modules/doctools2idx/idx_export.man doctools::idx::export] +[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki] +[manpage modules/doctools2toc/toc_container.man doctools::toc] +[manpage modules/doctools/doctoc.man doctools::toc] +[manpage modules/doctools2toc/toc_export.man doctools::toc::export] +[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki] +[key word] +[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse] +[manpage modules/wip/wip.man wip] +[key www] +[manpage modules/uri/uri.man uri] +[key x.208] +[manpage modules/asn/asn.man asn] +[key x.209] +[manpage modules/asn/asn.man asn] +[key x.500] +[manpage modules/ldap/ldap.man ldap] +[key XGoogleToken] +[manpage modules/sasl/gtoken.man SASL::XGoogleToken] +[key xml] +[manpage modules/amazon-s3/xsxp.man xsxp] +[key xor] +[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp] +[key XPath] +[manpage modules/treeql/treeql.man treeql] +[key XSLT] +[manpage modules/treeql/treeql.man treeql] +[key yaml] +[manpage modules/yaml/huddle.man huddle] +[manpage modules/yaml/yaml.man yaml] +[key ydecode] +[manpage modules/base64/yencode.man yencode] +[key yEnc] +[manpage modules/base64/yencode.man yencode] +[key yencode] +[manpage modules/base64/yencode.man yencode] +[key zero] +[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] +[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero] +[key zip] +[manpage modules/zip/decode.man zipfile::decode] +[manpage modules/zip/encode.man zipfile::encode] +[manpage modules/zip/mkzip.man zipfile::mkzip] +[key zlib] +[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib] +[key zoom] +[manpage modules/map/map_slippy.man map::slippy] +[manpage modules/map/map_slippy_cache.man map::slippy::cache] +[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher] +[index_end]
\ No newline at end of file diff --git a/tcllib/support/devel/sak/doc/manpages.txt b/tcllib/support/devel/sak/doc/manpages.txt new file mode 100644 index 0000000..6390ed6 --- /dev/null +++ b/tcllib/support/devel/sak/doc/manpages.txt @@ -0,0 +1,421 @@ +apps/dtplite.man +apps/nns.man +apps/nnsd.man +apps/nnslog.man +apps/page.man +apps/pt.man +apps/tcldocstrip.man +modules/aes/aes.man +modules/amazon-s3/S3.man +modules/amazon-s3/xsxp.man +modules/asn/asn.man +modules/base32/base32.man +modules/base32/base32core.man +modules/base32/base32hex.man +modules/base64/ascii85.man +modules/base64/base64.man +modules/base64/uuencode.man +modules/base64/yencode.man +modules/bee/bee.man +modules/bench/bench.man +modules/bench/bench_intro.man +modules/bench/bench_lang_intro.man +modules/bench/bench_lang_spec.man +modules/bench/bench_read.man +modules/bench/bench_wcsv.man +modules/bench/bench_wtext.man +modules/bibtex/bibtex.man +modules/blowfish/blowfish.man +modules/cache/async.man +modules/clock/iso8601.man +modules/clock/rfc2822.man +modules/cmdline/cmdline.man +modules/comm/comm.man +modules/comm/comm_wire.man +modules/control/control.man +modules/coroutine/coro_auto.man +modules/coroutine/tcllib_coroutine.man +modules/counter/counter.man +modules/crc/cksum.man +modules/crc/crc16.man +modules/crc/crc32.man +modules/crc/sum.man +modules/cron/cron.man +modules/csv/csv.man +modules/debug/debug.man +modules/debug/debug_caller.man +modules/debug/debug_heartbeat.man +modules/debug/debug_timestamp.man +modules/des/des.man +modules/des/tcldes.man +modules/des/tcldesjr.man +modules/dicttool/dicttool.man +modules/dns/tcllib_dns.man +modules/dns/tcllib_ip.man +modules/docstrip/docstrip.man +modules/docstrip/docstrip_util.man +modules/doctools/changelog.man +modules/doctools/cvs.man +modules/doctools/docidx.man +modules/doctools/docidx_intro.man +modules/doctools/docidx_lang_cmdref.man +modules/doctools/docidx_lang_faq.man +modules/doctools/docidx_lang_intro.man +modules/doctools/docidx_lang_syntax.man +modules/doctools/docidx_plugin_apiref.man +modules/doctools/doctoc.man +modules/doctools/doctoc_intro.man +modules/doctools/doctoc_lang_cmdref.man +modules/doctools/doctoc_lang_faq.man +modules/doctools/doctoc_lang_intro.man +modules/doctools/doctoc_lang_syntax.man +modules/doctools/doctoc_plugin_apiref.man +modules/doctools/doctools.man +modules/doctools/doctools_intro.man +modules/doctools/doctools_lang_cmdref.man +modules/doctools/doctools_lang_faq.man +modules/doctools/doctools_lang_intro.man +modules/doctools/doctools_lang_syntax.man +modules/doctools/doctools_plugin_apiref.man +modules/doctools/mpexpand.man +modules/doctools2base/html_cssdefaults.man +modules/doctools2base/nroff_manmacros.man +modules/doctools2base/tcl_parse.man +modules/doctools2base/tcllib_msgcat.man +modules/doctools2idx/export_docidx.man +modules/doctools2idx/idx_container.man +modules/doctools2idx/idx_export.man +modules/doctools2idx/idx_export_html.man +modules/doctools2idx/idx_export_json.man +modules/doctools2idx/idx_export_nroff.man +modules/doctools2idx/idx_export_text.man +modules/doctools2idx/idx_export_wiki.man +modules/doctools2idx/idx_import.man +modules/doctools2idx/idx_import_json.man +modules/doctools2idx/idx_introduction.man +modules/doctools2idx/idx_msgcat_c.man +modules/doctools2idx/idx_msgcat_de.man +modules/doctools2idx/idx_msgcat_en.man +modules/doctools2idx/idx_msgcat_fr.man +modules/doctools2idx/idx_parse.man +modules/doctools2idx/idx_structure.man +modules/doctools2idx/import_docidx.man +modules/doctools2toc/export_doctoc.man +modules/doctools2toc/import_doctoc.man +modules/doctools2toc/toc_container.man +modules/doctools2toc/toc_export.man +modules/doctools2toc/toc_export_html.man +modules/doctools2toc/toc_export_json.man +modules/doctools2toc/toc_export_nroff.man +modules/doctools2toc/toc_export_text.man +modules/doctools2toc/toc_export_wiki.man +modules/doctools2toc/toc_import.man +modules/doctools2toc/toc_import_json.man +modules/doctools2toc/toc_introduction.man +modules/doctools2toc/toc_msgcat_c.man +modules/doctools2toc/toc_msgcat_de.man +modules/doctools2toc/toc_msgcat_en.man +modules/doctools2toc/toc_msgcat_fr.man +modules/doctools2toc/toc_parse.man +modules/doctools2toc/toc_structure.man +modules/dtplite/pkg_dtplite.man +modules/exif/exif.man +modules/fileutil/fileutil.man +modules/fileutil/multi.man +modules/fileutil/multiop.man +modules/fileutil/traverse.man +modules/ftp/ftp.man +modules/ftp/ftp_geturl.man +modules/ftpd/ftpd.man +modules/fumagic/cfront.man +modules/fumagic/cgen.man +modules/fumagic/filetypes.man +modules/fumagic/mimetypes.man +modules/fumagic/rtcore.man +modules/generator/generator.man +modules/gpx/gpx.man +modules/grammar_aycock/aycock.man +modules/grammar_fa/dacceptor.man +modules/grammar_fa/dexec.man +modules/grammar_fa/fa.man +modules/grammar_fa/faop.man +modules/grammar_me/gasm.man +modules/grammar_me/me_ast.man +modules/grammar_me/me_cpu.man +modules/grammar_me/me_cpucore.man +modules/grammar_me/me_intro.man +modules/grammar_me/me_tcl.man +modules/grammar_me/me_util.man +modules/grammar_me/me_vm.man +modules/grammar_peg/peg.man +modules/grammar_peg/peg_interp.man +modules/hook/hook.man +modules/html/html.man +modules/htmlparse/htmlparse.man +modules/http/autoproxy.man +modules/ident/ident.man +modules/imap4/imap4.man +modules/inifile/ini.man +modules/interp/deleg_method.man +modules/interp/deleg_proc.man +modules/interp/tcllib_interp.man +modules/irc/irc.man +modules/irc/picoirc.man +modules/javascript/javascript.man +modules/jpeg/jpeg.man +modules/json/json.man +modules/json/json_write.man +modules/lambda/lambda.man +modules/ldap/ldap.man +modules/ldap/ldapx.man +modules/log/log.man +modules/log/logger.man +modules/log/loggerAppender.man +modules/log/loggerUtils.man +modules/map/map_geocode_nominatim.man +modules/map/map_slippy.man +modules/map/map_slippy_cache.man +modules/map/map_slippy_fetcher.man +modules/mapproj/mapproj.man +modules/math/bigfloat.man +modules/math/bignum.man +modules/math/calculus.man +modules/math/combinatorics.man +modules/math/constants.man +modules/math/decimal.man +modules/math/exact.man +modules/math/fourier.man +modules/math/fuzzy.man +modules/math/interpolate.man +modules/math/linalg.man +modules/math/machineparameters.man +modules/math/math.man +modules/math/math_geometry.man +modules/math/numtheory.man +modules/math/optimize.man +modules/math/polynomials.man +modules/math/qcomplex.man +modules/math/rational_funcs.man +modules/math/roman.man +modules/math/romberg.man +modules/math/special.man +modules/math/statistics.man +modules/math/symdiff.man +modules/md4/md4.man +modules/md5/md5.man +modules/md5crypt/md5crypt.man +modules/mime/mime.man +modules/mime/smtp.man +modules/multiplexer/multiplexer.man +modules/namespacex/namespacex.man +modules/ncgi/ncgi.man +modules/nettool/nettool.man +modules/nmea/nmea.man +modules/nns/nns_auto.man +modules/nns/nns_client.man +modules/nns/nns_common.man +modules/nns/nns_intro.man +modules/nns/nns_protocol.man +modules/nns/nns_server.man +modules/nntp/nntp.man +modules/ntp/ntp_time.man +modules/oauth/oauth.man +modules/ooutil/ooutil.man +modules/otp/otp.man +modules/page/page_intro.man +modules/page/page_pluginmgr.man +modules/page/page_util_flow.man +modules/page/page_util_norm_lemon.man +modules/page/page_util_norm_peg.man +modules/page/page_util_peg.man +modules/page/page_util_quote.man +modules/pki/pki.man +modules/pluginmgr/pluginmgr.man +modules/png/png.man +modules/pop3/pop3.man +modules/pop3d/pop3d.man +modules/pop3d/pop3d_dbox.man +modules/pop3d/pop3d_udb.man +modules/processman/processman.man +modules/profiler/profiler.man +modules/pt/pt_astree.man +modules/pt/pt_cparam_config_critcl.man +modules/pt/pt_cparam_config_tea.man +modules/pt/pt_from_api.man +modules/pt/pt_introduction.man +modules/pt/pt_json_language.man +modules/pt/pt_param.man +modules/pt/pt_parse_peg.man +modules/pt/pt_parser_api.man +modules/pt/pt_peg_container.man +modules/pt/pt_peg_container_peg.man +modules/pt/pt_peg_export.man +modules/pt/pt_peg_export_container.man +modules/pt/pt_peg_export_json.man +modules/pt/pt_peg_export_peg.man +modules/pt/pt_peg_from_container.man +modules/pt/pt_peg_from_json.man +modules/pt/pt_peg_from_peg.man +modules/pt/pt_peg_import.man +modules/pt/pt_peg_import_container.man +modules/pt/pt_peg_import_json.man +modules/pt/pt_peg_import_peg.man +modules/pt/pt_peg_interp.man +modules/pt/pt_peg_introduction.man +modules/pt/pt_peg_language.man +modules/pt/pt_peg_op.man +modules/pt/pt_peg_to_container.man +modules/pt/pt_peg_to_cparam.man +modules/pt/pt_peg_to_json.man +modules/pt/pt_peg_to_param.man +modules/pt/pt_peg_to_peg.man +modules/pt/pt_peg_to_tclparam.man +modules/pt/pt_pegrammar.man +modules/pt/pt_pexpr_op.man +modules/pt/pt_pexpression.man +modules/pt/pt_pgen.man +modules/pt/pt_rdengine.man +modules/pt/pt_tclparam_config_snit.man +modules/pt/pt_tclparam_config_tcloo.man +modules/pt/pt_to_api.man +modules/pt/pt_util.man +modules/rc4/rc4.man +modules/rcs/rcs.man +modules/report/report.man +modules/rest/rest.man +modules/ripemd/ripemd128.man +modules/ripemd/ripemd160.man +modules/sasl/gtoken.man +modules/sasl/ntlm.man +modules/sasl/sasl.man +modules/sasl/scram.man +modules/sha1/sha1.man +modules/sha1/sha256.man +modules/simulation/annealing.man +modules/simulation/montecarlo.man +modules/simulation/simulation_random.man +modules/smtpd/smtpd.man +modules/snit/snit.man +modules/snit/snitfaq.man +modules/soundex/soundex.man +modules/stooop/stooop.man +modules/stooop/switched.man +modules/string/token.man +modules/string/token_shell.man +modules/stringprep/stringprep.man +modules/stringprep/stringprep_data.man +modules/stringprep/unicode.man +modules/stringprep/unicode_data.man +modules/struct/disjointset.man +modules/struct/graph.man +modules/struct/graph1.man +modules/struct/graphops.man +modules/struct/matrix.man +modules/struct/matrix1.man +modules/struct/pool.man +modules/struct/prioqueue.man +modules/struct/queue.man +modules/struct/record.man +modules/struct/skiplist.man +modules/struct/stack.man +modules/struct/struct_list.man +modules/struct/struct_set.man +modules/struct/struct_tree.man +modules/struct/struct_tree1.man +modules/tar/tar.man +modules/tepam/tepam_argument_dialogbox.man +modules/tepam/tepam_doc_gen.man +modules/tepam/tepam_introduction.man +modules/tepam/tepam_procedure.man +modules/term/ansi_cattr.man +modules/term/ansi_cctrl.man +modules/term/ansi_cmacros.man +modules/term/ansi_code.man +modules/term/ansi_ctrlu.man +modules/term/ansi_send.man +modules/term/imenu.man +modules/term/ipager.man +modules/term/receive.man +modules/term/term.man +modules/term/term_bind.man +modules/term/term_send.man +modules/textutil/adjust.man +modules/textutil/expander.man +modules/textutil/repeat.man +modules/textutil/tabify.man +modules/textutil/textutil.man +modules/textutil/textutil_split.man +modules/textutil/textutil_string.man +modules/textutil/trim.man +modules/tie/tie.man +modules/tie/tie_std.man +modules/tiff/tiff.man +modules/tool/meta.man +modules/tool/tool.man +modules/tool/tool_dict_ensemble.man +modules/transfer/connect.man +modules/transfer/copyops.man +modules/transfer/ddest.man +modules/transfer/dsource.man +modules/transfer/receiver.man +modules/transfer/tqueue.man +modules/transfer/transmitter.man +modules/treeql/treeql.man +modules/try/tcllib_throw.man +modules/try/tcllib_try.man +modules/uev/uevent.man +modules/uev/uevent_onidle.man +modules/units/units.man +modules/uri/uri.man +modules/uri/urn-scheme.man +modules/uuid/uuid.man +modules/valtype/cc_amex.man +modules/valtype/cc_discover.man +modules/valtype/cc_mastercard.man +modules/valtype/cc_visa.man +modules/valtype/ean13.man +modules/valtype/iban.man +modules/valtype/imei.man +modules/valtype/isbn.man +modules/valtype/luhn.man +modules/valtype/luhn5.man +modules/valtype/usnpi.man +modules/valtype/valtype_common.man +modules/valtype/verhoeff.man +modules/virtchannel_base/cat.man +modules/virtchannel_base/facade.man +modules/virtchannel_base/halfpipe.man +modules/virtchannel_base/nullzero.man +modules/virtchannel_base/randseed.man +modules/virtchannel_base/std.man +modules/virtchannel_base/tcllib_fifo.man +modules/virtchannel_base/tcllib_fifo2.man +modules/virtchannel_base/tcllib_memchan.man +modules/virtchannel_base/tcllib_null.man +modules/virtchannel_base/tcllib_random.man +modules/virtchannel_base/tcllib_string.man +modules/virtchannel_base/tcllib_variable.man +modules/virtchannel_base/tcllib_zero.man +modules/virtchannel_base/textwindow.man +modules/virtchannel_core/core.man +modules/virtchannel_core/events.man +modules/virtchannel_core/transformcore.man +modules/virtchannel_transform/adler32.man +modules/virtchannel_transform/hex.man +modules/virtchannel_transform/identity.man +modules/virtchannel_transform/limitsize.man +modules/virtchannel_transform/observe.man +modules/virtchannel_transform/rot.man +modules/virtchannel_transform/spacer.man +modules/virtchannel_transform/tcllib_zlib.man +modules/virtchannel_transform/vt_base64.man +modules/virtchannel_transform/vt_counter.man +modules/virtchannel_transform/vt_crc32.man +modules/virtchannel_transform/vt_otp.man +modules/websocket/websocket.man +modules/wip/wip.man +modules/yaml/huddle.man +modules/yaml/yaml.man +modules/zip/decode.man +modules/zip/encode.man +modules/zip/mkzip.man diff --git a/tcllib/support/devel/sak/doc/pkgIndex.tcl b/tcllib/support/devel/sak/doc/pkgIndex.tcl new file mode 100644 index 0000000..4187efe --- /dev/null +++ b/tcllib/support/devel/sak/doc/pkgIndex.tcl @@ -0,0 +1,4 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::doc 1.0 [list source [file join $dir doc.tcl]] +package ifneeded sak::doc::auto 1.0 [list source [file join $dir doc_auto.tcl]] + diff --git a/tcllib/support/devel/sak/doc/toc.txt b/tcllib/support/devel/sak/doc/toc.txt new file mode 100644 index 0000000..d15a9d5 --- /dev/null +++ b/tcllib/support/devel/sak/doc/toc.txt @@ -0,0 +1,1144 @@ +[toc_begin {Table Of Contents} {}] +[division_start {By Categories}] +[division_start {Argument entry form, mega widget}] +[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}] +[division_end] +[division_start {Benchmark tools}] +[item modules/bench/bench.man bench {bench - Processing benchmark suites}] +[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}] +[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}] +[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}] +[item modules/bench/bench_intro.man bench_intro {bench introduction}] +[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}] +[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}] +[division_end] +[division_start {CGI programming}] +[item modules/html/html.man html {Procedures to generate HTML structures}] +[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}] +[item modules/json/json.man json {JSON parser}] +[item modules/json/json_write.man json::write {JSON generation}] +[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}] +[division_end] +[division_start Channels] +[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}] +[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}] +[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}] +[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}] +[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}] +[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}] +[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}] +[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}] +[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}] +[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}] +[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}] +[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}] +[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}] +[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}] +[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}] +[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}] +[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}] +[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}] +[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}] +[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}] +[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}] +[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}] +[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}] +[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}] +[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}] +[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}] +[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}] +[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption] +[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}] +[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}] +[division_end] +[division_start Coroutine] +[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}] +[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}] +[division_end] +[division_start {Data structures}] +[item modules/counter/counter.man counter {Procedures for counters and histograms}] +[item modules/report/report.man report {Create and manipulate report objects}] +[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}] +[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}] +[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}] +[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}] +[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}] +[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}] +[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}] +[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}] +[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}] +[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}] +[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}] +[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}] +[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}] +[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}] +[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}] +[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}] +[item modules/treeql/treeql.man treeql {Query tree objects}] +[division_end] +[division_start {debugging, tracing, and logging}] +[item modules/debug/debug.man debug {debug narrative - core}] +[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}] +[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}] +[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}] +[division_end] +[division_start {Documentation tools}] +[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}] +[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}] +[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}] +[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}] +[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}] +[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}] +[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}] +[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}] +[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}] +[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}] +[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}] +[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}] +[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}] +[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}] +[item modules/doctools/doctools.man doctools {doctools - Processing documents}] +[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}] +[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}] +[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}] +[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}] +[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}] +[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}] +[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}] +[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}] +[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}] +[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}] +[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}] +[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}] +[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}] +[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}] +[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}] +[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}] +[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}] +[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}] +[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}] +[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}] +[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}] +[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}] +[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}] +[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}] +[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}] +[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}] +[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}] +[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}] +[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}] +[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}] +[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}] +[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}] +[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}] +[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}] +[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[item modules/doctools/mpexpand.man mpexpand {Markup processor}] +[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}] +[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}] +[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}] +[division_end] +[division_start File] +[item modules/zip/decode.man zipfile::decode {Access to zip archives}] +[item modules/zip/encode.man zipfile::encode {Generation of zip archives}] +[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}] +[division_end] +[division_start {File formats}] +[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}] +[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}] +[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}] +[item modules/png/png.man png {PNG querying and manipulation of meta data}] +[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}] +[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}] +[division_end] +[division_start {Grammars and finite automata}] +[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}] +[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}] +[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}] +[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}] +[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}] +[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}] +[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}] +[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}] +[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}] +[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}] +[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}] +[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}] +[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}] +[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}] +[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}] +[division_end] +[division_start {Hashes, checksums, and encryption}] +[item modules/aes/aes.man aes {Implementation of the AES block cipher}] +[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}] +[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}] +[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}] +[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}] +[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}] +[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}] +[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}] +[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}] +[item modules/otp/otp.man otp {One-Time Passwords}] +[item modules/pki/pki.man pki {Implementation of the public key cipher}] +[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}] +[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}] +[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}] +[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}] +[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}] +[item modules/soundex/soundex.man soundex Soundex] +[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}] +[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}] +[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}] +[item modules/uuid/uuid.man uuid {UUID generation and comparison}] +[division_end] +[division_start Mathematics] +[item modules/math/math.man math {Tcl Math Library}] +[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}] +[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}] +[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}] +[item modules/math/romberg.man math::calculus::romberg {Romberg integration}] +[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}] +[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}] +[item modules/math/constants.man math::constants {Mathematical and numerical constants}] +[item modules/math/decimal.man math::decimal {General decimal arithmetic}] +[item modules/math/exact.man math::exact {Exact Real Arithmetic}] +[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}] +[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}] +[item modules/math/math_geometry.man math::geometry {Geometrical computations}] +[item modules/math/interpolate.man math::interpolate {Interpolation routines}] +[item modules/math/linalg.man math::linearalgebra {Linear Algebra}] +[item modules/math/numtheory.man math::numtheory {Number Theory}] +[item modules/math/optimize.man math::optimize {Optimisation routines}] +[item modules/math/polynomials.man math::polynomials {Polynomial functions}] +[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}] +[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}] +[item modules/math/special.man math::special {Special mathematical functions}] +[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}] +[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}] +[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}] +[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}] +[division_end] +[division_start Networking] +[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}] +[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}] +[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}] +[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}] +[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}] +[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}] +[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}] +[item modules/ident/ident.man ident {Ident protocol client}] +[item modules/irc/irc.man irc {Create IRC connection and interface.}] +[item modules/ldap/ldap.man ldap {LDAP client}] +[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}] +[item modules/nns/nns_client.man nameserv {Name service facility, Client}] +[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}] +[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}] +[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}] +[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}] +[item modules/nmea/nmea.man nmea {Process NMEA data}] +[item apps/nns.man nns {Name service facility, Commandline Client Application}] +[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}] +[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}] +[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}] +[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}] +[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}] +[item modules/oauth/oauth.man oauth {oauth API base signature}] +[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}] +[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}] +[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}] +[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}] +[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}] +[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}] +[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}] +[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}] +[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}] +[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}] +[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}] +[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}] +[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}] +[item modules/uri/uri.man uri {URI utilities}] +[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}] +[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}] +[division_end] +[division_start {Page Parser Generator}] +[item apps/page.man page {Parser Generator}] +[item modules/page/page_intro.man page_intro {page introduction}] +[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}] +[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}] +[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}] +[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}] +[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}] +[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}] +[division_end] +[division_start {Parsing and Grammars}] +[item apps/pt.man pt {Parser Tools Application}] +[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}] +[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}] +[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}] +[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}] +[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}] +[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}] +[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}] +[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}] +[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}] +[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}] +[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}] +[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}] +[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}] +[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}] +[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}] +[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}] +[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}] +[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}] +[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}] +[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}] +[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}] +[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}] +[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}] +[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}] +[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}] +[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}] +[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}] +[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}] +[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}] +[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}] +[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}] +[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}] +[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}] +[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}] +[item modules/pt/pt_util.man pt::util {General utilities}] +[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}] +[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}] +[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}] +[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}] +[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}] +[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}] +[division_end] +[division_start {Procedures, arguments, parameters, options}] +[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}] +[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}] +[division_end] +[division_start {Programming tools}] +[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}] +[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}] +[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}] +[item modules/control/control.man control {Procedures for control flow structures.}] +[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}] +[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}] +[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}] +[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}] +[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}] +[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}] +[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}] +[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}] +[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}] +[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}] +[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}] +[item modules/hook/hook.man hook Hooks] +[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}] +[item modules/log/log.man log {Procedures to log messages of libraries and applications.}] +[item modules/log/logger.man logger {System to control logging of events.}] +[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}] +[item modules/log/loggerUtils.man logger::utils {Utilities for logger}] +[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}] +[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}] +[item modules/profiler/profiler.man profiler {Tcl source code profiler}] +[item modules/snit/snit.man snit {Snit's Not Incr Tcl}] +[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}] +[item modules/stooop/stooop.man stooop {Object oriented extension.}] +[item modules/stooop/switched.man switched {switch/option management.}] +[item modules/tie/tie.man tie {Array persistence}] +[item modules/tie/tie_std.man tie {Array persistence, standard data sources}] +[item modules/uev/uevent.man uevent {User events}] +[item modules/wip/wip.man wip {Word Interpreter}] +[division_end] +[division_start System] +[item modules/cron/cron.man cron {Tool for automating the period callback of commands}] +[item modules/nettool/nettool.man nettool {Tools for networked applications}] +[item modules/processman/processman.man processman {Tool for automating the period callback of commands}] +[division_end] +[division_start {Terminal control}] +[item modules/term/term.man term {General terminal control}] +[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}] +[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}] +[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}] +[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}] +[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}] +[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}] +[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}] +[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}] +[item modules/term/receive.man term::receive {General input from terminals}] +[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}] +[item modules/term/term_send.man term::send {General output to terminals}] +[division_end] +[division_start {Text formatter plugin}] +[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}] +[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}] +[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}] +[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}] +[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}] +[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}] +[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}] +[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}] +[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}] +[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}] +[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}] +[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}] +[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}] +[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}] +[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}] +[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}] +[division_end] +[division_start {Text processing}] +[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}] +[item modules/base32/base32.man base32 {base32 standard encoding}] +[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}] +[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}] +[item modules/base64/base64.man base64 {base64-encode/decode binary data}] +[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}] +[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}] +[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}] +[item modules/csv/csv.man csv {Procedures to handle CSV data.}] +[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}] +[item modules/inifile/ini.man inifile {Parsing of Windows INI files}] +[item modules/mime/mime.man mime {Manipulation of MIME body parts}] +[item modules/rcs/rcs.man rcs {RCS low level utilities}] +[item modules/string/token.man string::token {Regex based iterative lexing}] +[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}] +[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}] +[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}] +[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}] +[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}] +[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}] +[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}] +[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}] +[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}] +[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}] +[item modules/base64/yencode.man yencode {Y-encode/decode binary data}] +[division_end] +[division_start {Transfer module}] +[item modules/transfer/connect.man transfer::connect {Connection setup}] +[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}] +[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}] +[item modules/transfer/ddest.man transfer::data::destination {Data destination}] +[item modules/transfer/dsource.man transfer::data::source {Data source}] +[item modules/transfer/receiver.man transfer::receiver {Data source}] +[item modules/transfer/transmitter.man transfer::transmitter {Data source}] +[division_end] +[division_start Unfiled] +[item modules/cache/async.man cache::async {Asynchronous in-memory cache}] +[item modules/generator/generator.man generator {Procedures for creating and using generators.}] +[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}] +[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}] +[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}] +[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}] +[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}] +[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}] +[item modules/mapproj/mapproj.man mapproj {Map projection routines}] +[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}] +[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}] +[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}] +[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}] +[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}] +[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}] +[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}] +[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}] +[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}] +[item modules/units/units.man units {unit conversion}] +[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}] +[division_end] +[division_start Utilites] +[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}] +[division_end] +[division_start Utility] +[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}] +[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}] +[item modules/tool/meta.man oo::util {Utility commands for TclOO}] +[item modules/tool/tool.man tool {Dictionary Tools}] +[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}] +[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}] +[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}] +[division_end] +[division_start {Validation, Type checking}] +[item modules/valtype/valtype_common.man valtype::common {Validation, common code}] +[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}] +[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}] +[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}] +[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}] +[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}] +[item modules/valtype/iban.man valtype::iban {Validation for IBAN}] +[item modules/valtype/imei.man valtype::imei {Validation for IMEI}] +[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}] +[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}] +[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}] +[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}] +[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}] +[division_end] +[division_end] +[division_start {By Type}] +[division_start Applications] +[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[item apps/nns.man nns {Name service facility, Commandline Client Application}] +[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}] +[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}] +[item apps/page.man page {Parser Generator}] +[item apps/pt.man pt {Parser Tools Application}] +[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}] +[division_end] +[division_start Modules] +[division_start aes] +[item modules/aes/aes.man aes {Implementation of the AES block cipher}] +[division_end] +[division_start amazon-s3] +[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}] +[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}] +[division_end] +[division_start asn] +[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}] +[division_end] +[division_start base32] +[item modules/base32/base32.man base32 {base32 standard encoding}] +[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}] +[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}] +[division_end] +[division_start base64] +[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}] +[item modules/base64/base64.man base64 {base64-encode/decode binary data}] +[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}] +[item modules/base64/yencode.man yencode {Y-encode/decode binary data}] +[division_end] +[division_start bee] +[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}] +[division_end] +[division_start bench] +[item modules/bench/bench.man bench {bench - Processing benchmark suites}] +[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}] +[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}] +[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}] +[item modules/bench/bench_intro.man bench_intro {bench introduction}] +[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}] +[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}] +[division_end] +[division_start bibtex] +[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}] +[division_end] +[division_start blowfish] +[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}] +[division_end] +[division_start cache] +[item modules/cache/async.man cache::async {Asynchronous in-memory cache}] +[division_end] +[division_start clock] +[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}] +[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}] +[division_end] +[division_start cmdline] +[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}] +[division_end] +[division_start comm] +[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}] +[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}] +[division_end] +[division_start control] +[item modules/control/control.man control {Procedures for control flow structures.}] +[division_end] +[division_start coroutine] +[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}] +[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}] +[division_end] +[division_start counter] +[item modules/counter/counter.man counter {Procedures for counters and histograms}] +[division_end] +[division_start crc] +[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}] +[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}] +[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}] +[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}] +[division_end] +[division_start cron] +[item modules/cron/cron.man cron {Tool for automating the period callback of commands}] +[division_end] +[division_start csv] +[item modules/csv/csv.man csv {Procedures to handle CSV data.}] +[division_end] +[division_start debug] +[item modules/debug/debug.man debug {debug narrative - core}] +[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}] +[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}] +[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}] +[division_end] +[division_start des] +[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}] +[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}] +[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}] +[division_end] +[division_start dicttool] +[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}] +[division_end] +[division_start dns] +[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}] +[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}] +[division_end] +[division_start docstrip] +[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}] +[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}] +[division_end] +[division_start doctools] +[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}] +[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}] +[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}] +[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}] +[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}] +[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}] +[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}] +[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}] +[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}] +[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}] +[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}] +[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}] +[item modules/doctools/doctools.man doctools {doctools - Processing documents}] +[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}] +[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}] +[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}] +[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}] +[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}] +[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}] +[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}] +[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}] +[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}] +[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}] +[item modules/doctools/mpexpand.man mpexpand {Markup processor}] +[division_end] +[division_start doctools2base] +[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}] +[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}] +[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}] +[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}] +[division_end] +[division_start doctools2idx] +[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}] +[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}] +[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}] +[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}] +[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}] +[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}] +[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}] +[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}] +[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}] +[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}] +[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}] +[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}] +[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}] +[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}] +[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}] +[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}] +[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}] +[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}] +[division_end] +[division_start doctools2toc] +[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}] +[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}] +[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}] +[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}] +[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}] +[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}] +[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}] +[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}] +[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}] +[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}] +[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}] +[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}] +[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}] +[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}] +[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}] +[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}] +[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}] +[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}] +[division_end] +[division_start dtplite] +[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[division_end] +[division_start exif] +[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}] +[division_end] +[division_start fileutil] +[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}] +[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}] +[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}] +[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}] +[division_end] +[division_start ftp] +[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}] +[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}] +[division_end] +[division_start ftpd] +[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}] +[division_end] +[division_start fumagic] +[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}] +[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}] +[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}] +[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}] +[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}] +[division_end] +[division_start generator] +[item modules/generator/generator.man generator {Procedures for creating and using generators.}] +[division_end] +[division_start gpx] +[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}] +[division_end] +[division_start grammar_aycock] +[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}] +[division_end] +[division_start grammar_fa] +[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}] +[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}] +[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}] +[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}] +[division_end] +[division_start grammar_me] +[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}] +[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}] +[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}] +[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}] +[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}] +[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}] +[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}] +[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}] +[division_end] +[division_start grammar_peg] +[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}] +[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}] +[division_end] +[division_start hook] +[item modules/hook/hook.man hook Hooks] +[division_end] +[division_start html] +[item modules/html/html.man html {Procedures to generate HTML structures}] +[division_end] +[division_start htmlparse] +[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}] +[division_end] +[division_start http] +[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}] +[division_end] +[division_start ident] +[item modules/ident/ident.man ident {Ident protocol client}] +[division_end] +[division_start imap4] +[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}] +[division_end] +[division_start inifile] +[item modules/inifile/ini.man inifile {Parsing of Windows INI files}] +[division_end] +[division_start interp] +[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}] +[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}] +[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}] +[division_end] +[division_start irc] +[item modules/irc/irc.man irc {Create IRC connection and interface.}] +[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}] +[division_end] +[division_start javascript] +[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}] +[division_end] +[division_start jpeg] +[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}] +[division_end] +[division_start json] +[item modules/json/json.man json {JSON parser}] +[item modules/json/json_write.man json::write {JSON generation}] +[division_end] +[division_start lambda] +[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}] +[division_end] +[division_start ldap] +[item modules/ldap/ldap.man ldap {LDAP client}] +[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}] +[division_end] +[division_start log] +[item modules/log/log.man log {Procedures to log messages of libraries and applications.}] +[item modules/log/logger.man logger {System to control logging of events.}] +[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}] +[item modules/log/loggerUtils.man logger::utils {Utilities for logger}] +[division_end] +[division_start map] +[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}] +[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}] +[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}] +[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}] +[division_end] +[division_start mapproj] +[item modules/mapproj/mapproj.man mapproj {Map projection routines}] +[division_end] +[division_start math] +[item modules/math/math.man math {Tcl Math Library}] +[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}] +[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}] +[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}] +[item modules/math/romberg.man math::calculus::romberg {Romberg integration}] +[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}] +[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}] +[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}] +[item modules/math/constants.man math::constants {Mathematical and numerical constants}] +[item modules/math/decimal.man math::decimal {General decimal arithmetic}] +[item modules/math/exact.man math::exact {Exact Real Arithmetic}] +[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}] +[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}] +[item modules/math/math_geometry.man math::geometry {Geometrical computations}] +[item modules/math/interpolate.man math::interpolate {Interpolation routines}] +[item modules/math/linalg.man math::linearalgebra {Linear Algebra}] +[item modules/math/numtheory.man math::numtheory {Number Theory}] +[item modules/math/optimize.man math::optimize {Optimisation routines}] +[item modules/math/polynomials.man math::polynomials {Polynomial functions}] +[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}] +[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}] +[item modules/math/special.man math::special {Special mathematical functions}] +[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}] +[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}] +[division_end] +[division_start md4] +[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}] +[division_end] +[division_start md5] +[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}] +[division_end] +[division_start md5crypt] +[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}] +[division_end] +[division_start mime] +[item modules/mime/mime.man mime {Manipulation of MIME body parts}] +[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}] +[division_end] +[division_start multiplexer] +[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}] +[division_end] +[division_start namespacex] +[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}] +[division_end] +[division_start ncgi] +[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}] +[division_end] +[division_start nettool] +[item modules/nettool/nettool.man nettool {Tools for networked applications}] +[division_end] +[division_start nmea] +[item modules/nmea/nmea.man nmea {Process NMEA data}] +[division_end] +[division_start nns] +[item modules/nns/nns_client.man nameserv {Name service facility, Client}] +[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}] +[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}] +[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}] +[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}] +[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}] +[division_end] +[division_start nntp] +[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}] +[division_end] +[division_start ntp] +[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}] +[division_end] +[division_start oauth] +[item modules/oauth/oauth.man oauth {oauth API base signature}] +[division_end] +[division_start ooutil] +[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}] +[division_end] +[division_start otp] +[item modules/otp/otp.man otp {One-Time Passwords}] +[division_end] +[division_start page] +[item modules/page/page_intro.man page_intro {page introduction}] +[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}] +[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}] +[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}] +[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}] +[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}] +[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}] +[division_end] +[division_start pki] +[item modules/pki/pki.man pki {Implementation of the public key cipher}] +[division_end] +[division_start pluginmgr] +[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}] +[division_end] +[division_start png] +[item modules/png/png.man png {PNG querying and manipulation of meta data}] +[division_end] +[division_start pop3] +[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}] +[division_end] +[division_start pop3d] +[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}] +[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}] +[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}] +[division_end] +[division_start processman] +[item modules/processman/processman.man processman {Tool for automating the period callback of commands}] +[division_end] +[division_start profiler] +[item modules/profiler/profiler.man profiler {Tcl source code profiler}] +[division_end] +[division_start pt] +[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}] +[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}] +[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}] +[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}] +[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}] +[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}] +[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}] +[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}] +[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}] +[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}] +[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}] +[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}] +[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}] +[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}] +[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}] +[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}] +[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}] +[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}] +[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}] +[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}] +[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}] +[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}] +[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}] +[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}] +[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}] +[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}] +[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}] +[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}] +[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}] +[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}] +[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}] +[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}] +[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}] +[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}] +[item modules/pt/pt_util.man pt::util {General utilities}] +[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}] +[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}] +[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}] +[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}] +[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}] +[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}] +[division_end] +[division_start rc4] +[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}] +[division_end] +[division_start rcs] +[item modules/rcs/rcs.man rcs {RCS low level utilities}] +[division_end] +[division_start report] +[item modules/report/report.man report {Create and manipulate report objects}] +[division_end] +[division_start rest] +[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}] +[division_end] +[division_start ripemd] +[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}] +[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}] +[division_end] +[division_start sasl] +[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}] +[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}] +[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}] +[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}] +[division_end] +[division_start sha1] +[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}] +[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}] +[division_end] +[division_start simulation] +[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}] +[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}] +[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}] +[division_end] +[division_start smtpd] +[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}] +[division_end] +[division_start snit] +[item modules/snit/snit.man snit {Snit's Not Incr Tcl}] +[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}] +[division_end] +[division_start soundex] +[item modules/soundex/soundex.man soundex Soundex] +[division_end] +[division_start stooop] +[item modules/stooop/stooop.man stooop {Object oriented extension.}] +[item modules/stooop/switched.man switched {switch/option management.}] +[division_end] +[division_start string] +[item modules/string/token.man string::token {Regex based iterative lexing}] +[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}] +[division_end] +[division_start stringprep] +[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}] +[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}] +[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}] +[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}] +[division_end] +[division_start struct] +[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}] +[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}] +[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}] +[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}] +[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}] +[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}] +[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}] +[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}] +[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}] +[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}] +[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}] +[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}] +[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}] +[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}] +[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}] +[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}] +[division_end] +[division_start tar] +[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}] +[division_end] +[division_start tepam] +[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}] +[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}] +[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}] +[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}] +[division_end] +[division_start term] +[item modules/term/term.man term {General terminal control}] +[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}] +[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}] +[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}] +[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}] +[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}] +[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}] +[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}] +[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}] +[item modules/term/receive.man term::receive {General input from terminals}] +[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}] +[item modules/term/term_send.man term::send {General output to terminals}] +[division_end] +[division_start textutil] +[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}] +[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}] +[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}] +[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}] +[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}] +[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}] +[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}] +[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}] +[division_end] +[division_start tie] +[item modules/tie/tie.man tie {Array persistence}] +[item modules/tie/tie_std.man tie {Array persistence, standard data sources}] +[division_end] +[division_start tiff] +[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}] +[division_end] +[division_start tool] +[item modules/tool/meta.man oo::util {Utility commands for TclOO}] +[item modules/tool/tool.man tool {Dictionary Tools}] +[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}] +[division_end] +[division_start transfer] +[item modules/transfer/connect.man transfer::connect {Connection setup}] +[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}] +[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}] +[item modules/transfer/ddest.man transfer::data::destination {Data destination}] +[item modules/transfer/dsource.man transfer::data::source {Data source}] +[item modules/transfer/receiver.man transfer::receiver {Data source}] +[item modules/transfer/transmitter.man transfer::transmitter {Data source}] +[division_end] +[division_start treeql] +[item modules/treeql/treeql.man treeql {Query tree objects}] +[division_end] +[division_start try] +[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}] +[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}] +[division_end] +[division_start uev] +[item modules/uev/uevent.man uevent {User events}] +[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}] +[division_end] +[division_start units] +[item modules/units/units.man units {unit conversion}] +[division_end] +[division_start uri] +[item modules/uri/uri.man uri {URI utilities}] +[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}] +[division_end] +[division_start uuid] +[item modules/uuid/uuid.man uuid {UUID generation and comparison}] +[division_end] +[division_start valtype] +[item modules/valtype/valtype_common.man valtype::common {Validation, common code}] +[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}] +[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}] +[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}] +[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}] +[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}] +[item modules/valtype/iban.man valtype::iban {Validation for IBAN}] +[item modules/valtype/imei.man valtype::imei {Validation for IMEI}] +[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}] +[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}] +[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}] +[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}] +[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}] +[division_end] +[division_start virtchannel_base] +[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}] +[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}] +[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}] +[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}] +[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}] +[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}] +[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}] +[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}] +[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}] +[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}] +[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}] +[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}] +[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}] +[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}] +[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}] +[division_end] +[division_start virtchannel_core] +[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}] +[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}] +[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}] +[division_end] +[division_start virtchannel_transform] +[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}] +[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}] +[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}] +[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}] +[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}] +[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}] +[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}] +[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}] +[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}] +[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption] +[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}] +[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}] +[division_end] +[division_start websocket] +[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}] +[division_end] +[division_start wip] +[item modules/wip/wip.man wip {Word Interpreter}] +[division_end] +[division_start yaml] +[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}] +[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}] +[division_end] +[division_start zip] +[item modules/zip/decode.man zipfile::decode {Access to zip archives}] +[item modules/zip/encode.man zipfile::encode {Generation of zip archives}] +[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}] +[division_end] +[division_end] +[division_end] +[toc_end]
\ No newline at end of file diff --git a/tcllib/support/devel/sak/doc/toc_apps.txt b/tcllib/support/devel/sak/doc/toc_apps.txt new file mode 100644 index 0000000..cb85b0f --- /dev/null +++ b/tcllib/support/devel/sak/doc/toc_apps.txt @@ -0,0 +1,11 @@ +[toc_begin {Table Of Contents} {}] +[division_start Applications] +[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[item apps/nns.man nns {Name service facility, Commandline Client Application}] +[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}] +[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}] +[item apps/page.man page {Parser Generator}] +[item apps/pt.man pt {Parser Tools Application}] +[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}] +[division_end] +[toc_end]
\ No newline at end of file diff --git a/tcllib/support/devel/sak/doc/toc_cats.txt b/tcllib/support/devel/sak/doc/toc_cats.txt new file mode 100644 index 0000000..d40c4de --- /dev/null +++ b/tcllib/support/devel/sak/doc/toc_cats.txt @@ -0,0 +1,479 @@ +[toc_begin {Table Of Contents} {}] +[division_start {By Categories}] +[division_start {Argument entry form, mega widget}] +[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}] +[division_end] +[division_start {Benchmark tools}] +[item modules/bench/bench.man bench {bench - Processing benchmark suites}] +[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}] +[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}] +[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}] +[item modules/bench/bench_intro.man bench_intro {bench introduction}] +[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}] +[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}] +[division_end] +[division_start {CGI programming}] +[item modules/html/html.man html {Procedures to generate HTML structures}] +[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}] +[item modules/json/json.man json {JSON parser}] +[item modules/json/json_write.man json::write {JSON generation}] +[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}] +[division_end] +[division_start Channels] +[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}] +[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}] +[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}] +[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}] +[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}] +[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}] +[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}] +[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}] +[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}] +[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}] +[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}] +[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}] +[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}] +[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}] +[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}] +[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}] +[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}] +[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}] +[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}] +[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}] +[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}] +[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}] +[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}] +[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}] +[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}] +[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}] +[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}] +[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption] +[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}] +[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}] +[division_end] +[division_start Coroutine] +[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}] +[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}] +[division_end] +[division_start {Data structures}] +[item modules/counter/counter.man counter {Procedures for counters and histograms}] +[item modules/report/report.man report {Create and manipulate report objects}] +[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}] +[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}] +[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}] +[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}] +[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}] +[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}] +[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}] +[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}] +[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}] +[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}] +[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}] +[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}] +[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}] +[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}] +[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}] +[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}] +[item modules/treeql/treeql.man treeql {Query tree objects}] +[division_end] +[division_start {debugging, tracing, and logging}] +[item modules/debug/debug.man debug {debug narrative - core}] +[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}] +[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}] +[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}] +[division_end] +[division_start {Documentation tools}] +[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}] +[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}] +[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}] +[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}] +[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}] +[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}] +[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}] +[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}] +[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}] +[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}] +[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}] +[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}] +[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}] +[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}] +[item modules/doctools/doctools.man doctools {doctools - Processing documents}] +[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}] +[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}] +[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}] +[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}] +[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}] +[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}] +[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}] +[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}] +[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}] +[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}] +[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}] +[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}] +[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}] +[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}] +[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}] +[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}] +[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}] +[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}] +[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}] +[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}] +[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}] +[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}] +[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}] +[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}] +[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}] +[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}] +[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}] +[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}] +[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}] +[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}] +[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}] +[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}] +[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}] +[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}] +[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[item modules/doctools/mpexpand.man mpexpand {Markup processor}] +[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}] +[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}] +[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}] +[division_end] +[division_start File] +[item modules/zip/decode.man zipfile::decode {Access to zip archives}] +[item modules/zip/encode.man zipfile::encode {Generation of zip archives}] +[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}] +[division_end] +[division_start {File formats}] +[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}] +[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}] +[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}] +[item modules/png/png.man png {PNG querying and manipulation of meta data}] +[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}] +[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}] +[division_end] +[division_start {Grammars and finite automata}] +[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}] +[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}] +[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}] +[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}] +[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}] +[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}] +[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}] +[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}] +[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}] +[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}] +[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}] +[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}] +[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}] +[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}] +[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}] +[division_end] +[division_start {Hashes, checksums, and encryption}] +[item modules/aes/aes.man aes {Implementation of the AES block cipher}] +[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}] +[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}] +[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}] +[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}] +[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}] +[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}] +[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}] +[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}] +[item modules/otp/otp.man otp {One-Time Passwords}] +[item modules/pki/pki.man pki {Implementation of the public key cipher}] +[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}] +[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}] +[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}] +[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}] +[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}] +[item modules/soundex/soundex.man soundex Soundex] +[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}] +[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}] +[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}] +[item modules/uuid/uuid.man uuid {UUID generation and comparison}] +[division_end] +[division_start Mathematics] +[item modules/math/math.man math {Tcl Math Library}] +[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}] +[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}] +[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}] +[item modules/math/romberg.man math::calculus::romberg {Romberg integration}] +[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}] +[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}] +[item modules/math/constants.man math::constants {Mathematical and numerical constants}] +[item modules/math/decimal.man math::decimal {General decimal arithmetic}] +[item modules/math/exact.man math::exact {Exact Real Arithmetic}] +[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}] +[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}] +[item modules/math/math_geometry.man math::geometry {Geometrical computations}] +[item modules/math/interpolate.man math::interpolate {Interpolation routines}] +[item modules/math/linalg.man math::linearalgebra {Linear Algebra}] +[item modules/math/numtheory.man math::numtheory {Number Theory}] +[item modules/math/optimize.man math::optimize {Optimisation routines}] +[item modules/math/polynomials.man math::polynomials {Polynomial functions}] +[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}] +[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}] +[item modules/math/special.man math::special {Special mathematical functions}] +[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}] +[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}] +[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}] +[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}] +[division_end] +[division_start Networking] +[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}] +[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}] +[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}] +[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}] +[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}] +[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}] +[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}] +[item modules/ident/ident.man ident {Ident protocol client}] +[item modules/irc/irc.man irc {Create IRC connection and interface.}] +[item modules/ldap/ldap.man ldap {LDAP client}] +[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}] +[item modules/nns/nns_client.man nameserv {Name service facility, Client}] +[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}] +[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}] +[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}] +[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}] +[item modules/nmea/nmea.man nmea {Process NMEA data}] +[item apps/nns.man nns {Name service facility, Commandline Client Application}] +[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}] +[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}] +[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}] +[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}] +[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}] +[item modules/oauth/oauth.man oauth {oauth API base signature}] +[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}] +[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}] +[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}] +[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}] +[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}] +[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}] +[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}] +[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}] +[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}] +[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}] +[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}] +[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}] +[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}] +[item modules/uri/uri.man uri {URI utilities}] +[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}] +[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}] +[division_end] +[division_start {Page Parser Generator}] +[item apps/page.man page {Parser Generator}] +[item modules/page/page_intro.man page_intro {page introduction}] +[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}] +[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}] +[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}] +[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}] +[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}] +[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}] +[division_end] +[division_start {Parsing and Grammars}] +[item apps/pt.man pt {Parser Tools Application}] +[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}] +[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}] +[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}] +[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}] +[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}] +[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}] +[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}] +[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}] +[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}] +[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}] +[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}] +[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}] +[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}] +[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}] +[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}] +[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}] +[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}] +[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}] +[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}] +[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}] +[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}] +[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}] +[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}] +[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}] +[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}] +[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}] +[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}] +[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}] +[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}] +[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}] +[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}] +[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}] +[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}] +[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}] +[item modules/pt/pt_util.man pt::util {General utilities}] +[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}] +[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}] +[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}] +[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}] +[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}] +[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}] +[division_end] +[division_start {Procedures, arguments, parameters, options}] +[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}] +[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}] +[division_end] +[division_start {Programming tools}] +[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}] +[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}] +[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}] +[item modules/control/control.man control {Procedures for control flow structures.}] +[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}] +[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}] +[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}] +[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}] +[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}] +[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}] +[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}] +[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}] +[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}] +[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}] +[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}] +[item modules/hook/hook.man hook Hooks] +[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}] +[item modules/log/log.man log {Procedures to log messages of libraries and applications.}] +[item modules/log/logger.man logger {System to control logging of events.}] +[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}] +[item modules/log/loggerUtils.man logger::utils {Utilities for logger}] +[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}] +[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}] +[item modules/profiler/profiler.man profiler {Tcl source code profiler}] +[item modules/snit/snit.man snit {Snit's Not Incr Tcl}] +[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}] +[item modules/stooop/stooop.man stooop {Object oriented extension.}] +[item modules/stooop/switched.man switched {switch/option management.}] +[item modules/tie/tie.man tie {Array persistence}] +[item modules/tie/tie_std.man tie {Array persistence, standard data sources}] +[item modules/uev/uevent.man uevent {User events}] +[item modules/wip/wip.man wip {Word Interpreter}] +[division_end] +[division_start System] +[item modules/cron/cron.man cron {Tool for automating the period callback of commands}] +[item modules/nettool/nettool.man nettool {Tools for networked applications}] +[item modules/processman/processman.man processman {Tool for automating the period callback of commands}] +[division_end] +[division_start {Terminal control}] +[item modules/term/term.man term {General terminal control}] +[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}] +[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}] +[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}] +[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}] +[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}] +[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}] +[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}] +[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}] +[item modules/term/receive.man term::receive {General input from terminals}] +[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}] +[item modules/term/term_send.man term::send {General output to terminals}] +[division_end] +[division_start {Text formatter plugin}] +[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}] +[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}] +[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}] +[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}] +[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}] +[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}] +[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}] +[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}] +[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}] +[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}] +[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}] +[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}] +[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}] +[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}] +[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}] +[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}] +[division_end] +[division_start {Text processing}] +[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}] +[item modules/base32/base32.man base32 {base32 standard encoding}] +[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}] +[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}] +[item modules/base64/base64.man base64 {base64-encode/decode binary data}] +[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}] +[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}] +[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}] +[item modules/csv/csv.man csv {Procedures to handle CSV data.}] +[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}] +[item modules/inifile/ini.man inifile {Parsing of Windows INI files}] +[item modules/mime/mime.man mime {Manipulation of MIME body parts}] +[item modules/rcs/rcs.man rcs {RCS low level utilities}] +[item modules/string/token.man string::token {Regex based iterative lexing}] +[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}] +[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}] +[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}] +[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}] +[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}] +[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}] +[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}] +[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}] +[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}] +[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}] +[item modules/base64/yencode.man yencode {Y-encode/decode binary data}] +[division_end] +[division_start {Transfer module}] +[item modules/transfer/connect.man transfer::connect {Connection setup}] +[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}] +[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}] +[item modules/transfer/ddest.man transfer::data::destination {Data destination}] +[item modules/transfer/dsource.man transfer::data::source {Data source}] +[item modules/transfer/receiver.man transfer::receiver {Data source}] +[item modules/transfer/transmitter.man transfer::transmitter {Data source}] +[division_end] +[division_start Unfiled] +[item modules/cache/async.man cache::async {Asynchronous in-memory cache}] +[item modules/generator/generator.man generator {Procedures for creating and using generators.}] +[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}] +[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}] +[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}] +[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}] +[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}] +[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}] +[item modules/mapproj/mapproj.man mapproj {Map projection routines}] +[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}] +[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}] +[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}] +[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}] +[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}] +[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}] +[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}] +[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}] +[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}] +[item modules/units/units.man units {unit conversion}] +[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}] +[division_end] +[division_start Utilites] +[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}] +[division_end] +[division_start Utility] +[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}] +[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}] +[item modules/tool/meta.man oo::util {Utility commands for TclOO}] +[item modules/tool/tool.man tool {Dictionary Tools}] +[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}] +[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}] +[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}] +[division_end] +[division_start {Validation, Type checking}] +[item modules/valtype/valtype_common.man valtype::common {Validation, common code}] +[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}] +[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}] +[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}] +[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}] +[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}] +[item modules/valtype/iban.man valtype::iban {Validation for IBAN}] +[item modules/valtype/imei.man valtype::imei {Validation for IMEI}] +[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}] +[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}] +[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}] +[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}] +[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}] +[division_end] +[division_end] +[toc_end]
\ No newline at end of file diff --git a/tcllib/support/devel/sak/doc/toc_mods.txt b/tcllib/support/devel/sak/doc/toc_mods.txt new file mode 100644 index 0000000..5d36873 --- /dev/null +++ b/tcllib/support/devel/sak/doc/toc_mods.txt @@ -0,0 +1,656 @@ +[toc_begin {Table Of Contents} {}] +[division_start Modules] +[division_start aes] +[item modules/aes/aes.man aes {Implementation of the AES block cipher}] +[division_end] +[division_start amazon-s3] +[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}] +[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}] +[division_end] +[division_start asn] +[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}] +[division_end] +[division_start base32] +[item modules/base32/base32.man base32 {base32 standard encoding}] +[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}] +[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}] +[division_end] +[division_start base64] +[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}] +[item modules/base64/base64.man base64 {base64-encode/decode binary data}] +[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}] +[item modules/base64/yencode.man yencode {Y-encode/decode binary data}] +[division_end] +[division_start bee] +[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}] +[division_end] +[division_start bench] +[item modules/bench/bench.man bench {bench - Processing benchmark suites}] +[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}] +[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}] +[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}] +[item modules/bench/bench_intro.man bench_intro {bench introduction}] +[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}] +[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}] +[division_end] +[division_start bibtex] +[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}] +[division_end] +[division_start blowfish] +[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}] +[division_end] +[division_start cache] +[item modules/cache/async.man cache::async {Asynchronous in-memory cache}] +[division_end] +[division_start clock] +[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}] +[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}] +[division_end] +[division_start cmdline] +[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}] +[division_end] +[division_start comm] +[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}] +[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}] +[division_end] +[division_start control] +[item modules/control/control.man control {Procedures for control flow structures.}] +[division_end] +[division_start coroutine] +[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}] +[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}] +[division_end] +[division_start counter] +[item modules/counter/counter.man counter {Procedures for counters and histograms}] +[division_end] +[division_start crc] +[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}] +[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}] +[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}] +[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}] +[division_end] +[division_start cron] +[item modules/cron/cron.man cron {Tool for automating the period callback of commands}] +[division_end] +[division_start csv] +[item modules/csv/csv.man csv {Procedures to handle CSV data.}] +[division_end] +[division_start debug] +[item modules/debug/debug.man debug {debug narrative - core}] +[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}] +[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}] +[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}] +[division_end] +[division_start des] +[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}] +[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}] +[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}] +[division_end] +[division_start dicttool] +[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}] +[division_end] +[division_start dns] +[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}] +[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}] +[division_end] +[division_start docstrip] +[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}] +[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}] +[division_end] +[division_start doctools] +[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}] +[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}] +[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}] +[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}] +[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}] +[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}] +[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}] +[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}] +[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}] +[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}] +[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}] +[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}] +[item modules/doctools/doctools.man doctools {doctools - Processing documents}] +[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}] +[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}] +[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}] +[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}] +[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}] +[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}] +[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}] +[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}] +[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}] +[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}] +[item modules/doctools/mpexpand.man mpexpand {Markup processor}] +[division_end] +[division_start doctools2base] +[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}] +[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}] +[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}] +[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}] +[division_end] +[division_start doctools2idx] +[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}] +[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}] +[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}] +[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}] +[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}] +[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}] +[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}] +[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}] +[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}] +[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}] +[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}] +[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}] +[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}] +[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}] +[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}] +[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}] +[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}] +[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}] +[division_end] +[division_start doctools2toc] +[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}] +[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}] +[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}] +[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}] +[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}] +[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}] +[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}] +[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}] +[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}] +[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}] +[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}] +[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}] +[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}] +[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}] +[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}] +[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}] +[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}] +[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}] +[division_end] +[division_start dtplite] +[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}] +[division_end] +[division_start exif] +[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}] +[division_end] +[division_start fileutil] +[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}] +[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}] +[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}] +[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}] +[division_end] +[division_start ftp] +[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}] +[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}] +[division_end] +[division_start ftpd] +[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}] +[division_end] +[division_start fumagic] +[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}] +[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}] +[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}] +[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}] +[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}] +[division_end] +[division_start generator] +[item modules/generator/generator.man generator {Procedures for creating and using generators.}] +[division_end] +[division_start gpx] +[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}] +[division_end] +[division_start grammar_aycock] +[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}] +[division_end] +[division_start grammar_fa] +[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}] +[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}] +[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}] +[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}] +[division_end] +[division_start grammar_me] +[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}] +[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}] +[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}] +[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}] +[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}] +[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}] +[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}] +[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}] +[division_end] +[division_start grammar_peg] +[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}] +[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}] +[division_end] +[division_start hook] +[item modules/hook/hook.man hook Hooks] +[division_end] +[division_start html] +[item modules/html/html.man html {Procedures to generate HTML structures}] +[division_end] +[division_start htmlparse] +[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}] +[division_end] +[division_start http] +[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}] +[division_end] +[division_start ident] +[item modules/ident/ident.man ident {Ident protocol client}] +[division_end] +[division_start imap4] +[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}] +[division_end] +[division_start inifile] +[item modules/inifile/ini.man inifile {Parsing of Windows INI files}] +[division_end] +[division_start interp] +[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}] +[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}] +[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}] +[division_end] +[division_start irc] +[item modules/irc/irc.man irc {Create IRC connection and interface.}] +[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}] +[division_end] +[division_start javascript] +[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}] +[division_end] +[division_start jpeg] +[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}] +[division_end] +[division_start json] +[item modules/json/json.man json {JSON parser}] +[item modules/json/json_write.man json::write {JSON generation}] +[division_end] +[division_start lambda] +[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}] +[division_end] +[division_start ldap] +[item modules/ldap/ldap.man ldap {LDAP client}] +[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}] +[division_end] +[division_start log] +[item modules/log/log.man log {Procedures to log messages of libraries and applications.}] +[item modules/log/logger.man logger {System to control logging of events.}] +[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}] +[item modules/log/loggerUtils.man logger::utils {Utilities for logger}] +[division_end] +[division_start map] +[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}] +[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}] +[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}] +[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}] +[division_end] +[division_start mapproj] +[item modules/mapproj/mapproj.man mapproj {Map projection routines}] +[division_end] +[division_start math] +[item modules/math/math.man math {Tcl Math Library}] +[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}] +[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}] +[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}] +[item modules/math/romberg.man math::calculus::romberg {Romberg integration}] +[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}] +[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}] +[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}] +[item modules/math/constants.man math::constants {Mathematical and numerical constants}] +[item modules/math/decimal.man math::decimal {General decimal arithmetic}] +[item modules/math/exact.man math::exact {Exact Real Arithmetic}] +[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}] +[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}] +[item modules/math/math_geometry.man math::geometry {Geometrical computations}] +[item modules/math/interpolate.man math::interpolate {Interpolation routines}] +[item modules/math/linalg.man math::linearalgebra {Linear Algebra}] +[item modules/math/numtheory.man math::numtheory {Number Theory}] +[item modules/math/optimize.man math::optimize {Optimisation routines}] +[item modules/math/polynomials.man math::polynomials {Polynomial functions}] +[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}] +[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}] +[item modules/math/special.man math::special {Special mathematical functions}] +[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}] +[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}] +[division_end] +[division_start md4] +[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}] +[division_end] +[division_start md5] +[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}] +[division_end] +[division_start md5crypt] +[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}] +[division_end] +[division_start mime] +[item modules/mime/mime.man mime {Manipulation of MIME body parts}] +[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}] +[division_end] +[division_start multiplexer] +[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}] +[division_end] +[division_start namespacex] +[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}] +[division_end] +[division_start ncgi] +[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}] +[division_end] +[division_start nettool] +[item modules/nettool/nettool.man nettool {Tools for networked applications}] +[division_end] +[division_start nmea] +[item modules/nmea/nmea.man nmea {Process NMEA data}] +[division_end] +[division_start nns] +[item modules/nns/nns_client.man nameserv {Name service facility, Client}] +[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}] +[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}] +[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}] +[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}] +[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}] +[division_end] +[division_start nntp] +[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}] +[division_end] +[division_start ntp] +[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}] +[division_end] +[division_start oauth] +[item modules/oauth/oauth.man oauth {oauth API base signature}] +[division_end] +[division_start ooutil] +[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}] +[division_end] +[division_start otp] +[item modules/otp/otp.man otp {One-Time Passwords}] +[division_end] +[division_start page] +[item modules/page/page_intro.man page_intro {page introduction}] +[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}] +[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}] +[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}] +[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}] +[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}] +[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}] +[division_end] +[division_start pki] +[item modules/pki/pki.man pki {Implementation of the public key cipher}] +[division_end] +[division_start pluginmgr] +[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}] +[division_end] +[division_start png] +[item modules/png/png.man png {PNG querying and manipulation of meta data}] +[division_end] +[division_start pop3] +[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}] +[division_end] +[division_start pop3d] +[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}] +[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}] +[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}] +[division_end] +[division_start processman] +[item modules/processman/processman.man processman {Tool for automating the period callback of commands}] +[division_end] +[division_start profiler] +[item modules/profiler/profiler.man profiler {Tcl source code profiler}] +[division_end] +[division_start pt] +[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}] +[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}] +[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}] +[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}] +[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}] +[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}] +[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}] +[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}] +[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}] +[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}] +[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}] +[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}] +[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}] +[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}] +[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}] +[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}] +[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}] +[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}] +[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}] +[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}] +[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}] +[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}] +[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}] +[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}] +[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}] +[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}] +[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}] +[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}] +[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}] +[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}] +[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}] +[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}] +[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}] +[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}] +[item modules/pt/pt_util.man pt::util {General utilities}] +[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}] +[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}] +[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}] +[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}] +[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}] +[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}] +[division_end] +[division_start rc4] +[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}] +[division_end] +[division_start rcs] +[item modules/rcs/rcs.man rcs {RCS low level utilities}] +[division_end] +[division_start report] +[item modules/report/report.man report {Create and manipulate report objects}] +[division_end] +[division_start rest] +[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}] +[division_end] +[division_start ripemd] +[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}] +[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}] +[division_end] +[division_start sasl] +[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}] +[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}] +[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}] +[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}] +[division_end] +[division_start sha1] +[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}] +[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}] +[division_end] +[division_start simulation] +[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}] +[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}] +[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}] +[division_end] +[division_start smtpd] +[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}] +[division_end] +[division_start snit] +[item modules/snit/snit.man snit {Snit's Not Incr Tcl}] +[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}] +[division_end] +[division_start soundex] +[item modules/soundex/soundex.man soundex Soundex] +[division_end] +[division_start stooop] +[item modules/stooop/stooop.man stooop {Object oriented extension.}] +[item modules/stooop/switched.man switched {switch/option management.}] +[division_end] +[division_start string] +[item modules/string/token.man string::token {Regex based iterative lexing}] +[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}] +[division_end] +[division_start stringprep] +[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}] +[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}] +[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}] +[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}] +[division_end] +[division_start struct] +[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}] +[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}] +[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}] +[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}] +[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}] +[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}] +[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}] +[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}] +[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}] +[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}] +[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}] +[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}] +[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}] +[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}] +[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}] +[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}] +[division_end] +[division_start tar] +[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}] +[division_end] +[division_start tepam] +[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}] +[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}] +[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}] +[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}] +[division_end] +[division_start term] +[item modules/term/term.man term {General terminal control}] +[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}] +[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}] +[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}] +[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}] +[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}] +[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}] +[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}] +[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}] +[item modules/term/receive.man term::receive {General input from terminals}] +[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}] +[item modules/term/term_send.man term::send {General output to terminals}] +[division_end] +[division_start textutil] +[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}] +[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}] +[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}] +[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}] +[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}] +[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}] +[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}] +[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}] +[division_end] +[division_start tie] +[item modules/tie/tie.man tie {Array persistence}] +[item modules/tie/tie_std.man tie {Array persistence, standard data sources}] +[division_end] +[division_start tiff] +[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}] +[division_end] +[division_start tool] +[item modules/tool/meta.man oo::util {Utility commands for TclOO}] +[item modules/tool/tool.man tool {Dictionary Tools}] +[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}] +[division_end] +[division_start transfer] +[item modules/transfer/connect.man transfer::connect {Connection setup}] +[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}] +[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}] +[item modules/transfer/ddest.man transfer::data::destination {Data destination}] +[item modules/transfer/dsource.man transfer::data::source {Data source}] +[item modules/transfer/receiver.man transfer::receiver {Data source}] +[item modules/transfer/transmitter.man transfer::transmitter {Data source}] +[division_end] +[division_start treeql] +[item modules/treeql/treeql.man treeql {Query tree objects}] +[division_end] +[division_start try] +[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}] +[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}] +[division_end] +[division_start uev] +[item modules/uev/uevent.man uevent {User events}] +[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}] +[division_end] +[division_start units] +[item modules/units/units.man units {unit conversion}] +[division_end] +[division_start uri] +[item modules/uri/uri.man uri {URI utilities}] +[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}] +[division_end] +[division_start uuid] +[item modules/uuid/uuid.man uuid {UUID generation and comparison}] +[division_end] +[division_start valtype] +[item modules/valtype/valtype_common.man valtype::common {Validation, common code}] +[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}] +[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}] +[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}] +[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}] +[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}] +[item modules/valtype/iban.man valtype::iban {Validation for IBAN}] +[item modules/valtype/imei.man valtype::imei {Validation for IMEI}] +[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}] +[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}] +[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}] +[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}] +[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}] +[division_end] +[division_start virtchannel_base] +[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}] +[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}] +[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}] +[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}] +[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}] +[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}] +[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}] +[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}] +[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}] +[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}] +[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}] +[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}] +[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}] +[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}] +[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}] +[division_end] +[division_start virtchannel_core] +[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}] +[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}] +[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}] +[division_end] +[division_start virtchannel_transform] +[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}] +[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}] +[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}] +[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}] +[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}] +[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}] +[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}] +[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}] +[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}] +[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption] +[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}] +[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}] +[division_end] +[division_start websocket] +[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}] +[division_end] +[division_start wip] +[item modules/wip/wip.man wip {Word Interpreter}] +[division_end] +[division_start yaml] +[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}] +[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}] +[division_end] +[division_start zip] +[item modules/zip/decode.man zipfile::decode {Access to zip archives}] +[item modules/zip/encode.man zipfile::encode {Generation of zip archives}] +[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}] +[division_end] +[division_end] +[toc_end]
\ No newline at end of file diff --git a/tcllib/support/devel/sak/doc/topic.txt b/tcllib/support/devel/sak/doc/topic.txt new file mode 100644 index 0000000..294c097 --- /dev/null +++ b/tcllib/support/devel/sak/doc/topic.txt @@ -0,0 +1 @@ +doc Generate documentation in various formats, and/or validate it. diff --git a/tcllib/support/devel/sak/help/cmd.tcl b/tcllib/support/devel/sak/help/cmd.tcl new file mode 100644 index 0000000..8fe5f8e --- /dev/null +++ b/tcllib/support/devel/sak/help/cmd.tcl @@ -0,0 +1,25 @@ +# -*- tcl -*- +# Implementation of 'help'. + +# Available variables +# * argv - Cmdline arguments + +if {[llength $argv] > 2} { + puts stderr "Usage: $argv0 help ?topic?" + exit 1 +} + +package require sak::help + +if {[llength $argv] == 1} { + # Argument is a topic. + # Locate text for the topic. + + sak::help::print [sak::help::on [lindex $argv 0]] + return +} + +sak::help::print [sak::help::alltopics] + +## +# ### diff --git a/tcllib/support/devel/sak/help/help.tcl b/tcllib/support/devel/sak/help/help.tcl new file mode 100644 index 0000000..7e00f1e --- /dev/null +++ b/tcllib/support/devel/sak/help/help.tcl @@ -0,0 +1,75 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +namespace eval ::sak::help {} + +# ### + +proc ::sak::help::print {text} { + global critcldefault + puts stdout [string map \ + [list @@ $critcldefault] $text] + return +} + +proc ::sak::help::on {topic} { + variable base + + # Look for static text and dynamic, i.e. generated help. + # Static is prefered. + + set ht [file join $base $topic help.txt] + if {[file exists $ht]} { + return [get_input $ht] + } + + set ht [file join $base $topic help.tcl] + if {[file exists $ht]} { + source $ht + return [sak::help::on::$topic] + } + + set help "" + append help \n + append help " The topic \"$topic\" is not known." \n + append help " The known topics are:" \n\n + + append help [topics] + + return $help +} + +proc ::sak::help::alltopics {} { + # Locate the quick-help for all topics and combine it with a + # general header. + + set help "\n" + append help " SAK - Swiss Army Knife\n\n" + append help " sak is a tool to ease the work" + append help " of developers and release managers. Try:\n\n" + append help [topics] + + return $help +} + +proc ::sak::help::topics {} { + variable base + set help "" + foreach f [lsort [glob -nocomplain -directory $base */topic.txt]] { + append help \tsak\ help\ [get_input $f] + } + return $help +} + +# ### + +namespace eval ::sak::help { + variable base [file join $::distribution support devel sak] +} + +## +# ### + +package provide sak::help 1.0 diff --git a/tcllib/support/devel/sak/help/help.txt b/tcllib/support/devel/sak/help/help.txt new file mode 100644 index 0000000..bca8f35 --- /dev/null +++ b/tcllib/support/devel/sak/help/help.txt @@ -0,0 +1,8 @@ + + help -- Print help message + + sak help ?topic? + + Print a help message about the specified topic. If no topic + was given then print a general help message about SAK itself, + and provide a list of the available topics. diff --git a/tcllib/support/devel/sak/help/pkgIndex.tcl b/tcllib/support/devel/sak/help/pkgIndex.tcl new file mode 100644 index 0000000..609a59a --- /dev/null +++ b/tcllib/support/devel/sak/help/pkgIndex.tcl @@ -0,0 +1,4 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::help 1.0 [list source [file join $dir help.tcl]] + + diff --git a/tcllib/support/devel/sak/help/topic.txt b/tcllib/support/devel/sak/help/topic.txt new file mode 100644 index 0000000..9d1eaca --- /dev/null +++ b/tcllib/support/devel/sak/help/topic.txt @@ -0,0 +1 @@ +help How to use help. diff --git a/tcllib/support/devel/sak/localdoc/cmd.tcl b/tcllib/support/devel/sak/localdoc/cmd.tcl new file mode 100644 index 0000000..e32fce7 --- /dev/null +++ b/tcllib/support/devel/sak/localdoc/cmd.tcl @@ -0,0 +1,21 @@ +# -*- tcl -*- +# Implementation of 'localdoc'. + +# Available variables +# * argv - Cmdline arguments +# * base - Location of sak.tcl = Top directory of Tcllib distribution +# * cbase - Location of all files relevant to this command. +# * sbase - Location of all files supporting the SAK. + +# ### + +package require sak::localdoc + +if {[llength $argv]} { + sak::localdoc::usage +} + +sak::localdoc::run + +## +# ### diff --git a/tcllib/support/devel/sak/localdoc/help.txt b/tcllib/support/devel/sak/localdoc/help.txt new file mode 100644 index 0000000..256c8ec --- /dev/null +++ b/tcllib/support/devel/sak/localdoc/help.txt @@ -0,0 +1,8 @@ + + localdoc -- Generate documentation for website and installer. + + sak localdoc + + Convert all documentation into html and nroff, for use by the + installer, and the website. For the latter the results of the + conversion are stored in the repository itself. diff --git a/tcllib/support/devel/sak/localdoc/localdoc.tcl b/tcllib/support/devel/sak/localdoc/localdoc.tcl new file mode 100644 index 0000000..36447a8 --- /dev/null +++ b/tcllib/support/devel/sak/localdoc/localdoc.tcl @@ -0,0 +1,129 @@ +# -*- tcl -*- +# sak::doc - Documentation facilities + +package require sak::util +package require sak::doc + +namespace eval ::sak::localdoc {} + +# ### +# API commands + +## ### ### ### ######### ######### ######### + +proc ::sak::localdoc::usage {} { + package require sak::help + puts stdout \n[sak::help::on localdoc] + exit 1 +} + +proc ::sak::localdoc::run {} { + getpackage cmdline cmdline/cmdline.tcl + getpackage fileutil fileutil/fileutil.tcl + getpackage textutil::repeat textutil/repeat.tcl + getpackage doctools doctools/doctools.tcl + getpackage doctools::toc doctools/doctoc.tcl + getpackage doctools::idx doctools/docidx.tcl + getpackage dtplite dtplite/dtplite.tcl + + # Read installation information. Need the list of excluded + # modules to suppress them here in the doc generation as well. + global excluded modules apps guide + source support/installation/modules.tcl + + lappend baseconfig -module tcllib + foreach e $excluded { + puts "Excluding $e ..." + lappend baseconfig -exclude */modules/$e/* + } + + set nav ../../../../home + + puts "Reindex the documentation..." + sak::doc::imake __dummy__ + sak::doc::index __dummy__ + + puts "Removing old documentation..." + # but keep the main index around, manually created, edited, not to be touched + # TODO: catch errors and restore automatically + file rename embedded/index.html e_index.html + + file delete -force embedded + file mkdir embedded/www + + # Put the saved main page back into place, early. + file rename e_index.html embedded/index.html + + file delete -force idoc + file mkdir idoc/man + file mkdir idoc/www + + puts "Generating manpages (installation)..." + set config $baseconfig + lappend config -exclude {*/doctools/tests/*} + lappend config -exclude {*/support/*} + lappend config -ext n + lappend config -o idoc/man + lappend config nroff . + + dtplite::do $config + + # Note: Might be better to run them separately. + # Note @: Or we shuffle the results a bit more in the post processing stage. + + set map { + .man .html + modules/ tcllib/files/modules/ + apps/ tcllib/files/apps/ + } + + set toc [string map $map [fileutil::cat support/devel/sak/doc/toc.txt]] + set apps [string map $map [fileutil::cat support/devel/sak/doc/toc_apps.txt]] + set mods [string map $map [fileutil::cat support/devel/sak/doc/toc_mods.txt]] + set cats [string map $map [fileutil::cat support/devel/sak/doc/toc_cats.txt]] + + puts "Generating HTML (installation)... Pass 1, draft..." + set config $baseconfig + lappend config -exclude {*/doctools/tests/*} + lappend config -exclude {*/support/*} + lappend config -toc $toc + lappend config -nav {Tcllib Home} $nav + lappend config -post+toc Categories $cats + lappend config -post+toc Modules $mods + lappend config -post+toc Applications $apps + lappend config -merge + lappend config -o idoc/www + lappend config html . + + dtplite::do $config + + puts "Generating HTML (installation)... Pass 2, resolving cross-references..." + dtplite::do $config + + puts "Generating HTML (online)... Pass 1, draft..." + set config $baseconfig + lappend config -exclude {*/doctools/tests/*} + lappend config -exclude {*/support/*} + lappend config -toc $toc + lappend config -post+toc Categories $cats + lappend config -post+toc Modules $mods + lappend config -post+toc Applications $apps + lappend config -merge + lappend config -raw + lappend config -o embedded/www + lappend config -header support/fossil-nav-integration.html + lappend config html . + + dtplite::do $config + + puts "Generating HTML (online)... Pass 2, resolving cross-references..." + dtplite::do $config + return +} + +# ### ### ### ######### ######### ######### + +package provide sak::localdoc 1.0 + +## +# ### diff --git a/tcllib/support/devel/sak/localdoc/pkgIndex.tcl b/tcllib/support/devel/sak/localdoc/pkgIndex.tcl new file mode 100644 index 0000000..560504b --- /dev/null +++ b/tcllib/support/devel/sak/localdoc/pkgIndex.tcl @@ -0,0 +1,2 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::localdoc 1.0 [list source [file join $dir localdoc.tcl]] diff --git a/tcllib/support/devel/sak/localdoc/topic.txt b/tcllib/support/devel/sak/localdoc/topic.txt new file mode 100644 index 0000000..4c1f934 --- /dev/null +++ b/tcllib/support/devel/sak/localdoc/topic.txt @@ -0,0 +1,2 @@ +localdoc Generate html & nroff documentation for display + from the website, and the installer. diff --git a/tcllib/support/devel/sak/old/help.txt b/tcllib/support/devel/sak/old/help.txt new file mode 100644 index 0000000..bc9ed95 --- /dev/null +++ b/tcllib/support/devel/sak/old/help.txt @@ -0,0 +1,102 @@ + Commands available through the swiss army knife aka SAK: + + help - This help + + /Configuration + /=========================================================== + + version - Return the bundle's version number + major - Return the bundle's major version number + minor - Return the bundle's minor version number + name - Return the bundle's package name + + /Development + /=========================================================== + + modules - Return list of modules. + contributors - Print a list of contributors to the bundle. + lmodules - See above, however one module per line + imodules - Return list of modules known to the installer. + critcl-modules - Return a list of modules with critcl enhancements. + + packages - Return indexed packages in the bundle, plus versions, + one package per line. Extracted from the + package indices found in the modules. + + provided - Return list and versions of provided packages + (in contrast to indexed). + + critcl ?module? - Build a critcl module [default is @@]. + + bench ?opt? ?module..? + - Run benchmark scripts (*.bench). + + Options: -throwerrors 0|1 Propagate errors if set. + -match pattern Exclude benchmarks not matching the + glob pattern. + -rmatch pattern S.a, but a regexp pattern. + -iters integer Max #iterations for all benchmarks. + -threads integer #Threads to use for threaded shells. + -o path File to write the results too. + -format text|csv|raw Format to use for the results. + -norm column Normalize results using the specified + column as reference. + -verbose Informational output during the run. + -debug Internal output during the run. + + bench/show ?-o path? ?-format f? ?-norm col? file... + + Reads the files, merges the data, then + writes the result back in the specified + format, to the specified file, possibly + normalizing to a column. Without a file + the result is written to stdout. + + bench/edit ?-o path? ?-format f? file col newvalue + + Reads the file, changes the interpreter + path in the column to a new value. For + merging of data from the same interpreter, + but possibly different versions of the + benchmarked package, like Tcllib. + + bench/del ?-o path? ?-format f? file col... + + Reads the file and removes the specified + columns. To delete unnecessary data in merged + results. + + oldvalidate ?module..? - Check listed modules for problems. + For all modules if none specified. + + oldvalidate_v ?module..? - Check listed modules for for version + problems. For all modules if none + specified. + + test ?module...? - Run testsuite for listed modules. + For all modules if none specified. + + docstrip/users - List modules using docstrip + docstrip/regen ?module...? - Regenerate the sources of all + or the listed modules from their + docstrip sources. + + /Documentation + /=========================================================== + + desc ?module...? - Module/Package descriptions + desc/2 ?module...? - Module/Package descriptions, alternate format. + + /Release engineering + /=========================================================== + + gendist - Generate distribution from CVS snapshot + + rpmspec - Generate a RPM spec file for the bundle. + gentip55 - Generate a TIP55-style DESCRIPTION.txt file. + yml - Generate a YAML description file. + + release name sf-user-id + - Marks the current state of all files as a new + release. This updates all ChangeLog's, and + regenerates the contents of PACKAGES diff --git a/tcllib/support/devel/sak/old/topic.txt b/tcllib/support/devel/sak/old/topic.txt new file mode 100644 index 0000000..4b94c29 --- /dev/null +++ b/tcllib/support/devel/sak/old/topic.txt @@ -0,0 +1 @@ +old Help for the existing command set. diff --git a/tcllib/support/devel/sak/readme/cmd.tcl b/tcllib/support/devel/sak/readme/cmd.tcl new file mode 100644 index 0000000..378ec46 --- /dev/null +++ b/tcllib/support/devel/sak/readme/cmd.tcl @@ -0,0 +1,25 @@ +# -*- tcl -*- +# Implementation of 'readme'. + +# Available variables +# * argv - Cmdline arguments +# * base - Location of sak.tcl = Top directory of Tcllib distribution +# * cbase - Location of all files relevant to this command. +# * sbase - Location of all files supporting the SAK. + +package require sak::util +package require sak::readme + +set raw 0 +set log 0 +set stem {} +set tclv {} + +if {[llength $argv]} { + sak::readme::usage +} + +sak::readme::run + +## +# ### diff --git a/tcllib/support/devel/sak/readme/help.txt b/tcllib/support/devel/sak/readme/help.txt new file mode 100644 index 0000000..a7e5a6d --- /dev/null +++ b/tcllib/support/devel/sak/readme/help.txt @@ -0,0 +1,14 @@ + + readme -- Generate a readme listing changes to modules and packages. + + sak readme + + This command compares the current state of the modules and + packages and against information from the last release + (support/releases/PACKAGES) and generates a README.txt listing + the relevant changes (new modules/packages, package version + changes, unchanged packages). + + The generated README is written to stdout. + + This is a support command for the release manager. diff --git a/tcllib/support/devel/sak/readme/pkgIndex.tcl b/tcllib/support/devel/sak/readme/pkgIndex.tcl new file mode 100644 index 0000000..adbce09 --- /dev/null +++ b/tcllib/support/devel/sak/readme/pkgIndex.tcl @@ -0,0 +1,2 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::readme 1.0 [list source [file join $dir readme.tcl]] diff --git a/tcllib/support/devel/sak/readme/readme.tcl b/tcllib/support/devel/sak/readme/readme.tcl new file mode 100644 index 0000000..165335e --- /dev/null +++ b/tcllib/support/devel/sak/readme/readme.tcl @@ -0,0 +1,448 @@ +# -*- tcl -*- +# (C) 2009 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::color +package require sak::review + +namespace eval ::sak::readme { + namespace import ::sak::color::* +} + +# ### + +proc ::sak::readme::usage {} { + package require sak::help + puts stdout \n[sak::help::on readme] + exit 1 +} + +proc ::sak::readme::run {} { + global package_name package_version + + getpackage struct::set struct/sets.tcl + getpackage struct::matrix struct/matrix.tcl + getpackage textutil::adjust textutil/adjust.tcl + + # Future: Consolidate with ... review ... + # Determine which packages are potentially changed, from the set + # of modules touched since the last release, as per the fossil + # repository's commit log. + + foreach {trunk tuid} [sak::review::Leaf trunk] break ;# rid + uuid + foreach {release ruid} [sak::review::YoungestOfTag release] break ;# datetime+uuid + + sak::review::AllParentsAfter $trunk $tuid $release $ruid -> rid uuid { + sak::review::FileSet $rid -> path action { + lappend modifiedm [lindex [file split $path] 1] + } + } + set modifiedm [lsort -unique $modifiedm] + + set issues {} + + # package -> list(version) + set old_version [loadoldv [location_PACKAGES]] + array set releasep [loadpkglist [location_PACKAGES]] + array set currentp [ipackages] + + array set changed {} + foreach p [array names currentp] { + foreach {vlist module} $currentp($p) break + set currentp($p) $vlist + set changed($p) [struct::set contains $modifiedm $module] + } + + LoadNotes + + # Containers for results + struct::matrix NEW ; NEW add columns 4 ; # module, package, version, notes + struct::matrix CHG ; CHG add columns 5 ; # module, package, old/new version, notes + struct::matrix ICH ; ICH add columns 5 ; # module, package, old/new version, notes + struct::matrix CNT ; CNT add columns 5; + set UCH {} + + NEW add row {Module Package {New Version} Comments} + + CHG add row [list {} {} "$package_name $old_version" "$package_name $package_version" {}] + CHG add row {Module Package {Old Version} {New Version} Comments} + + ICH add row [list {} {} "$package_name $old_version" "$package_name $package_version" {}] + ICH add row {Module Package {Old Version} {New Version} Comments} + + set newp {} ; set chgp {} ; set ichp {} + set newm {} ; set chgm {} ; set ichm {} ; set uchm {} + set nm 0 + set np 0 + + # Process all packages in all modules ... + foreach m [lsort -dict [modules]] { + puts stderr ...$m + incr nm + + foreach name [lsort -dict [Provided $m]] { + #puts stderr ......$p + incr np + + # Define list of versions, if undefined so far. + if {![info exists currentp($name)]} { + set currentp($name) {} + } + + # Detect and process new packages. + + if {![info exists releasep($name)]} { + # New package. + foreach v $currentp($name) { + puts stderr .........NEW + NEW add row [list $m $name $v [Note $m $name]] + lappend newm $m + lappend newp $name + } + continue + } + + # The package is not new, but possibly changed. And even + # if the version has not changed it may have been, this is + # indicated by changed(), which is based on the ChangeLog. + + set vequal [struct::set equal $releasep($name) $currentp($name)] + set note [Note $m $name] + + if {$vequal && ($note ne {})} { + if {$note eq "---"} { + # The note declares the package as unchanged. + puts stderr .........UNCHANGED/1 + lappend uchm $m + lappend UCH $name + } else { + # Note for package without version changes => must be invisible + puts stderr .........INVISIBLE-CHANGE + Enter $m $name $note ICH + lappend ichm $m + lappend ichp $name + } + continue + } + + if {!$changed($name) && $vequal} { + # Versions are unchanged, changelog also indicates no + # change. No particular attention here. + + puts stderr .........UNCHANGED/2 + lappend uchm $m + lappend UCH $name + continue + } + + if {$changed($name) && !$vequal} { + # Both changelog and version number indicate a + # change. Small alert, have to classify the order of + # changes. But not if there is a note, this is assumed + # to be the classification. + + if {$note eq {}} { + set note "\t=== Classify changes." + lappend issues [list $m $name "Classify changes"] + } + Enter $m $name $note + + lappend chgm $m + lappend chgp $name + continue + } + + # Changed according to ChangeLog, Version is not. ALERT. + # or: Versions changed, but according to changelog nothing + # in the code. ALERT. + + # Suppress the alert if we have a note, and dispatch per + # the note's contents (some tags are special, instructions + # to us here). + + if {($note eq {})} { + if {$changed($name)} { + # Changed according to ChangeLog, Version is not. ALERT. + set note "\t<<< MISMATCH. Version ==, ChangeLog ++" + } else { + set note "\t<<< MISMATCH. ChangeLog ==, Version ++" + } + + lappend issues [list $m $name [string range $note 5 end]] + } + + Enter $m $name $note + lappend chgm $m + lappend chgp $name + } + } + + # .... process the matrices and others results, make them presentable ... + + set newp [llength [lsort -uniq $newp]] + set newm [llength [lsort -uniq $newm]] + if {$newp} { + CNT add row [list $newp {new packages} in $newm modules] + } + + set chgp [llength [lsort -uniq $chgp]] + set chgm [llength [lsort -uniq $chgm]] + if {$chgp} { + CNT add row [list $chgp {changed packages} in $chgm modules] + } + + set ichp [llength [lsort -uniq $ichp]] + set ichm [llength [lsort -uniq $ichm]] + if {$ichp} { + CNT add row [list $ichp {internally changed packages} in $ichm modules] + } + + set uchp [llength [lsort -uniq $UCH]] + set uchm [llength [lsort -uniq $uchm]] + if {$uchp} { + CNT add row [list $uchp {unchanged packages} in $uchm modules] + } + + CNT add row [list $np {packages, total} in $nm {modules, total}] + + Header Overview + puts "" + if {[CNT rows] > 0} { + puts [Indent " " [Detrail [CNT format 2string]]] + } + puts "" + + if {[NEW rows] > 1} { + Header "New in $package_name $package_version" + puts "" + Sep NEW - [Clean NEW 1 0] + puts [Indent " " [Detrail [NEW format 2string]]] + puts "" + } + + if {[CHG rows] > 2} { + Header "Changes from $package_name $old_version to $package_version" + puts "" + Sep CHG - [Clean CHG 2 0] + puts [Indent " " [Detrail [CHG format 2string]]] + puts "" + } + + if {[ICH rows] > 2} { + Header "Invisible changes (documentation, testsuites)" + puts "" + Sep ICH - [Clean ICH 2 0] + puts [Indent " " [Detrail [ICH format 2string]]] + puts "" + } + + if {[llength $UCH]} { + Header Unchanged + puts "" + puts [Indent " " [textutil::adjust::adjust \ + [join [lsort -dict $UCH] {, }] -length 64]] + } + + variable legend + puts $legend + + if {![llength $issues]} return + + puts stderr [=red "Issues found ([llength $issues])"] + puts stderr " Please run \"./sak.tcl review\" to resolve," + puts stderr " then run \"./sak.tcl readme\" again." + puts stderr Details: + + struct::matrix ISS ; ISS add columns 3 + foreach issue $issues { + foreach {m p w} $issue break + set m " $m" + ISS add row [list $m $p $w] + } + + puts stderr [ISS format 2string] + + + puts stderr [=red "Issues found ([llength $issues])"] + puts stderr " Please run \"./sak.tcl review\" to resolve," + puts stderr " then run \"./sak.tcl readme\" again." + return +} + +proc ::sak::readme::Header {s {sep =}} { + puts $s + puts [string repeat $sep [string length $s]] + return +} + +proc ::sak::readme::Enter {m name note {mat CHG}} { + upvar 1 currentp currentp releasep releasep + + # To handle multiple versions we match the found versions up by + # major version. We assume that we have only one version per major + # version. This allows us to detect changes within each major + # version, new major versions, etc. + + array set om {} ; foreach v $releasep($name) {set om([lindex [split $v .] 0]) $v} + array set cm {} ; foreach v $currentp($name) {set cm([lindex [split $v .] 0]) $v} + + set all [lsort -dict [struct::set union [array names om] [array names cm]]] + + sakdebug { + puts @@@@@@@@@@@@@@@@ + parray om + parray cm + puts all\ $all + puts @@@@@@@@@@@@@@@@ + } + + foreach v $all { + if {[info exists om($v)]} {set ov $om($v)} else {set ov ""} + if {[info exists cm($v)]} {set cv $cm($v)} else {set cv ""} + $mat add row [list $m $name $ov $cv $note] + } + return +} + +proc ::sak::readme::Clean {m start col} { + set n [$m rows] + set marks [list $start] + set last {} + set lastm -1 + set sq 0 + + for {set i $start} {$i < $n} {incr i} { + set str [$m get cell $col $i] + + if {$str eq $last} { + set sq 1 + $m set cell $col $i {} + if {$lastm >= 0} { + #puts stderr "@ $i / <$last> / <$str> / ++ $lastm" + lappend marks $lastm + set lastm -1 + } else { + #puts stderr "@ $i / <$last> / <$str> /" + } + } else { + set last $str + set lastm $i + if {$sq} { + #puts stderr "@ $i / <$last> / <$str> / ++ $i /saved" + lappend marks $i + set sq 0 + } else { + #puts stderr "@ $i / <$last> / <$str> / saved" + } + } + } + return [lsort -uniq -increasing -integer $marks] +} + +proc ::sak::readme::Sep {m char marks} { + + #puts stderr "$m = $marks" + + set n [$m columns] + set sep {} + for {set i 0} {$i < $n} {incr i} { + lappend sep [string repeat $char [expr {2+[$m columnwidth $i]}]] + } + + foreach k [linsert [lsort -decreasing -integer -uniq $marks] 0 end] { + $m insert row $k $sep + } + return +} + +proc ::sak::readme::Indent {pfx text} { + return ${pfx}[join [split $text \n] \n$pfx] +} + +proc ::sak::readme::Detrail {text} { + set res {} + foreach line [split $text \n] { + lappend res [string trimright $line] + } + return [join $res \n] +} + +proc ::sak::readme::Note {m p} { + # Look for a note, and present to caller, if any. + variable notes + #parray notes + set k [list $m $p] + #puts <$k> + if {[info exists notes($k)]} { + return [join $notes($k) { }] + } + return "" +} + +proc ::sak::readme::Provided {m} { + set result {} + foreach {p ___} [ppackages $m] { + lappend result $p + } + return $result +} + +proc ::sak::readme::LoadNotes {} { + global distribution + variable notes + array set notes {} + + catch { + set f [file join $distribution .NOTE] + set f [open $f r] + while {![eof $f]} { + if {[gets $f line] < 0} continue + set line [string trim $line] + if {$line == {}} continue + foreach {k t} $line break + set notes($k) $t + } + close $f + } msg + return +} + +proc ::sak::readme::loadoldv {fname} { + set f [open $fname r] + foreach line [split [read $f] \n] { + set line [string trim $line] + if {[string match @* $line]} { + foreach {__ __ v} $line break + close $f + return $v + } + } + close $f + return -code error {Version not found} +} + +## +# ### + +namespace eval ::sak::readme { + variable legend { +Legend Change Details Comments + ------ ------- --------- + Major API: ** incompatible ** API changes. + + Minor EF : Extended functionality, API. + I : Major rewrite, but no API change + + Patch B : Bug fixes. + EX : New examples. + P : Performance enhancement. + + None T : Testsuite changes. + D : Documentation updates. + } + + variable review {} +} + +package provide sak::readme 1.0 diff --git a/tcllib/support/devel/sak/readme/topic.txt b/tcllib/support/devel/sak/readme/topic.txt new file mode 100644 index 0000000..938361f --- /dev/null +++ b/tcllib/support/devel/sak/readme/topic.txt @@ -0,0 +1,2 @@ +readme Generate a README listing the changes to modules and packages + since the last release. diff --git a/tcllib/support/devel/sak/registry/pkgIndex.tcl b/tcllib/support/devel/sak/registry/pkgIndex.tcl new file mode 100644 index 0000000..0e6116b --- /dev/null +++ b/tcllib/support/devel/sak/registry/pkgIndex.tcl @@ -0,0 +1,2 @@ +if {![package vsatisfies [package provide Tcl] 8.3]} return +package ifneeded pregistry 0.1 [list source [file join $dir registry.tcl]] diff --git a/tcllib/support/devel/sak/registry/registry.man b/tcllib/support/devel/sak/registry/registry.man new file mode 100644 index 0000000..d895164 --- /dev/null +++ b/tcllib/support/devel/sak/registry/registry.man @@ -0,0 +1,171 @@ +[comment {-*- tcl -*- doctools manpage}] +[manpage_begin pregistry n 0.1] +[copyright {2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>}] +[moddesc {Registry like data store}] +[titledesc {Registry like data store}] +[require Tcl 8.3] +[require pregistry [opt 0.1]] +[description] +[para] + +This package provides a class for the creation of registry-like data +storage objects. The contents of each storage are organized in a tree, +with each node managing a set of children and attributes, each +possibly empty. Stores are not persistent by default, but can be made +so through configuring them with a tie backend to talk to. + + +[section {Class API}] + +The package exports a single command, the class command, enabling the +creation of registry instances. Its API is: + +[list_begin definitions] + +[call [cmd ::pregistry] [arg object] [arg options]...] + +This command creates a new registry object with the name [arg object], +initializes it, and returns the fully qualified name of the object +command as its result. + +[para] + +The recognized options are explained in section [sectref OPTIONS]. + +[list_end] + +[section {Object API}] + +The objects created by the class command provide the methods listed below: + +[list_begin definitions] +[call [arg object] [method delete] [arg key] [opt [arg attr]]] + +If the optional [arg attr] argument is present, the specified +attribute under [arg key] will be deleted from the object. + +If the optional [arg attr] is omitted, the specified [arg key] and any +subkeys or attributes beneath it in the hierarchy will be deleted. If +the key could not be deleted then an error is generated. If the key +did not exist, the command has no effect. + +The command returns the empty string as its result. + + +[call [arg object] [method mtime] [arg key] [opt [arg attr]]] + +If the optional [arg attr] argument is present, the time of the last +modification of the specified attribute under [arg key] will be +returned, in seconds since the epoch. + +If the optional [arg attr] is omitted, the time of the last +modification of the specified [arg key] will be returned. + +If the key did not exist, the command will generate an error. + + +[call [arg object] [method exists] [arg key] [opt [arg attr]]] + +If the optional [arg attr] argument is present, the method checks +whether the specified attribute under [arg key] is present or not. + +If the optional [arg attr] is omitted, the method checks whether the +specified [arg key] is present or not. + +In both cases the result returned is boolean value, [const True] if +the checked entity exists, and [const False] otherwise. + + +[call [arg object] [method get] [arg key] [arg attr]] + +Returns the data associated with the attribute [arg attr] under the +[arg key]. If either the key or the attribute does not exist, then an +error is generated. + + +[call [arg object] [method get||default] [arg key] [arg attr] [arg default]] + +Like method [method get], except that the [arg default] is returned if +either the key or the attribute does not exist, instead of generating +an error. + + +[call [arg object] [method keys] [arg key] [opt [arg pattern]]] + +If [arg pattern] isn't specified, the command returns a list of names +of all the subkeys of [arg key]. If [arg pattern] is specified, only +those names matching the pattern are returned. Matching is determined +using the same rules as for [cmd {string match}]. If the specified +[arg key] does not exist, then an error is generated. + + +[call [arg object] [method set] [arg key] [opt "[arg attr] [arg value]"]] + +If [arg attr] isn't specified, creates the [arg key] if it doesn't +already exist. If [arg attr] is specified, creates the [arg key] +keyName and attribute [arg attr] if necessary. + +The contents of [arg attr] are set to [arg value]. The command returns +the [arg value] as its result. + + +[call [arg object] [method attrs] [arg key] [opt [arg pattern]]] + +If [arg pattern] isn't specified, returns a list of names of all the +attributes of [arg key]. If [arg pattern] is specified, only those +names matching the pattern are returned. Matching is determined using +the same rules as for [cmd {string match}]. + + + +[call [arg object] [method configure]] + +Returns a dictionary mapping the option of the object to their +currently configured values. + +[call [arg object] [method configure] [arg option] [arg newvalue]...] + +This invokation sets the configured value of option [arg option] to +[arg newvalue]. Nothing will be done if current and new value are +identical. Returns the empty string. + +[call [arg object] [method configure] [arg option]] +[call [arg object] [method cget] [arg option]] + +Returns the value configured for the specified option [arg option]. + +[list_end] + + +[section KEYS] + +All elements in the registry are identified by a unique key, which is +a list of strings. This identifies the path from the root of the tree +to the requested element. The root itself is identified by the empty +list. Each child C of an element E have to have unique name, which +will be the last element of the key identifying this child. The head +of the key will be the key of E. + + +[section OPTIONS] + +The registry object recognize a single option, + +[list_begin options] +[opt_def -tie tiedefinition] + +See the documentation of command [cmd ::tie::tie], in the package +[package tie]. The value of the option is a list of words equivalent +to the arguments "[arg dstype] [arg dsname]..." of [cmd ::tie::tie]. +I.e. the identity of the tie backend to use, followed by the +specification of the location to use, per the chosen backend. + +Example: +[example { + set r [pregistry %AUTO% -tie [list file $path]] +}] + +[list_end] + +[keywords registry {data store} tree] +[manpage_end] diff --git a/tcllib/support/devel/sak/registry/registry.tcl b/tcllib/support/devel/sak/registry/registry.tcl new file mode 100644 index 0000000..2fc4639 --- /dev/null +++ b/tcllib/support/devel/sak/registry/registry.tcl @@ -0,0 +1,287 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require Tcl 8.3 +package require snit +package require tie + +# ### + +snit::type pregistry { + + # API + # delete key ?attribute? + # mtime key ?attribute? + # get key attribute + # keys key ?pattern?/* + # set key ?attribute value? + # attrs key ?pattern? + + option -tie -default {} -configuremethod TIE ; # Persistence + + constructor {args} { + $self configurelist $args + $self INIT + return + } + + # ### + + method delete {key args} { + #puts DEL|$key| + + if {[llength $args] > 1} {return -code error "wrong\#args"} + + if {[catch {NODE $key} n]} return + if {[llength $args]} { + # Delete attribute + + set attr [lindex $args 0] + set pattern [list A $n $attr *] + set km [list N $n M] + + array unset data $pattern + set data($km) [clock seconds] + } else { + # Delete key and children. + #puts N|$n| + + if {![llength $key]} { + return -code error "cannot delete root" + } + + # Children first + foreach c [array names data [list C $n *]] { + set c [lindex $c end] + #puts _|$c| + $self delete [linsert $key end $c] + } + + # And now the node itself. Modify the parent as well, + # remove this node as a child. + + set self [lindex $key end] + set pidx [list N $n P] + set npat [list N $n *] + set apat [list A $n * *] + + set pid $data($pidx) + set cidx [list C $pid $self] + set midx [list N $pid M] + + array unset data $apat + array unset data $npat + unset -nocomplain data($cidx) + set data($midx) [clock seconds] + + unset -nocomplain ncache($key) + } + return + } + + method mtime {key args} { + if {[llength $args] > 1} {return -code error "wrong\#args"} + set n [NODE $key] + if {[llength $args]} { + set attr [lindex $args 0] + set idx [list A $n $attr M] + if {![info exists data($idx)]} { + return -code error "Unknown attribute \"$attr\" in key \"$key\"" + } + } else { + set idx [list N $n M] + } + return $data($idx) + } + + method exists {key args} { + if {[llength $args] > 1} { + return -code error "wrong\#args" + } elseif {[catch {NODE $key} n]} { + return 0 + } elseif {![llength $args]} { + return 1 + } + + set attr [lindex $args 0] + set idx [list A $n $attr V] + return [info exist data($idx)] + } + + method get {key attr} { + set n [NODE $key] + set idx [list A $n $attr V] + if {![info exists data($idx)]} { + return -code error "Unknown attribute \"$attr\" in key \"$key\"" + } + return $data($idx) + } + + method get||default {key attr default} { + if {[catch {NODE $key} n]} { + return $default + } + set idx [list A $n $attr V] + if {![info exists data($idx)]} { + return $default + } + return $data($idx) + } + + method keys {key {pattern *}} { + set n [NODE $key] + set pattern [list C $n $pattern] + set res {} + foreach c [array names data $pattern] { + lappend res [linsert $key end $c] + } + return $res + } + + method attrs {key {pattern *}} { + set n [NODE $key] + set pattern [list A $n $pattern V] + set res {} + foreach c [array names data $pattern] { + lappend res [lindex $c end-1] + } + return $res + } + + method lappend {key attr value} { + set list [$self get||default $key $attr {}] + lappend list $value + $self set $key $attr $list + return + } + + method set {key args} { + set n [NODE $key 1] + if {![llength $args]} return + if {[llength $args] != 2} {return -code error "wrong\#args"} + foreach {attr value} $args break + + # Ignore calls which do not change the contents of the + # database. + + set aidx [list A $n $attr V] + if { + [info exists data($aidx)] && + [string equal $data($aidx) $value] + } return ; # {} + + #puts stderr "$n $attr | $key | ($value)" + + set aids [list A $n $attr M] + set data($aidx) $value + set data($aids) [clock seconds] + return + } + + # ### state + + variable data -array {} + + # Tree of keys. Each keys can have multiple attributes. + # Each key, and attribute, have a modification timestamp. + + # Each node in the tree is identified by a numeric id. Children + # refer to their parents. Parent id + name refers to unique child. + + # Array contents + + # (I) -> number id counter + # (C id name) -> id parent id x name => child id + # (N id P) -> id node id => parent id, empty for root + # (N id M) -> timestamp node id => last modification + # (A id name V) -> string node id x attribute name => value + # (A id name M) -> timestamp s.a => last modification + + # This structure is less memory/space intensive than the setup of + # 1registry. It is also more difficult to query as it is less + # tabular, less redundant. + + # Another thing becoming more complex is the deletion of a + # subtree. It is now necessary to walk the the tree, instead of + # just deleting all keys in the array matching a certain + # pattern. That at least can be done at the C level (array unset). + + # The conversion from key list to node is also linear in key + # length, and an operation done often. Better cache it. However + # only internally, or the space savingsare gone too as the space + # is then taken by the conversion cache. Hm. Still less than + # before, as each key is listed at most once. In 1registry it was + # repeated for each of its attributes as well. This would regain + # speed for searches, as the conversion cache now is a tabular + # representation of the tree, and easily globbed. + + # ### configure -tie (persistence) + + method TIE {option value} { + if {[string equal $options(-tie) $value]} return + tie::untie [myvar data] + # 8.5 - tie::tie [myvar data] {expand}$value + eval [linsert $value 0 tie::tie [myvar data]] + set options(-tie) $value + return + } + + method INIT {} { + if {![info exists data(I)]} { + set anchor {C {} {}} + set rootp {N 0 P} + set roots {N 0 M} + + set data(I) 0 + set data($anchor) 0 + set data($rootp) {} + set data($roots) [clock seconds] + } + return + } + + variable ncache -array {} + + proc NODE {key {create 0}} { + upvar 1 ncache ncache data data + if {[info exist ncache($key)]} { + # Cached, shortcut + return $ncache($key) + } + if {![llength $key]} { + # Root, shortcut + set id 0 + } else { + # Recursively convert, possibly create + set parent [lrange $key 0 end-1] + set self [lindex $key end] + set pid [NODE $parent $create] + set idx [list C $pid $self] + + if {[info exists data($idx)]} { + set id $data($idx) + } elseif {!$create} { + return -code error "Unknown key \"$key\"" + } else { + set id [incr data(I)] + set idxp [list N $id P] + set idxm [list N $id M] + + set data($idx) $id + set data($idxp) $pid + set data($idxm) [clock seconds] + } + } + set ncache($key) $id + return $id + } + + # ### +} + +## +# ### + +package provide pregistry 0.1 diff --git a/tcllib/support/devel/sak/registry/registry.test b/tcllib/support/devel/sak/registry/registry.test new file mode 100644 index 0000000..4dead0c --- /dev/null +++ b/tcllib/support/devel/sak/registry/registry.test @@ -0,0 +1,450 @@ +# -*- tcl -*- +# registry.test: tests for the registry structure. +# +# Copyright (c) 2006 by Andreas Kupries <a.kupries@westend.com> +# All rights reserved. +# +# RCS: @(#) $Id: registry.test,v 1.1 2006/09/06 06:07:09 andreas_kupries Exp $ + +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.3 +testsNeedTcltest 2.2 + +support { + use snit/snit.tcl snit + use tie/tie.tcl tie +} +testing { + useLocal registry.tcl pregistry +} + +# ------------------------------------------------------------------------- + +proc dump/ {r {root {}} {rv {}}} { + if {$rv != {}} {upvar 1 $rv res} else {set res {}} + lappend res $root/ + foreach a [$r attrs $root] { + lappend res [list $root/ :$a [$r get $root $a]] + } + foreach c [$r keys $root] { + dump/ $r $c res + } + return $res +} + +proc dump {r root} { + lappend res $root/ + foreach a [$r attrs $root] { + lappend res [list $root/ :$a [$r get $root $a]] + } + return $res +} + +# ------------------------------------------------------------------------- + +test registry-1.0 {base state} { + pregistry myreg + set res [dump/ myreg] + myreg destroy + set res +} / + +# ------------------------------------------------------------------------- +# Attribute manipulation, root, in-tree, and leaf + +set n 0 +foreach {key prekey structure} { + {} {} / + {sub tree leaf} {} {/ sub/ {sub tree/} {sub tree leaf/}} + {sub tree} {sub tree leaf} {/ sub/ {sub tree/} {sub tree leaf/}} +} { + test registry-2.$n {structure} { + pregistry myreg + myreg set $prekey + myreg set $key + set res [dump/ myreg] + myreg destroy + set res + } $structure + + test registry-3.1.$n {no attributes, node creation} { + pregistry myreg + myreg set $prekey + myreg set $key + set res [dump myreg $key] + myreg destroy + set res + } [list $key/] + + test registry-3.2.$n {bad node creation} { + pregistry myreg + catch {myreg set} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodset type selfns win self key args"} + + test registry-3.3.$n {bad node creation} { + pregistry myreg + catch {myreg set a b c d} res + myreg destroy + set res + } {wrong#args} + + test registry-3.4.$n {bad node creation} { + pregistry myreg + catch {myreg set a b} res + myreg destroy + set res + } {wrong#args} + + test registry-4.1.$n {set attribute, ok} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [dump myreg $key] + myreg destroy + set res + } [list $key/ [list $key/ :foo bar]] + + test registry-4.2.$n {set attribute, change} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg get $key foo] + myreg set $key foo bold + lappend res [myreg get $key foo] + myreg destroy + set res + } {bar bold} + + test registry-5.1.$n {get attribute, ok} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg get $key foo] + myreg destroy + set res + } bar + + test registry-5.2.$n {get attribute, missing attribute} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get $key alpha} res + myreg destroy + set res + } "Unknown attribute \"alpha\" in key \"$key\"" + + test registry-5.3.$n {get attribute, missing key} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get TEST x} res + myreg destroy + set res + } {Unknown key "TEST"} + + test registry-5.4.$n {get attribute, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget type selfns win self key attr"} + + test registry-5.5.$n {get attribute, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get x} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget type selfns win self key attr"} + + test registry-5.6.$n {get attribute, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get x y z} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget type selfns win self key attr"} + + test registry-6.1.$n {get||default, ok} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg get||default $key foo DEF] + myreg destroy + set res + } bar + + test registry-6.2.$n {get||default, missing attribute} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg get||default $key alpha DEF] + myreg destroy + set res + } DEF + + test registry-6.3.$n {get||default, missing key} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg get||default TEST x DEF] + myreg destroy + set res + } DEF + + test registry-6.4.$n {get||default, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get||default} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"} + + test registry-6.5.$n {get||default, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get||default x} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"} + + test registry-6.6.$n {get||default, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get||default x y} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"} + + test registry-6.7.$n {get||default, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg get||default x y z a} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"} + + test registry-7.1.$n {attribute matching, total} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + myreg set $key alpha omega + set res [lsort [myreg attrs $key]] + myreg destroy + set res + } {alpha foo} + + test registry-7.2.$n {attribute matching, partial} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + myreg set $key alpha omega + set res [lsort [myreg attrs $key a*]] + myreg destroy + set res + } alpha + + test registry-7.3.$n {attribute matching, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg attrs} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodattrs type selfns win self key ?pattern?"} + + test registry-7.4.$n {attribute matching, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg attrs x y z} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodattrs type selfns win self key ?pattern?"} + + test registry-8.1.$n {attribute existence, ok} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg exists $key foo] + myreg destroy + set res + } 1 + + test registry-8.2.$n {attribute existence, missing} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg exists $key alpha] + myreg destroy + set res + } 0 + + test registry-8.3.$n {attribute existence, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg exists} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodexists type selfns win self key args"} + + test registry-8.4.$n {attribute existence, wrong#args} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + catch {myreg exists x y z} res + myreg destroy + set res + } {wrong#args} + + test registry-9.1.$n {key existence, ok} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg exists $key] + myreg destroy + set res + } 1 + + test registry-9.2.$n {key existence, missing} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + set res [myreg exists alpha] + myreg destroy + set res + } 0 + + # key existence, wrong args, see attribute existence + + test registry-10.1.$n {key matching, total} { + pregistry myreg + myreg set $key + myreg set [linsert $key end alpha] + myreg set [linsert $key end omega] + set res [lsort [myreg keys $key]] + myreg destroy + set res + } [list [linsert $key end alpha] [linsert $key end omega]] + + test registry-10.2.$n {key matching, partial} { + pregistry myreg + myreg set $key + myreg set [linsert $key end alpha] + myreg set [linsert $key end omega] + set res [lsort [myreg keys $key a*]] + myreg destroy + set res + } [list [linsert $key end alpha]] + + test registry-10.3.$n {key matching, wrong#args} { + pregistry myreg + myreg set $key + catch {myreg keys} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodkeys type selfns win self key ?pattern?"} + + test registry-10.4.$n {key matching, wrong#args} { + pregistry myreg + myreg set $key + catch {myreg keys x y z} res + myreg destroy + set res + } {wrong # args: should be "::pregistry::Snit_methodkeys type selfns win self key ?pattern?"} + + test registry-11.1.$n {attribute deletion, ok} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + myreg set $key alpha omega + myreg delete $key foo + set res [dump myreg $key] + myreg destroy + set res + } [list $key/ [list $key/ :alpha omega]] + + test registry-11.2.$n {attribute deletion, missing} { + pregistry myreg + myreg set $prekey + myreg set $key foo bar + myreg set $key alpha omega + set code [catch {myreg delete $key fox} res] + myreg destroy + list $code $res + } {0 {}} + + incr n +} + +set n 0 +foreach {par key structure} { + {foo fox fool} {foo fox fool bar soom} + {{/ foo/ {foo fox/} {foo fox fool/} {foo fox fool bar/} {foo fox fool bar soom/} {{foo fox fool bar soom/} :foo bar}} {/ foo/ {foo fox/}}} + + foo foo + {{/ foo/ {foo/ :foo bar}} /} +} { + test registry-12.1.$n {deletion} { + set res {} + pregistry myreg + myreg set $par + myreg set $key foo bar + lappend res [dump/ myreg] + myreg delete $par + lappend res [dump/ myreg] + myreg destroy + set res + } $structure + + test registry-12.2.$n {deletion of non-existing key} { + pregistry myreg + myreg set $par + catch {myreg delete FOO} res + myreg destroy + set res + } {} + + incr n +} + +test registry-13.1 {deletion of root} { + pregistry myreg + catch {myreg delete {}} res + myreg destroy + set res +} {cannot delete root} + +test registry-13.2 {wrong#args} { + pregistry myreg + catch {myreg delete} res + myreg destroy + set res +} {wrong # args: should be "::pregistry::Snit_methoddelete type selfns win self key args"} + +test registry-13.3 {wrong#args} { + pregistry myreg + catch {myreg delete a b c} res + myreg destroy + set res +} {wrong#args} + +# ------------------------------------------------------------------------- + +::tcltest::cleanupTests diff --git a/tcllib/support/devel/sak/review/cmd.tcl b/tcllib/support/devel/sak/review/cmd.tcl new file mode 100644 index 0000000..420b53f --- /dev/null +++ b/tcllib/support/devel/sak/review/cmd.tcl @@ -0,0 +1,25 @@ +# -*- tcl -*- +# Implementation of 'review'. + +# Available variables +# * argv - Cmdline arguments +# * base - Location of sak.tcl = Top directory of Tcllib distribution +# * cbase - Location of all files relevant to this command. +# * sbase - Location of all files supporting the SAK. + +package require sak::util +package require sak::review + +set raw 0 +set log 0 +set stem {} +set tclv {} + +if {[llength $argv]} { + sak::review::usage +} + +sak::review::run + +## +# ### diff --git a/tcllib/support/devel/sak/review/help.txt b/tcllib/support/devel/sak/review/help.txt new file mode 100644 index 0000000..ff789a5 --- /dev/null +++ b/tcllib/support/devel/sak/review/help.txt @@ -0,0 +1,10 @@ + + review -- Interactively review changed modules and packages + + sak review + + This command scans the system for changes and then enters + a sub-shell where the caller can interactively review and + tag these changes. + + This is a support command for the release manager. diff --git a/tcllib/support/devel/sak/review/pkgIndex.tcl b/tcllib/support/devel/sak/review/pkgIndex.tcl new file mode 100644 index 0000000..4fe595a --- /dev/null +++ b/tcllib/support/devel/sak/review/pkgIndex.tcl @@ -0,0 +1,2 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::review 1.0 [list source [file join $dir review.tcl]] diff --git a/tcllib/support/devel/sak/review/review.tcl b/tcllib/support/devel/sak/review/review.tcl new file mode 100644 index 0000000..6c12ee9 --- /dev/null +++ b/tcllib/support/devel/sak/review/review.tcl @@ -0,0 +1,964 @@ +# -*- tcl -*- +# # ## ### ##### ######## ############# ##################### +# (C) 2013 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require linenoise +package require sak::color + +getpackage fileutil fileutil/fileutil.tcl +getpackage doctools::changelog doctools/changelog.tcl +getpackage struct::set struct/sets.tcl +getpackage term::ansi::send term/ansi/send.tcl + +namespace eval ::sak::review { + namespace import ::sak::color::* +} + +# ### + +proc ::sak::review::usage {} { + package require sak::help + puts stdout \n[sak::help::on review] + exit 1 +} + +proc ::sak::review::run {} { + Scan ; Review + return +} + +# # ## ### ##### ######## ############# ##################### +## Phase I. Determine which modules require a review. +## A derivative of the code in ::sak::readme. + +proc ::sak::review::Scan {} { + global distribution + variable review + variable rm + + Banner "Scan for modules and packages to review..." + + # Future: Consolidate with ... readme ... + # Determine which packages are potentially changed and therefore + # in need of review, from the set of modules touched since the + # last release, as per the fossil repository's commit log. + + # list of modified modules. + set modifiedm {} + + # database of commit messages per changed module. + # cm: module -> list(string) + array set cm {} + + # pt: database of files per changed module. + # module -> list(path) + + # rm: module -> list (revs); rev = uuid+desc+files (string) + array set rm {} + + foreach {trunk tuid} [Leaf trunk] break ;# rid + uuid + foreach {release ruid} [YoungestOfTag release] break ;# datetime + uuid + AllParentsAfter $trunk $tuid $release $ruid -> rid uuid { + Next ; Progress " $rid" + + set d [Description $rid] + Progress " D" + + # Determine file set, split by modules, then generate a package of + # uuid, description and filtered files per modules touched. + + array set fs {} + + FileSet $rid -> path action { + Progress . + + set px [file split $path] + set themodule [lindex $px 1] + lappend modifiedm $themodule + lappend cm($themodule) $d + + # ignore files in modules/ + if {[llength $px] < 3} continue + + #puts $themodule||$rid||$action|$px| + + lappend fs($themodule) [file join {*}[lrange $px 2 end]] + lappend pt($themodule) [file join {*}[lrange $px 2 end]] + } + + foreach {m files} [array get fs] { + set str \[$uuid\]\n$d\n\n[join [lsort -dict $files] \n] + lappend rm($m) $str + } + unset fs + } + + Next + + # cleanup module list, may have duplicates + set modifiedm [lsort -unique $modifiedm] + + array set review {} + + # package -> list(version) + set old_version [loadoldv [location_PACKAGES]] + array set releasep [loadpkglist [location_PACKAGES]] + array set currentp [ipackages] + + array set changed {} + foreach p [array names currentp] { + foreach {vlist module} $currentp($p) break + set currentp($p) $vlist + set changed($p) [struct::set contains $modifiedm $module] + } + + LoadNotes + + set np 0 + # Process all packages in all modules ... + foreach m [lsort -dict [modules]] { + Next ; Progress " $m" + foreach name [lsort -dict [Provided $m]] { + #Next ; Progress "... $m/$name" + # Define list of versions, if undefined so far. + if {![info exists currentp($name)]} { + set currentp($name) {} + } + + # Detect new packages. Ignore them. + + if {![info exists releasep($name)]} { + #Progress " /new" + continue + } + + # The package is not new, but possibly changed. And even + # if the version has not changed it may have been, this is + # indicated by changed(), which is based on the ChangeLog. + + set vequal [struct::set equal $releasep($name) $currentp($name)] + set note [Note $m $name] + + # Detect packages whose versions are unchanged, and whose + # changelog also indicates no change. Ignore these too. + + if {!$changed($name) && $vequal} { + #Progress " /not changed" + continue + } + + # Now look for packages where both changelog and version + # number indicate a change. These we have to review. + + if {$changed($name) && !$vequal} { + lappend review($m) [list $name classify $note] + #Progress " [=cya classify]" + incr np + continue + } + + # What remains are packages which are changed according to + # their changelog, but their version disagrees. Or the + # reverse. These need a big review to see who is right. + # We may have to bump their version information, not just + # classify changes. Of course, in modules with multiple + # packages it is quite possible to be unchanged and the + # changelog refers to the siblings. + + lappend review($m) [list $name mismatch $note] + #Progress " [=cya mismatch]" + incr np + } + } + + Close + + # Postprocessing phase, pull in all relevant commit messages of the module. + + foreach m [array names review] { + # commit messages + if {[info exists cm($m)]} { + set entries [lsort -unique $cm($m)] + } else { + set entries {} + } + # and affected files + if {[info exists pt($m)]} { + lappend entries [join [lsort -dict [lsort -unique $pt($m)]] \n] + } + + set review($m) [list $review($m) [join $entries \n\n]] + } + + # review: module -> list (notes, desc+files) + set review() $np + return +} + +# see also readme +proc ::sak::review::Provided {m} { + set result {} + foreach {p ___} [ppackages $m] { + lappend result $p + } + return $result +} + +# see also readme +proc ::sak::review::loadoldv {fname} { + set f [open $fname r] + foreach line [split [read $f] \n] { + set line [string trim $line] + if {[string match @* $line]} { + foreach {__ __ v} $line break + close $f + return $v + } + } + close $f + return -code error {Version not found} +} + +proc ::sak::review::Progress {text} { + puts -nonewline stdout $text + flush stdout + return +} + +proc ::sak::review::Next {} { + # erase to end of line, then move back to start of line. + term::ansi::send::eeol + puts -nonewline stdout \r + flush stdout + return +} + +proc ::sak::review::Close {} { + puts stdout "" + return +} + +proc ::sak::review::Clear {} { + term::ansi::send::clear + return +} + +proc ::sak::review::Banner {text} { + Clear + puts stdout "\n <<SAK Tcllib: $text>>\n" + return +} + +proc ::sak::review::Note {m p} { + # Look for a note, and present to caller, if any. + variable notes + #parray notes + set k [list $m $p] + #puts <$k> + if {[info exists notes($k)]} { + return $notes($k) + } + return "" +} + +proc ::sak::review::SaveNote {at t} { + global distribution + set f [open [file join $distribution .NOTE] a] + puts $f [list $at $t] + close $f + return +} + +proc ::sak::review::LoadNotes {} { + global distribution + variable notes + array set notes {} + + catch { + set f [file join $distribution .NOTE] + set f [open $f r] + while {![eof $f]} { + if {[gets $f line] < 0} continue + set line [string trim $line] + if {$line == {}} continue + foreach {k t} $line break + set notes($k) $t + } + close $f + } + + return +} + +proc ::sak::review::FileSet {rid _ pv av script} { + upvar 1 $pv thepath $av theaction + + lappend map @rid@ $rid + foreach line [split [string trim [F [string map $map { + SELECT filename.name, + CASE WHEN nullif(mlink.pid,0) is null THEN 'added' + WHEN nullif(mlink.fid,0) is null THEN 'deleted' + ELSE 'edited' + END + FROM mlink, filename + WHERE mlink.mid = @rid@ + AND mlink.fnid = filename.fnid + ORDER BY filename.name; + }]]] \n] { + foreach {thepath theaction} [split $line |] break + # ignore all changes not in modules + if {![string match modules* $thepath]} continue + uplevel 1 $script + } + return +} + +proc ::sak::review::Description {rid} { + lappend map @rid@ $rid + string trim [F [string map $map { + SELECT coalesce(event.ecomment,event.comment) + FROM event + WHERE event.objid = @rid@ + ; + }]] +} + +proc ::sak::review::AllParentsAfter {rid ruid cut cutuid _ rv uv script} { + upvar 1 $rv therev $uv theuid + + array set rev {} + set rev($rid) . + lappend front $rid + + # Initial run, for the starting revision. + set therev $rid + set theuid $ruid + uplevel 1 $script + + # Standard iterative incremental transitive-closure. We have a + # front of revisions whose parents we take, which become the new + # front to follow, until no parents are delivered anymore due to + # the cutoff condition (timestamp, only the revisions coming after + # are accepted). + + while {1} { + set new {} + foreach cid $front { + foreach pid [Parents $cid $cut] { + foreach {pid uuid mtraw mtime} [split [string trim $pid |] |] break + if {$uuid eq $cutuid} continue + + lappend new $pid $mtime $uuid + if {$mtraw <= $cut} { + puts "Overshot: $rid $mtime $uuid" + } + } + } + if {![llength $new]} break + + # record new parents, and make them the new starting points + set front {} + foreach {pid mtime uuid} $new { + if {[info exists rev($pid)]} continue + set rev($pid) . + lappend front $pid + + set therev $pid + set theuid $uuid + uplevel 1 $script + } + } +} + +proc ::sak::review::Parents {rid cut} { + lappend map @rid@ $rid + lappend map @cutoff@ $cut + split [F [string map $map { + SELECT pid, blob.uuid, event.mtime, datetime(event.mtime) + FROM plink, blob, event + WHERE plink.cid = @rid@ + AND plink.pid = blob.rid + AND plink.pid = event.objid + AND event.mtime > @cutoff@ + ; + }]] \n +} + +proc ::sak::review::YoungestOfTag {tag} { + lappend map @tag@ $tag + puts stderr "last $tag = [F [string map $map { + SELECT datetime (event.mtime) + FROM tag, tagxref, event + WHERE tag.tagname = 'sym-' || '@tag@' + AND tagxref.tagid = tag.tagid + AND tagxref.tagtype > 0 + AND tagxref.rid = event.objid + AND event.type = 'ci' + ORDER BY event.mtime DESC + LIMIT 1 + ; + }]]" + split [F [string map $map { + SELECT event.mtime, blob.uuid + FROM tag, tagxref, event, blob + WHERE tag.tagname = 'sym-' || '@tag@' + AND tagxref.tagid = tag.tagid + AND tagxref.tagtype > 0 + AND tagxref.rid = event.objid + AND event.type = 'ci' + AND blob.rid = event.objid + ORDER BY event.mtime DESC + LIMIT 1 + ; + }]] | +} + +proc ::sak::review::Leaf {branch} { + lappend map @branch@ $branch + split [F [string map $map { + SELECT blob.rid, blob.uuid + FROM leaf, blob, tag, tagxref + WHERE blob.rid = leaf.rid + AND tag.tagname = 'sym-' || '@branch@' + AND tagxref.tagid = tag.tagid + AND tagxref.tagtype > 0 + AND tagxref.rid = leaf.rid + ; + }]] | +} + +proc ::sak::review::F {script} { + #puts |$script| + set r [exec fossil sqlite3 << $script] + #puts ($r) + return $r +} + + + +# # ## ### ##### ######## ############# ##################### +## Phase II. Interactively review the changes packages. + +# Namespace variables +# +# review : array, database of all modules, keyed by name +# nm : number of modules +# modules : list of module names, keys to --> review +# current : index in -> modules, current module +# np : number of packages in current module +# packages : list of packages in current module +# currentp : index in --> packages +# im : 1+current | indices for display +# ip : 1+currentp | +# ir : 1+currentr | +# end : array : module (name) --> index of last package +# stop : repl exit flag +# map : array : text -> module/package index +# commands : proper commands +# allcommands : commands + namesof(map) +# + +proc ::sak::review::Review {} { + variable review ;# table of everything to review + variable rm ;# Alt structure, rev (desc, files) by module. + variable nm ;# number of modules + variable modules ;# list of module names, sorted + variable stop 0 ;# repl exit flag + variable end ;# last module/package index. + variable smode rev ;# standard display per revision. + + variable navcommands + variable allcommands ;# list of all commands, sorted + variable commands ;# list of proper commands, sorted + variable map ;# map from package names to module/package indices. + variable prefix + + Banner "Packages to review: $review()" + unset review() + + set nm [array size review] + if {!$nm} return + + set modules [lsort -dict [array names review]] + + # Map package name --> module/package index. + set im 0 + foreach m $modules { + foreach {packages clog} $review($m) break + set ip 0 + foreach p $packages { + set end($im) $ip + set end($m) $ip + set end() [list $im $ip] + foreach {name what tags} $p break + lappend map(@$name) [list $im $ip] + lappend map(@$name/$m) [list $im $ip] + incr ip + } + incr im + } + + # Drop amibigous mappings, and fill the list of commands. + foreach k [array names map] { + # Skip already dropped keys (extended forms). + if {![info exists map($k)]} continue + if {[llength $map($k)] < 2} { + set map($k) [lindex $map($k) 0] + # Drop extended form, not needed. + array unset map $k/* + } else { + unset map($k) + } + } + + # Map module name --> module/package index + # If not preempted by package mapping. + set im -1 + foreach m $modules { + incr im + if {[info exists map(@$m)]} continue + set map(@$m) [list $im 0] + } + + # Map command prefix -> full command. + + array set prefix {} + foreach c [info commands ::sak::review::C_*] { + set c [string range [namespace tail $c] 2 end] + lappend commands $c + lappend allcommands $c + set buf {} + foreach ch [split $c {}] { + append buf $ch + lappend prefix($buf) $c + } + } + + foreach c [array names map] { + lappend allcommands $c + set buf {} + foreach ch [split $c {}] { + append buf $ch + lappend prefix($buf) $c + } + } + + set commands [lsort -dict $commands] + set allcommands [lsort -dict $allcommands] + set navcommands [lsort -dict [array names map]] + + # Enter the REPL + Goto {0 0} 1 + linenoise::cmdloop \ + -history 1 \ + -exit ::sak::review::Exit \ + -continued ::sak::review::Continued \ + -prompt1 ::sak::review::Prompt \ + -complete ::sak::review::Complete \ + -dispatch ::sak::review::Dispatch + return +} + +# # ## ### ##### ######## ############# ##################### + +proc ::sak::review::RefreshDisplay {} { + variable m + variable im + variable ir + variable nm + variable nr + variable clog + variable rlog + variable what + variable smode + + if {$smode eq "rev"} { + set text $rlog + } else { + set text $clog + } + + if {$smode eq "rev"} { + Banner "($ir/$nr) \[$im/$nm\] [=cya [string totitle $what]] [=green $m]" + } else { + Banner "\[$im/$nm\] [=cya [string totitle $what]] [=green $m]" + } + puts "| [join [split $text \n] "\n| "]\n" + return +} + +proc ::sak::review::Exit {} { + variable stop + return $stop +} + +proc ::sak::review::Continued {buffer} { + return 0 +} + +proc ::sak::review::Prompt {} { + variable ip + variable np + variable name + variable tags + variable smode + variable im + variable ir + variable nm + variable nr + variable what + variable m + + if {$smode eq "rev"} { + append p "($ir/$nr) " + } + + append p "\[$im/$nm\] [=green $m] [=cya [string totitle $what]] " + append p "\[$ip/$np\] [=whi $name] ($tags): " + return $p +} + +proc ::sak::review::Complete {line} { + variable allcommands + if {$line eq {}} { + return $allcommands + } elseif {[llength $line] == 1} { + set r {} + foreach c $allcommands { + if {![string match ${line}* $c]} continue + lappend r $c + } + return $r + } else { + return {} + } +} + +proc ::sak::review::Dispatch {line} { + variable prefix + variable map + + if {$line == ""} { set line next } + + set cmd [lindex $line 0] + + if {![info exists prefix($cmd)]} { + return -code error "Unknown command $cmd, use help or ? to list them" + } elseif {[llength $prefix($cmd)] > 1} { + return -code error "Ambigous prefix \"$cmd\", expected [join $prefix($cmd) {, }]" + } + + # Map prefix to actual command + set line [lreplace $line 0 0 $prefix($cmd)] + + # Run command. + if {[info exists map($cmd)]} { + Goto $map($cmd) + return + } + eval C_$line +} + +proc ::sak::review::Goto {loc {skip 0}} { + variable review + variable rm + variable modules + variable packages + variable clog + variable rlog + variable rloga + variable current + variable currentp + variable currentr + variable nm + variable np + variable nr + variable at + variable tags + variable what + variable name + + variable m + variable p + variable ip + variable im + variable ir + + foreach {current currentp} $loc break + set currentr 0 + + puts "Goto ($current/$currentp)" + + set m [lindex $modules $current] + foreach {packages clog} $review($m) break + if {[catch { + set nr [llength $rm($m)] + set rloga $rm($m) + set rlog [lindex $rloga $currentr] + }]} { + set nr 0 + set currentr 0 + set rloga {} + set rlog {} + } + + set np [llength $packages] + set p [lindex $packages $currentp] + + foreach {name what tags} $p break + set at [list $m $name] + + set im [expr {1+$current}] + set ip [expr {1+$currentp}] + set ir [expr {1+$currentr}] + + if {$skip && ([llength $tags] || + ($tags == "---"))} { + C_next + } else { + RefreshDisplay + } + return +} + +proc ::sak::review::C_* {} { + variable smode + variable currentr + if {$smode eq "all"} { + set smode rev + set currentr 0 + } else { + set smode all + } + RefreshDisplay + return +} +proc ::sak::review::C_, {} { + # next revision + variable smode + variable rlog + variable rloga + variable currentr + if {$smode eq "all"} { + set smode rev + set currentr 0 + } else { + variable nr + incr currentr + if {$currentr >= $nr} { set currentr 0 } + } + variable ir [expr {1+$currentr}] + set rlog [lindex $rloga $currentr] + RefreshDisplay + return +} +proc ::sak::review::C_' {} { + # previous revision + variable smode + variable rlog + variable rloga + variable nr + variable currentr + if {$smode eq "all"} { + set smode rev + set currentr $nr + } + incr currentr -1 + if {$currentr <= 0} { + set currentr $nr + incr currentr -1 + } + variable ir [expr {1+$currentr}] + set rlog [lindex $rloga $currentr] + RefreshDisplay + return +} + +proc ::sak::review::C_exit {} { variable stop 1 } +proc ::sak::review::C_quit {} { variable stop 1 } + +proc ::sak::review::C_? {} { C_help } +proc ::sak::review::C_help {} { + variable commands + return [join $commands {, }] +} + +proc ::sak::review::C_@? {} { C_@help } +proc ::sak::review::C_@help {} { + variable navcommands + return [join $navcommands {, }] +} + +proc ::sak::review::C_@start {} { Goto {0 0} } +proc ::sak::review::C_@0 {} { Goto {0 0} } +proc ::sak::review::C_@end {} { variable end ; Goto $end() } + +proc ::sak::review::C_>> {} { C_next 1 } +proc ::sak::review::C_next {{skiprev 0}} { + variable tags + variable current + variable currentp + variable smode + + if {!($skiprev) && ($smode eq "rev")} { + variable ir + variable nr + if {$ir < $nr} { + C_, + return + } + } + + C_step 0 + + set stop @$current/$currentp + while {[llength $tags] || + ($tags == "---")} { + C_step 0 + if {"@$current/$currentp" == "$stop"} break + } + + RefreshDisplay + return +} + +proc ::sak::review::C_step {{refresh 1}} { + variable nm + variable np + variable current + variable currentp + variable packages + + incr currentp + if {$currentp >= $np} { + # skip to next module, first package + incr current + if {$current >= $nm} { + # skip to first module + set current 0 + } + set currentp 0 + + } + Goto [list $current $currentp] + return +} + +proc ::sak::review::C_<< {} { C_prev 1 } +proc ::sak::review::C_prev {{skiprev 0}} { + variable end + variable nm + variable np + variable current + variable currentp + variable packages + variable smode + + if {!$skiprev && ($smode eq "rev")} { + variable ir + if {$ir > 1} { + C_' + return + } + } + + incr currentp -1 + if {$currentp < 0} { + # skip to previous module, last package + incr current -1 + if {$current < 0} { + # skip to back to last module + set current [expr {$nm - 1}] + } + set currentp $end($current) + } + Goto [list $current $currentp] + return +} + +# Commands to add/remove tags, clear set, replace set + +proc ::sak::review::C_feature {} { +T EF } +proc ::sak::review::C_test {} { +T T } +proc ::sak::review::C_doc {} { +T D } +proc ::sak::review::C_bug {} { +T B } +proc ::sak::review::C_perf {} { +T P } +proc ::sak::review::C_example {} { +T EX } +proc ::sak::review::C_api {} { +T API } +proc ::sak::review::C_impl {} { +T I } + +proc ::sak::review::C_-feature {} { -T EF } +proc ::sak::review::C_-test {} { -T T } +proc ::sak::review::C_-doc {} { -T D } +proc ::sak::review::C_-bug {} { -T B } +proc ::sak::review::C_-perf {} { -T P } +proc ::sak::review::C_-example {} { -T EX } +proc ::sak::review::C_-api {} { -T API } +proc ::sak::review::C_-impl {} { -T I } + +proc ::sak::review::C_--- {} { =T --- } +proc ::sak::review::C_clear {} { =T --- } +#proc ::sak::review::C_cn {} { C_clear ; C_next } + +proc ::sak::review::+T {tag} { + variable tags + if {[lsearch -exact $tags $tag] >= 0} { + RefreshDisplay + return + } + =T [linsert $tags end $tag] + return +} + +proc ::sak::review::-T {tag} { + variable tags + set pos [lsearch -exact $tags $tag] + if {$pos < 0} { + RefreshDisplay + return + } + =T [lreplace $tags $pos $pos] + return +} + +proc ::sak::review::=T {newtags} { + variable review + variable clog + variable packages + variable currentp + variable p + variable m + variable at + variable name + variable what + variable tags + + if {([llength $newtags] > 1) && + ([set pos [lsearch -exact $newtags ---]] >= 0)} { + # Drop --- if there are other tags. + set newtags [lreplace $newtags $pos $pos] + } + + set tags [lsort -dict $newtags] + set p [list $name $what $newtags] + set packages [lreplace $packages $currentp $currentp $p] + set review($m) [list $packages $clog] + + SaveNote $at $tags + RefreshDisplay + return +} + +proc ::sak::review::?T {} { + variable tags + return $tags +} + +## +# ### + +namespace eval ::sak::review {} + +package provide sak::review 1.0 diff --git a/tcllib/support/devel/sak/review/topic.txt b/tcllib/support/devel/sak/review/topic.txt new file mode 100644 index 0000000..d2f7446 --- /dev/null +++ b/tcllib/support/devel/sak/review/topic.txt @@ -0,0 +1 @@ +review Interactively review changes since the last release. diff --git a/tcllib/support/devel/sak/test/cmd.tcl b/tcllib/support/devel/sak/test/cmd.tcl new file mode 100644 index 0000000..5622a16 --- /dev/null +++ b/tcllib/support/devel/sak/test/cmd.tcl @@ -0,0 +1,28 @@ +# -*- tcl -*- +# Implementation of 'doc'. + +# Available variables +# * argv - Cmdline arguments +# * base - Location of sak.tcl = Top directory of Tcllib distribution +# * cbase - Location of all files relevant to this command. +# * sbase - Location of all files supporting the SAK. + +package require sak::util +package require sak::test + +if {![llength $argv]} { + sak::test::usage Command missing +} + +set cmd [lindex $argv 0] +set argv [lrange $argv 1 end] + +if {[catch {package require sak::test::$cmd} msg]} { + sak::test::usage Unknown command \"$cmd\" : \ + \n $::errorInfo +} + +sak::test::$cmd $argv + +## +# ### diff --git a/tcllib/support/devel/sak/test/help.txt b/tcllib/support/devel/sak/test/help.txt new file mode 100644 index 0000000..4d2762c --- /dev/null +++ b/tcllib/support/devel/sak/test/help.txt @@ -0,0 +1,46 @@ + + test -- Execute testsuites + + sak test run ?-s|--shell PATH? ?-l|--log STEM? ?-g|--valgrind? ?-v? ?MODULE ...? + + Run the testsuites of the specified modules, using the shell + running SAK for the testsuites as well. If no modules are + specified the testsuites of all modules are run. + + If --valgrind is specified the testsuites are run under the + valgrind memory checker. NOTE. This feature is not available + on the windows platform. Requests for it will be ignored. + + If one or more --shell's are specified the testsuites are run + against them. If none are specified the shells registered with + 'shell add' (see below) are used instead. If none are + specified the shell executing the sak is used instead. + + By default the output from a run is animated feedback of the + progress made. If -v is specified the actual log is returned + instead. + + If a log STEM is specified the extended log normally activated + via -v is written to STEM.log while the user is provided with + the regular feedback during execution. In addition the + summaries from the feedback are written to STEM.summary as + well, and also sorted into STEM.failures, STEM.skipped, and + STEM.none. The -l switch overides -v. + + sak test shells + + Returns a list of the registered shells, one per line, used to + execute the testsuites. + + sak test shell add PATH... + + Adds the specified paths to the list of shells to use when + executing testsuites. + + sak test shell delete PATH... + + Removes the specified paths from the list of shells to use + when executing testsuites. + + NOTE: The list of registered shells is a per-user configuration + setting and is saved in the file "$HOME/.Tcllib/Registry". diff --git a/tcllib/support/devel/sak/test/pkgIndex.tcl b/tcllib/support/devel/sak/test/pkgIndex.tcl new file mode 100644 index 0000000..9522c76 --- /dev/null +++ b/tcllib/support/devel/sak/test/pkgIndex.tcl @@ -0,0 +1,5 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::test 1.0 [list source [file join $dir test.tcl]] +package ifneeded sak::test::run 1.0 [list source [file join $dir run.tcl]] +package ifneeded sak::test::shells 1.0 [list source [file join $dir shells.tcl]] +package ifneeded sak::test::shell 1.0 [list source [file join $dir shell.tcl]] diff --git a/tcllib/support/devel/sak/test/run.tcl b/tcllib/support/devel/sak/test/run.tcl new file mode 100644 index 0000000..9e0942f --- /dev/null +++ b/tcllib/support/devel/sak/test/run.tcl @@ -0,0 +1,880 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::test::shell +package require sak::registry +package require sak::animate +package require sak::color +# TODO: Rework this package to use the sak::feedback package + +getpackage textutil::repeat textutil/repeat.tcl +getpackage fileutil fileutil/fileutil.tcl +getpackage struct::matrix struct/matrix.tcl + +namespace eval ::sak::test::run { + namespace import ::textutil::repeat::blank + namespace import ::sak::color::* +} + +# ### + +proc ::sak::test::run {argv} { + variable run::valgrind + array set config { + valgrind 0 raw 0 shells {} stem {} log 0 + } + + while {[string match -* [set opt [lindex $argv 0]]]} { + switch -exact -- $opt { + -s - --shell { + set sh [lindex $argv 1] + if {![fileutil::test $sh efrx msg "Shell"]} { + sak::test::usage $msg + } + lappend config(shells) $sh + set argv [lrange $argv 2 end] + } + -g - --valgrind { + if {![llength $valgrind]} { + sak::test::usage valgrind not found in the PATH + } + incr config(valgrind) + set argv [lrange $argv 1 end] + } + -v { + set config(raw) 1 + set argv [lrange $argv 1 end] + } + -l - --log { + set config(log) 1 + set config(stem) [lindex $argv 1] + set argv [lrange $argv 2 end] + } + default { + sak::test::usage Unknown option "\"$opt\"" + } + } + } + + if {$config(log)} {set config(raw) 0} + + if {![sak::util::checkModules argv]} return + + run::Do config $argv + return +} + +# ### + +proc ::sak::test::run::Do {cv modules} { + upvar 1 $cv config + variable valgrind + variable araw $config(raw) + variable alog $config(log) + # alog => !araw + + set shells $config(shells) + if {![llength $shells]} { + catch {set shells [sak::test::shell::list]} + } + if {![llength $shells]} { + set shells [list [info nameofexecutable]] + } + + if {$alog} { + variable logext [open $config(stem).log w] + variable logsum [open $config(stem).summary w] + variable logfai [open $config(stem).failures w] + variable logski [open $config(stem).skipped w] + variable lognon [open $config(stem).none w] + variable logerd [open $config(stem).errdetails w] + variable logfad [open $config(stem).faildetails w] + variable logtim [open $config(stem).timings w] + } else { + variable logext stdout + } + + # Preprocessing of module names and shell versions to allows + # better formatting of the progress output, i.e. vertically + # aligned columns + + if {!$araw} { + variable maxml 0 + variable maxvl 0 + sak::animate::init + foreach m $modules { + = "M $m" + set l [string length $m] + if {$l > $maxml} {set maxml $l} + } + foreach sh $shells { + = "SH $sh" + set v [exec $sh << {puts [info patchlevel]; exit}] + set l [string length $v] + if {$l > $maxvl} {set maxvl $l} + } + =| "Starting ..." + } + + set total 0 + set pass 0 + set fail 0 + set skip 0 + set err 0 + + foreach sh $shells { + foreach m $modules { + set cmd [Command config $m $sh] + sak::animate::init + if {$alog || $araw} { + puts $logext ============================================================ + flush $logext + } + if {[catch {Close [Process [open |$cmd r+]]} msg]} { + incr err + =| "~~ [mag]ERR ${msg}[rst]" + if {$alog || $araw} { + puts $logext [mag]$msg[rst] + flush $logext + } + } + #sak::animate::last Ok + } + } + + puts $logext "Passed [format %6d $pass] of [format %6d $total]" + puts $logext "Skipped [format %6d $skip] of [format %6d $total]" + + if {$fail} { + puts $logext "Failed [red][format %6d $fail][rst] of [format %6d $total]" + } else { + puts $logext "Failed [format %6d $fail] of [format %6d $total]" + } + if {$err} { + puts $logext "#Errors [mag][format %6d $err][rst]" + } else { + puts $logext "#Errors [format %6d $err]" + } + + if {$alog} { + variable xtimes + array set times $xtimes + + struct::matrix M + M add columns 6 + foreach k [lsort -dict [array names times]] { + #foreach {shell module testfile} $k break + foreach {testnum delta score} $times($k) break + M add row [linsert $k end $testnum $delta $score] + } + M sort rows -decreasing 5 + + M insert row 0 {Shell Module Testsuite Tests Seconds uSec/Test} + M insert row 1 {===== ====== ========= ===== ======= =========} + M add row {===== ====== ========= ===== ======= =========} + + puts $logsum \nTimings... + puts $logsum [M format 2string] + } + + exit [expr {($err || $fail) ? 1 : 0}] + return +} + +# ### + +if {$::tcl_platform(platform) == "windows"} { + + proc ::sak::test::run::Command {cv m sh} { + variable valgrind + upvar 1 $cv config + + # Windows. Construction of the pipe to run a specific + # testsuite against a single shell. There is no valgrind to + # accomodate, and neither can we expect to have unix commands + # like 'echo' and 'cat' available. 'echo' we can go without. A + # 'cat' however is needed to merge stdout and stderr of the + # testsuite for processing here. We use an emuluation written + # in Tcl. + + set catfile cat[pid].tcl + fileutil::writeFile $catfile { + catch {wm withdraw .} + while {![eof stdin]} {puts stdout [gets stdin]} + exit + } + + set cmd "" + lappend cmd $sh + lappend cmd [Driver] -modules [list $m] + lappend cmd |& $sh $catfile + #puts <<$cmd>> + + return $cmd + } + + proc ::sak::test::run::Close {pipe} { + close $pipe + file delete cat[pid].tcl + return + } +} else { + proc ::sak::test::run::Command {cv m sh} { + variable valgrind + upvar 1 $cv config + + # Unix. Construction of the pipe to run a specific testsuite + # against a single shell. The command is constructed to work + # when using valgrind, and works when not using it as well. + + set script {} + lappend script [list set argv [list -modules [list $m]]] + lappend script {set argc 2} + lappend script [list source [Driver]] + lappend script exit + + set cmd "" + lappend cmd echo [join $script \n] + lappend cmd | + + if {$config(valgrind)} { + foreach e $valgrind {lappend cmd $e} + if {$config(valgrind) > 1} { + lappend cmd --num-callers=8 + lappend cmd --leak-resolution=high + lappend cmd -v --leak-check=yes + lappend cmd --show-reachable=yes + } + } + lappend cmd $sh + #lappend cmd >@ stdout 2>@ stderr + lappend cmd |& cat + #puts <<$cmd>> + + return $cmd + } + + proc ::sak::test::run::Close {pipe} { + close $pipe + return + } +} + +# ### + +proc ::sak::test::run::Process {pipe} { + variable araw + variable alog + variable logext + while {1} { + if {[eof $pipe]} break + if {[gets $pipe line] < 0} break + if {$alog || $araw} {puts $logext $line ; flush $logext} + set rline $line + set line [string trim $line] + if {[string equal $line ""]} continue + Host; Platform + Cwd; Shell + Tcl + Start; End ; StartFile ; EndFile + Module; Testsuite + NoTestsuite + Support;Testing;Other + Summary + CaptureFailureSync ; # xcollect 1 => 2 + CaptureFailureCollectBody ; # xcollect 2 => 3 => 5 + CaptureFailureCollectActual ; # xcollect 3 => 4 + CaptureFailureCollectExpected ; # xcollect 4 => 0 + CaptureFailureCollectError ; # xcollect 5 => 0 + CaptureStackStart + CaptureStack + + TestStart + TestSkipped + TestPassed + TestFailed ; # xcollect => 1 + + SetupError + Aborted + AbortCause + + Match||Skip||Sourced + # Unknown lines are printed + if {!$araw} {puts !$line} + } + return $pipe +} + +# ### + +proc ::sak::test::run::Driver {} { + variable base + return [file join $base all.tcl] +} + +# ### + +proc ::sak::test::run::Host {} { + upvar 1 line line ; variable xhost + if {![regexp "^@@ Host (.*)$" $line -> xhost]} return + # += $xhost + set xhost [list Tests Results $xhost] + #sak::registry::local set $xhost + return -code continue +} + +proc ::sak::test::run::Platform {} { + upvar 1 line line ; variable xplatform + if {![regexp "^@@ Platform (.*)$" $line -> xplatform]} return + # += ($xplatform) + variable xhost + #sak::registry::local set $xhost Platform $xplatform + return -code continue +} + +proc ::sak::test::run::Cwd {} { + upvar 1 line line ; variable xcwd + if {![regexp "^@@ CWD (.*)$" $line -> xcwd]} return + variable xhost + set xcwd [linsert $xhost end $xcwd] + #sak::registry::local set $xcwd + return -code continue +} + +proc ::sak::test::run::Shell {} { + upvar 1 line line ; variable xshell + if {![regexp "^@@ Shell (.*)$" $line -> xshell]} return + # += [file tail $xshell] + variable xcwd + set xshell [linsert $xcwd end $xshell] + #sak::registry::local set $xshell + return -code continue +} + +proc ::sak::test::run::Tcl {} { + upvar 1 line line ; variable xtcl + if {![regexp "^@@ Tcl (.*)$" $line -> xtcl]} return + variable xshell + variable maxvl + += \[$xtcl\][blank [expr {$maxvl - [string length $xtcl]}]] + #sak::registry::local set $xshell Tcl $xtcl + return -code continue +} + +proc ::sak::test::run::Match||Skip||Sourced {} { + upvar 1 line line + if {[string match "@@ Skip*" $line]} {return -code continue} + if {[string match "@@ Match*" $line]} {return -code continue} + if {[string match "Sourced * Test Files." $line]} {return -code continue} + if {[string match "Files with failing tests*" $line]} {return -code continue} + if {[string match "Number of tests skipped*" $line]} {return -code continue} + if {[string match "\[0-9\]*" $line]} {return -code continue} + return +} + +proc ::sak::test::run::Start {} { + upvar 1 line line + if {![regexp "^@@ Start (.*)$" $line -> start]} return + variable xshell + #sak::registry::local set $xshell Start $start + return -code continue +} + +proc ::sak::test::run::End {} { + upvar 1 line line + if {![regexp "^@@ End (.*)$" $line -> end]} return + variable xshell + #sak::registry::local set $xshell End $end + return -code continue +} + +proc ::sak::test::run::StartFile {} { + upvar 1 line line + if {![regexp "^@@ StartFile (.*)$" $line -> start]} return + variable xstartfile $start + variable xtestnum 0 + #sak::registry::local set $xshell Start $start + return -code continue +} + +proc ::sak::test::run::EndFile {} { + upvar 1 line line + if {![regexp "^@@ EndFile (.*)$" $line -> end]} return + variable xfile + variable xstartfile + variable xtimes + variable xtestnum + + set k [lreplace $xfile 0 3] + set k [lreplace $k 2 2 [file tail [lindex $k 2]]] + set delta [expr {$end - $xstartfile}] + + if {$xtestnum == 0} { + set score $delta + } else { + # average number of microseconds per test. + set score [expr {int(($delta/double($xtestnum))*1000000)}] + #set score [expr {$delta/double($xtestnum)}] + } + + lappend xtimes $k [list $xtestnum $delta $score] + + variable alog + if {$alog} { + variable logtim + puts $logtim [linsert [linsert $k end $xtestnum $delta $score] 0 TIME] + } + + #sak::registry::local set $xshell End $end + return -code continue +} + +proc ::sak::test::run::Module {} { + upvar 1 line line ; variable xmodule + if {![regexp "^@@ Module (.*)$" $line -> xmodule]} return + variable xshell + variable xstatus ok + variable maxml + += ${xmodule}[blank [expr {$maxml - [string length $xmodule]}]] + set xmodule [linsert $xshell end $xmodule] + #sak::registry::local set $xmodule + return -code continue +} + +proc ::sak::test::run::Testsuite {} { + upvar 1 line line ; variable xfile + if {![regexp "^@@ Testsuite (.*)$" $line -> xfile]} return + = <[file tail $xfile]> + variable xmodule + set xfile [linsert $xmodule end $xfile] + #sak::registry::local set $xfile Aborted 0 + return -code continue +} + +proc ::sak::test::run::NoTestsuite {} { + upvar 1 line line + if {![string match "Error: No test files remain after*" $line]} return + variable xstatus none + = {No tests} + return -code continue +} + +proc ::sak::test::run::Support {} { + upvar 1 line line + if {![regexp "^- (.*)$" $line -> package]} return + #= "S $package" + foreach {pn pv} $package break + variable xfile + #sak::registry::local set [linsert $xfile end Support] $pn $pv + return -code continue +} + +proc ::sak::test::run::Testing {} { + upvar 1 line line + if {![regexp "^\\* (.*)$" $line -> package]} return + #= "T $package" + foreach {pn pv} $package break + variable xfile + #sak::registry::local set [linsert $xfile end Testing] $pn $pv + return -code continue +} + +proc ::sak::test::run::Other {} { + upvar 1 line line + if {![string match ">*" $line]} return + return -code continue +} + +proc ::sak::test::run::Summary {} { + upvar 1 line line + if {![regexp "^all\\.tcl:(.*)$" $line -> line]} return + variable xmodule + variable xstatus + variable xvstatus + foreach {_ t _ p _ s _ f} [split [string trim $line]] break + #sak::registry::local set $xmodule Total $t ; set t [format %5d $t] + #sak::registry::local set $xmodule Passed $p ; set p [format %5d $p] + #sak::registry::local set $xmodule Skipped $s ; set s [format %5d $s] + #sak::registry::local set $xmodule Failed $f ; set f [format %5d $f] + + upvar 2 total _total ; incr _total $t + upvar 2 pass _pass ; incr _pass $p + upvar 2 skip _skip ; incr _skip $s + upvar 2 fail _fail ; incr _fail $f + upvar 2 err _err + + set t [format %5d $t] + set p [format %5d $p] + set s [format %5d $s] + set f [format %5d $f] + + if {$xstatus == "ok" && $t == 0} { + set xstatus none + } + + set st $xvstatus($xstatus) + + if {$xstatus == "ok"} { + # Quick return for ok suite. + =| "~~ $st T $t P $p S $s F $f" + return -code continue + } + + # Clean out progress display using a non-highlighted + # string. Prevents the char couint from being off. This is + # followed by construction and display of the highlighted version. + + = " $st T $t P $p S $s F $f" + switch -exact -- $xstatus { + none {=| "~~ [yel]$st T $t[rst] P $p S $s F $f"} + aborted {=| "~~ [whi]$st[rst] T $t P $p S $s F $f"} + error { + =| "~~ [mag]$st[rst] T $t P $p S $s F $f" + incr _err + } + fail {=| "~~ [red]$st[rst] T $t P $p S $s [red]F $f[rst]"} + } + return -code continue +} + +proc ::sak::test::run::TestStart {} { + upvar 1 line line + if {![string match {---- * start} $line]} return + set testname [string range $line 5 end-6] + = "---- $testname" + variable xfile + variable xtest [linsert $xfile end $testname] + variable xtestnum + incr xtestnum + return -code continue +} + +proc ::sak::test::run::TestSkipped {} { + upvar 1 line line + if {![string match {++++ * SKIPPED:*} $line]} return + regexp {^[^ ]* (.*)SKIPPED:.*$} $line -> testname + set testname [string trim $testname] + variable xtest + = "SKIP $testname" + if {$xtest == {}} { + variable xfile + set xtest [linsert $xfile end $testname] + } + #sak::registry::local set $xtest Status Skip + set xtest {} + return -code continue +} + +proc ::sak::test::run::TestPassed {} { + upvar 1 line line + if {![string match {++++ * PASSED} $line]} return + set testname [string range $line 5 end-7] + variable xtest + = "PASS $testname" + if {$xtest == {}} { + variable xfile + set xtest [linsert $xfile end $testname] + } + #sak::registry::local set $xtest Status Pass + set xtest {} + return -code continue +} + +proc ::sak::test::run::TestFailed {} { + upvar 1 line line + if {![string match {==== * FAILED} $line]} return + set testname [lindex [split [string range $line 5 end-7]] 0] + = "FAIL $testname" + variable xtest + if {$xtest == {}} { + variable xfile + set xtest [linsert $xfile end $testname] + } + #sak::registry::local set $xtest Status Fail + ## CAPTURE INIT + variable xcollect 1 + variable xbody "" + variable xactual "" + variable xexpected "" + variable xstatus fail + # Ignore failed status if we already have it, or an error + # status. The latter is more important to show. We do override + # status 'aborted'. + if {$xstatus == "ok"} {set xstatus fail} + if {$xstatus == "aborted"} {set xstatus fail} + return -code continue +} + +proc ::sak::test::run::CaptureFailureSync {} { + variable xcollect + if {$xcollect != 1} return + upvar 1 line line + if {![string match {==== Contents*} $line]} return + set xcollect 2 + return -code continue +} + +proc ::sak::test::run::CaptureFailureCollectBody {} { + variable xcollect + if {$xcollect != 2} return + upvar 1 rline line + variable xbody + if {[string match {---- Result was*} $line]} { + set xcollect 3 + return -code continue + } elseif {[string match {---- Test generated error*} $line]} { + set xcollect 5 + return -code continue + } + + variable xbody + append xbody $line \n + return -code continue +} + +proc ::sak::test::run::CaptureFailureCollectActual {} { + variable xcollect + if {$xcollect != 3} return + upvar 1 rline line + if {![string match {---- Result should*} $line]} { + variable xactual + append xactual $line \n + } else { + set xcollect 4 + } + return -code continue +} + +proc ::sak::test::run::CaptureFailureCollectExpected {} { + variable xcollect + if {$xcollect != 4} return + upvar 1 rline line + if {![string match {==== *} $line]} { + variable xexpected + append xexpected $line \n + } else { + variable alog + if {$alog} { + variable logfad + variable xtest + variable xbody + variable xactual + variable xexpected + + puts $logfad "==== [lrange $xtest end-1 end] FAILED =========" + puts $logfad "==== Contents of test case:\n" + puts $logfad $xbody + + puts $logfad "---- Result was:" + puts $logfad [string range $xactual 0 end-1] + + puts $logfad "---- Result should have been:" + puts $logfad [string range $xexpected 0 end-1] + + puts $logfad "==== [lrange $xtest end-1 end] ====\n\n" + flush $logfad + } + set xcollect 0 + #sak::registry::local set $xtest Body $xbody + #sak::registry::local set $xtest Actual $xactual + #sak::registry::local set $xtest Expected $xexpected + set xtest {} + } + return -code continue +} + +proc ::sak::test::run::CaptureFailureCollectError {} { + variable xcollect + if {$xcollect != 5} return + upvar 1 rline line + variable xbody + if {[string match {---- errorCode*} $line]} { + set xcollect 4 + return -code continue + } + + variable xactual + append xactual $line \n + return -code continue +} + +proc ::sak::test::run::Aborted {} { + upvar 1 line line + if {![string match {Aborting the tests found *} $line]} return + variable xfile + variable xstatus + # Ignore aborted status if we already have it, or some other error + # status (like error, or fail). These are more important to show. + if {$xstatus == "ok"} {set xstatus aborted} + = Aborted + #sak::registry::local set $xfile Aborted {} + return -code continue +} + +proc ::sak::test::run::AbortCause {} { + upvar 1 line line + if { + ![string match {Requiring *} $line] && + ![string match {Error in *} $line] + } return ; # {} + variable xfile + = $line + #sak::registry::local set $xfile Aborted $line + return -code continue +} + +proc ::sak::test::run::CaptureStackStart {} { + upvar 1 line line + if {![string match {@+*} $line]} return + variable xstackcollect 1 + variable xstack {} + variable xstatus error + = {Error, capturing stacktrace} + return -code continue +} + +proc ::sak::test::run::CaptureStack {} { + variable xstackcollect + if {!$xstackcollect} return + upvar 1 line line + variable xstack + if {![string match {@-*} $line]} { + append xstack [string range $line 2 end] \n + } else { + set xstackcollect 0 + variable xfile + variable alog + #sak::registry::local set $xfile Stacktrace $xstack + if {$alog} { + variable logerd + puts $logerd "[lindex $xfile end] StackTrace" + puts $logerd "========================================" + puts $logerd $xstack + puts $logerd "========================================\n\n" + flush $logerd + } + } + return -code continue +} + +proc ::sak::test::run::SetupError {} { + upvar 1 line line + if {![string match {SETUP Error*} $line]} return + variable xstatus error + = {Setup error} + return -code continue +} + +# ### + +proc ::sak::test::run::+= {string} { + variable araw + if {$araw} return + variable aprefix + append aprefix " " $string + sak::animate::next $aprefix + return +} + +proc ::sak::test::run::= {string} { + variable araw + if {$araw} return + variable aprefix + sak::animate::next "$aprefix $string" + return +} + +proc ::sak::test::run::=| {string} { + variable araw + if {$araw} return + variable aprefix + sak::animate::last "$aprefix $string" + variable alog + if {$alog} { + variable logsum + variable logfai + variable logski + variable lognon + variable xstatus + puts $logsum "$aprefix $string" ; flush $logsum + switch -exact -- $xstatus { + error - + fail {puts $logfai "$aprefix $string" ; flush $logfai} + none {puts $lognon "$aprefix $string" ; flush $lognon} + aborted {puts $logski "$aprefix $string" ; flush $logski} + } + } + set aprefix "" + return +} + +# ### + +namespace eval ::sak::test::run { + variable base [file join $::distribution support devel] + variable valgrind [auto_execok valgrind] + + # State of test processing. + + variable xstackcollect 0 + variable xstack {} + variable xcollect 0 + variable xbody {} + variable xactual {} + variable xexpected {} + variable xhost {} + variable xplatform {} + variable xcwd {} + variable xshell {} + variable xmodule {} + variable xfile {} + variable xtest {} + variable xstartfile {} + variable xtimes {} + + variable xstatus ok + + # Animation prefix of test processing, and flag controlling the + # nature of logging (raw vs animation). + + variable aprefix {} + variable araw 0 + + # Max length of module names and patchlevel information. + + variable maxml 0 + variable maxvl 0 + + # Map from internal stati to the displayed human readable + # strings. This includes the trailing whitespace needed for + # vertical alignment. + + variable xvstatus + array set xvstatus { + ok { } + none {None } + aborted {Skip } + error {ERR } + fail {FAILS} + } +} + +## +# ### + +package provide sak::test::run 1.0 + +if 0 { + # Bad valgrind, ok no valgrind + if {$config(valgrind)} { + foreach e $valgrind {lappend cmd $e} + lappend cmd --num-callers=8 + lappend cmd --leak-resolution=high + lappend cmd -v --leak-check=yes + lappend cmd --show-reachable=yes + } + lappend cmd $sh + lappend cmd [Driver] -modules $modules +} diff --git a/tcllib/support/devel/sak/test/shell.tcl b/tcllib/support/devel/sak/test/shell.tcl new file mode 100644 index 0000000..f0f0e5d --- /dev/null +++ b/tcllib/support/devel/sak/test/shell.tcl @@ -0,0 +1,94 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +getpackage fileutil fileutil/fileutil.tcl + +package require sak::test +package require sak::registry +namespace eval ::sak::test::shell {} + +# ### + +proc ::sak::test::shell {argv} { + if {![llength $argv]} {Usage Sub command missing} + + set cmd [lindex $argv 0] + set argv [lrange $argv 1 end] + + switch -exact -- $cmd { + add { + sak::test::shell::add $argv + } + delete { + sak::test::shell::delete $argv + } + default { + sak::test::usage Unknown command "\"shell $cmd\"" + } + } + return +} + +proc ::sak::test::shell::list {} { + return [sak::registry::local \ + get||default Tests Shells {}] +} + +proc ::sak::test::shell::add {paths} { + foreach p $paths { + if {![fileutil::test $p efrx msg "Shell"]} { + sak::test::usage $msg + } + } + + set shells [sak::registry::local \ + get||default Tests Shells {}] + array set known {} + foreach sh $shells {set known($sh) .} + + set changed 0 + foreach p $paths { + if {[info exists known($p)]} continue + lappend shells $p + set changed 1 + } + + if {$changed} { + sak::registry::local \ + set Tests Shells [lsort -dict $shells] + } + return +} + +proc ::sak::test::shell::delete {paths} { + set shells [sak::registry::local \ + get||default Tests Shells {}] + array set known {} + foreach sh $shells {set known($sh) .} + + set changed 0 + foreach p $paths { + if {![info exists known($p)]} continue + unset known($p) + set changed 1 + } + + if {$changed} { + sak::registry::local \ + set Tests Shells [lsort -dict \ + [array names known]] + } + return +} + +# ### + +namespace eval ::sak::test::shell { +} + +## +# ### + +package provide sak::test::shell 1.0 diff --git a/tcllib/support/devel/sak/test/shells.tcl b/tcllib/support/devel/sak/test/shells.tcl new file mode 100644 index 0000000..09a1bc6 --- /dev/null +++ b/tcllib/support/devel/sak/test/shells.tcl @@ -0,0 +1,24 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::test +package require sak::test::shell +namespace eval ::sak::test::shells {} + +# ### + +proc ::sak::test::shells {argv} { + if {[llength $argv]} { + sak::test::usage Wrong # args + } + + puts stdout [join [sak::test::shell::list] \n] + return +} + +## +# ### + +package provide sak::test::shells 1.0 diff --git a/tcllib/support/devel/sak/test/test.tcl b/tcllib/support/devel/sak/test/test.tcl new file mode 100644 index 0000000..c31d974 --- /dev/null +++ b/tcllib/support/devel/sak/test/test.tcl @@ -0,0 +1,19 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +namespace eval ::sak::test {} + +# ### + +proc ::sak::test::usage {args} { + package require sak::help + puts stdout [join $args { }]\n[sak::help::on test] + exit 1 +} + +## +# ### + +package provide sak::test 1.0 diff --git a/tcllib/support/devel/sak/test/topic.txt b/tcllib/support/devel/sak/test/topic.txt new file mode 100644 index 0000000..31d0be5 --- /dev/null +++ b/tcllib/support/devel/sak/test/topic.txt @@ -0,0 +1 @@ +test Execute testsuites diff --git a/tcllib/support/devel/sak/util/anim.tcl b/tcllib/support/devel/sak/util/anim.tcl new file mode 100644 index 0000000..302ff04 --- /dev/null +++ b/tcllib/support/devel/sak/util/anim.tcl @@ -0,0 +1,64 @@ +# -*- tcl -*- +# (C) 2006-2013 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +namespace eval ::sak::animate { + # EL (Erase Line) + # Sequence: ESC [ n K + # ** Effect: if n is 0 or missing, clear from cursor to end of line + # Effect: if n is 1, clear from beginning of line to cursor + # Effect: if n is 2, clear entire line + + variable eeol \033\[K +} + +# ### + +proc ::sak::animate::init {} { + variable prefix + variable n 0 + variable max [llength $prefix] +} + +proc ::sak::animate::next {string} { + variable prefix + variable n + variable max + variable eeol + + puts -nonewline stdout \r\[[lindex $prefix $n]\]\ $string$eeol + flush stdout + + incr n ; if {$n >= $max} {set n 0} + return +} + +proc ::sak::animate::last {string} { + variable clear + + puts stdout \r\[$clear\]\ $string + flush stdout + return +} + +# ### + +namespace eval ::sak::animate { + namespace export init next last + + variable prefix { + {* } {* } {* } {* } {* } + { * } { * } { * } { * } { * } + { * } { * } { * } { * } { * } + { *} { *} { *} { *} { *} + { * } { * } { * } { * } { * } + { * } { * } { * } { * } { * } + } + variable clear { } +} + +## +# ### + +package provide sak::animate 1.0 diff --git a/tcllib/support/devel/sak/util/color.tcl b/tcllib/support/devel/sak/util/color.tcl new file mode 100644 index 0000000..76a475e --- /dev/null +++ b/tcllib/support/devel/sak/util/color.tcl @@ -0,0 +1,54 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +namespace eval ::sak::color {} + +# ### + +if {$::tcl_platform(platform) == "windows"} { + # No ansi colorization on windows + namespace eval ::sak::color { + variable n + foreach n {cya yel whi mag red green rst} { + proc $n {} {return ""} + namespace export $n + + proc =$n {s} {return $s} + namespace export =$n + } + unset n + } +} else { + getpackage term::ansi::code::attr term/ansi/code/attr.tcl + getpackage term::ansi::code::ctrl term/ansi/code/ctrl.tcl + + ::term::ansi::code::ctrl::import ::sak::color sda_bg* sda_reset + + namespace eval ::sak::color { + variable s + variable n + foreach {s n} { + sda_bgcyan cya + sda_bgyellow yel + sda_bgwhite whi + sda_bgmagenta mag + sda_bgred red + sda_bggreen green + sda_reset rst + } { + rename $s $n + namespace export $n + + proc =$n {s} "return \[$n\]\$s\[rst\]" + namespace export =$n + } + unset s n + } +} + +## +# ### + +package provide sak::color 1.0 diff --git a/tcllib/support/devel/sak/util/feedback.tcl b/tcllib/support/devel/sak/util/feedback.tcl new file mode 100644 index 0000000..557ea50 --- /dev/null +++ b/tcllib/support/devel/sak/util/feedback.tcl @@ -0,0 +1,182 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +# Feedback modes +# +# [short] Animated short feedback on stdout, no logging +# [log] Animated short feedback on stdout, logging to multiple files. +# [verbose] Logging to stdout +# +# Output commands for various destinations: +# +# <v> Verbose Log +# <s> Short Log +# +# Handling of the destinations per mode +# +# <s> <v> +# [short] stdout, /dev/null +# [log] stdout, file +# [verbose] /dev/null, stdout + +# Log files for different things are opened on demand, i.e. on the +# first write to them. We can configure (per possible log) a string to +# be written before the first write. Reconfiguring that string for a +# log clears the flag for that log and causes the string to be +# rewritten on the next write. + +package require sak::animate + +namespace eval ::sak::feedback { + namespace import ::sak::animate::next ; rename next aNext + namespace import ::sak::animate::last ; rename last aLast +} + +# ### + +proc ::sak::feedback::init {mode stem} { + variable prefix "" + variable short [expr {$mode ne "verbose"}] + variable verbose [expr {$mode ne "short"}] + variable tofile [expr {$mode eq "log"}] + variable lstem $stem + variable dst "" + variable lfirst + unset lfirst + array set lfirst {} + # Note: lchan is _not_ reset. We keep channels, allowing us to + # merge output from different modules, if they are run as + # one unit (Example: validate and its various parts, which + # can be run separately, and together). + return +} + +proc ::sak::feedback::first {dst string} { + variable lfirst + set lfirst($dst) $string + return +} + +### + +proc ::sak::feedback::summary {text} { + #=| $text + #log $text + + variable short + variable verbose + if {$short} { puts $text } + if {$verbose} { puts [_channel log] $text } + return +} + + +proc ::sak::feedback::log {text {ext log}} { + variable verbose + if {!$verbose} return + set c [_channel $ext] + puts $c $text + flush $c + return +} + +### + +proc ::sak::feedback::! {} { + variable short + if {!$short} return + variable prefix "" + sak::animate::init + return +} + +proc ::sak::feedback::+= {string} { + variable short + if {!$short} return + variable prefix + append prefix " " $string + aNext $prefix + return +} + +proc ::sak::feedback::= {string} { + variable short + if {!$short} return + variable prefix + aNext "$prefix $string" + return +} + +proc ::sak::feedback::=| {string} { + variable short + if {!$short} return + + variable prefix + aLast "$prefix $string" + + variable verbose + if {$verbose} { + variable dst + if {[string length $dst]} { + # inlined 'log' + set c [_channel $dst] + puts $c "$prefix $string" + flush $c + set dst "" + } + } + + set prefix "" + return +} + +proc ::sak::feedback::>> {string} { + variable dst $string + return +} + +# ### + +proc ::sak::feedback::_channel {dst} { + variable tofile + if {!$tofile} { return stdout } + variable lchan + if {[info exists lchan($dst)]} { + set c $lchan($dst) + } else { + variable lstem + set c [open ${lstem}.$dst w] + set lchan($dst) $c + } + variable lfirst + if {[info exists lfirst($dst)]} { + puts $c $lfirst($dst) + unset lfirst($dst) + } + return $c +} + +# ### + +namespace eval ::sak::feedback { + namespace export >> ! += = =| init log summary + + variable dst "" + variable prefix "" + variable short "" + variable verbose "" + variable tofile "" + variable lstem "" + variable lchan + array set lchan {} + + variable lfirst + array set lfirst {} +} + +## +# ### + +package provide sak::feedback 1.0 diff --git a/tcllib/support/devel/sak/util/pkgIndex.tcl b/tcllib/support/devel/sak/util/pkgIndex.tcl new file mode 100644 index 0000000..0042019 --- /dev/null +++ b/tcllib/support/devel/sak/util/pkgIndex.tcl @@ -0,0 +1,6 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::util 1.0 [list source [file join $dir util.tcl]] +package ifneeded sak::registry 1.0 [list source [file join $dir registry.tcl]] +package ifneeded sak::animate 1.0 [list source [file join $dir anim.tcl]] +package ifneeded sak::color 1.0 [list source [file join $dir color.tcl]] +package ifneeded sak::feedback 1.0 [list source [file join $dir feedback.tcl]] diff --git a/tcllib/support/devel/sak/util/registry.tcl b/tcllib/support/devel/sak/util/registry.tcl new file mode 100644 index 0000000..933fcad --- /dev/null +++ b/tcllib/support/devel/sak/util/registry.tcl @@ -0,0 +1,59 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +getpackage pregistry registry/registry.tcl + +namespace eval ::sak::registry {} + +proc ::sak::registry::local {args} { + return [uplevel 1 [linsert $args 0 [Setup]]] + # return <$_local {expand}$args> +} + +proc ::sak::registry::Setup {} { + variable _local + variable state + variable statedir + + if {![file exists $statedir]} { + file mkdir $statedir + } + + if {$_local == {}} { + set _local [pregistry %AUTO% \ + -tie [list file $state]] + } + + return $_local +} + +proc ::sak::registry::Refresh {} { + variable _local + $_local destroy + set _local {} + Setup + return +} + +namespace eval ::sak::registry { + variable _here [file dirname [info script]] + + variable statedir [file join ~ .Tcllib] + variable state [file join $statedir Registry] + variable _local {} +} + +## +# ### + +package provide sak::registry 1.0 + +# ### +## Data structures +# +## Core is a tree (struct::tree), keys are lists, mapping to a node, +## starting from the root. Attributes are node attributes. A prefix is +## used to distinguish them from the attributes used for internal +## purposes. diff --git a/tcllib/support/devel/sak/util/util.tcl b/tcllib/support/devel/sak/util/util.tcl new file mode 100644 index 0000000..cca192e --- /dev/null +++ b/tcllib/support/devel/sak/util/util.tcl @@ -0,0 +1,72 @@ +# -*- tcl -*- +# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +namespace eval ::sak::util {} + +# ### + +proc ::sak::util::path2modules {paths} { + set modules {} + foreach p $paths { + if {[file exists $p]} {set p [file tail $p]} + lappend modules $p + } + return $modules +} + +proc ::sak::util::modules2path {modules} { + global distribution + set modbase [file join $distribution modules] + + set paths {} + foreach m $modules { + lappend paths [file join $modbase $m] + } + return $paths +} + +proc ::sak::util::module2path {module} { + global distribution + set modbase [file join $distribution modules] + return [file join $modbase $module] +} + +proc ::sak::util::checkModules {modvar} { + upvar 1 $modvar modules + + if {![llength $modules]} { + # Default to all if none are specified. This information does + # not require validation. + + set modules [modules] + return 1 + } + + set modules [path2modules $modules] + + set fail 0 + foreach m $modules { + if {[modules_mod $m]} { + lappend results $m + continue + } + + puts " Unknown module: $m" + set fail 1 + } + + if {$fail} { + puts " Stop." + return 0 + } + + set modules $results + return 1 +} + +## +# ### + +package provide sak::util 1.0 diff --git a/tcllib/support/devel/sak/validate/cmd.tcl b/tcllib/support/devel/sak/validate/cmd.tcl new file mode 100644 index 0000000..ca2ddc9 --- /dev/null +++ b/tcllib/support/devel/sak/validate/cmd.tcl @@ -0,0 +1,70 @@ +# -*- tcl -*- +# Implementation of 'validate'. + +# Available variables +# * argv - Cmdline arguments +# * base - Location of sak.tcl = Top directory of Tcllib distribution +# * cbase - Location of all files relevant to this command. +# * sbase - Location of all files supporting the SAK. + +package require sak::util +package require sak::validate + +set raw 0 +set log 0 +set stem {} +set tclv {} + +if {[llength $argv]} { + # First argument may be a command. + set cmd [lindex $argv 0] + if {![catch { + package require sak::validate::$cmd + } msg]} { + set argv [lrange $argv 1 end] + } else { + set cmd all + } + + # Now process any possible options (-v, -l, --log). + + while {[string match -* [set opt [lindex $argv 0]]]} { + switch -exact -- $opt { + -v { + set raw 1 + set argv [lrange $argv 1 end] + } + -l - --log { + set log 1 + set stem [lindex $argv 1] + set argv [lrange $argv 2 end] + } + -t - --tcl { + set tclv [lindex $argv 1] + set argv [lrange $argv 2 end] + } + default { + sak::validate::usage Unknown option "\"$opt\"" + } + } + } +} else { + set cmd all +} + +# At last now handle all remaining arguments as module specifications. +if {![sak::util::checkModules argv]} return + +if {$log} { set raw 0 } + +array set mode { + 00 short + 01 log + 10 verbose + 11 _impossible_ +} + +sak::validate::$cmd $argv $mode($raw$log) $stem $tclv + +## +# ### diff --git a/tcllib/support/devel/sak/validate/help.txt b/tcllib/support/devel/sak/validate/help.txt new file mode 100644 index 0000000..6ded891 --- /dev/null +++ b/tcllib/support/devel/sak/validate/help.txt @@ -0,0 +1,53 @@ + + validate -- Validate modules and packages + + sak validate ?-v? ?-l|--log STEM? ?MODULE ...? + sak validate manpages ?-v? ?-l|--log STEM? ?MODULE ...? + sak validate versions ?-v? ?-l|--log STEM? ?MODULE ...? + sak validate testsuites ?-v? ?-l|--log STEM? ?MODULE ...? + sak validate syntax ?-v? ?-l|--log STEM? ?MODULE ...? + + Validate one or more aspects of the specified modules and the + packages they contain. If no module is specified all modules + are validated. If no aspect was specified all possible aspects + are validated. + + By default the output from a validation run is animated + feedback of the progress made, plus summarized color-coded + results. If -v is specified the actual log is returned + instead. + + If a log STEM is specified the extended log normally activated + via -v is written to STEM.log while the user is provided with + the regular feedback during execution. Usage of the -l switch + overides -v. + + The system is currently able to validate the following aspects + of the module and package sources: + + manpages + Reports modules/packages without documentation, and + modules/packages which have syntactically flawed + documentation. The second part is identical to + + sak doc validate + + versions + Reports modules and packages with mismatches between + 'package ifneeded' and 'package provided' commands. + + testsuites + Report modules and packages without testsuites. + + Note that this command is _not_ actually executing the + testsuites. That is done via + + sak test run ... + + See its documentation (sak help test) for more + information. + + syntax + Scan modules and packages using various tools + statically checking Tcl syntax, and report their + outputs. diff --git a/tcllib/support/devel/sak/validate/manpages.tcl b/tcllib/support/devel/sak/validate/manpages.tcl new file mode 100644 index 0000000..fbb0e86 --- /dev/null +++ b/tcllib/support/devel/sak/validate/manpages.tcl @@ -0,0 +1,464 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::animate +package require sak::feedback +package require sak::color + +getpackage textutil::repeat textutil/repeat.tcl +getpackage doctools doctools/doctools.tcl + +namespace eval ::sak::validate::manpages { + namespace import ::textutil::repeat::blank + namespace import ::sak::color::* + namespace import ::sak::feedback::! + namespace import ::sak::feedback::>> + namespace import ::sak::feedback::+= + namespace import ::sak::feedback::= + namespace import ::sak::feedback::=| + namespace import ::sak::feedback::log + namespace import ::sak::feedback::summary + rename summary sum +} + +# ### + +proc ::sak::validate::manpages {modules mode stem tclv} { + manpages::run $modules $mode $stem $tclv + manpages::summary + return +} + +proc ::sak::validate::manpages::run {modules mode stem tclv} { + sak::feedback::init $mode $stem + sak::feedback::first log "\[ Documentation \] ===============================================" + sak::feedback::first unc "\[ Documentation \] ===============================================" + sak::feedback::first fail "\[ Documentation \] ===============================================" + sak::feedback::first warn "\[ Documentation \] ===============================================" + sak::feedback::first miss "\[ Documentation \] ===============================================" + sak::feedback::first none "\[ Documentation \] ===============================================" + + # Preprocessing of module names to allow better formatting of the + # progress output, i.e. vertically aligned columns + + # Per module we can distinguish the following levels of + # documentation completeness and validity + + # Completeness: + # - No package has documentation + # - Some, but not all packages have documentation + # - All packages have documentation. + # + # Validity, restricted to the set packages which have documentation: + # - Documentation has errors and warnings + # - Documentation has errors, but no warnings. + # - Documentation has no errors, but warnings. + # - Documentation has neither errors nor warnings. + + # Progress report per module: Packages it is working on. + # Summary at module level: + # - Number of packages, number of packages with documentation, + # - Number of errors, number of warnings. + + # Full log: + # - Lists packages without documentation. + # - Lists packages with errors/warnings. + # - Lists the exact errors/warnings per package, and location. + + # Global preparation: Pull information about all packages and the + # modules they belong to. + + ::doctools::new dt -format desc -deprecated 1 + + Count $modules + MapPackages + + InitCounters + foreach m $modules { + # Skip tcllibc shared library, not a module. + if {[string equal $m tcllibc]} continue + + InitModuleCounters + ! + log "@@ Module $m" + Head $m + + # Per module: Find all doctools manpages inside and process + # them. We get errors, warnings, and determine the package(s) + # they may belong to. + + # Per package: Have they doc files claiming them? After that, + # are doc files left over (i.e. without a package)? + + ProcessPages $m + ProcessPackages $m + ProcessUnclaimed + ModuleSummary + } + + dt destroy + return +} + +proc ::sak::validate::manpages::summary {} { + Summary + return +} + +# ### + +proc ::sak::validate::manpages::ProcessPages {m} { + !claims + dt configure -module $m + foreach f [glob -nocomplain [file join [At $m] *.man]] { + ProcessManpage $f + } + return +} + +proc ::sak::validate::manpages::ProcessManpage {f} { + =file $f + dt configure -file $f + + if {[catch { + dt format [get_input $f] + } msg]} { + +e $msg + } else { + foreach {pkg _ _} $msg { +claim $pkg } + } + + set warnings [dt warnings] + if {![llength $warnings]} return + + foreach msg $warnings { +w $msg } + return +} + +proc ::sak::validate::manpages::ProcessPackages {m} { + !used + if {![HasPackages $m]} return + + foreach p [ThePackages $m] { + +pkg $p + if {[claimants $p]} { + +doc $p + } else { + nodoc $p + } + } + return +} + +proc ::sak::validate::manpages::ProcessUnclaimed {} { + variable claims + if {![array size claims]} return + foreach p [lsort -dict [array names claims]] { + foreach fx $claims($p) { +u $fx } + } + return +} + +### + +proc ::sak::validate::manpages::=file {f} { + variable current [file tail $f] + = "$current ..." + return +} + +### + +proc ::sak::validate::manpages::!claims {} { + variable claims + array unset claims * + return +} + +proc ::sak::validate::manpages::+claim {pkg} { + variable current + variable claims + lappend claims($pkg) $current + return +} + +proc ::sak::validate::manpages::claimants {pkg} { + variable claims + expr { [info exists claims($pkg)] && [llength $claims($pkg)] } +} + + +### + +proc ::sak::validate::manpages::!used {} { + variable used + array unset used * + return +} + +proc ::sak::validate::manpages::+use {pkg} { + variable used + variable claims + foreach fx $claims($pkg) { set used($fx) . } + unset claims($pkg) + return +} + +### + +proc ::sak::validate::manpages::MapPackages {} { + variable pkg + array unset pkg * + + ! + += Package + foreach {pname pdata} [ipackages] { + = "$pname ..." + foreach {pver pmodule} $pdata break + lappend pkg($pmodule) $pname + } + ! + =| {Packages mapped ...} + return +} + +proc ::sak::validate::manpages::HasPackages {m} { + variable pkg + expr { [info exists pkg($m)] && [llength $pkg($m)] } +} + +proc ::sak::validate::manpages::ThePackages {m} { + variable pkg + return [lsort -dict $pkg($m)] +} + +### + +proc ::sak::validate::manpages::+pkg {pkg} { + variable mtotal ; incr mtotal + variable total ; incr total + return +} + +proc ::sak::validate::manpages::+doc {pkg} { + variable mhavedoc ; incr mhavedoc + variable havedoc ; incr havedoc + = "$pkg Ok" + +use $pkg + return +} + +proc ::sak::validate::manpages::nodoc {pkg} { + = "$pkg Bad" + log "@@ WARN No documentation: $pkg" + return +} + +### + +proc ::sak::validate::manpages::+w {msg} { + variable mwarnings ; incr mwarnings + variable warnings ; incr warnings + variable current + foreach {a b c} [split $msg \n] break + log "@@ WARN $current: [Trim $a] [Trim $b] [Trim $c]" + return +} + +proc ::sak::validate::manpages::+e {msg} { + variable merrors ; incr merrors + variable errors ; incr errors + variable current + log "@@ ERROR $current $msg" + return +} + +proc ::sak::validate::manpages::+u {f} { + variable used + if {[info exists used($f)]} return + variable munclaimed ; incr munclaimed + variable unclaimed ; incr unclaimed + set used($f) . + log "@@ WARN Unclaimed documentation file: $f" + return +} + +### + +proc ::sak::validate::manpages::Count {modules} { + variable maxml 0 + ! + foreach m [linsert $modules 0 Module] { + = "M $m" + set l [string length $m] + if {$l > $maxml} {set maxml $l} + } + =| "Validate documentation (existence, errors, warnings) ..." + return +} + +proc ::sak::validate::manpages::Head {m} { + variable maxml + += ${m}[blank [expr {$maxml - [string length $m]}]] + return +} + +### + +proc ::sak::validate::manpages::InitModuleCounters {} { + variable mtotal 0 + variable mhavedoc 0 + variable munclaimed 0 + variable merrors 0 + variable mwarnings 0 + return +} + +proc ::sak::validate::manpages::ModuleSummary {} { + variable mtotal + variable mhavedoc + variable munclaimed + variable merrors + variable mwarnings + + set complete [F $mhavedoc]/[F $mtotal] + set not "! [F [expr {$mtotal - $mhavedoc}]]" + set err "E [F $merrors]" + set warn "W [F $mwarnings]" + set unc "U [F $munclaimed]" + + if {$munclaimed} { + set unc [=cya $unc] + >> unc + } + if {!$mhavedoc && $mtotal} { + set complete [=red $complete] + set not [=red $not] + >> none + } elseif {$mhavedoc < $mtotal} { + set complete [=yel $complete] + set not [=yel $not] + >> miss + } + if {$merrors} { + set err [=red $err] + set warn [=yel $warn] + >> fail + } elseif {$mwarnings} { + set warn [=yel $warn] + >> warn + } + + =| "~~ $complete $not $unc $err $warn" + return +} + +### + +proc ::sak::validate::manpages::InitCounters {} { + variable total 0 + variable havedoc 0 + variable unclaimed 0 + variable errors 0 + variable warnings 0 + return +} + +proc ::sak::validate::manpages::Summary {} { + variable total + variable havedoc + variable unclaimed + variable errors + variable warnings + + set tot [F $total] + set doc [F $havedoc] + set udc [F [expr {$total - $havedoc}]] + + set unc [F $unclaimed] + set per [format %6.2f [expr {$havedoc*100./$total}]] + set uper [format %6.2f [expr {($total - $havedoc)*100./$total}]] + set err [F $errors] + set wrn [F $warnings] + + if {$errors} { set err [=red $err] } + if {$warnings} { set wrn [=yel $wrn] } + if {$unclaimed} { set unc [=cya $unc] } + + if {!$havedoc && $total} { + set doc [=red $doc] + set udc [=red $udc] + } elseif {$havedoc < $total} { + set doc [=yel $doc] + set udc [=yel $udc] + } + + sum "" + sum "Documentation statistics" + sum "#Packages: $tot" + sum "#Documented: $doc (${per}%)" + sum "#Undocumented: $udc (${uper}%)" + sum "#Unclaimed: $unc" + sum "#Errors: $err" + sum "#Warnings: $wrn" + return +} + +### + +proc ::sak::validate::manpages::F {n} { format %6d $n } + +proc ::sak::validate::manpages::Trim {text} { + regsub {^[^:]*:} $text {} text + return [string trim $text] +} + +### + +proc ::sak::validate::manpages::At {m} { + global distribution + return [file join $distribution modules $m] +} + +# ### + +namespace eval ::sak::validate::manpages { + # Max length of module names and patchlevel information. + variable maxml 0 + + # Counters across all modules + variable total 0 ; # Number of packages overall. + variable havedoc 0 ; # Number of packages with documentation. + variable unclaimed 0 ; # Number of manpages not claimed by a specific package. + variable errors 0 ; # Number of errors found in all documentation. + variable warnings 0 ; # Number of warnings found in all documentation. + + # Same counters, per module. + variable mtotal 0 + variable mhavedoc 0 + variable munclaimed 0 + variable merrors 0 + variable mwarnings 0 + + # Name of currently processed manpage + variable current "" + + # Map from packages to files claiming to document them. + variable claims + array set claims {} + + # Set of files taken by packages, as array + variable used + array set used {} + + # Map from modules to packages contained in them + variable pkg + array set pkg {} +} + +## +# ### + +package provide sak::validate::manpages 1.0 diff --git a/tcllib/support/devel/sak/validate/pkgIndex.tcl b/tcllib/support/devel/sak/validate/pkgIndex.tcl new file mode 100644 index 0000000..d6ad128 --- /dev/null +++ b/tcllib/support/devel/sak/validate/pkgIndex.tcl @@ -0,0 +1,6 @@ +if {![package vsatisfies [package provide Tcl] 8.2]} return +package ifneeded sak::validate 1.0 [list source [file join $dir validate.tcl]] +package ifneeded sak::validate::manpages 1.0 [list source [file join $dir manpages.tcl]] +package ifneeded sak::validate::versions 1.0 [list source [file join $dir versions.tcl]] +package ifneeded sak::validate::testsuites 1.0 [list source [file join $dir testsuites.tcl]] +package ifneeded sak::validate::syntax 1.0 [list source [file join $dir syntax.tcl]] diff --git a/tcllib/support/devel/sak/validate/syntax.tcl b/tcllib/support/devel/sak/validate/syntax.tcl new file mode 100644 index 0000000..24e06d2 --- /dev/null +++ b/tcllib/support/devel/sak/validate/syntax.tcl @@ -0,0 +1,668 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::animate +package require sak::feedback +package require sak::color + +getpackage textutil::repeat textutil/repeat.tcl +getpackage doctools doctools/doctools.tcl + +namespace eval ::sak::validate::syntax { + namespace import ::textutil::repeat::blank + namespace import ::sak::color::* + namespace import ::sak::feedback::! + namespace import ::sak::feedback::>> + namespace import ::sak::feedback::+= + namespace import ::sak::feedback::= + namespace import ::sak::feedback::=| + namespace import ::sak::feedback::log + namespace import ::sak::feedback::summary + rename summary sum +} + +# ### + +proc ::sak::validate::syntax {modules mode stem tclv} { + syntax::run $modules $mode $stem $tclv + syntax::summary + return +} + +proc ::sak::validate::syntax::run {modules mode stem tclv} { + sak::feedback::init $mode $stem + sak::feedback::first log "\[ Syntax \] ======================================================" + sak::feedback::first unc "\[ Syntax \] ======================================================" + sak::feedback::first fail "\[ Syntax \] ======================================================" + sak::feedback::first warn "\[ Syntax \] ======================================================" + sak::feedback::first miss "\[ Syntax \] ======================================================" + sak::feedback::first none "\[ Syntax \] ======================================================" + + # Preprocessing of module names to allow better formatting of the + # progress output, i.e. vertically aligned columns + + # Per module we can distinguish the following levels of + # syntactic completeness and validity. + + # Rule completeness + # - No package has pcx rules + # - Some, but not all packages have pcx rules + # - All packages have pcx rules + # + # Validity. Not of the pcx rules, but of the files in the + # packages. + # - Package has errors and warnings + # - Package has errors, but no warnings. + # - Package has no errors, but warnings. + # - Package has neither errors nor warnings. + + # Progress report per module: Modules and packages it is working on. + # Summary at module level: + # - Number of packages, number of packages with pcx rules + # - Number of errors, number of warnings. + + # Full log: + # - Lists packages without pcx rules. + # - Lists packages with errors/warnings. + # - Lists the exact errors/warnings per package, and location. + + # Global preparation: Pull information about all packages and the + # modules they belong to. + + Setup + Count $modules + MapPackages + + InitCounters + foreach m $modules { + # Skip tcllibc shared library, not a module. + if {[string equal $m tcllibc]} continue + + InitModuleCounters + ! + log "@@ Module $m" + Head $m + + # Per module: Find all syntax definition (pcx) files inside + # and process them. Further find all the Tcl files and process + # them as well. We get errors, warnings, and determine the + # package(s) they may belong to. + + # Per package: Have they pcx files claiming them? After that, + # are pcx files left over (i.e. without a package)? + + ProcessAllPCX $m + ProcessPackages $m + ProcessUnclaimed + ProcessTclSources $m $tclv + ModuleSummary + } + + Shutdown + return +} + +proc ::sak::validate::syntax::summary {} { + Summary + return +} + +# ### + +proc ::sak::validate::syntax::ProcessAllPCX {m} { + !claims + foreach f [glob -nocomplain [file join [At $m] *.pcx]] { + ProcessOnePCX $f + } + return +} + +proc ::sak::validate::syntax::ProcessOnePCX {f} { + =file $f + + if {[catch { + Scan [get_input $f] + } msg]} { + +e $msg + } else { + +claim $msg + } + + return +} + +proc ::sak::validate::syntax::ProcessPackages {m} { + !used + if {![HasPackages $m]} return + + foreach p [ThePackages $m] { + +pkg $p + if {[claimants $p]} { + +pcx $p + } else { + nopcx $p + } + } + return +} + +proc ::sak::validate::syntax::ProcessUnclaimed {} { + variable claims + if {![array size claims]} return + foreach p [lsort -dict [array names claims]] { + foreach fx $claims($p) { +u $fx } + } + return +} + +proc ::sak::validate::syntax::ProcessTclSources {m tclv} { + variable tclchecker + if {![llength $tclchecker]} return + + foreach t [modtclfiles $m] { + # Ignore TeX files. + if {[string equal [file extension $t] .tex]} continue + + =file $t + set cmd [Command $t $tclv] + if {[catch {Close [Process [open |$cmd r+]]} msg]} { + if {[string match {*child process exited abnormally*} $msg]} continue + +e $msg + } + } + return +} + +### + +proc ::sak::validate::syntax::Setup {} { + variable ip [interp create] + + # Make it mostly empty (We keep the 'set' command). + + foreach n [interp eval $ip [list ::namespace children ::]] { + if {[string equal $n ::tcl]} continue + interp eval $ip [list namespace delete $n] + } + foreach c [interp eval $ip [list ::info commands]] { + if {[string equal $c set]} continue + if {[string equal $c if]} continue + if {[string equal $c rename]} continue + if {[string equal $c namespace]} continue + interp eval $ip [list ::rename $c {}] + } + + if {![package vsatisfies [package present Tcl] 8.6]} { + interp eval $ip [list ::namespace delete ::tcl] + } + interp eval $ip [list ::rename namespace {}] + interp eval $ip [list ::rename rename {}] + + foreach m { + pcx::register unknown + } { + interp alias $ip $m {} ::sak::validate::syntax::PCX/[string map {:: _} $m] $ip + } + return +} + +proc ::sak::validate::syntax::Shutdown {} { + variable ip + interp delete $ip + return +} + +proc ::sak::validate::syntax::Scan {data} { + variable ip + variable pcxpackage + while {1} { + if {[catch { + $ip eval $data + } msg]} { + if {[string match {can't read "*": no such variable} $msg]} { + regexp {can't read "(.*)": no such variable} $msg -> var + log "@@ + variable \"$var\"" + $ip eval [list set $var {}] + continue + } + return -code error $msg + } + break + } + return $pcxpackage +} + +proc ::sak::validate::syntax::PCX/pcx_register {ip pkg} { + variable pcxpackage $pkg + return +} + +proc ::sak::validate::syntax::PCX/unknown {ip args} { + return 0 +} + +### + +proc ::sak::validate::syntax::Process {pipe} { + variable current + set dst log + while {1} { + if {[eof $pipe]} break + if {[gets $pipe line] < 0} break + + set tline [string trim $line] + if {[string equal $tline ""]} continue + + if {[string match scanning:* $tline]} { + log $line + continue + } + if {[string match checking:* $tline]} { + log $line + continue + } + if {[regexp {^([^:]*):(\d+) \(([^)]*)\) (.*)$} $tline -> path at code detail]} { + = "$current $at $code" + set dst code,$code + if {[IsError $code]} { + +e $line + } else { + +w $line + } + } + log $line $dst + } + return $pipe +} + +proc ::sak::validate::syntax::IsError {code} { + variable codetype + variable codec + if {[info exists codec($code)]} { + return $codec($code) + } + + foreach {p t} $codetype { + if {![string match $p $code]} continue + set codec($code) $t + return $t + } + + # We assume that codetype contains a default * pattern as the last + # entry, capturing all unknown codes. + +e INTERNAL + exit +} + +proc ::sak::validate::syntax::Command {t tclv} { + # Unix. Construction of the pipe to run the tclchecker against a + # single tcl file. + + set cmd [Driver $tclv] + lappend cmd $t + + #lappend cmd >@ stdout 2>@ stderr + #puts <<$cmd>> + + return $cmd +} + +proc ::sak::validate::syntax::Close {pipe} { + close $pipe + return +} + +proc ::sak::validate::syntax::Driver {tclv} { + variable tclchecker + set cmd $tclchecker + + if {$tclv ne {}} { lappend cmd -use Tcl-$tclv } + + # Make all syntax definition files we may have available to the + # checker for higher accuracy of its output. + foreach m [modules] { lappend cmd -pcx [At $m] } + + # Memoize + proc ::sak::validate::syntax::Driver {tclv} [list return $cmd] + return $cmd +} + +### + +proc ::sak::validate::syntax::=file {f} { + variable current [file tail $f] + = "$current ..." + return +} + +### + +proc ::sak::validate::syntax::!claims {} { + variable claims + array unset claims * + return +} + +proc ::sak::validate::syntax::+claim {pkg} { + variable current + variable claims + lappend claims($pkg) $current + return +} + +proc ::sak::validate::syntax::claimants {pkg} { + variable claims + expr { [info exists claims($pkg)] && [llength $claims($pkg)] } +} + + +### + +proc ::sak::validate::syntax::!used {} { + variable used + array unset used * + return +} + +proc ::sak::validate::syntax::+use {pkg} { + variable used + variable claims + foreach fx $claims($pkg) { set used($fx) . } + unset claims($pkg) + return +} + +### + +proc ::sak::validate::syntax::MapPackages {} { + variable pkg + array unset pkg * + + ! + += Package + foreach {pname pdata} [ipackages] { + = "$pname ..." + foreach {pver pmodule} $pdata break + lappend pkg($pmodule) $pname + } + ! + =| {Packages mapped ...} + return +} + +proc ::sak::validate::syntax::HasPackages {m} { + variable pkg + expr { [info exists pkg($m)] && [llength $pkg($m)] } +} + +proc ::sak::validate::syntax::ThePackages {m} { + variable pkg + return [lsort -dict $pkg($m)] +} + +### + +proc ::sak::validate::syntax::+pkg {pkg} { + variable mtotal ; incr mtotal + variable total ; incr total + return +} + +proc ::sak::validate::syntax::+pcx {pkg} { + variable mhavepcx ; incr mhavepcx + variable havepcx ; incr havepcx + = "$pkg Ok" + +use $pkg + return +} + +proc ::sak::validate::syntax::nopcx {pkg} { + = "$pkg Bad" + log "@@ WARN No syntax definition: $pkg" + return +} + +### + +proc ::sak::validate::syntax::+w {msg} { + variable mwarnings ; incr mwarnings + variable warnings ; incr warnings + variable current + foreach {a b c} [split $msg \n] break + log "@@ WARN $current: [Trim $a] [Trim $b] [Trim $c]" + return +} + +proc ::sak::validate::syntax::+e {msg} { + variable merrors ; incr merrors + variable errors ; incr errors + variable current + log "@@ ERROR $current $msg" + return +} + +proc ::sak::validate::syntax::+u {f} { + variable used + if {[info exists used($f)]} return + variable munclaimed ; incr munclaimed + variable unclaimed ; incr unclaimed + set used($f) . + log "@@ WARN Unclaimed syntax definition file: $f" + return +} + +### + +proc ::sak::validate::syntax::Count {modules} { + variable maxml 0 + ! + foreach m [linsert $modules 0 Module] { + = "M $m" + set l [string length $m] + if {$l > $maxml} {set maxml $l} + } + =| "Validate syntax (code, and API definitions) ..." + return +} + +proc ::sak::validate::syntax::Head {m} { + variable maxml + += ${m}[blank [expr {$maxml - [string length $m]}]] + return +} + +### + +proc ::sak::validate::syntax::InitModuleCounters {} { + variable mtotal 0 + variable mhavepcx 0 + variable munclaimed 0 + variable merrors 0 + variable mwarnings 0 + return +} + +proc ::sak::validate::syntax::ModuleSummary {} { + variable mtotal + variable mhavepcx + variable munclaimed + variable merrors + variable mwarnings + variable tclchecker + + set complete [F $mhavepcx]/[F $mtotal] + set not "! [F [expr {$mtotal - $mhavepcx}]]" + set err "E [F $merrors]" + set warn "W [F $mwarnings]" + set unc "U [F $munclaimed]" + + if {$munclaimed} { + set unc [=cya $unc] + >> unc + } + if {!$mhavepcx && $mtotal} { + set complete [=red $complete] + set not [=red $not] + >> none + } elseif {$mhavepcx < $mtotal} { + set complete [=yel $complete] + set not [=yel $not] + >> miss + } + if {[llength $tclchecker]} { + if {$merrors} { + set err " [=red $err]" + set warn " [=yel $warn]" + >> fail + } elseif {$mwarnings} { + set err " $err" + set warn " [=yel $warn]" + >> warn + } else { + set err " $err" + set warn " $warn" + } + } else { + set err "" + set warn "" + } + + =| "~~ $complete $not $unc$err$warn" + return +} + +### + +proc ::sak::validate::syntax::InitCounters {} { + variable total 0 + variable havepcx 0 + variable unclaimed 0 + variable errors 0 + variable warnings 0 + return +} + +proc ::sak::validate::syntax::Summary {} { + variable total + variable havepcx + variable unclaimed + variable errors + variable warnings + variable tclchecker + + set tot [F $total] + set doc [F $havepcx] + set udc [F [expr {$total - $havepcx}]] + + set unc [F $unclaimed] + set per [format %6.2f [expr {$havepcx*100./$total}]] + set uper [format %6.2f [expr {($total - $havepcx)*100./$total}]] + set err [F $errors] + set wrn [F $warnings] + + if {$errors} { set err [=red $err] } + if {$warnings} { set wrn [=yel $wrn] } + if {$unclaimed} { set unc [=cya $unc] } + + if {!$havepcx && $total} { + set doc [=red $doc] + set udc [=red $udc] + } elseif {$havepcx < $total} { + set doc [=yel $doc] + set udc [=yel $udc] + } + + if {[llength $tclchecker]} { + set sfx " ($tclchecker)" + } else { + set sfx " ([=cya {No tclchecker available}])" + } + + sum "" + sum "Syntax statistics$sfx" + sum "#Packages: $tot" + sum "#Syntax def: $doc (${per}%)" + sum "#No syntax: $udc (${uper}%)" + sum "#Unclaimed: $unc" + if {[llength $tclchecker]} { + sum "#Errors: $err" + sum "#Warnings: $wrn" + } + return +} + +### + +proc ::sak::validate::syntax::F {n} { format %6d $n } + +proc ::sak::validate::syntax::Trim {text} { + regsub {^[^:]*:} $text {} text + return [string trim $text] +} + +### + +proc ::sak::validate::syntax::At {m} { + global distribution + return [file join $distribution modules $m] +} + +# ### + +namespace eval ::sak::validate::syntax { + # Max length of module names and patchlevel information. + variable maxml 0 + + # Counters across all modules + variable total 0 ; # Number of packages overall. + variable havepcx 0 ; # Number of packages with syntax definition (pcx) files. + variable unclaimed 0 ; # Number of PCX files not claimed by a specific package. + variable errors 0 ; # Number of errors found in all code. + variable warnings 0 ; # Number of warnings found in all code. + + # Same counters, per module. + variable mtotal 0 + variable mhavepcx 0 + variable munclaimed 0 + variable merrors 0 + variable mwarnings 0 + + # Name of currently processed syntax definition or code file + variable current "" + + # Map from packages to files claiming to define the syntax of their API. + variable claims + array set claims {} + + # Set of files taken by packages, as array + variable used + array set used {} + + # Map from modules to packages contained in them + variable pkg + array set pkg {} + + # Transient storage used while collecting packages per syntax definition. + variable pcxpackage {} + variable ip {} + + # Location of the tclchecker used to perform syntactic validation. + variable tclchecker [auto_execok tclchecker] + + # Patterns for separation of errors from warnings + variable codetype { + warn* 0 + nonPort* 0 + pkgUnchecked 0 + pkgVConflict 0 + * 1 + } + variable codec ; array set codec {} +} + +## +# ### + +package provide sak::validate::syntax 1.0 diff --git a/tcllib/support/devel/sak/validate/testsuites.tcl b/tcllib/support/devel/sak/validate/testsuites.tcl new file mode 100644 index 0000000..71ea694 --- /dev/null +++ b/tcllib/support/devel/sak/validate/testsuites.tcl @@ -0,0 +1,512 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::animate +package require sak::feedback +package require sak::color + +getpackage textutil::repeat textutil/repeat.tcl +getpackage interp interp/interp.tcl + +namespace eval ::sak::validate::testsuites { + namespace import ::textutil::repeat::blank + namespace import ::sak::color::* + namespace import ::sak::feedback::! + namespace import ::sak::feedback::>> + namespace import ::sak::feedback::+= + namespace import ::sak::feedback::= + namespace import ::sak::feedback::=| + namespace import ::sak::feedback::log + namespace import ::sak::feedback::summary + rename summary sum +} + +# ### + +proc ::sak::validate::testsuites {modules mode stem tclv} { + testsuites::run $modules $mode $stem $tclv + testsuites::summary + return +} + +proc ::sak::validate::testsuites::run {modules mode stem tclv} { + sak::feedback::init $mode $stem + sak::feedback::first log "\[ Testsuites \] ==================================================" + sak::feedback::first unc "\[ Testsuites \] ==================================================" + sak::feedback::first fail "\[ Testsuites \] ==================================================" + sak::feedback::first miss "\[ Testsuites \] ==================================================" + sak::feedback::first none "\[ Testsuites \] ==================================================" + + # Preprocessing of module names to allow better formatting of the + # progress output, i.e. vertically aligned columns + + # Per module we can distinguish the following levels of + # testsuite completeness: + # - No package has a testsuite + # - Some, but not all packages have a testsuite + # - All packages have a testsuite. + # + # Validity of the testsuites is not done here. It requires + # execution, see 'sak test run ...'. + + # Progress report per module: Packages it is working on. + # Summary at module level: + # - Number of packages, number of packages with testsuites, + + # Full log: + # - Lists packages without testsuites. + + # Global preparation: Pull information about all packages and the + # modules they belong to. + + Setup + Count $modules + MapPackages + + InitCounters + foreach m $modules { + # Skip tcllibc shared library, not a module. + if {[string equal $m tcllibc]} continue + + InitModuleCounters + ! + log "@@ Module $m" + Head $m + + # Per module: Find all testsuites in the module and process + # them. We determine the package(s) they may belong to. + + # Per package: Have they .test files claiming them? After + # that, are .test files left over (i.e. without a package)? + + ProcessTestsuites $m + ProcessPackages $m + ProcessUnclaimed + ModuleSummary + } + + Shutdown + return +} + +proc ::sak::validate::testsuites::summary {} { + Summary + return +} + +# ### + +proc ::sak::validate::testsuites::ProcessTestsuites {m} { + !claims + foreach f [glob -nocomplain [file join [At $m] *.test]] { + ProcessTestsuite $f + } + return +} + +proc ::sak::validate::testsuites::ProcessTestsuite {f} { + variable testing + =file $f + + if {[catch { + Scan [get_input $f] + } msg]} { + +e $msg + } else { + foreach p $testing { +claim $p } + } + + + return +} + +proc ::sak::validate::testsuites::Setup {} { + variable ip [interp create] + + # Make it mostly empty (We keep the 'set' command). + + foreach n [interp eval $ip [list ::namespace children ::]] { + if {[string equal $n ::tcl]} continue + interp eval $ip [list namespace delete $n] + } + foreach c [interp eval $ip [list ::info commands]] { + if {[string equal $c set]} continue + if {[string equal $c if]} continue + if {[string equal $c rename]} continue + if {[string equal $c namespace]} continue + interp eval $ip [list ::rename $c {}] + } + + if {![package vsatisfies [package present Tcl] 8.6]} { + interp eval $ip [list ::namespace delete ::tcl] + } + interp eval $ip [list ::rename namespace {}] + interp eval $ip [list ::rename rename {}] + + foreach m { + testing unknown useLocal useLocalKeep useAccel + } { + interp alias $ip $m {} ::sak::validate::testsuites::Process/$m $ip + } + return +} + +proc ::sak::validate::testsuites::Shutdown {} { + variable ip + interp delete $ip + return +} + +proc ::sak::validate::testsuites::Scan {data} { + variable ip + while {1} { + if {[catch { + $ip eval $data + } msg]} { + if {[string match {can't read "*": no such variable} $msg]} { + regexp {can't read "(.*)": no such variable} $msg -> var + log "@@ + variable \"$var\"" + $ip eval [list set $var {}] + continue + } + return -code error $msg + } + break + } + return +} + +proc ::sak::validate::testsuites::Process/useTcllibC {ip args} { + return 0 +} + +proc ::sak::validate::testsuites::Process/unknown {ip args} { + return 0 +} + +proc ::sak::validate::testsuites::Process/testing {ip script} { + variable testing {} + $ip eval $script + return -code return +} + +proc ::sak::validate::testsuites::Process/useLocal {ip f p args} { + variable testing + lappend testing $p + return +} + +proc ::sak::validate::testsuites::Process/useLocalKeep {ip f p args} { + variable testing + lappend testing $p + return +} + +proc ::sak::validate::testsuites::Process/useAccel {ip _ f p} { + variable testing + lappend testing $p + return +} + +proc ::sak::validate::testsuites::ProcessPackages {m} { + !used + if {![HasPackages $m]} return + + foreach p [ThePackages $m] { + +pkg $p + if {[claimants $p]} { + +tests $p + } else { + notests $p + } + } + return +} + +proc ::sak::validate::testsuites::ProcessUnclaimed {} { + variable claims + if {![array size claims]} return + foreach p [lsort -dict [array names claims]] { + foreach fx $claims($p) { +u $fx } + } + return +} + +### + +proc ::sak::validate::testsuites::=file {f} { + variable current [file tail $f] + = "$current ..." + return +} + +### + +proc ::sak::validate::testsuites::!claims {} { + variable claims + array unset claims * + return +} + +proc ::sak::validate::testsuites::+claim {pkg} { + variable current + variable claims + lappend claims($pkg) $current + return +} + +proc ::sak::validate::testsuites::claimants {pkg} { + variable claims + expr { [info exists claims($pkg)] && [llength $claims($pkg)] } +} + + +### + +proc ::sak::validate::testsuites::!used {} { + variable used + array unset used * + return +} + +proc ::sak::validate::testsuites::+use {pkg} { + variable used + variable claims + foreach fx $claims($pkg) { set used($fx) . } + unset claims($pkg) + return +} + +### + +proc ::sak::validate::testsuites::MapPackages {} { + variable pkg + array unset pkg * + + ! + += Package + foreach {pname pdata} [ipackages] { + = "$pname ..." + foreach {pver pmodule} $pdata break + lappend pkg($pmodule) $pname + } + ! + =| {Packages mapped ...} + return +} + +proc ::sak::validate::testsuites::HasPackages {m} { + variable pkg + expr { [info exists pkg($m)] && [llength $pkg($m)] } +} + +proc ::sak::validate::testsuites::ThePackages {m} { + variable pkg + return [lsort -dict $pkg($m)] +} + +### + +proc ::sak::validate::testsuites::+pkg {pkg} { + variable mtotal ; incr mtotal + variable total ; incr total + return +} + +proc ::sak::validate::testsuites::+tests {pkg} { + variable mhavetests ; incr mhavetests + variable havetests ; incr havetests + = "$pkg Ok" + +use $pkg + return +} + +proc ::sak::validate::testsuites::notests {pkg} { + = "$pkg Bad" + log "@@ WARN No testsuite: $pkg" + return +} + +### + +proc ::sak::validate::testsuites::+e {msg} { + variable merrors ; incr merrors + variable errors ; incr errors + variable current + log "@@ ERROR $current $msg" + return +} + +proc ::sak::validate::testsuites::+u {f} { + variable used + if {[info exists used($f)]} return + variable munclaimed ; incr munclaimed + variable unclaimed ; incr unclaimed + set used($f) . + log "@@ NOTE Unclaimed testsuite $f" + return +} + +### + +proc ::sak::validate::testsuites::Count {modules} { + variable maxml 0 + ! + foreach m [linsert $modules 0 Module] { + = "M $m" + set l [string length $m] + if {$l > $maxml} {set maxml $l} + } + =| "Validate testsuites (existence) ..." + return +} + +proc ::sak::validate::testsuites::Head {m} { + variable maxml + += ${m}[blank [expr {$maxml - [string length $m]}]] + return +} + +### + +proc ::sak::validate::testsuites::InitModuleCounters {} { + variable mtotal 0 + variable mhavetests 0 + variable munclaimed 0 + variable merrors 0 + return +} + +proc ::sak::validate::testsuites::ModuleSummary {} { + variable mtotal + variable mhavetests + variable munclaimed + variable merrors + + set complete [F $mhavetests]/[F $mtotal] + set not "! [F [expr {$mtotal - $mhavetests}]]" + set err "E [F $merrors]" + set unc "U [F $munclaimed]" + + if {$munclaimed} { + set unc [=cya $unc] + >> unc + } + if {!$mhavetests && $mtotal} { + set complete [=red $complete] + set not [=red $not] + >> none + } elseif {$mhavetests < $mtotal} { + set complete [=yel $complete] + set not [=yel $not] + >> miss + } + if {$merrors} { + set err [red]$err[rst] + >> fail + } + + =| "~~ $complete $not $unc $err" + return +} + +### + +proc ::sak::validate::testsuites::InitCounters {} { + variable total 0 + variable havetests 0 + variable unclaimed 0 + variable errors 0 + return +} + +proc ::sak::validate::testsuites::Summary {} { + variable total + variable havetests + variable unclaimed + variable errors + + set tot [F $total] + set tst [F $havetests] + set uts [F [expr {$total - $havetests}]] + set unc [F $unclaimed] + set per [format %6.2f [expr {$havetests*100./$total}]] + set uper [format %6.2f [expr {($total - $havetests)*100./$total}]] + set err [F $errors] + + if {$errors} { set err [=red $err] } + if {$unclaimed} { set unc [=cya $unc] } + + if {!$havetests && $total} { + set tst [=red $tst] + set uts [=red $uts] + } elseif {$havetests < $total} { + set tst [=yel $tst] + set uts [=yel $uts] + } + + sum "" + sum "Testsuite statistics" + sum "#Packages: $tot" + sum "#Tested: $tst (${per}%)" + sum "#Untested: $uts (${uper}%)" + sum "#Unclaimed: $unc" + sum "#Errors: $err" + return +} + +### + +proc ::sak::validate::testsuites::F {n} { format %6d $n } + +### + +proc ::sak::validate::testsuites::At {m} { + global distribution + return [file join $distribution modules $m] +} + +# ### + +namespace eval ::sak::validate::testsuites { + # Max length of module names and patchlevel information. + variable maxml 0 + + # Counters across all modules + variable total 0 ; # Number of packages overall. + variable havetests 0 ; # Number of packages with testsuites. + variable unclaimed 0 ; # Number of testsuites not claimed by a specific package. + variable errors 0 ; # Number of errors found with all testsuites. + + # Same counters, per module. + variable mtotal 0 + variable mhavetests 0 + variable munclaimed 0 + variable merrors 0 + + # Name of currently processed testsuite + variable current "" + + # Map from packages to files claiming to test them. + variable claims + array set claims {} + + # Set of files taken by packages, as array + variable used + array set used {} + + # Map from modules to packages contained in them + variable pkg + array set pkg {} + + # Transient storage used while collecting packages per testsuite. + variable testing {} + variable ip {} +} + +## +# ### + +package provide sak::validate::testsuites 1.0 diff --git a/tcllib/support/devel/sak/validate/topic.txt b/tcllib/support/devel/sak/validate/topic.txt new file mode 100644 index 0000000..1ddc79b --- /dev/null +++ b/tcllib/support/devel/sak/validate/topic.txt @@ -0,0 +1 @@ +validate Validate modules and packages diff --git a/tcllib/support/devel/sak/validate/validate.tcl b/tcllib/support/devel/sak/validate/validate.tcl new file mode 100644 index 0000000..1901deb --- /dev/null +++ b/tcllib/support/devel/sak/validate/validate.tcl @@ -0,0 +1,37 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +namespace eval ::sak::validate {} + +# ### + +proc ::sak::validate::usage {args} { + package require sak::help + puts stdout [join $args { }]\n[sak::help::on validate] + exit 1 +} + +proc ::sak::validate::all {modules mode stem tclv} { + package require sak::validate::versions + package require sak::validate::manpages + package require sak::validate::testsuites + package require sak::validate::syntax + + sak::validate::versions::run $modules $mode $stem $tclv + sak::validate::manpages::run $modules $mode $stem $tclv + sak::validate::testsuites::run $modules $mode $stem $tclv + sak::validate::syntax::run $modules $mode $stem $tclv + + sak::validate::versions::summary + sak::validate::manpages::summary + sak::validate::testsuites::summary + sak::validate::syntax::summary + return +} + +## +# ### + +package provide sak::validate 1.0 diff --git a/tcllib/support/devel/sak/validate/versions.tcl b/tcllib/support/devel/sak/validate/versions.tcl new file mode 100644 index 0000000..4d622ae --- /dev/null +++ b/tcllib/support/devel/sak/validate/versions.tcl @@ -0,0 +1,258 @@ +# -*- tcl -*- +# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net> +## +# ### + +package require sak::animate +package require sak::feedback +package require sak::color + +getpackage textutil::repeat textutil/repeat.tcl +getpackage interp interp/interp.tcl +getpackage struct::set struct/sets.tcl +getpackage struct::list struct/list.tcl + +namespace eval ::sak::validate::versions { + namespace import ::textutil::repeat::blank + namespace import ::sak::color::* + namespace import ::sak::feedback::! + namespace import ::sak::feedback::>> + namespace import ::sak::feedback::+= + namespace import ::sak::feedback::= + namespace import ::sak::feedback::=| + namespace import ::sak::feedback::log + namespace import ::sak::feedback::summary + rename summary sum +} + +# ### + +proc ::sak::validate::versions {modules mode stem tclv} { + versions::run $modules $mode $stem $tclv + versions::summary + return +} + +proc ::sak::validate::versions::run {modules mode stem tclv} { + sak::feedback::init $mode $stem + sak::feedback::first log "\[ Versions \] ====================================================" + sak::feedback::first warn "\[ Versions \] ====================================================" + sak::feedback::first fail "\[ Versions \] ====================================================" + + # Preprocessing of module names to allow better formatting of the + # progress output, i.e. vertically aligned columns + + # Per module + # - List modules without package index (error) + # - List packages provided missing from pkgIndex.tcl + # - List packages in the pkgIndex.tcl, but not provided. + # - List packages where provided and indexed versions differ. + + Count $modules + MapPackages + + InitCounters + foreach m $modules { + # Skip tcllibc shared library, not a module. + if {[string equal $m tcllibc]} continue + + InitModuleCounters + ! + log "@@ Module $m" + Head $m + + if {![llength [glob -nocomplain [file join [At $m] pkgIndex.tcl]]]} { + +e "No package index" + } else { + # Compare package provided to ifneeded. + + struct::list assign \ + [struct::set intersect3 [Indexed $m] [Provided $m]] \ + compare only_indexed only_provided + + foreach p [lsort -dict $only_indexed ] { +w "Indexed/No Provider: $p" } + foreach p [lsort -dict $only_provided] { +w "Provided/Not Indexed: $p" } + + foreach p [lsort -dict $compare] { + set iv [IndexedVersions $m $p] + set pv [ProvidedVersions $m $p] + if {[struct::set equal $iv $pv]} continue + + struct::list assign \ + [struct::set intersect3 $pv $iv] \ + __ pmi imp + + +w "Indexed </> Provided: $p \[<$imp </> $pmi\]" + } + } + ModuleSummary + } + return +} + +proc ::sak::validate::versions::summary {} { + Summary + return +} + +# ### + +proc ::sak::validate::versions::MapPackages {} { + variable pkg + array unset pkg * + + ! + += Package + foreach {pname pdata} [ipackages] { + = "$pname ..." + foreach {pvlist pmodule} $pdata break + lappend pkg(mi,$pmodule) $pname + lappend pkg(vi,$pmodule,$pname) $pvlist + + foreach {pname pvlist} [ppackages $pmodule] { + lappend pkg(mp,$pmodule) $pname + lappend pkg(vp,$pmodule,$pname) $pvlist + } + } + ! + =| {Packages mapped ...} + return +} + +proc ::sak::validate::versions::Provided {m} { + variable pkg + if {![info exists pkg(mp,$m)]} { return {} } + return [lsort -dict $pkg(mp,$m)] +} + +proc ::sak::validate::versions::Indexed {m} { + variable pkg + if {![info exists pkg(mi,$m)]} { return {} } + return [lsort -dict $pkg(mi,$m)] +} + +proc ::sak::validate::versions::ProvidedVersions {m p} { + variable pkg + return [lsort -dict $pkg(vp,$m,$p)] +} + +proc ::sak::validate::versions::IndexedVersions {m p} { + variable pkg + return [lsort -dict $pkg(vi,$m,$p)] +} + +### + +proc ::sak::validate::versions::+e {msg} { + variable merrors ; incr merrors + variable errors ; incr errors + log "@@ ERROR $msg" + return +} + +proc ::sak::validate::versions::+w {msg} { + variable mwarnings ; incr mwarnings + variable warnings ; incr warnings + log "@@ WARN $msg" + return +} + +proc ::sak::validate::versions::Count {modules} { + variable maxml 0 + ! + foreach m [linsert $modules 0 Module] { + = "M $m" + set l [string length $m] + if {$l > $maxml} {set maxml $l} + } + =| "Validate versions (indexed vs. provided) ..." + return +} + +proc ::sak::validate::versions::Head {m} { + variable maxml + += ${m}[blank [expr {$maxml - [string length $m]}]] + return +} + +### + +proc ::sak::validate::versions::InitModuleCounters {} { + variable merrors 0 + variable mwarnings 0 + return +} + +proc ::sak::validate::versions::ModuleSummary {} { + variable merrors + variable mwarnings + + set err "E [F $merrors]" + set wrn "W [F $mwarnings]" + + if {$mwarnings} { set wrn [=yel $wrn] ; >> warn } + if {$merrors} { set err [=red $err] ; >> fail } + + =| "~~ $err $wrn" + return +} + +### + +proc ::sak::validate::versions::InitCounters {} { + variable errors 0 + variable warnings 0 + return +} + +proc ::sak::validate::versions::Summary {} { + variable errors + variable warnings + + set err [F $errors] + set wrn [F $warnings] + + if {$errors} { set err [=red $err] } + if {$warnings} { set wrn [=yel $wrn] } + + sum "" + sum "Versions statistics" + sum "#Errors: $err" + sum "#Warnings: $wrn" + return +} + +### + +proc ::sak::validate::versions::F {n} { format %6d $n } + +### + +proc ::sak::validate::versions::At {m} { + global distribution + return [file join $distribution modules $m] +} + +# ### + +namespace eval ::sak::validate::versions { + # Max length of module names and patchlevel information. + variable maxml 0 + + # Counters across all modules + variable errors 0 ; # Number of errors found (= modules without pkg index) + variable warnings 0 ; # Number of warings + + # Same counters, per module. + variable merrors 0 + variable mwarnings 0 + + # Map from modules to packages and their versions. + variable pkg + array set pkg {} +} + +## +# ### + +package provide sak::validate::versions 1.0 |