Tcl Library Source Code

Check-in [f49f632755]
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Closing a fork
Timelines: family | ancestors | descendants | both | hypnotoad
Files: files | file ages | folders
SHA3-256: f49f632755718191eeec123f647fbcf7f6949a5bf62dd74afcec1f6af5441f32
User & Date: hypnotoad 2019-04-11 16:27:13
Context
2019-04-12
03:18
Practcl fixes: Added an optional argument to build-tclsh for the caller to specify the effective path for the build environment. Fixed a spot in auto-detection that was banking on the localsrcdir define being defined... by auto-detection. check-in: fb659ebc12 user: hypnotoad tags: hypnotoad
2019-04-11
16:27
Closing a fork check-in: f49f632755 user: hypnotoad tags: hypnotoad
16:25
Updated branch with trunk work in prep for merge back (zig). Resolves most test issues of the branch. check-in: e7e38ee473 user: aku tags: hypnotoad
15:40
Changed the name of the ::kitpkg() array to ::starkit::static_package() to avoid polluting the global namespace check-in: a20ae30353 user: hypnotoad tags: hypnotoad
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Name change from embedded/index.html to embedded/index.md.

     1      1   <div class='fossil-doc' data-title='Tcl Library Source Code'>
     2      2   
     3      3   <h1 align="center">Tcl Library Source Code</h1>
     4      4   
     5      5   <center>
     6         -<form action='../../../docsrch' method='GET'>
     7         -<input type="text" name="s" size="40" autofocus>
     8         -<input type="submit" value="Search Docs">
     9         -</form>
    10         -<p><a href="www/toc.html">
    11         -Table Of Contents</a>
    12         -&nbsp;&nbsp;&nbsp;
    13         -<a href="www/index.html">
    14         -Keyword Index</a>
            6  +Packages
            7  +- [Table Of Contents](md/toc.md)
            8  +- [Keyword Index](md/index.md)
            9  +</center>
           10  +
           11  +<center>
           12  +	<form action='../../../docsrch' method='GET'>
           13  +	<input type="text" name="s" size="40" autofocus>
           14  +	<input type="submit" value="Search Package Documentation">
           15  +	</form>
    15     16   </center>
    16     17   
    17         -<h2>Discussion &amp; Contact</h2>
    18         -<ul>
    19         -<p>Tcllib has two <a href="https://sourceforge.net/p/tcllib/mailman/">mailing lists</a>,
    20         -one for notifications, the other for general discussion. These are managed at SourceForge,
    21         -at the aforementioned link. A few direct links for various topics:
    22         -<table>
    23         -<tr><td>tcllib-bugs: </td>
    24         -<td><a href="https://lists.sourceforge.net/lists/listinfo/tcllib-bugs">Subscribe</a></td>
    25         -<td><a href="https://sourceforge.net/p/tcllib/mailman/tcllib-bugs">Archive</a></td>
    26         -<td><a href="https://sourceforge.net/p/tcllib/mailman/search/?mail_list=tcllib-bugs">Search</a></td></tr>
    27         -<tr><td>tcllib-devel:</td>
    28         -<td><a href="https://lists.sourceforge.net/lists/listinfo/tcllib-devel">Subscribe</a></td>
    29         -<td><a href="https://sourceforge.net/p/tcllib/mailman/tcllib-devel">Archive</a></td>
    30         -<td><a href="https://sourceforge.net/p/tcllib/mailman/search/?mail_list=tcllib-devel">Search</a></td></tr>
    31         -</table>
           18  +## Discussion & Contact
           19  +
           20  +Tcllib has two
           21  +[mailing lists](https://sourceforge.net/p/tcllib/mailman/).
           22  +
           23  +One for notifications (commits, ticket changes), the other for general
           24  +discussion. These are managed at SourceForge, at the aforementioned
           25  +link. A few direct links for various topics:
           26  +
           27  +|tcllib-bugs| : |[Subscribe](https://lists.sourceforge.net/lists/listinfo/tcllib-bugs) [Archive](https://sourceforge.net/p/tcllib/mailman/tcllib-bugs) [Search](https://sourceforge.net/p/tcllib/mailman/search/?mail_list=tcllib-bugs)|
           28  +|tcllib-devel| : |[Subscribe](https://lists.sourceforge.net/lists/listinfo/tcllib-devel) [Archive](https://sourceforge.net/p/tcllib/mailman/tcllib-devel) [Search](https://sourceforge.net/p/tcllib/mailman/search/?mail_list=tcllib-devel)|
           29  +
           30  +## Feedback
           31  +
           32  +Please go to and use our
           33  +[Local Trackers](../../../reportlist).
           34  +They are for
           35  +
           36  +   * Bugs,
           37  +   * Patches, and	 
           38  +   * Ideas & Feature Requests.
           39  +
           40  +## Releases
           41  +
           42  +   * [Current](../../../technote/0b2528ed32f54c4a8f08951aaa11ff60b3843630) __1.19 (Feb 16, 2018)__
           43  +   * [Past Releases](../../../wiki?name=Past+Releases)
           44  +   * [Development Snapshots](../../../wiki?name=Development+Snapshots)
           45  +   * [@ SourceForge](https://sourceforge.net/projects/tcllib/files/)
           46  +
           47  +## Related Repositories
           48  +
           49  +   * [Tklib](../../../../tklib)
           50  +   * [Tcl Apps](../../../../tclapps)
           51  +   * [Tcl Bench](../../../../tclbench)
           52  +   * [Multicolumn Listbox](../../../../mclistbox)
           53  +   * [Widget](../../../../widget)
           54  +   * [BWidget](../../../../bwidget)
           55  +
    32     56   
    33         -</ul></p>
    34         -</ul>
    35         -
    36         -<h2>Feedback</h2>
    37         -<ul>
    38         -<p>Please go to and use our
    39         -<a href="../../../reportlist">
    40         -Local Trackers</a>. They are for
    41         -<ul>
    42         -<li>Bugs,</li>
    43         -<li>Patches, and </li>
    44         -<li>Ideas &amp; Feature Requests.</li>
    45         -</ul></p>
    46         -</ul>
           57  +## See also
    47     58   
    48         -<h2>Releases</h2>
    49         -
    50         -<ul>
    51         -<p>Current:
    52         -<b>1.19 (Feb 16, 2018)</b>
    53         -<a href="../../../technote/0b2528ed32f54c4a8f08951aaa11ff60b3843630">Details</a>
    54         -
    55         -</p>
    56         -<p><a href='../../../wiki?name=Past+Releases'>[Past Releases]</a></p>
    57         -<p><a href='../../../wiki?name=Development+Snapshots'>[Development Snapshots]</a></p>
    58         -<p><a href="https://sourceforge.net/projects/tcllib/files/">@ SourceForge</a></p>
    59         -</ul>
    60         -
    61         -<h2>Related Repositories</h2>
    62         -<ul>
    63         -<li><a href="../../../../tklib">Tklib</a></li>
    64         -<li><a href="../../../../tclapps">Tcl Apps</a></li>
    65         -<li><a href="../../../../tclbench">Tcl Bench</a></li>
    66         -<li><a href="../../../../mclistbox">Multicolumn Listbox</a></li>
    67         -<li><a href="../../../../widget">Widget</a></li>
    68         -<li><a href="../../../../bwidget">BWidget</a></li>
    69         -</ul>
    70         -
    71         -
    72         -<h2>See also</h2>
    73         -<ul>
    74         -<li><a href="http://www.tcl.tk/software/tcllib/">Landing page for this package at the Tcl Developer eXchange</a></li>
    75         -</ul>
           59  +   * [Landing page for this package at the Tcl Developer eXchange](http://www.tcl.tk/software/tcllib/)

Added embedded/md/image/arch_core_container.png.

cannot compute difference between binary files

Added embedded/md/image/arch_core_eplugins.png.

cannot compute difference between binary files

Added embedded/md/image/arch_core_export.png.

cannot compute difference between binary files

Added embedded/md/image/arch_core_import.png.

cannot compute difference between binary files

Added embedded/md/image/arch_core_iplugins.png.

cannot compute difference between binary files

Added embedded/md/image/arch_core_support.png.

cannot compute difference between binary files

Added embedded/md/image/arch_core_transform.png.

cannot compute difference between binary files

Added embedded/md/image/arch_user_app.png.

cannot compute difference between binary files

Added embedded/md/image/arch_user_pkg.png.

cannot compute difference between binary files

Added embedded/md/image/architecture.png.

cannot compute difference between binary files

Added embedded/md/image/expr_ast.png.

cannot compute difference between binary files

Added embedded/md/image/flow.png.

cannot compute difference between binary files

Added embedded/md/image/gen_options.png.

cannot compute difference between binary files

Added embedded/md/index.md.

            1  +
            2  +[//000000001]: # (Index generated by tcllib/doctools/idx with format 'markdown')
            3  +
            4  +# Keyword Index
            5  +
            6  +----
            7  +
            8  +[3](#c3) &#183; [A](#cA) &#183; [B](#cB) &#183; [C](#cC) &#183; [D](#cD) &#183; [E](#cE) &#183; [F](#cF) &#183; [G](#cG) &#183; [H](#cH) &#183; [I](#cI) &#183; [J](#cJ) &#183; [K](#cK) &#183; [L](#cL) &#183; [M](#cM) &#183; [N](#cN) &#183; [O](#cO) &#183; [P](#cP) &#183; [Q](#cQ) &#183; [R](#cR) &#183; [S](#cS) &#183; [T](#cT) &#183; [U](#cU) &#183; [V](#cV) &#183; [W](#cW) &#183; [X](#cX) &#183; [Y](#cY) &#183; [Z](#cZ)
            9  +
           10  +----
           11  +
           12  +#### <a name='c3'></a>Keywords: 3
           13  +
           14  +|||
           15  +|---|---|
           16  +|<a name='3des'></a>3DES|[des](tcllib/files/modules/des/des\.md) &#183; [tclDES](tcllib/files/modules/des/tcldes\.md) &#183; [tclDESjr](tcllib/files/modules/des/tcldesjr\.md)|
           17  +
           18  +
           19  +#### <a name='cA'></a>Keywords: A
           20  +
           21  +|||
           22  +|---|---|
           23  +|<a name='abstract\_syntax\_tree'></a>abstract syntax tree|[grammar::me::util](tcllib/files/modules/grammar\_me/me\_util\.md) &#183; [grammar::me\_ast](tcllib/files/modules/grammar\_me/me\_ast\.md)|
           24  +|<a name='acceptance'></a>acceptance|[grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md)|
           25  +|<a name='acceptor'></a>acceptor|[grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md)|
           26  +|<a name='active'></a>active|[transfer::connect](tcllib/files/modules/transfer/connect\.md)|
           27  +|<a name='adaptors'></a>adaptors|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
           28  +|<a name='adjacency\_list'></a>adjacency list|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           29  +|<a name='adjacency\_matrix'></a>adjacency matrix|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           30  +|<a name='adjacent'></a>adjacent|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           31  +|<a name='adjusting'></a>adjusting|[textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
           32  +|<a name='adler32'></a>adler32|[tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md)|
           33  +|<a name='aes'></a>aes|[aes](tcllib/files/modules/aes/aes\.md)|
           34  +|<a name='after'></a>after|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
           35  +|<a name='alias'></a>alias|[interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
           36  +|<a name='amazon'></a>amazon|[S3](tcllib/files/modules/amazon\-s3/S3\.md)|
           37  +|<a name='ambiguous'></a>ambiguous|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
           38  +|<a name='american\_express'></a>American Express|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md)|
           39  +|<a name='amex'></a>AMEX|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md)|
           40  +|<a name='angle'></a>angle|[math::geometry](tcllib/files/modules/math/math\_geometry\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
           41  +|<a name='anonymous\_procedure'></a>anonymous procedure|[lambda](tcllib/files/modules/lambda/lambda\.md)|
           42  +|<a name='ansi'></a>ansi|[term::ansi::code::attr](tcllib/files/modules/term/ansi\_cattr\.md) &#183; [term::ansi::code::ctrl](tcllib/files/modules/term/ansi\_cctrl\.md) &#183; [term::ansi::code::macros](tcllib/files/modules/term/ansi\_cmacros\.md) &#183; [term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
           43  +|<a name='appender'></a>appender|[logger::appender](tcllib/files/modules/log/loggerAppender\.md) &#183; [logger::utils](tcllib/files/modules/log/loggerUtils\.md)|
           44  +|<a name='application'></a>application|[nns](tcllib/files/apps/nns\.md) &#183; [nnsd](tcllib/files/apps/nnsd\.md) &#183; [nnslog](tcllib/files/apps/nnslog\.md)|
           45  +|<a name='approximation\_algorithm'></a>approximation algorithm|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           46  +|<a name='arc'></a>arc|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           47  +|<a name='arcfour'></a>arcfour|[rc4](tcllib/files/modules/rc4/rc4\.md)|
           48  +|<a name='archive'></a>archive|[tar](tcllib/files/modules/tar/tar\.md)|
           49  +|<a name='argument\_integrity'></a>argument integrity|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
           50  +|<a name='argument\_processing'></a>argument processing|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
           51  +|<a name='argument\_validation'></a>argument validation|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
           52  +|<a name='arguments'></a>arguments|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
           53  +|<a name='argv'></a>argv|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
           54  +|<a name='argv0'></a>argv0|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
           55  +|<a name='array'></a>array|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
           56  +|<a name='articulation\_point'></a>articulation point|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           57  +|<a name='ascii85'></a>ascii85|[ascii85](tcllib/files/modules/base64/ascii85\.md)|
           58  +|<a name='asn'></a>asn|[asn](tcllib/files/modules/asn/asn\.md)|
           59  +|<a name='assembler'></a>assembler|[grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md)|
           60  +|<a name='assert'></a>assert|[control](tcllib/files/modules/control/control\.md)|
           61  +|<a name='assign'></a>assign|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
           62  +|<a name='ast'></a>AST|[grammar::me\_ast](tcllib/files/modules/grammar\_me/me\_ast\.md)|
           63  +|<a name='asynchronous'></a>asynchronous|[cache::async](tcllib/files/modules/cache/async\.md)|
           64  +|<a name='attribute\_control'></a>attribute control|[term::ansi::code::attr](tcllib/files/modules/term/ansi\_cattr\.md) &#183; [term::ansi::code::ctrl](tcllib/files/modules/term/ansi\_cctrl\.md)|
           65  +|<a name='augmenting\_network'></a>augmenting network|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           66  +|<a name='augmenting\_path'></a>augmenting path|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           67  +|<a name='authentication'></a>authentication|[autoproxy](tcllib/files/modules/http/autoproxy\.md) &#183; [SASL](tcllib/files/modules/sasl/sasl\.md) &#183; [SASL::NTLM](tcllib/files/modules/sasl/ntlm\.md) &#183; [SASL::SCRAM](tcllib/files/modules/sasl/scram\.md) &#183; [SASL::XGoogleToken](tcllib/files/modules/sasl/gtoken\.md)|
           68  +|<a name='automatic'></a>automatic|[nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md)|
           69  +|<a name='automatic\_documentation'></a>automatic documentation|[tepam::doc\_gen](tcllib/files/modules/tepam/tepam\_doc\_gen\.md)|
           70  +|<a name='automaton'></a>automaton|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md)|
           71  +|<a name='aycock'></a>aycock|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
           72  +
           73  +
           74  +#### <a name='cB'></a>Keywords: B
           75  +
           76  +|||
           77  +|---|---|
           78  +|<a name='bank'></a>bank|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md)|
           79  +|<a name='base32'></a>base32|[base32](tcllib/files/modules/base32/base32\.md) &#183; [base32::core](tcllib/files/modules/base32/base32core\.md) &#183; [base32::hex](tcllib/files/modules/base32/base32hex\.md)|
           80  +|<a name='base64'></a>base64|[base64](tcllib/files/modules/base64/base64\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md)|
           81  +|<a name='bash'></a>bash|[string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
           82  +|<a name='bee'></a>bee|[bee](tcllib/files/modules/bee/bee\.md)|
           83  +|<a name='bench\_language'></a>bench language|[bench\_intro](tcllib/files/modules/bench/bench\_intro\.md) &#183; [bench\_lang\_intro](tcllib/files/modules/bench/bench\_lang\_intro\.md) &#183; [bench\_lang\_spec](tcllib/files/modules/bench/bench\_lang\_spec\.md)|
           84  +|<a name='benchmark'></a>benchmark|[bench](tcllib/files/modules/bench/bench\.md) &#183; [bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::csv](tcllib/files/modules/bench/bench\_wcsv\.md) &#183; [bench::out::text](tcllib/files/modules/bench/bench\_wtext\.md) &#183; [bench\_intro](tcllib/files/modules/bench/bench\_intro\.md) &#183; [bench\_lang\_intro](tcllib/files/modules/bench/bench\_lang\_intro\.md) &#183; [bench\_lang\_spec](tcllib/files/modules/bench/bench\_lang\_spec\.md)|
           85  +|<a name='ber'></a>ber|[asn](tcllib/files/modules/asn/asn\.md)|
           86  +|<a name='bessel\_functions'></a>Bessel functions|[math::special](tcllib/files/modules/math/special\.md)|
           87  +|<a name='bfs'></a>bfs|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           88  +|<a name='bibliography'></a>bibliography|[bibtex](tcllib/files/modules/bibtex/bibtex\.md)|
           89  +|<a name='bibtex'></a>bibtex|[bibtex](tcllib/files/modules/bibtex/bibtex\.md)|
           90  +|<a name='bignums'></a>bignums|[math::bignum](tcllib/files/modules/math/bignum\.md)|
           91  +|<a name='bind'></a>bind|[uevent](tcllib/files/modules/uev/uevent\.md)|
           92  +|<a name='bipartite'></a>bipartite|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           93  +|<a name='bittorrent'></a>BitTorrent|[bee](tcllib/files/modules/bee/bee\.md)|
           94  +|<a name='bittorrent'></a>bittorrent|[bee](tcllib/files/modules/bee/bee\.md)|
           95  +|<a name='blanks'></a>blanks|[textutil::repeat](tcllib/files/modules/textutil/repeat\.md)|
           96  +|<a name='block\_cipher'></a>block cipher|[aes](tcllib/files/modules/aes/aes\.md) &#183; [blowfish](tcllib/files/modules/blowfish/blowfish\.md) &#183; [des](tcllib/files/modules/des/des\.md) &#183; [tclDES](tcllib/files/modules/des/tcldes\.md) &#183; [tclDESjr](tcllib/files/modules/des/tcldesjr\.md)|
           97  +|<a name='blocking\_flow'></a>blocking flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
           98  +|<a name='blowfish'></a>blowfish|[blowfish](tcllib/files/modules/blowfish/blowfish\.md)|
           99  +|<a name='book\_number'></a>Book Number|[valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          100  +|<a name='breadth\_first'></a>breadth\-first|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          101  +|<a name='bridge'></a>bridge|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          102  +|<a name='bwidget'></a>BWidget|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
          103  +
          104  +
          105  +#### <a name='cC'></a>Keywords: C
          106  +
          107  +|||
          108  +|---|---|
          109  +|<a name='c'></a>C|[doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md)|
          110  +|<a name='c\_'></a>C\+\+|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md) &#183; [stooop](tcllib/files/modules/stooop/stooop\.md) &#183; [switched](tcllib/files/modules/stooop/switched\.md)|
          111  +|<a name='cache'></a>cache|[cache::async](tcllib/files/modules/cache/async\.md) &#183; [map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md)|
          112  +|<a name='caesar\_cipher'></a>caesar cipher|[tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
          113  +|<a name='calculus'></a>calculus|[math::calculus](tcllib/files/modules/math/calculus\.md)|
          114  +|<a name='callback'></a>callback|[cache::async](tcllib/files/modules/cache/async\.md) &#183; [hook](tcllib/files/modules/hook/hook\.md) &#183; [lambda](tcllib/files/modules/lambda/lambda\.md) &#183; [oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md) &#183; [uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
          115  +|<a name='callbacks'></a>callbacks|[tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md)|
          116  +|<a name='capitalize'></a>capitalize|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
          117  +|<a name='card\_for\_credit'></a>card for credit|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md)|
          118  +|<a name='cardinality'></a>cardinality|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          119  +|<a name='cat'></a>cat|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
          120  +|<a name='catalog\_package'></a>catalog package|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          121  +|<a name='catalogue'></a>catalogue|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
          122  +|<a name='cell\_phone'></a>cell\-phone|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
          123  +|<a name='cer'></a>cer|[asn](tcllib/files/modules/asn/asn\.md)|
          124  +|<a name='cfg'></a>CFG|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
          125  +|<a name='cfl'></a>CFL|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
          126  +|<a name='cgi'></a>CGI|[ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
          127  +|<a name='cgraph'></a>cgraph|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph\_v1](tcllib/files/modules/struct/graph1\.md)|
          128  +|<a name='changelog'></a>changelog|[doctools::changelog](tcllib/files/modules/doctools/changelog\.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
          129  +|<a name='channel'></a>channel|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md) &#183; [transfer::connect](tcllib/files/modules/transfer/connect\.md) &#183; [transfer::copy](tcllib/files/modules/transfer/copyops\.md) &#183; [transfer::copy::queue](tcllib/files/modules/transfer/tqueue\.md) &#183; [transfer::data::destination](tcllib/files/modules/transfer/ddest\.md) &#183; [transfer::data::source](tcllib/files/modules/transfer/dsource\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          130  +|<a name='channel\_transformation'></a>channel transformation|[tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) &#183; [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) &#183; [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) &#183; [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) &#183; [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) &#183; [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) &#183; [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
          131  +|<a name='character\_input'></a>character input|[term::receive](tcllib/files/modules/term/receive\.md) &#183; [term::receive::bind](tcllib/files/modules/term/term\_bind\.md)|
          132  +|<a name='character\_output'></a>character output|[term::ansi::send](tcllib/files/modules/term/ansi\_send\.md) &#183; [term::send](tcllib/files/modules/term/term\_send\.md)|
          133  +|<a name='chat'></a>chat|[irc](tcllib/files/modules/irc/irc\.md) &#183; [multiplexer](tcllib/files/modules/multiplexer/multiplexer\.md) &#183; [picoirc](tcllib/files/modules/irc/picoirc\.md)|
          134  +|<a name='checkbox'></a>checkbox|[html](tcllib/files/modules/html/html\.md) &#183; [javascript](tcllib/files/modules/javascript/javascript\.md)|
          135  +|<a name='checkbutton'></a>checkbutton|[html](tcllib/files/modules/html/html\.md)|
          136  +|<a name='checking'></a>Checking|[valtype::common](tcllib/files/modules/valtype/valtype\_common\.md) &#183; [valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md) &#183; [valtype::imei](tcllib/files/modules/valtype/imei\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md) &#183; [valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md) &#183; [valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md) &#183; [valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          137  +|<a name='checksum'></a>checksum|[cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md) &#183; [tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md)|
          138  +|<a name='chop'></a>chop|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
          139  +|<a name='cipher'></a>cipher|[pki](tcllib/files/modules/pki/pki\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
          140  +|<a name='cksum'></a>cksum|[cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md)|
          141  +|<a name='class'></a>class|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md) &#183; [stooop](tcllib/files/modules/stooop/stooop\.md) &#183; [switched](tcllib/files/modules/stooop/switched\.md)|
          142  +|<a name='class\_methods'></a>class methods|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          143  +|<a name='class\_variables'></a>class variables|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          144  +|<a name='cleanup'></a>cleanup|[defer](tcllib/files/modules/defer/defer\.md) &#183; [try](tcllib/files/modules/try/tcllib\_try\.md)|
          145  +|<a name='client'></a>client|[nameserv](tcllib/files/modules/nns/nns\_client\.md) &#183; [nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md) &#183; [nameserv::common](tcllib/files/modules/nns/nns\_common\.md) &#183; [nns](tcllib/files/apps/nns\.md) &#183; [nns\_intro](tcllib/files/modules/nns/nns\_intro\.md) &#183; [nnslog](tcllib/files/apps/nnslog\.md)|
          146  +|<a name='cloud'></a>cloud|[S3](tcllib/files/modules/amazon\-s3/S3\.md)|
          147  +|<a name='cmdline\_processing'></a>cmdline processing|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
          148  +|<a name='color\_control'></a>color control|[term::ansi::code::attr](tcllib/files/modules/term/ansi\_cattr\.md) &#183; [term::ansi::code::ctrl](tcllib/files/modules/term/ansi\_cctrl\.md)|
          149  +|<a name='columns'></a>columns|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
          150  +|<a name='comm'></a>comm|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md) &#183; [deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [deleg\_proc](tcllib/files/modules/interp/deleg\_proc\.md) &#183; [nameserv::protocol](tcllib/files/modules/nns/nns\_protocol\.md)|
          151  +|<a name='command'></a>command|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md)|
          152  +|<a name='command\_line\_processing'></a>command line processing|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
          153  +|<a name='command\_prefix'></a>command prefix|[lambda](tcllib/files/modules/lambda/lambda\.md) &#183; [oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          154  +|<a name='comment'></a>comment|[jpeg](tcllib/files/modules/jpeg/jpeg\.md) &#183; [png](tcllib/files/modules/png/png\.md)|
          155  +|<a name='common'></a>common|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          156  +|<a name='common\_prefix'></a>common prefix|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
          157  +|<a name='communication'></a>communication|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
          158  +|<a name='comparison'></a>comparison|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          159  +|<a name='complete\_graph'></a>complete graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          160  +|<a name='complex\_numbers'></a>complex numbers|[math::complexnumbers](tcllib/files/modules/math/qcomplex\.md) &#183; [math::fourier](tcllib/files/modules/math/fourier\.md)|
          161  +|<a name='compression'></a>compression|[tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md) &#183; [zipfile::encode](tcllib/files/modules/zip/encode\.md)|
          162  +|<a name='computations'></a>computations|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md)|
          163  +|<a name='concatenation\_channel'></a>concatenation channel|[tcl::chan::cat](tcllib/files/modules/virtchannel\_base/cat\.md) &#183; [tcl::chan::facade](tcllib/files/modules/virtchannel\_base/facade\.md)|
          164  +|<a name='connected\_component'></a>connected component|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          165  +|<a name='connected\_fifos'></a>connected fifos|[tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md)|
          166  +|<a name='connection'></a>connection|[transfer::connect](tcllib/files/modules/transfer/connect\.md)|
          167  +|<a name='constants'></a>constants|[math::constants](tcllib/files/modules/math/constants\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
          168  +|<a name='container'></a>CONTAINER|[pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md)|
          169  +|<a name='contents'></a>contents|[doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md)|
          170  +|<a name='context\_free\_grammar'></a>context\-free grammar|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
          171  +|<a name='context\_free\_languages'></a>context\-free languages|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          172  +|<a name='control'></a>control|[control](tcllib/files/modules/control/control\.md) &#183; [term](tcllib/files/modules/term/term\.md) &#183; [term::ansi::code](tcllib/files/modules/term/ansi\_code\.md) &#183; [term::ansi::code::attr](tcllib/files/modules/term/ansi\_cattr\.md) &#183; [term::ansi::code::ctrl](tcllib/files/modules/term/ansi\_cctrl\.md) &#183; [term::ansi::code::macros](tcllib/files/modules/term/ansi\_cmacros\.md) &#183; [term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md) &#183; [term::ansi::send](tcllib/files/modules/term/ansi\_send\.md) &#183; [term::interact::menu](tcllib/files/modules/term/imenu\.md) &#183; [term::interact::pager](tcllib/files/modules/term/ipager\.md) &#183; [term::receive](tcllib/files/modules/term/receive\.md) &#183; [term::receive::bind](tcllib/files/modules/term/term\_bind\.md) &#183; [term::send](tcllib/files/modules/term/term\_send\.md)|
          173  +|<a name='control\_structure'></a>control structure|[generator](tcllib/files/modules/generator/generator\.md)|
          174  +|<a name='conversion'></a>conversion|[doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md) &#183; [math::roman](tcllib/files/modules/math/roman\.md) &#183; [mpexpand](tcllib/files/modules/doctools/mpexpand\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
          175  +|<a name='cooked'></a>cooked|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
          176  +|<a name='cookie'></a>cookie|[ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
          177  +|<a name='copy'></a>copy|[fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md) &#183; [transfer::copy](tcllib/files/modules/transfer/copyops\.md) &#183; [transfer::copy::queue](tcllib/files/modules/transfer/tqueue\.md) &#183; [transfer::data::destination](tcllib/files/modules/transfer/ddest\.md) &#183; [transfer::data::source](tcllib/files/modules/transfer/dsource\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          178  +|<a name='coroutine'></a>coroutine|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md) &#183; [generator](tcllib/files/modules/generator/generator\.md)|
          179  +|<a name='cost'></a>Cost|[treeql](tcllib/files/modules/treeql/treeql\.md)|
          180  +|<a name='counter'></a>counter|[tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md)|
          181  +|<a name='counting'></a>counting|[counter](tcllib/files/modules/counter/counter\.md)|
          182  +|<a name='cparam'></a>CPARAM|[pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md)|
          183  +|<a name='crc'></a>crc|[cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md)|
          184  +|<a name='crc16'></a>crc16|[crc16](tcllib/files/modules/crc/crc16\.md)|
          185  +|<a name='crc32'></a>crc32|[cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md)|
          186  +|<a name='credit\_card'></a>credit card|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md)|
          187  +|<a name='cron'></a>cron|[cron](tcllib/files/modules/cron/cron\.md)|
          188  +|<a name='cryptography'></a>cryptography|[blowfish](tcllib/files/modules/blowfish/blowfish\.md)|
          189  +|<a name='css'></a>CSS|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md)|
          190  +|<a name='csv'></a>csv|[bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::csv](tcllib/files/modules/bench/bench\_wcsv\.md) &#183; [csv](tcllib/files/modules/csv/csv\.md)|
          191  +|<a name='currying'></a>currying|[lambda](tcllib/files/modules/lambda/lambda\.md) &#183; [oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          192  +|<a name='cut\_edge'></a>cut edge|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          193  +|<a name='cut\_vertex'></a>cut vertex|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          194  +|<a name='cvs'></a>CVS|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          195  +|<a name='cvs'></a>cvs|[doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
          196  +|<a name='cvs\_log'></a>cvs log|[doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
          197  +|<a name='cyclic\_redundancy\_check'></a>cyclic redundancy check|[cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md)|
          198  +
          199  +
          200  +#### <a name='cD'></a>Keywords: D
          201  +
          202  +|||
          203  +|---|---|
          204  +|<a name='data\_analysis'></a>data analysis|[math::statistics](tcllib/files/modules/math/statistics\.md)|
          205  +|<a name='data\_destination'></a>data destination|[transfer::data::destination](tcllib/files/modules/transfer/ddest\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md)|
          206  +|<a name='data\_entry\_form'></a>data entry form|[tepam::argument\_dialogbox](tcllib/files/modules/tepam/tepam\_argument\_dialogbox\.md)|
          207  +|<a name='data\_exchange'></a>data exchange|[huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [json](tcllib/files/modules/json/json\.md) &#183; [json::write](tcllib/files/modules/json/json\_write\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
          208  +|<a name='data\_integrity'></a>data integrity|[aes](tcllib/files/modules/aes/aes\.md) &#183; [cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [des](tcllib/files/modules/des/des\.md) &#183; [pki](tcllib/files/modules/pki/pki\.md) &#183; [rc4](tcllib/files/modules/rc4/rc4\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md) &#183; [tclDES](tcllib/files/modules/des/tcldes\.md) &#183; [tclDESjr](tcllib/files/modules/des/tcldesjr\.md)|
          209  +|<a name='data\_source'></a>data source|[transfer::data::source](tcllib/files/modules/transfer/dsource\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          210  +|<a name='data\_structures'></a>data structures|[struct::record](tcllib/files/modules/struct/record\.md)|
          211  +|<a name='database'></a>database|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
          212  +|<a name='dataflow'></a>dataflow|[page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md)|
          213  +|<a name='\_ddt'></a>\.ddt|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
          214  +|<a name='de'></a>DE|[doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md)|
          215  +|<a name='debug'></a>debug|[debug](tcllib/files/modules/debug/debug\.md) &#183; [debug::caller](tcllib/files/modules/debug/debug\_caller\.md) &#183; [debug::heartbeat](tcllib/files/modules/debug/debug\_heartbeat\.md) &#183; [debug::timestamp](tcllib/files/modules/debug/debug\_timestamp\.md)|
          216  +|<a name='decimal'></a>decimal|[math::decimal](tcllib/files/modules/math/decimal\.md)|
          217  +|<a name='declare'></a>declare|[term::ansi::code](tcllib/files/modules/term/ansi\_code\.md)|
          218  +|<a name='decompression'></a>decompression|[tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md) &#183; [zipfile::decode](tcllib/files/modules/zip/decode\.md) &#183; [zipfile::mkzip](tcllib/files/modules/zip/mkzip\.md)|
          219  +|<a name='decryption'></a>decryption|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
          220  +|<a name='deferal'></a>deferal|[uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
          221  +|<a name='define'></a>define|[term::ansi::code](tcllib/files/modules/term/ansi\_code\.md)|
          222  +|<a name='degree'></a>degree|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          223  +|<a name='degree\_constrained\_spanning\_tree'></a>degree constrained spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          224  +|<a name='degrees'></a>degrees|[math::constants](tcllib/files/modules/math/constants\.md)|
          225  +|<a name='delegation'></a>delegation|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [deleg\_proc](tcllib/files/modules/interp/deleg\_proc\.md)|
          226  +|<a name='depth\_first'></a>depth\-first|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          227  +|<a name='der'></a>der|[asn](tcllib/files/modules/asn/asn\.md)|
          228  +|<a name='des'></a>DES|[des](tcllib/files/modules/des/des\.md) &#183; [tclDES](tcllib/files/modules/des/tcldes\.md) &#183; [tclDESjr](tcllib/files/modules/des/tcldesjr\.md)|
          229  +|<a name='deserialization'></a>deserialization|[doctools::idx::import::docidx](tcllib/files/modules/doctools2idx/import\_docidx\.md) &#183; [doctools::idx::import::json](tcllib/files/modules/doctools2idx/idx\_import\_json\.md) &#183; [doctools::idx::structure](tcllib/files/modules/doctools2idx/idx\_structure\.md) &#183; [doctools::toc::import::doctoc](tcllib/files/modules/doctools2toc/import\_doctoc\.md) &#183; [doctools::toc::import::json](tcllib/files/modules/doctools2toc/toc\_import\_json\.md) &#183; [doctools::toc::structure](tcllib/files/modules/doctools2toc/toc\_structure\.md)|
          230  +|<a name='\_dev\_null'></a>/dev/null|[tcl::chan::null](tcllib/files/modules/virtchannel\_base/tcllib\_null\.md) &#183; [tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md)|
          231  +|<a name='\_dev\_random'></a>/dev/random|[tcl::chan::random](tcllib/files/modules/virtchannel\_base/tcllib\_random\.md) &#183; [tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md)|
          232  +|<a name='\_dev\_zero'></a>/dev/zero|[tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md) &#183; [tcl::chan::zero](tcllib/files/modules/virtchannel\_base/tcllib\_zero\.md)|
          233  +|<a name='diameter'></a>diameter|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          234  +|<a name='dict'></a>dict|[dicttool](tcllib/files/modules/dicttool/dicttool\.md)|
          235  +|<a name='diff'></a>diff|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          236  +|<a name='diff\_n\_format'></a>diff \-n format|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          237  +|<a name='difference'></a>difference|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          238  +|<a name='differential'></a>differential|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          239  +|<a name='differential\_equations'></a>differential equations|[math::calculus](tcllib/files/modules/math/calculus\.md)|
          240  +|<a name='dijkstra'></a>dijkstra|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          241  +|<a name='directory\_access'></a>directory access|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md)|
          242  +|<a name='directory\_traversal'></a>directory traversal|[fileutil\_traverse](tcllib/files/modules/fileutil/traverse\.md)|
          243  +|<a name='discover'></a>Discover|[valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md)|
          244  +|<a name='discrete\_items'></a>discrete items|[struct::pool](tcllib/files/modules/struct/pool\.md)|
          245  +|<a name='disjoint\_set'></a>disjoint set|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
          246  +|<a name='dispatcher'></a>dispatcher|[term::receive::bind](tcllib/files/modules/term/term\_bind\.md)|
          247  +|<a name='distance'></a>distance|[math::geometry](tcllib/files/modules/math/math\_geometry\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
          248  +|<a name='dns'></a>DNS|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          249  +|<a name='do'></a>do|[control](tcllib/files/modules/control/control\.md)|
          250  +|<a name='docidx'></a>docidx|[doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::export::docidx](tcllib/files/modules/doctools2idx/export\_docidx\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::idx::import::docidx](tcllib/files/modules/doctools2idx/import\_docidx\.md) &#183; [doctools::idx::parse](tcllib/files/modules/doctools2idx/idx\_parse\.md) &#183; [doctools::idx::structure](tcllib/files/modules/doctools2idx/idx\_structure\.md) &#183; [doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md)|
          251  +|<a name='docidx\_commands'></a>docidx commands|[docidx\_lang\_cmdref](tcllib/files/modules/doctools/docidx\_lang\_cmdref\.md) &#183; [docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [docidx\_lang\_intro](tcllib/files/modules/doctools/docidx\_lang\_intro\.md) &#183; [docidx\_lang\_syntax](tcllib/files/modules/doctools/docidx\_lang\_syntax\.md)|
          252  +|<a name='docidx\_language'></a>docidx language|[docidx\_lang\_cmdref](tcllib/files/modules/doctools/docidx\_lang\_cmdref\.md) &#183; [docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [docidx\_lang\_intro](tcllib/files/modules/doctools/docidx\_lang\_intro\.md) &#183; [docidx\_lang\_syntax](tcllib/files/modules/doctools/docidx\_lang\_syntax\.md)|
          253  +|<a name='docidx\_markup'></a>docidx markup|[docidx\_lang\_cmdref](tcllib/files/modules/doctools/docidx\_lang\_cmdref\.md) &#183; [docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [docidx\_lang\_intro](tcllib/files/modules/doctools/docidx\_lang\_intro\.md) &#183; [docidx\_lang\_syntax](tcllib/files/modules/doctools/docidx\_lang\_syntax\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md)|
          254  +|<a name='docidx\_syntax'></a>docidx syntax|[docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [docidx\_lang\_intro](tcllib/files/modules/doctools/docidx\_lang\_intro\.md) &#183; [docidx\_lang\_syntax](tcllib/files/modules/doctools/docidx\_lang\_syntax\.md)|
          255  +|<a name='docstrip'></a>docstrip|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) &#183; [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)|
          256  +|<a name='doctoc'></a>doctoc|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::export::doctoc](tcllib/files/modules/doctools2toc/export\_doctoc\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [doctools::toc::import::doctoc](tcllib/files/modules/doctools2toc/import\_doctoc\.md) &#183; [doctools::toc::parse](tcllib/files/modules/doctools2toc/toc\_parse\.md) &#183; [doctools::toc::structure](tcllib/files/modules/doctools2toc/toc\_structure\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md)|
          257  +|<a name='doctoc\_commands'></a>doctoc commands|[doctoc\_lang\_cmdref](tcllib/files/modules/doctools/doctoc\_lang\_cmdref\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctoc\_lang\_intro](tcllib/files/modules/doctools/doctoc\_lang\_intro\.md) &#183; [doctoc\_lang\_syntax](tcllib/files/modules/doctools/doctoc\_lang\_syntax\.md)|
          258  +|<a name='doctoc\_language'></a>doctoc language|[doctoc\_lang\_cmdref](tcllib/files/modules/doctools/doctoc\_lang\_cmdref\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctoc\_lang\_intro](tcllib/files/modules/doctools/doctoc\_lang\_intro\.md) &#183; [doctoc\_lang\_syntax](tcllib/files/modules/doctools/doctoc\_lang\_syntax\.md)|
          259  +|<a name='doctoc\_markup'></a>doctoc markup|[doctoc\_lang\_cmdref](tcllib/files/modules/doctools/doctoc\_lang\_cmdref\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctoc\_lang\_intro](tcllib/files/modules/doctools/doctoc\_lang\_intro\.md) &#183; [doctoc\_lang\_syntax](tcllib/files/modules/doctools/doctoc\_lang\_syntax\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md)|
          260  +|<a name='doctoc\_syntax'></a>doctoc syntax|[doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctoc\_lang\_intro](tcllib/files/modules/doctools/doctoc\_lang\_intro\.md) &#183; [doctoc\_lang\_syntax](tcllib/files/modules/doctools/doctoc\_lang\_syntax\.md)|
          261  +|<a name='doctools'></a>doctools|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [doctools::changelog](tcllib/files/modules/doctools/changelog\.md) &#183; [doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md) &#183; [doctools::idx::export::docidx](tcllib/files/modules/doctools2idx/export\_docidx\.md) &#183; [doctools::idx::export::html](tcllib/files/modules/doctools2idx/idx\_export\_html\.md) &#183; [doctools::idx::export::json](tcllib/files/modules/doctools2idx/idx\_export\_json\.md) &#183; [doctools::idx::export::nroff](tcllib/files/modules/doctools2idx/idx\_export\_nroff\.md) &#183; [doctools::idx::export::text](tcllib/files/modules/doctools2idx/idx\_export\_text\.md) &#183; [doctools::idx::export::wiki](tcllib/files/modules/doctools2idx/idx\_export\_wiki\.md) &#183; [doctools::idx::import::docidx](tcllib/files/modules/doctools2idx/import\_docidx\.md) &#183; [doctools::idx::import::json](tcllib/files/modules/doctools2idx/idx\_import\_json\.md) &#183; [doctools::idx::parse](tcllib/files/modules/doctools2idx/idx\_parse\.md) &#183; [doctools::idx::structure](tcllib/files/modules/doctools2idx/idx\_structure\.md) &#183; [doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md) &#183; [doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md) &#183; [doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md) &#183; [doctools::toc::export::doctoc](tcllib/files/modules/doctools2toc/export\_doctoc\.md) &#183; [doctools::toc::export::html](tcllib/files/modules/doctools2toc/toc\_export\_html\.md) &#183; [doctools::toc::export::json](tcllib/files/modules/doctools2toc/toc\_export\_json\.md) &#183; [doctools::toc::export::nroff](tcllib/files/modules/doctools2toc/toc\_export\_nroff\.md) &#183; [doctools::toc::export::text](tcllib/files/modules/doctools2toc/toc\_export\_text\.md) &#183; [doctools::toc::export::wiki](tcllib/files/modules/doctools2toc/toc\_export\_wiki\.md) &#183; [doctools::toc::import::doctoc](tcllib/files/modules/doctools2toc/import\_doctoc\.md) &#183; [doctools::toc::import::json](tcllib/files/modules/doctools2toc/toc\_import\_json\.md) &#183; [doctools::toc::parse](tcllib/files/modules/doctools2toc/toc\_parse\.md) &#183; [doctools::toc::structure](tcllib/files/modules/doctools2toc/toc\_structure\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md)|
          262  +|<a name='doctools\_commands'></a>doctools commands|[doctools\_lang\_cmdref](tcllib/files/modules/doctools/doctools\_lang\_cmdref\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md) &#183; [doctools\_lang\_intro](tcllib/files/modules/doctools/doctools\_lang\_intro\.md) &#183; [doctools\_lang\_syntax](tcllib/files/modules/doctools/doctools\_lang\_syntax\.md)|
          263  +|<a name='doctools\_language'></a>doctools language|[doctools\_lang\_cmdref](tcllib/files/modules/doctools/doctools\_lang\_cmdref\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md) &#183; [doctools\_lang\_intro](tcllib/files/modules/doctools/doctools\_lang\_intro\.md) &#183; [doctools\_lang\_syntax](tcllib/files/modules/doctools/doctools\_lang\_syntax\.md)|
          264  +|<a name='doctools\_markup'></a>doctools markup|[doctools\_lang\_cmdref](tcllib/files/modules/doctools/doctools\_lang\_cmdref\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md) &#183; [doctools\_lang\_intro](tcllib/files/modules/doctools/doctools\_lang\_intro\.md) &#183; [doctools\_lang\_syntax](tcllib/files/modules/doctools/doctools\_lang\_syntax\.md)|
          265  +|<a name='doctools\_syntax'></a>doctools syntax|[doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md) &#183; [doctools\_lang\_intro](tcllib/files/modules/doctools/doctools\_lang\_intro\.md) &#183; [doctools\_lang\_syntax](tcllib/files/modules/doctools/doctools\_lang\_syntax\.md)|
          266  +|<a name='document'></a>document|[doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md)|
          267  +|<a name='documentation'></a>documentation|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) &#183; [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md) &#183; [tepam::doc\_gen](tcllib/files/modules/tepam/tepam\_doc\_gen\.md)|
          268  +|<a name='dom'></a>DOM|[treeql](tcllib/files/modules/treeql/treeql\.md)|
          269  +|<a name='dom'></a>dom|[xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md)|
          270  +|<a name='domain\_name\_service'></a>domain name service|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          271  +|<a name='\_dtx'></a>\.dtx|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) &#183; [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)|
          272  +
          273  +
          274  +#### <a name='cE'></a>Keywords: E
          275  +
          276  +|||
          277  +|---|---|
          278  +|<a name='e'></a>e|[math::constants](tcllib/files/modules/math/constants\.md)|
          279  +|<a name='ean'></a>EAN|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          280  +|<a name='ean13'></a>EAN13|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          281  +|<a name='earley'></a>earley|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
          282  +|<a name='ebnf'></a>EBNF|[pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          283  +|<a name='eccentricity'></a>eccentricity|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          284  +|<a name='edge'></a>edge|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          285  +|<a name='emacs'></a>emacs|[doctools::changelog](tcllib/files/modules/doctools/changelog\.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
          286  +|<a name='email'></a>email|[imap4](tcllib/files/modules/imap4/imap4\.md) &#183; [mime](tcllib/files/modules/mime/mime\.md) &#183; [pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md)|
          287  +|<a name='emptiness'></a>emptiness|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          288  +|<a name='empty\_interpreter'></a>empty interpreter|[interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
          289  +|<a name='en'></a>EN|[doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md)|
          290  +|<a name='encoding'></a>encoding|[ascii85](tcllib/files/modules/base64/ascii85\.md) &#183; [base64](tcllib/files/modules/base64/base64\.md) &#183; [uuencode](tcllib/files/modules/base64/uuencode\.md) &#183; [yencode](tcllib/files/modules/base64/yencode\.md)|
          291  +|<a name='encryption'></a>encryption|[aes](tcllib/files/modules/aes/aes\.md) &#183; [blowfish](tcllib/files/modules/blowfish/blowfish\.md) &#183; [des](tcllib/files/modules/des/des\.md) &#183; [pki](tcllib/files/modules/pki/pki\.md) &#183; [rc4](tcllib/files/modules/rc4/rc4\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) &#183; [tclDES](tcllib/files/modules/des/tcldes\.md) &#183; [tclDESjr](tcllib/files/modules/des/tcldesjr\.md)|
          292  +|<a name='entry\_mask'></a>entry mask|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md)|
          293  +|<a name='equal'></a>equal|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          294  +|<a name='equality'></a>equality|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          295  +|<a name='equivalence\_class'></a>equivalence class|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
          296  +|<a name='error'></a>error|[throw](tcllib/files/modules/try/tcllib\_throw\.md) &#183; [try](tcllib/files/modules/try/tcllib\_try\.md)|
          297  +|<a name='error\_function'></a>error function|[math::special](tcllib/files/modules/math/special\.md)|
          298  +|<a name='european\_article\_number'></a>European Article Number|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          299  +|<a name='event'></a>event|[hook](tcllib/files/modules/hook/hook\.md) &#183; [uevent](tcllib/files/modules/uev/uevent\.md) &#183; [uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
          300  +|<a name='event\_management'></a>event management|[tcl::chan::events](tcllib/files/modules/virtchannel\_core/events\.md)|
          301  +|<a name='events'></a>events|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          302  +|<a name='examples'></a>examples|[bench\_lang\_intro](tcllib/files/modules/bench/bench\_lang\_intro\.md) &#183; [docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md)|
          303  +|<a name='exception'></a>exception|[try](tcllib/files/modules/try/tcllib\_try\.md)|
          304  +|<a name='exchange\_format'></a>exchange format|[huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [json](tcllib/files/modules/json/json\.md) &#183; [json::write](tcllib/files/modules/json/json\_write\.md)|
          305  +|<a name='exclusion'></a>exclusion|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          306  +|<a name='execution'></a>execution|[grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md)|
          307  +|<a name='exif'></a>exif|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
          308  +|<a name='exit'></a>exit|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          309  +|<a name='export'></a>export|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::export::docidx](tcllib/files/modules/doctools2idx/export\_docidx\.md) &#183; [doctools::idx::export::html](tcllib/files/modules/doctools2idx/idx\_export\_html\.md) &#183; [doctools::idx::export::json](tcllib/files/modules/doctools2idx/idx\_export\_json\.md) &#183; [doctools::idx::export::nroff](tcllib/files/modules/doctools2idx/idx\_export\_nroff\.md) &#183; [doctools::idx::export::text](tcllib/files/modules/doctools2idx/idx\_export\_text\.md) &#183; [doctools::idx::export::wiki](tcllib/files/modules/doctools2idx/idx\_export\_wiki\.md) &#183; [doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::export::doctoc](tcllib/files/modules/doctools2toc/export\_doctoc\.md) &#183; [doctools::toc::export::html](tcllib/files/modules/doctools2toc/toc\_export\_html\.md) &#183; [doctools::toc::export::json](tcllib/files/modules/doctools2toc/toc\_export\_json\.md) &#183; [doctools::toc::export::nroff](tcllib/files/modules/doctools2toc/toc\_export\_nroff\.md) &#183; [doctools::toc::export::text](tcllib/files/modules/doctools2toc/toc\_export\_text\.md) &#183; [doctools::toc::export::wiki](tcllib/files/modules/doctools2toc/toc\_export\_wiki\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md)|
          310  +|<a name='expression'></a>expression|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          311  +|<a name='extended\_namespace'></a>extended namespace|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          312  +
          313  +
          314  +#### <a name='cF'></a>Keywords: F
          315  +
          316  +|||
          317  +|---|---|
          318  +|<a name='faq'></a>faq|[docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md)|
          319  +|<a name='fetching\_information'></a>fetching information|[uri](tcllib/files/modules/uri/uri\.md)|
          320  +|<a name='fft'></a>FFT|[math::fourier](tcllib/files/modules/math/fourier\.md)|
          321  +|<a name='fifo'></a>fifo|[tcl::chan::fifo](tcllib/files/modules/virtchannel\_base/tcllib\_fifo\.md) &#183; [tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md) &#183; [tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md)|
          322  +|<a name='file'></a>file|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md)|
          323  +|<a name='file\_recognition'></a>file recognition|[fileutil::magic::cfront](tcllib/files/modules/fumagic/cfront\.md) &#183; [fileutil::magic::cgen](tcllib/files/modules/fumagic/cgen\.md) &#183; [fileutil::magic::filetype](tcllib/files/modules/fumagic/filetypes\.md) &#183; [fileutil::magic::rt](tcllib/files/modules/fumagic/rtcore\.md)|
          324  +|<a name='file\_type'></a>file type|[fileutil::magic::cfront](tcllib/files/modules/fumagic/cfront\.md) &#183; [fileutil::magic::cgen](tcllib/files/modules/fumagic/cgen\.md) &#183; [fileutil::magic::filetype](tcllib/files/modules/fumagic/filetypes\.md) &#183; [fileutil::magic::rt](tcllib/files/modules/fumagic/rtcore\.md)|
          325  +|<a name='file\_utilities'></a>file utilities|[fileutil](tcllib/files/modules/fileutil/fileutil\.md) &#183; [fileutil::magic::cfront](tcllib/files/modules/fumagic/cfront\.md) &#183; [fileutil::magic::cgen](tcllib/files/modules/fumagic/cgen\.md) &#183; [fileutil::magic::filetype](tcllib/files/modules/fumagic/filetypes\.md) &#183; [fileutil::magic::rt](tcllib/files/modules/fumagic/rtcore\.md) &#183; [fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md)|
          326  +|<a name='filesystem'></a>filesystem|[map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md)|
          327  +|<a name='filter'></a>filter|[generator](tcllib/files/modules/generator/generator\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          328  +|<a name='final'></a>final|[try](tcllib/files/modules/try/tcllib\_try\.md)|
          329  +|<a name='finance'></a>finance|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md)|
          330  +|<a name='find'></a>find|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
          331  +|<a name='finite'></a>finite|[struct::pool](tcllib/files/modules/struct/pool\.md)|
          332  +|<a name='finite\_automaton'></a>finite automaton|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md)|
          333  +|<a name='fips\_180\_1'></a>FIPS 180\-1|[sha1](tcllib/files/modules/sha1/sha1\.md) &#183; [sha256](tcllib/files/modules/sha1/sha256\.md)|
          334  +|<a name='first\_permutation'></a>first permutation|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          335  +|<a name='fisher\_yates'></a>Fisher\-Yates|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          336  +|<a name='flatten'></a>flatten|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          337  +|<a name='floating\_point'></a>floating\-point|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md) &#183; [math::fuzzy](tcllib/files/modules/math/fuzzy\.md)|
          338  +|<a name='flow'></a>flow|[control](tcllib/files/modules/control/control\.md)|
          339  +|<a name='flow\_network'></a>flow network|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          340  +|<a name='folding'></a>folding|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          341  +|<a name='foldl'></a>foldl|[generator](tcllib/files/modules/generator/generator\.md)|
          342  +|<a name='foldr'></a>foldr|[generator](tcllib/files/modules/generator/generator\.md)|
          343  +|<a name='foreach'></a>foreach|[generator](tcllib/files/modules/generator/generator\.md)|
          344  +|<a name='form'></a>form|[html](tcllib/files/modules/html/html\.md) &#183; [ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
          345  +|<a name='format\_conversion'></a>format conversion|[pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md)|
          346  +|<a name='formatter'></a>formatter|[doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md)|
          347  +|<a name='formatting'></a>formatting|[bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::csv](tcllib/files/modules/bench/bench\_wcsv\.md) &#183; [bench::out::text](tcllib/files/modules/bench/bench\_wtext\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md) &#183; [textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) &#183; [textutil::tabify](tcllib/files/modules/textutil/tabify\.md)|
          348  +|<a name='formatting\_engine'></a>formatting engine|[docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md) &#183; [doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md) &#183; [doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md)|
          349  +|<a name='fourier\_transform'></a>Fourier transform|[math::fourier](tcllib/files/modules/math/fourier\.md)|
          350  +|<a name='fr'></a>FR|[doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          351  +|<a name='frame'></a>frame|[term::ansi::code::macros](tcllib/files/modules/term/ansi\_cmacros\.md)|
          352  +|<a name='framework'></a>framework|[tool](tcllib/files/modules/tool/tool\.md)|
          353  +|<a name='ftp'></a>ftp|[ftp](tcllib/files/modules/ftp/ftp\.md) &#183; [ftp::geturl](tcllib/files/modules/ftp/ftp\_geturl\.md) &#183; [ftpd](tcllib/files/modules/ftpd/ftpd\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md)|
          354  +|<a name='ftpd'></a>ftpd|[ftpd](tcllib/files/modules/ftpd/ftpd\.md)|
          355  +|<a name='ftpserver'></a>ftpserver|[ftpd](tcllib/files/modules/ftpd/ftpd\.md)|
          356  +|<a name='full\_outer\_join'></a>full outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          357  +
          358  +
          359  +#### <a name='cG'></a>Keywords: G
          360  +
          361  +|||
          362  +|---|---|
          363  +|<a name='generate\_event'></a>generate event|[uevent](tcllib/files/modules/uev/uevent\.md)|
          364  +|<a name='generate\_permutations'></a>generate permutations|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          365  +|<a name='generation'></a>generation|[doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md)|
          366  +|<a name='generator'></a>generator|[generator](tcllib/files/modules/generator/generator\.md)|
          367  +|<a name='geocoding'></a>geocoding|[map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md)|
          368  +|<a name='geodesy'></a>geodesy|[map::slippy](tcllib/files/modules/map/map\_slippy\.md) &#183; [mapproj](tcllib/files/modules/mapproj/mapproj\.md)|
          369  +|<a name='geography'></a>geography|[map::slippy](tcllib/files/modules/map/map\_slippy\.md)|
          370  +|<a name='get\_character'></a>get character|[term::receive](tcllib/files/modules/term/receive\.md)|
          371  +|<a name='gets'></a>gets|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          372  +|<a name='global'></a>global|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          373  +|<a name='golang'></a>golang|[defer](tcllib/files/modules/defer/defer\.md)|
          374  +|<a name='gopher'></a>gopher|[uri](tcllib/files/modules/uri/uri\.md)|
          375  +|<a name='gps'></a>gps|[gpx](tcllib/files/modules/gpx/gpx\.md) &#183; [nmea](tcllib/files/modules/nmea/nmea\.md)|
          376  +|<a name='gpx'></a>gpx|[gpx](tcllib/files/modules/gpx/gpx\.md)|
          377  +|<a name='grammar'></a>grammar|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md) &#183; [grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) &#183; [grammar::me::cpu](tcllib/files/modules/grammar\_me/me\_cpu\.md) &#183; [grammar::me::cpu::core](tcllib/files/modules/grammar\_me/me\_cpucore\.md) &#183; [grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md) &#183; [grammar::me::tcl](tcllib/files/modules/grammar\_me/me\_tcl\.md) &#183; [grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::me\_vm](tcllib/files/modules/grammar\_me/me\_vm\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          378  +|<a name='graph'></a>graph|[grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md) &#183; [struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md) &#183; [struct::graph\_v1](tcllib/files/modules/struct/graph1\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::stack](tcllib/files/modules/struct/stack\.md)|
          379  +|<a name='graph\_walking'></a>graph walking|[page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md) &#183; [page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md)|
          380  +|<a name='green\_threads'></a>green threads|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          381  +|<a name='grep'></a>grep|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
          382  +|<a name='guid'></a>GUID|[uuid](tcllib/files/modules/uuid/uuid\.md)|
          383  +
          384  +
          385  +#### <a name='cH'></a>Keywords: H
          386  +
          387  +|||
          388  +|---|---|
          389  +|<a name='hashing'></a>hashing|[md4](tcllib/files/modules/md4/md4\.md) &#183; [md5](tcllib/files/modules/md5/md5\.md) &#183; [md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md) &#183; [otp](tcllib/files/modules/otp/otp\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md) &#183; [sha1](tcllib/files/modules/sha1/sha1\.md) &#183; [sha256](tcllib/files/modules/sha1/sha256\.md)|
          390  +|<a name='heartbeat'></a>heartbeat|[debug::heartbeat](tcllib/files/modules/debug/debug\_heartbeat\.md)|
          391  +|<a name='heuristic'></a>heuristic|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          392  +|<a name='hex'></a>hex|[base32::hex](tcllib/files/modules/base32/base32hex\.md)|
          393  +|<a name='hexadecimal'></a>hexadecimal|[tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md)|
          394  +|<a name='histogram'></a>histogram|[counter](tcllib/files/modules/counter/counter\.md)|
          395  +|<a name='hook'></a>hook|[hook](tcllib/files/modules/hook/hook\.md) &#183; [uevent](tcllib/files/modules/uev/uevent\.md)|
          396  +|<a name='horspool'></a>horspool|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
          397  +|<a name='html'></a>HTML|[doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::export::html](tcllib/files/modules/doctools2idx/idx\_export\_html\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::export::html](tcllib/files/modules/doctools2toc/toc\_export\_html\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md) &#183; [mpexpand](tcllib/files/modules/doctools/mpexpand\.md)|
          398  +|<a name='html'></a>html|[html](tcllib/files/modules/html/html\.md) &#183; [htmlparse](tcllib/files/modules/htmlparse/htmlparse\.md) &#183; [javascript](tcllib/files/modules/javascript/javascript\.md) &#183; [ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
          399  +|<a name='http'></a>http|[autoproxy](tcllib/files/modules/http/autoproxy\.md) &#183; [map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md) &#183; [tool](tcllib/files/modules/httpd/httpd\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md) &#183; [websocket](tcllib/files/modules/websocket/websocket\.md)|
          400  +|<a name='httpd'></a>httpd|[tool](tcllib/files/modules/httpd/httpd\.md)|
          401  +|<a name='https'></a>https|[uri](tcllib/files/modules/uri/uri\.md)|
          402  +|<a name='httpserver'></a>httpserver|[tool](tcllib/files/modules/httpd/httpd\.md)|
          403  +|<a name='huddle'></a>huddle|[huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
          404  +|<a name='human\_readable'></a>human readable|[bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::text](tcllib/files/modules/bench/bench\_wtext\.md)|
          405  +|<a name='hyphenation'></a>hyphenation|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
          406  +
          407  +
          408  +#### <a name='cI'></a>Keywords: I
          409  +
          410  +|||
          411  +|---|---|
          412  +|<a name='i18n'></a>i18n|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          413  +|<a name='iban'></a>IBAN|[valtype::iban](tcllib/files/modules/valtype/iban\.md)|
          414  +|<a name='ident'></a>ident|[ident](tcllib/files/modules/ident/ident\.md)|
          415  +|<a name='identification'></a>identification|[ident](tcllib/files/modules/ident/ident\.md)|
          416  +|<a name='identity'></a>identity|[tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md)|
          417  +|<a name='idle'></a>idle|[uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
          418  +|<a name='image'></a>image|[jpeg](tcllib/files/modules/jpeg/jpeg\.md) &#183; [png](tcllib/files/modules/png/png\.md) &#183; [tiff](tcllib/files/modules/tiff/tiff\.md)|
          419  +|<a name='imap'></a>imap|[imap4](tcllib/files/modules/imap4/imap4\.md)|
          420  +|<a name='imei'></a>IMEI|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
          421  +|<a name='import'></a>import|[doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::idx::import::docidx](tcllib/files/modules/doctools2idx/import\_docidx\.md) &#183; [doctools::idx::import::json](tcllib/files/modules/doctools2idx/idx\_import\_json\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [doctools::toc::import::doctoc](tcllib/files/modules/doctools2toc/import\_doctoc\.md) &#183; [doctools::toc::import::json](tcllib/files/modules/doctools2toc/toc\_import\_json\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md)|
          422  +|<a name='in\_memory\_channel'></a>in\-memory channel|[tcl::chan::fifo](tcllib/files/modules/virtchannel\_base/tcllib\_fifo\.md) &#183; [tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md) &#183; [tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md) &#183; [tcl::chan::memchan](tcllib/files/modules/virtchannel\_base/tcllib\_memchan\.md) &#183; [tcl::chan::string](tcllib/files/modules/virtchannel\_base/tcllib\_string\.md) &#183; [tcl::chan::variable](tcllib/files/modules/virtchannel\_base/tcllib\_variable\.md)|
          423  +|<a name='in\_order'></a>in\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          424  +|<a name='inclusion'></a>inclusion|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          425  +|<a name='incr\_tcl'></a>Incr Tcl|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
          426  +|<a name='indenting'></a>indenting|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
          427  +|<a name='independent\_set'></a>independent set|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          428  +|<a name='index'></a>index|[docidx\_intro](tcllib/files/modules/doctools/docidx\_intro\.md) &#183; [docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::export::docidx](tcllib/files/modules/doctools2idx/export\_docidx\.md) &#183; [doctools::idx::export::html](tcllib/files/modules/doctools2idx/idx\_export\_html\.md) &#183; [doctools::idx::export::json](tcllib/files/modules/doctools2idx/idx\_export\_json\.md) &#183; [doctools::idx::export::nroff](tcllib/files/modules/doctools2idx/idx\_export\_nroff\.md) &#183; [doctools::idx::export::text](tcllib/files/modules/doctools2idx/idx\_export\_text\.md) &#183; [doctools::idx::export::wiki](tcllib/files/modules/doctools2idx/idx\_export\_wiki\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::idx::import::docidx](tcllib/files/modules/doctools2idx/import\_docidx\.md) &#183; [doctools::idx::import::json](tcllib/files/modules/doctools2idx/idx\_import\_json\.md)|
          429  +|<a name='index\_formatter'></a>index formatter|[docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md)|
          430  +|<a name='info'></a>info|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          431  +|<a name='inner\_join'></a>inner join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          432  +|<a name='input\_mode'></a>input mode|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
          433  +|<a name='integer'></a>integer|[math::roman](tcllib/files/modules/math/roman\.md)|
          434  +|<a name='integration'></a>integration|[math::calculus](tcllib/files/modules/math/calculus\.md)|
          435  +|<a name='inter\_thread\_communication'></a>inter\-thread communication|[tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md)|
          436  +|<a name='international\_article\_number'></a>International Article Number|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          437  +|<a name='international\_bank\_account\_number'></a>International Bank Account Number|[valtype::iban](tcllib/files/modules/valtype/iban\.md)|
          438  +|<a name='international\_mobile\_equipment\_identity'></a>International Mobile Equipment Identity|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
          439  +|<a name='international\_standard\_book\_number'></a>International Standard Book Number|[valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          440  +|<a name='internationalization'></a>internationalization|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          441  +|<a name='internet'></a>internet|[asn](tcllib/files/modules/asn/asn\.md) &#183; [ftp](tcllib/files/modules/ftp/ftp\.md) &#183; [ftp::geturl](tcllib/files/modules/ftp/ftp\_geturl\.md) &#183; [imap4](tcllib/files/modules/imap4/imap4\.md) &#183; [ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md) &#183; [mime](tcllib/files/modules/mime/mime\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [pop3d::dbox](tcllib/files/modules/pop3d/pop3d\_dbox\.md) &#183; [pop3d::udb](tcllib/files/modules/pop3d/pop3d\_udb\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md) &#183; [websocket](tcllib/files/modules/websocket/websocket\.md)|
          442  +|<a name='internet\_address'></a>internet address|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
          443  +|<a name='interpolation'></a>interpolation|[math::interpolate](tcllib/files/modules/math/interpolate\.md)|
          444  +|<a name='interpreter'></a>interpreter|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [deleg\_proc](tcllib/files/modules/interp/deleg\_proc\.md) &#183; [interp](tcllib/files/modules/interp/tcllib\_interp\.md) &#183; [wip](tcllib/files/modules/wip/wip\.md)|
          445  +|<a name='intersection'></a>intersection|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          446  +|<a name='interval'></a>interval|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md)|
          447  +|<a name='ip'></a>ip|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
          448  +|<a name='ipc'></a>ipc|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
          449  +|<a name='ipv4'></a>ipv4|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
          450  +|<a name='ipv6'></a>ipv6|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
          451  +|<a name='irc'></a>irc|[irc](tcllib/files/modules/irc/irc\.md) &#183; [picoirc](tcllib/files/modules/irc/picoirc\.md)|
          452  +|<a name='isa'></a>isA|[valtype::common](tcllib/files/modules/valtype/valtype\_common\.md) &#183; [valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md) &#183; [valtype::imei](tcllib/files/modules/valtype/imei\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md) &#183; [valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md) &#183; [valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md) &#183; [valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          453  +|<a name='isbn'></a>ISBN|[valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
          454  +|<a name='isthmus'></a>isthmus|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          455  +|<a name='iterator'></a>iterator|[generator](tcllib/files/modules/generator/generator\.md)|
          456  +
          457  +
          458  +#### <a name='cJ'></a>Keywords: J
          459  +
          460  +|||
          461  +|---|---|
          462  +|<a name='javascript'></a>javascript|[javascript](tcllib/files/modules/javascript/javascript\.md) &#183; [json](tcllib/files/modules/json/json\.md) &#183; [json::write](tcllib/files/modules/json/json\_write\.md)|
          463  +|<a name='jfif'></a>jfif|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
          464  +|<a name='join'></a>join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          465  +|<a name='jpeg'></a>jpeg|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
          466  +|<a name='json'></a>JSON|[doctools::idx::export::json](tcllib/files/modules/doctools2idx/idx\_export\_json\.md) &#183; [doctools::idx::import::json](tcllib/files/modules/doctools2idx/idx\_import\_json\.md) &#183; [doctools::toc::export::json](tcllib/files/modules/doctools2toc/toc\_export\_json\.md) &#183; [doctools::toc::import::json](tcllib/files/modules/doctools2toc/toc\_import\_json\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md)|
          467  +|<a name='json'></a>json|[doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [json](tcllib/files/modules/json/json\.md) &#183; [json::write](tcllib/files/modules/json/json\_write\.md)|
          468  +|<a name='justification'></a>justification|[textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
          469  +
          470  +
          471  +#### <a name='cK'></a>Keywords: K
          472  +
          473  +|||
          474  +|---|---|
          475  +|<a name='keyword\_index'></a>keyword index|[docidx\_intro](tcllib/files/modules/doctools/docidx\_intro\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md)|
          476  +|<a name='keywords'></a>keywords|[docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md)|
          477  +|<a name='knuth'></a>knuth|[soundex](tcllib/files/modules/soundex/soundex\.md)|
          478  +
          479  +
          480  +#### <a name='cL'></a>Keywords: L
          481  +
          482  +|||
          483  +|---|---|
          484  +|<a name='l10n'></a>l10n|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          485  +|<a name='lambda'></a>lambda|[lambda](tcllib/files/modules/lambda/lambda\.md)|
          486  +|<a name='latex'></a>LaTeX|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) &#183; [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)|
          487  +|<a name='latex'></a>latex|[doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md)|
          488  +|<a name='latitute'></a>latitute|[map::slippy](tcllib/files/modules/map/map\_slippy\.md)|
          489  +|<a name='ldap'></a>ldap|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md)|
          490  +|<a name='ldap\_client'></a>ldap client|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md)|
          491  +|<a name='ldif'></a>ldif|[ldapx](tcllib/files/modules/ldap/ldapx\.md)|
          492  +|<a name='least\_squares'></a>least squares|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
          493  +|<a name='left\_outer\_join'></a>left outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          494  +|<a name='lemon'></a>lemon|[page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md)|
          495  +|<a name='level\_graph'></a>level graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          496  +|<a name='lexer'></a>lexer|[doctools::idx::parse](tcllib/files/modules/doctools2idx/idx\_parse\.md) &#183; [doctools::toc::parse](tcllib/files/modules/doctools2toc/toc\_parse\.md)|
          497  +|<a name='lexing'></a>lexing|[string::token](tcllib/files/modules/string/token\.md) &#183; [string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
          498  +|<a name='limitsize'></a>limitsize|[tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md)|
          499  +|<a name='line'></a>line|[math::geometry](tcllib/files/modules/math/math\_geometry\.md)|
          500  +|<a name='linear\_algebra'></a>linear algebra|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
          501  +|<a name='linear\_equations'></a>linear equations|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
          502  +|<a name='linear\_program'></a>linear program|[math::optimize](tcllib/files/modules/math/optimize\.md)|
          503  +|<a name='lines'></a>lines|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
          504  +|<a name='list'></a>list|[struct::list](tcllib/files/modules/struct/struct\_list\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [wip](tcllib/files/modules/wip/wip\.md)|
          505  +|<a name='listener'></a>listener|[term::receive](tcllib/files/modules/term/receive\.md) &#183; [term::receive::bind](tcllib/files/modules/term/term\_bind\.md)|
          506  +|<a name='literate\_programming'></a>literate programming|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) &#183; [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)|
          507  +|<a name='ll\_k\_'></a>LL\(k\)|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          508  +|<a name='local\_searching'></a>local searching|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          509  +|<a name='localization'></a>localization|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          510  +|<a name='location'></a>location|[map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md) &#183; [map::slippy](tcllib/files/modules/map/map\_slippy\.md) &#183; [map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md)|
          511  +|<a name='log'></a>log|[debug](tcllib/files/modules/debug/debug\.md) &#183; [debug::caller](tcllib/files/modules/debug/debug\_caller\.md) &#183; [debug::heartbeat](tcllib/files/modules/debug/debug\_heartbeat\.md) &#183; [debug::timestamp](tcllib/files/modules/debug/debug\_timestamp\.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs\.md) &#183; [log](tcllib/files/modules/log/log\.md) &#183; [logger](tcllib/files/modules/log/logger\.md)|
          512  +|<a name='log\_level'></a>log level|[log](tcllib/files/modules/log/log\.md) &#183; [logger](tcllib/files/modules/log/logger\.md)|
          513  +|<a name='logger'></a>logger|[logger](tcllib/files/modules/log/logger\.md) &#183; [logger::appender](tcllib/files/modules/log/loggerAppender\.md) &#183; [logger::utils](tcllib/files/modules/log/loggerUtils\.md)|
          514  +|<a name='longest\_common\_subsequence'></a>longest common subsequence|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          515  +|<a name='longitude'></a>longitude|[map::slippy](tcllib/files/modules/map/map\_slippy\.md)|
          516  +|<a name='loop'></a>loop|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          517  +|<a name='luhn'></a>luhn|[valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md)|
          518  +|<a name='luhn\_5'></a>luhn\-5|[valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md)|
          519  +
          520  +
          521  +#### <a name='cM'></a>Keywords: M
          522  +
          523  +|||
          524  +|---|---|
          525  +|<a name='macros'></a>macros|[doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md)|
          526  +|<a name='mail'></a>mail|[imap4](tcllib/files/modules/imap4/imap4\.md) &#183; [mime](tcllib/files/modules/mime/mime\.md) &#183; [pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md)|
          527  +|<a name='mailto'></a>mailto|[uri](tcllib/files/modules/uri/uri\.md)|
          528  +|<a name='man\_macros'></a>man\_macros|[doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md)|
          529  +|<a name='manpage'></a>manpage|[doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md) &#183; [mpexpand](tcllib/files/modules/doctools/mpexpand\.md)|
          530  +|<a name='map'></a>map|[generator](tcllib/files/modules/generator/generator\.md) &#183; [map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md) &#183; [map::slippy](tcllib/files/modules/map/map\_slippy\.md) &#183; [map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md) &#183; [mapproj](tcllib/files/modules/mapproj/mapproj\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          531  +|<a name='markdown'></a>markdown|[doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md)|
          532  +|<a name='markup'></a>markup|[docidx\_intro](tcllib/files/modules/doctools/docidx\_intro\.md) &#183; [docidx\_lang\_cmdref](tcllib/files/modules/doctools/docidx\_lang\_cmdref\.md) &#183; [docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [docidx\_lang\_intro](tcllib/files/modules/doctools/docidx\_lang\_intro\.md) &#183; [docidx\_lang\_syntax](tcllib/files/modules/doctools/docidx\_lang\_syntax\.md) &#183; [docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md) &#183; [doctoc\_intro](tcllib/files/modules/doctools/doctoc\_intro\.md) &#183; [doctoc\_lang\_cmdref](tcllib/files/modules/doctools/doctoc\_lang\_cmdref\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctoc\_lang\_intro](tcllib/files/modules/doctools/doctoc\_lang\_intro\.md) &#183; [doctoc\_lang\_syntax](tcllib/files/modules/doctools/doctoc\_lang\_syntax\.md) &#183; [doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md) &#183; [doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [doctools\_intro](tcllib/files/modules/doctools/doctools\_intro\.md) &#183; [doctools\_lang\_cmdref](tcllib/files/modules/doctools/doctools\_lang\_cmdref\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md) &#183; [doctools\_lang\_intro](tcllib/files/modules/doctools/doctools\_lang\_intro\.md) &#183; [doctools\_lang\_syntax](tcllib/files/modules/doctools/doctools\_lang\_syntax\.md) &#183; [doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md) &#183; [mpexpand](tcllib/files/modules/doctools/mpexpand\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)|
          533  +|<a name='mastercard'></a>MasterCard|[valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md)|
          534  +|<a name='matching'></a>matching|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          535  +|<a name='math'></a>math|[math](tcllib/files/modules/math/math\.md) &#183; [math::bigfloat](tcllib/files/modules/math/bigfloat\.md) &#183; [math::bignum](tcllib/files/modules/math/bignum\.md) &#183; [math::calculus](tcllib/files/modules/math/calculus\.md) &#183; [math::complexnumbers](tcllib/files/modules/math/qcomplex\.md) &#183; [math::constants](tcllib/files/modules/math/constants\.md) &#183; [math::decimal](tcllib/files/modules/math/decimal\.md) &#183; [math::fuzzy](tcllib/files/modules/math/fuzzy\.md) &#183; [math::geometry](tcllib/files/modules/math/math\_geometry\.md) &#183; [math::interpolate](tcllib/files/modules/math/interpolate\.md) &#183; [math::linearalgebra](tcllib/files/modules/math/linalg\.md) &#183; [math::optimize](tcllib/files/modules/math/optimize\.md) &#183; [math::PCA](tcllib/files/modules/math/pca\.md) &#183; [math::polynomials](tcllib/files/modules/math/polynomials\.md) &#183; [math::rationalfunctions](tcllib/files/modules/math/rational\_funcs\.md) &#183; [math::special](tcllib/files/modules/math/special\.md) &#183; [math::trig](tcllib/files/modules/math/trig\.md) &#183; [simulation::annealing](tcllib/files/modules/simulation/annealing\.md) &#183; [simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md) &#183; [simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
          536  +|<a name='mathematics'></a>mathematics|[math::fourier](tcllib/files/modules/math/fourier\.md) &#183; [math::statistics](tcllib/files/modules/math/statistics\.md)|
          537  +|<a name='matrices'></a>matrices|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
          538  +|<a name='matrix'></a>matrix|[csv](tcllib/files/modules/csv/csv\.md) &#183; [math::linearalgebra](tcllib/files/modules/math/linalg\.md) &#183; [report](tcllib/files/modules/report/report\.md) &#183; [struct::matrix](tcllib/files/modules/struct/matrix\.md) &#183; [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::stack](tcllib/files/modules/struct/stack\.md)|
          539  +|<a name='max\_cut'></a>max cut|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          540  +|<a name='maximum'></a>maximum|[math::optimize](tcllib/files/modules/math/optimize\.md)|
          541  +|<a name='maximum\_flow'></a>maximum flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          542  +|<a name='md4'></a>md4|[md4](tcllib/files/modules/md4/md4\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md)|
          543  +|<a name='md5'></a>md5|[md5](tcllib/files/modules/md5/md5\.md) &#183; [md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md)|
          544  +|<a name='md5crypt'></a>md5crypt|[md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md)|
          545  +|<a name='medicare'></a>medicare|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
          546  +|<a name='mega\_widget'></a>mega widget|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
          547  +|<a name='membership'></a>membership|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          548  +|<a name='menu'></a>menu|[term::ansi::code::macros](tcllib/files/modules/term/ansi\_cmacros\.md) &#183; [term::interact::menu](tcllib/files/modules/term/imenu\.md)|
          549  +|<a name='merge'></a>merge|[tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md) &#183; [uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
          550  +|<a name='merge\_find'></a>merge find|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
          551  +|<a name='merging'></a>merging|[bench](tcllib/files/modules/bench/bench\.md)|
          552  +|<a name='message'></a>message|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md) &#183; [log](tcllib/files/modules/log/log\.md)|
          553  +|<a name='message\_catalog'></a>message catalog|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          554  +|<a name='message\_level'></a>message level|[log](tcllib/files/modules/log/log\.md)|
          555  +|<a name='message\_package'></a>message package|[doctools::msgcat](tcllib/files/modules/doctools2base/tcllib\_msgcat\.md) &#183; [doctools::msgcat::idx::c](tcllib/files/modules/doctools2idx/idx\_msgcat\_c\.md) &#183; [doctools::msgcat::idx::de](tcllib/files/modules/doctools2idx/idx\_msgcat\_de\.md) &#183; [doctools::msgcat::idx::en](tcllib/files/modules/doctools2idx/idx\_msgcat\_en\.md) &#183; [doctools::msgcat::idx::fr](tcllib/files/modules/doctools2idx/idx\_msgcat\_fr\.md) &#183; [doctools::msgcat::toc::c](tcllib/files/modules/doctools2toc/toc\_msgcat\_c\.md) &#183; [doctools::msgcat::toc::de](tcllib/files/modules/doctools2toc/toc\_msgcat\_de\.md) &#183; [doctools::msgcat::toc::en](tcllib/files/modules/doctools2toc/toc\_msgcat\_en\.md) &#183; [doctools::msgcat::toc::fr](tcllib/files/modules/doctools2toc/toc\_msgcat\_fr\.md)|
          556  +|<a name='message\_digest'></a>message\-digest|[md4](tcllib/files/modules/md4/md4\.md) &#183; [md5](tcllib/files/modules/md5/md5\.md) &#183; [md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md) &#183; [otp](tcllib/files/modules/otp/otp\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md) &#183; [sha1](tcllib/files/modules/sha1/sha1\.md) &#183; [sha256](tcllib/files/modules/sha1/sha256\.md)|
          557  +|<a name='metakit'></a>metakit|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
          558  +|<a name='method'></a>method|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
          559  +|<a name='method\_reference'></a>method reference|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          560  +|<a name='mime'></a>mime|[fileutil::magic::cfront](tcllib/files/modules/fumagic/cfront\.md) &#183; [fileutil::magic::cgen](tcllib/files/modules/fumagic/cgen\.md) &#183; [fileutil::magic::rt](tcllib/files/modules/fumagic/rtcore\.md) &#183; [mime](tcllib/files/modules/mime/mime\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md)|
          561  +|<a name='minimal\_spanning\_tree'></a>minimal spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          562  +|<a name='minimum'></a>minimum|[math::optimize](tcllib/files/modules/math/optimize\.md)|
          563  +|<a name='minimum\_cost\_flow'></a>minimum cost flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          564  +|<a name='minimum\_degree\_spanning\_tree'></a>minimum degree spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          565  +|<a name='minimum\_diameter\_spanning\_tree'></a>minimum diameter spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          566  +|<a name='mobile\_phone'></a>mobile phone|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
          567  +|<a name='module'></a>module|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
          568  +|<a name='montecarlo\_simulation'></a>montecarlo simulation|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md)|
          569  +|<a name='move'></a>move|[fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md)|
          570  +|<a name='multi\_file'></a>multi\-file|[fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md)|
          571  +|<a name='multiplexer'></a>multiplexer|[multiplexer](tcllib/files/modules/multiplexer/multiplexer\.md)|
          572  +|<a name='multiprecision'></a>multiprecision|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md) &#183; [math::bignum](tcllib/files/modules/math/bignum\.md)|
          573  +|<a name='my\_method'></a>my method|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          574  +
          575  +
          576  +#### <a name='cN'></a>Keywords: N
          577  +
          578  +|||
          579  +|---|---|
          580  +|<a name='name\_service'></a>name service|[nameserv](tcllib/files/modules/nns/nns\_client\.md) &#183; [nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md) &#183; [nameserv::common](tcllib/files/modules/nns/nns\_common\.md) &#183; [nameserv::protocol](tcllib/files/modules/nns/nns\_protocol\.md) &#183; [nameserv::server](tcllib/files/modules/nns/nns\_server\.md) &#183; [nns](tcllib/files/apps/nns\.md) &#183; [nns\_intro](tcllib/files/modules/nns/nns\_intro\.md) &#183; [nnsd](tcllib/files/apps/nnsd\.md) &#183; [nnslog](tcllib/files/apps/nnslog\.md) &#183; [udpcluster](tcllib/files/modules/udpcluster/udpcluster\.md)|
          581  +|<a name='namespace\_unknown'></a>namespace unknown|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          582  +|<a name='namespace\_utilities'></a>namespace utilities|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          583  +|<a name='narrative'></a>narrative|[debug](tcllib/files/modules/debug/debug\.md) &#183; [debug::caller](tcllib/files/modules/debug/debug\_caller\.md) &#183; [debug::heartbeat](tcllib/files/modules/debug/debug\_heartbeat\.md) &#183; [debug::timestamp](tcllib/files/modules/debug/debug\_timestamp\.md)|
          584  +|<a name='national\_provider\_identifier'></a>National Provider Identifier|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
          585  +|<a name='neighbour'></a>neighbour|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          586  +|<a name='net'></a>net|[ftp](tcllib/files/modules/ftp/ftp\.md) &#183; [ftp::geturl](tcllib/files/modules/ftp/ftp\_geturl\.md) &#183; [imap4](tcllib/files/modules/imap4/imap4\.md) &#183; [mime](tcllib/files/modules/mime/mime\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md) &#183; [websocket](tcllib/files/modules/websocket/websocket\.md)|
          587  +|<a name='nettool'></a>nettool|[nettool](tcllib/files/modules/nettool/nettool\.md)|
          588  +|<a name='network'></a>network|[pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [pop3d::dbox](tcllib/files/modules/pop3d/pop3d\_dbox\.md) &#183; [pop3d::udb](tcllib/files/modules/pop3d/pop3d\_udb\.md)|
          589  +|<a name='news'></a>news|[nntp](tcllib/files/modules/nntp/nntp\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md)|
          590  +|<a name='next\_permutation'></a>next permutation|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          591  +|<a name='nmea'></a>nmea|[nmea](tcllib/files/modules/nmea/nmea\.md)|
          592  +|<a name='nntp'></a>nntp|[nntp](tcllib/files/modules/nntp/nntp\.md)|
          593  +|<a name='nntpclient'></a>nntpclient|[nntp](tcllib/files/modules/nntp/nntp\.md)|
          594  +|<a name='no\_op'></a>no\-op|[control](tcllib/files/modules/control/control\.md)|
          595  +|<a name='node'></a>node|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md) &#183; [struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          596  +|<a name='nominatim'></a>nominatim|[map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md)|
          597  +|<a name='normalization'></a>normalization|[bench](tcllib/files/modules/bench/bench\.md) &#183; [page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md) &#183; [unicode](tcllib/files/modules/stringprep/unicode\.md)|
          598  +|<a name='npi'></a>NPI|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
          599  +|<a name='nroff'></a>nroff|[doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::export::nroff](tcllib/files/modules/doctools2idx/idx\_export\_nroff\.md) &#183; [doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::export::nroff](tcllib/files/modules/doctools2toc/toc\_export\_nroff\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md) &#183; [mpexpand](tcllib/files/modules/doctools/mpexpand\.md)|
          600  +|<a name='ntlm'></a>NTLM|[SASL::NTLM](tcllib/files/modules/sasl/ntlm\.md)|
          601  +|<a name='ntp'></a>NTP|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
          602  +|<a name='null'></a>null|[tcl::chan::null](tcllib/files/modules/virtchannel\_base/tcllib\_null\.md) &#183; [tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md)|
          603  +|<a name='number\_theory'></a>number theory|[math::numtheory](tcllib/files/modules/math/numtheory\.md)|
          604  +
          605  +
          606  +#### <a name='cO'></a>Keywords: O
          607  +
          608  +|||
          609  +|---|---|
          610  +|<a name='oauth'></a>oauth|[oauth](tcllib/files/modules/oauth/oauth\.md)|
          611  +|<a name='object'></a>object|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md) &#183; [stooop](tcllib/files/modules/stooop/stooop\.md) &#183; [switched](tcllib/files/modules/stooop/switched\.md)|
          612  +|<a name='object\_oriented'></a>object oriented|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md) &#183; [stooop](tcllib/files/modules/stooop/stooop\.md) &#183; [switched](tcllib/files/modules/stooop/switched\.md)|
          613  +|<a name='observer'></a>observer|[hook](tcllib/files/modules/hook/hook\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md)|
          614  +|<a name='odie'></a>odie|[cron](tcllib/files/modules/cron/cron\.md) &#183; [nettool](tcllib/files/modules/nettool/nettool\.md) &#183; [processman](tcllib/files/modules/processman/processman\.md)|
          615  +|<a name='on\_idle'></a>on\-idle|[uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
          616  +|<a name='one\_time\_pad'></a>one time pad|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md)|
          617  +|<a name='optimization'></a>optimization|[math::optimize](tcllib/files/modules/math/optimize\.md) &#183; [simulation::annealing](tcllib/files/modules/simulation/annealing\.md)|
          618  +|<a name='ordered\_list'></a>ordered list|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md)|
          619  +|<a name='otp'></a>otp|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md)|
          620  +|<a name='outer\_join'></a>outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          621  +
          622  +
          623  +#### <a name='cP'></a>Keywords: P
          624  +
          625  +|||
          626  +|---|---|
          627  +|<a name='package'></a>package|[csv](tcllib/files/modules/csv/csv\.md)|
          628  +|<a name='package\_indexing'></a>package indexing|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
          629  +|<a name='page'></a>page|[page\_intro](tcllib/files/modules/page/page\_intro\.md) &#183; [page\_pluginmgr](tcllib/files/modules/page/page\_pluginmgr\.md) &#183; [page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md) &#183; [page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md) &#183; [page\_util\_peg](tcllib/files/modules/page/page\_util\_peg\.md) &#183; [page\_util\_quote](tcllib/files/modules/page/page\_util\_quote\.md)|
          630  +|<a name='pager'></a>pager|[term::interact::pager](tcllib/files/modules/term/ipager\.md)|
          631  +|<a name='paragraph'></a>paragraph|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
          632  +|<a name='param'></a>PARAM|[pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md)|
          633  +|<a name='parameter\_entry\_form'></a>parameter entry form|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::argument\_dialogbox](tcllib/files/modules/tepam/tepam\_argument\_dialogbox\.md)|
          634  +|<a name='parser'></a>parser|[doctools::idx::parse](tcllib/files/modules/doctools2idx/idx\_parse\.md) &#183; [doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md) &#183; [doctools::toc::parse](tcllib/files/modules/doctools2toc/toc\_parse\.md) &#183; [grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md) &#183; [xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md)|
          635  +|<a name='parser\_generator'></a>parser generator|[page](tcllib/files/apps/page\.md) &#183; [page\_intro](tcllib/files/modules/page/page\_intro\.md) &#183; [page\_pluginmgr](tcllib/files/modules/page/page\_pluginmgr\.md) &#183; [page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md) &#183; [page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md) &#183; [page\_util\_peg](tcllib/files/modules/page/page\_util\_peg\.md) &#183; [page\_util\_quote](tcllib/files/modules/page/page\_util\_quote\.md)|
          636  +|<a name='parsing'></a>parsing|[bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bibtex](tcllib/files/modules/bibtex/bibtex\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md) &#183; [grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) &#183; [grammar::me::cpu](tcllib/files/modules/grammar\_me/me\_cpu\.md) &#183; [grammar::me::cpu::core](tcllib/files/modules/grammar\_me/me\_cpucore\.md) &#183; [grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md) &#183; [grammar::me::tcl](tcllib/files/modules/grammar\_me/me\_tcl\.md) &#183; [grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::me\_vm](tcllib/files/modules/grammar\_me/me\_vm\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [htmlparse](tcllib/files/modules/htmlparse/htmlparse\.md) &#183; [huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [string::token::shell](tcllib/files/modules/string/token\_shell\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
          637  +|<a name='parsing\_expression'></a>parsing expression|[grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          638  +|<a name='parsing\_expression\_grammar'></a>parsing expression grammar|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [page\_util\_peg](tcllib/files/modules/page/page\_util\_peg\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          639  +|<a name='partial\_application'></a>partial application|[lambda](tcllib/files/modules/lambda/lambda\.md)|
          640  +|<a name='partition'></a>partition|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
          641  +|<a name='partitioned\_set'></a>partitioned set|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
          642  +|<a name='passive'></a>passive|[transfer::connect](tcllib/files/modules/transfer/connect\.md)|
          643  +|<a name='password'></a>password|[otp](tcllib/files/modules/otp/otp\.md)|
          644  +|<a name='patch'></a>patch|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
          645  +|<a name='patching'></a>patching|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          646  +|<a name='pca'></a>PCA|[math::PCA](tcllib/files/modules/math/pca\.md)|
          647  +|<a name='peg'></a>PEG|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md) &#183; [page\_util\_peg](tcllib/files/modules/page/page\_util\_peg\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          648  +|<a name='performance'></a>performance|[bench](tcllib/files/modules/bench/bench\.md) &#183; [bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::csv](tcllib/files/modules/bench/bench\_wcsv\.md) &#183; [bench::out::text](tcllib/files/modules/bench/bench\_wtext\.md) &#183; [bench\_intro](tcllib/files/modules/bench/bench\_intro\.md) &#183; [bench\_lang\_intro](tcllib/files/modules/bench/bench\_lang\_intro\.md) &#183; [bench\_lang\_spec](tcllib/files/modules/bench/bench\_lang\_spec\.md) &#183; [profiler](tcllib/files/modules/profiler/profiler\.md)|
          649  +|<a name='permutation'></a>permutation|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          650  +|<a name='persistence'></a>persistence|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
          651  +|<a name='phone'></a>phone|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
          652  +|<a name='pi'></a>pi|[math::constants](tcllib/files/modules/math/constants\.md)|
          653  +|<a name='plain\_text'></a>plain text|[doctools::idx::export::text](tcllib/files/modules/doctools2idx/idx\_export\_text\.md) &#183; [doctools::toc::export::text](tcllib/files/modules/doctools2toc/toc\_export\_text\.md)|
          654  +|<a name='plane\_geometry'></a>plane geometry|[math::geometry](tcllib/files/modules/math/math\_geometry\.md)|
          655  +|<a name='plugin'></a>plugin|[docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md) &#183; [doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md)|
          656  +|<a name='plugin\_management'></a>plugin management|[pluginmgr](tcllib/files/modules/pluginmgr/pluginmgr\.md)|
          657  +|<a name='plugin\_search'></a>plugin search|[pluginmgr](tcllib/files/modules/pluginmgr/pluginmgr\.md)|
          658  +|<a name='png'></a>png|[png](tcllib/files/modules/png/png\.md)|
          659  +|<a name='point'></a>point|[math::geometry](tcllib/files/modules/math/math\_geometry\.md)|
          660  +|<a name='polynomial\_functions'></a>polynomial functions|[math::polynomials](tcllib/files/modules/math/polynomials\.md)|
          661  +|<a name='pool'></a>pool|[struct::pool](tcllib/files/modules/struct/pool\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md)|
          662  +|<a name='pop'></a>pop|[pop3](tcllib/files/modules/pop3/pop3\.md)|
          663  +|<a name='pop3'></a>pop3|[pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [pop3d::dbox](tcllib/files/modules/pop3d/pop3d\_dbox\.md) &#183; [pop3d::udb](tcllib/files/modules/pop3d/pop3d\_udb\.md)|
          664  +|<a name='post\_order'></a>post\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          665  +|<a name='practcl'></a>practcl|[practcl](tcllib/files/modules/practcl/practcl\.md)|
          666  +|<a name='pre\_order'></a>pre\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          667  +|<a name='prefix'></a>prefix|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim\.md)|
          668  +|<a name='prime'></a>prime|[math::numtheory](tcllib/files/modules/math/numtheory\.md)|
          669  +|<a name='prioqueue'></a>prioqueue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md)|
          670  +|<a name='priority\_queue'></a>priority queue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md)|
          671  +|<a name='proc'></a>proc|[lambda](tcllib/files/modules/lambda/lambda\.md)|
          672  +|<a name='procedure'></a>procedure|[deleg\_proc](tcllib/files/modules/interp/deleg\_proc\.md) &#183; [tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
          673  +|<a name='procedure\_documentation'></a>procedure documentation|[tepam::doc\_gen](tcllib/files/modules/tepam/tepam\_doc\_gen\.md)|
          674  +|<a name='processman'></a>processman|[processman](tcllib/files/modules/processman/processman\.md)|
          675  +|<a name='producer'></a>producer|[hook](tcllib/files/modules/hook/hook\.md)|
          676  +|<a name='profile'></a>profile|[profiler](tcllib/files/modules/profiler/profiler\.md)|
          677  +|<a name='projection'></a>projection|[mapproj](tcllib/files/modules/mapproj/mapproj\.md)|
          678  +|<a name='prospero'></a>prospero|[uri](tcllib/files/modules/uri/uri\.md)|
          679  +|<a name='protocol'></a>protocol|[asn](tcllib/files/modules/asn/asn\.md) &#183; [ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md) &#183; [nameserv::protocol](tcllib/files/modules/nns/nns\_protocol\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [pop3d::dbox](tcllib/files/modules/pop3d/pop3d\_dbox\.md) &#183; [pop3d::udb](tcllib/files/modules/pop3d/pop3d\_udb\.md)|
          680  +|<a name='proxy'></a>proxy|[autoproxy](tcllib/files/modules/http/autoproxy\.md)|
          681  +|<a name='public\_key\_cipher'></a>public key cipher|[pki](tcllib/files/modules/pki/pki\.md)|
          682  +|<a name='publisher'></a>publisher|[hook](tcllib/files/modules/hook/hook\.md)|
          683  +|<a name='push\_down\_automaton'></a>push down automaton|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          684  +
          685  +
          686  +#### <a name='cQ'></a>Keywords: Q
          687  +
          688  +|||
          689  +|---|---|
          690  +|<a name='queue'></a>queue|[csv](tcllib/files/modules/csv/csv\.md) &#183; [htmlparse](tcllib/files/modules/htmlparse/htmlparse\.md) &#183; [struct::stack](tcllib/files/modules/struct/stack\.md) &#183; [transfer::copy::queue](tcllib/files/modules/transfer/tqueue\.md)|
          691  +|<a name='quoting'></a>quoting|[page\_util\_quote](tcllib/files/modules/page/page\_util\_quote\.md)|
          692  +
          693  +
          694  +#### <a name='cR'></a>Keywords: R
          695  +
          696  +|||
          697  +|---|---|
          698  +|<a name='radians'></a>radians|[math::constants](tcllib/files/modules/math/constants\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
          699  +|<a name='radiobutton'></a>radiobutton|[html](tcllib/files/modules/html/html\.md)|
          700  +|<a name='radius'></a>radius|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          701  +|<a name='random'></a>random|[tcl::chan::random](tcllib/files/modules/virtchannel\_base/tcllib\_random\.md) &#183; [tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md)|
          702  +|<a name='random\_numbers'></a>random numbers|[simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
          703  +|<a name='rational\_functions'></a>rational functions|[math::rationalfunctions](tcllib/files/modules/math/rational\_funcs\.md)|
          704  +|<a name='raw'></a>raw|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
          705  +|<a name='rc4'></a>rc4|[rc4](tcllib/files/modules/rc4/rc4\.md)|
          706  +|<a name='rcs'></a>RCS|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          707  +|<a name='rcs\_patch'></a>RCS patch|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          708  +|<a name='read'></a>read|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          709  +|<a name='reading'></a>reading|[bench::in](tcllib/files/modules/bench/bench\_read\.md)|
          710  +|<a name='receiver'></a>receiver|[term::receive](tcllib/files/modules/term/receive\.md) &#183; [term::receive::bind](tcllib/files/modules/term/term\_bind\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md)|
          711  +|<a name='reconnect'></a>reconnect|[nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md)|
          712  +|<a name='record'></a>record|[struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::record](tcllib/files/modules/struct/record\.md)|
          713  +|<a name='recursive\_descent'></a>recursive descent|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          714  +|<a name='reduce'></a>reduce|[generator](tcllib/files/modules/generator/generator\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          715  +|<a name='reference'></a>reference|[doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md)|
          716  +|<a name='reflected\_channel'></a>reflected channel|[tcl::chan::cat](tcllib/files/modules/virtchannel\_base/cat\.md) &#183; [tcl::chan::core](tcllib/files/modules/virtchannel\_core/core\.md) &#183; [tcl::chan::events](tcllib/files/modules/virtchannel\_core/events\.md) &#183; [tcl::chan::facade](tcllib/files/modules/virtchannel\_base/facade\.md) &#183; [tcl::chan::fifo](tcllib/files/modules/virtchannel\_base/tcllib\_fifo\.md) &#183; [tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md) &#183; [tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md) &#183; [tcl::chan::memchan](tcllib/files/modules/virtchannel\_base/tcllib\_memchan\.md) &#183; [tcl::chan::null](tcllib/files/modules/virtchannel\_base/tcllib\_null\.md) &#183; [tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md) &#183; [tcl::chan::random](tcllib/files/modules/virtchannel\_base/tcllib\_random\.md) &#183; [tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md) &#183; [tcl::chan::string](tcllib/files/modules/virtchannel\_base/tcllib\_string\.md) &#183; [tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md) &#183; [tcl::chan::variable](tcllib/files/modules/virtchannel\_base/tcllib\_variable\.md) &#183; [tcl::chan::zero](tcllib/files/modules/virtchannel\_base/tcllib\_zero\.md) &#183; [tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md) &#183; [tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) &#183; [tcl::transform::core](tcllib/files/modules/virtchannel\_core/transformcore\.md) &#183; [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) &#183; [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) &#183; [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) &#183; [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) &#183; [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) &#183; [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
          717  +|<a name='regex'></a>regex|[string::token](tcllib/files/modules/string/token\.md)|
          718  +|<a name='regular\_expression'></a>regular expression|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) &#183; [textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::split](tcllib/files/modules/textutil/textutil\_split\.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim\.md)|
          719  +|<a name='regular\_grammar'></a>regular grammar|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md)|
          720  +|<a name='regular\_languages'></a>regular languages|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md)|
          721  +|<a name='remote\_communication'></a>remote communication|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
          722  +|<a name='remote\_execution'></a>remote execution|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
          723  +|<a name='remove'></a>remove|[fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md)|
          724  +|<a name='repeating'></a>repeating|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          725  +|<a name='repetition'></a>repetition|[struct::list](tcllib/files/modules/struct/struct\_list\.md) &#183; [textutil::repeat](tcllib/files/modules/textutil/repeat\.md)|
          726  +|<a name='report'></a>report|[report](tcllib/files/modules/report/report\.md)|
          727  +|<a name='reshuffle'></a>reshuffle|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          728  +|<a name='residual\_graph'></a>residual graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          729  +|<a name='resolver'></a>resolver|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          730  +|<a name='resource\_management'></a>resource management|[try](tcllib/files/modules/try/tcllib\_try\.md)|
          731  +|<a name='restore'></a>restore|[nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md)|
          732  +|<a name='return'></a>return|[throw](tcllib/files/modules/try/tcllib\_throw\.md)|
          733  +|<a name='reverse'></a>reverse|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          734  +|<a name='rfc\_821'></a>rfc 821|[mime](tcllib/files/modules/mime/mime\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
          735  +|<a name='rfc\_822'></a>rfc 822|[mime](tcllib/files/modules/mime/mime\.md) &#183; [pop3d::dbox](tcllib/files/modules/pop3d/pop3d\_dbox\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md)|
          736  +|<a name='rfc\_868'></a>rfc 868|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
          737  +|<a name='rfc\_959'></a>rfc 959|[ftp](tcllib/files/modules/ftp/ftp\.md) &#183; [ftp::geturl](tcllib/files/modules/ftp/ftp\_geturl\.md) &#183; [ftpd](tcllib/files/modules/ftpd/ftpd\.md)|
          738  +|<a name='rfc\_977'></a>rfc 977|[nntp](tcllib/files/modules/nntp/nntp\.md)|
          739  +|<a name='rfc\_1034'></a>rfc 1034|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          740  +|<a name='rfc\_1035'></a>rfc 1035|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          741  +|<a name='rfc\_1036'></a>rfc 1036|[nntp](tcllib/files/modules/nntp/nntp\.md)|
          742  +|<a name='rfc\_1320'></a>rfc 1320|[md4](tcllib/files/modules/md4/md4\.md) &#183; [md5](tcllib/files/modules/md5/md5\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md)|
          743  +|<a name='rfc\_1321'></a>rfc 1321|[md4](tcllib/files/modules/md4/md4\.md) &#183; [md5](tcllib/files/modules/md5/md5\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md)|
          744  +|<a name='rfc\_1413'></a>rfc 1413|[ident](tcllib/files/modules/ident/ident\.md)|
          745  +|<a name='rfc\_1630'></a>rfc 1630|[uri](tcllib/files/modules/uri/uri\.md)|
          746  +|<a name='rfc\_1886'></a>rfc 1886|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          747  +|<a name='rfc\_1939'></a>rfc 1939|[pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md)|
          748  +|<a name='rfc\_2030'></a>rfc 2030|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
          749  +|<a name='rfc\_2045'></a>rfc 2045|[mime](tcllib/files/modules/mime/mime\.md)|
          750  +|<a name='rfc\_2046'></a>rfc 2046|[mime](tcllib/files/modules/mime/mime\.md)|
          751  +|<a name='rfc\_2049'></a>rfc 2049|[mime](tcllib/files/modules/mime/mime\.md)|
          752  +|<a name='rfc\_2104'></a>rfc 2104|[md4](tcllib/files/modules/md4/md4\.md) &#183; [md5](tcllib/files/modules/md5/md5\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md) &#183; [sha1](tcllib/files/modules/sha1/sha1\.md) &#183; [sha256](tcllib/files/modules/sha1/sha256\.md)|
          753  +|<a name='rfc\_2141'></a>rfc 2141|[uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
          754  +|<a name='rfc\_2251'></a>rfc 2251|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md)|
          755  +|<a name='rfc\_2255'></a>rfc 2255|[uri](tcllib/files/modules/uri/uri\.md)|
          756  +|<a name='rfc\_2289'></a>rfc 2289|[otp](tcllib/files/modules/otp/otp\.md)|
          757  +|<a name='rfc\_2396'></a>rfc 2396|[uri](tcllib/files/modules/uri/uri\.md)|
          758  +|<a name='rfc\_2554'></a>rfc 2554|[smtp](tcllib/files/modules/mime/smtp\.md)|
          759  +|<a name='rfc\_2718'></a>RFC 2718|[oauth](tcllib/files/modules/oauth/oauth\.md)|
          760  +|<a name='rfc\_2821'></a>rfc 2821|[smtp](tcllib/files/modules/mime/smtp\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
          761  +|<a name='rfc\_2849'></a>rfc 2849|[ldapx](tcllib/files/modules/ldap/ldapx\.md)|
          762  +|<a name='rfc\_3207'></a>rfc 3207|[smtp](tcllib/files/modules/mime/smtp\.md)|
          763  +|<a name='rfc\_3513'></a>rfc 3513|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
          764  +|<a name='rfc\_3986'></a>rfc 3986|[uri](tcllib/files/modules/uri/uri\.md)|
          765  +|<a name='rfc\_4511'></a>rfc 4511|[ldap](tcllib/files/modules/ldap/ldap\.md)|
          766  +|<a name='rfc\_5849'></a>RFC 5849|[oauth](tcllib/files/modules/oauth/oauth\.md)|
          767  +|<a name='rfc\_6455'></a>rfc 6455|[websocket](tcllib/files/modules/websocket/websocket\.md)|
          768  +|<a name='rfc\_7858'></a>rfc 7858|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
          769  +|<a name='rfc3501'></a>rfc3501|[imap4](tcllib/files/modules/imap4/imap4\.md)|
          770  +|<a name='rfc3548'></a>rfc3548|[base32](tcllib/files/modules/base32/base32\.md) &#183; [base32::hex](tcllib/files/modules/base32/base32hex\.md)|
          771  +|<a name='right\_outer\_join'></a>right outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          772  +|<a name='ripemd'></a>RIPEMD|[ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md)|
          773  +|<a name='roman\_numeral'></a>roman numeral|[math::roman](tcllib/files/modules/math/roman\.md)|
          774  +|<a name='roots'></a>roots|[math::calculus](tcllib/files/modules/math/calculus\.md)|
          775  +|<a name='rot'></a>rot|[tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
          776  +|<a name='rot13'></a>rot13|[tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
          777  +|<a name='rounding'></a>rounding|[math::fuzzy](tcllib/files/modules/math/fuzzy\.md)|
          778  +|<a name='rows'></a>rows|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
          779  +|<a name='rpc'></a>rpc|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
          780  +|<a name='rsa'></a>rsa|[pki](tcllib/files/modules/pki/pki\.md)|
          781  +|<a name='running'></a>running|[grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md)|
          782  +
          783  +
          784  +#### <a name='cS'></a>Keywords: S
          785  +
          786  +|||
          787  +|---|---|
          788  +|<a name='s3'></a>s3|[S3](tcllib/files/modules/amazon\-s3/S3\.md)|
          789  +|<a name='sasl'></a>SASL|[SASL](tcllib/files/modules/sasl/sasl\.md) &#183; [SASL::NTLM](tcllib/files/modules/sasl/ntlm\.md) &#183; [SASL::SCRAM](tcllib/files/modules/sasl/scram\.md) &#183; [SASL::XGoogleToken](tcllib/files/modules/sasl/gtoken\.md)|
          790  +|<a name='scanl'></a>scanl|[generator](tcllib/files/modules/generator/generator\.md)|
          791  +|<a name='sccs'></a>SCCS|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          792  +|<a name='scram'></a>SCRAM|[SASL::SCRAM](tcllib/files/modules/sasl/scram\.md)|
          793  +|<a name='secure'></a>secure|[comm](tcllib/files/modules/comm/comm\.md) &#183; [pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [transfer::connect](tcllib/files/modules/transfer/connect\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          794  +|<a name='security'></a>security|[aes](tcllib/files/modules/aes/aes\.md) &#183; [blowfish](tcllib/files/modules/blowfish/blowfish\.md) &#183; [cksum](tcllib/files/modules/crc/cksum\.md) &#183; [crc16](tcllib/files/modules/crc/crc16\.md) &#183; [crc32](tcllib/files/modules/crc/crc32\.md) &#183; [des](tcllib/files/modules/des/des\.md) &#183; [md4](tcllib/files/modules/md4/md4\.md) &#183; [md5](tcllib/files/modules/md5/md5\.md) &#183; [md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md) &#183; [otp](tcllib/files/modules/otp/otp\.md) &#183; [pki](tcllib/files/modules/pki/pki\.md) &#183; [rc4](tcllib/files/modules/rc4/rc4\.md) &#183; [ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md) &#183; [sha1](tcllib/files/modules/sha1/sha1\.md) &#183; [sha256](tcllib/files/modules/sha1/sha256\.md) &#183; [sum](tcllib/files/modules/crc/sum\.md) &#183; [tclDES](tcllib/files/modules/des/tcldes\.md) &#183; [tclDESjr](tcllib/files/modules/des/tcldesjr\.md)|
          795  +|<a name='seed'></a>seed|[tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md)|
          796  +|<a name='selectionbox'></a>selectionbox|[javascript](tcllib/files/modules/javascript/javascript\.md)|
          797  +|<a name='semantic\_markup'></a>semantic markup|[docidx\_intro](tcllib/files/modules/doctools/docidx\_intro\.md) &#183; [docidx\_lang\_cmdref](tcllib/files/modules/doctools/docidx\_lang\_cmdref\.md) &#183; [docidx\_lang\_faq](tcllib/files/modules/doctools/docidx\_lang\_faq\.md) &#183; [docidx\_lang\_intro](tcllib/files/modules/doctools/docidx\_lang\_intro\.md) &#183; [docidx\_lang\_syntax](tcllib/files/modules/doctools/docidx\_lang\_syntax\.md) &#183; [docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md) &#183; [doctoc\_intro](tcllib/files/modules/doctools/doctoc\_intro\.md) &#183; [doctoc\_lang\_cmdref](tcllib/files/modules/doctools/doctoc\_lang\_cmdref\.md) &#183; [doctoc\_lang\_faq](tcllib/files/modules/doctools/doctoc\_lang\_faq\.md) &#183; [doctoc\_lang\_intro](tcllib/files/modules/doctools/doctoc\_lang\_intro\.md) &#183; [doctoc\_lang\_syntax](tcllib/files/modules/doctools/doctoc\_lang\_syntax\.md) &#183; [doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md) &#183; [doctools2idx\_introduction](tcllib/files/modules/doctools2idx/idx\_introduction\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools\_intro](tcllib/files/modules/doctools/doctools\_intro\.md) &#183; [doctools\_lang\_cmdref](tcllib/files/modules/doctools/doctools\_lang\_cmdref\.md) &#183; [doctools\_lang\_faq](tcllib/files/modules/doctools/doctools\_lang\_faq\.md) &#183; [doctools\_lang\_intro](tcllib/files/modules/doctools/doctools\_lang\_intro\.md) &#183; [doctools\_lang\_syntax](tcllib/files/modules/doctools/doctools\_lang\_syntax\.md) &#183; [doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md)|
          798  +|<a name='send'></a>send|[comm](tcllib/files/modules/comm/comm\.md)|
          799  +|<a name='serialization'></a>serialization|[bee](tcllib/files/modules/bee/bee\.md) &#183; [doctools::idx::export::docidx](tcllib/files/modules/doctools2idx/export\_docidx\.md) &#183; [doctools::idx::export::html](tcllib/files/modules/doctools2idx/idx\_export\_html\.md) &#183; [doctools::idx::export::json](tcllib/files/modules/doctools2idx/idx\_export\_json\.md) &#183; [doctools::idx::export::nroff](tcllib/files/modules/doctools2idx/idx\_export\_nroff\.md) &#183; [doctools::idx::export::text](tcllib/files/modules/doctools2idx/idx\_export\_text\.md) &#183; [doctools::idx::export::wiki](tcllib/files/modules/doctools2idx/idx\_export\_wiki\.md) &#183; [doctools::idx::structure](tcllib/files/modules/doctools2idx/idx\_structure\.md) &#183; [doctools::toc::export::doctoc](tcllib/files/modules/doctools2toc/export\_doctoc\.md) &#183; [doctools::toc::export::html](tcllib/files/modules/doctools2toc/toc\_export\_html\.md) &#183; [doctools::toc::export::json](tcllib/files/modules/doctools2toc/toc\_export\_json\.md) &#183; [doctools::toc::export::nroff](tcllib/files/modules/doctools2toc/toc\_export\_nroff\.md) &#183; [doctools::toc::export::text](tcllib/files/modules/doctools2toc/toc\_export\_text\.md) &#183; [doctools::toc::export::wiki](tcllib/files/modules/doctools2toc/toc\_export\_wiki\.md) &#183; [doctools::toc::structure](tcllib/files/modules/doctools2toc/toc\_structure\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
          800  +|<a name='server'></a>server|[map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md) &#183; [nameserv::common](tcllib/files/modules/nns/nns\_common\.md) &#183; [nameserv::server](tcllib/files/modules/nns/nns\_server\.md) &#183; [nns\_intro](tcllib/files/modules/nns/nns\_intro\.md) &#183; [nnsd](tcllib/files/apps/nnsd\.md) &#183; [udpcluster](tcllib/files/modules/udpcluster/udpcluster\.md)|
          801  +|<a name='service'></a>service|[logger](tcllib/files/modules/log/logger\.md)|
          802  +|<a name='services'></a>services|[ftpd](tcllib/files/modules/ftpd/ftpd\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md) &#183; [tool](tcllib/files/modules/httpd/httpd\.md)|
          803  +|<a name='set'></a>set|[struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          804  +|<a name='sha1'></a>sha1|[sha1](tcllib/files/modules/sha1/sha1\.md)|
          805  +|<a name='sha256'></a>sha256|[sha256](tcllib/files/modules/sha1/sha256\.md)|
          806  +|<a name='shell'></a>shell|[string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
          807  +|<a name='shortest\_path'></a>shortest path|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          808  +|<a name='shuffle'></a>shuffle|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          809  +|<a name='simulated\_annealing'></a>simulated annealing|[simulation::annealing](tcllib/files/modules/simulation/annealing\.md)|
          810  +|<a name='simulation'></a>simulation|[simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
          811  +|<a name='singleton'></a>singleton|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
          812  +|<a name='size\_limit'></a>size limit|[tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md)|
          813  +|<a name='skiplist'></a>skiplist|[struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::skiplist](tcllib/files/modules/struct/skiplist\.md)|
          814  +|<a name='slippy'></a>slippy|[map::slippy](tcllib/files/modules/map/map\_slippy\.md) &#183; [map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md)|
          815  +|<a name='smtp'></a>smtp|[mime](tcllib/files/modules/mime/mime\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
          816  +|<a name='smtpd'></a>smtpd|[smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
          817  +|<a name='snit'></a>Snit|[snit](tcllib/files/modules/snit/snit\.md)|
          818  +|<a name='snit'></a>snit|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
          819  +|<a name='sntp'></a>SNTP|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
          820  +|<a name='socket'></a>socket|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
          821  +|<a name='soundex'></a>soundex|[soundex](tcllib/files/modules/soundex/soundex\.md)|
          822  +|<a name='source'></a>source|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) &#183; [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)|
          823  +|<a name='spacing'></a>spacing|[tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md)|
          824  +|<a name='spatial\_interpolation'></a>spatial interpolation|[math::interpolate](tcllib/files/modules/math/interpolate\.md)|
          825  +|<a name='special\_functions'></a>special functions|[math::special](tcllib/files/modules/math/special\.md)|
          826  +|<a name='specification'></a>specification|[bench\_lang\_spec](tcllib/files/modules/bench/bench\_lang\_spec\.md)|
          827  +|<a name='speed'></a>speed|[profiler](tcllib/files/modules/profiler/profiler\.md)|
          828  +|<a name='split'></a>split|[textutil::split](tcllib/files/modules/textutil/textutil\_split\.md)|
          829  +|<a name='squared\_graph'></a>squared graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          830  +|<a name='ssl'></a>ssl|[comm](tcllib/files/modules/comm/comm\.md) &#183; [imap4](tcllib/files/modules/imap4/imap4\.md) &#183; [pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [transfer::connect](tcllib/files/modules/transfer/connect\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          831  +|<a name='stack'></a>stack|[struct::queue](tcllib/files/modules/struct/queue\.md)|
          832  +|<a name='standard\_io'></a>standard io|[tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md)|
          833  +|<a name='state'></a>state|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          834  +|<a name='state\_de\_serialization'></a>state \(de\)serialization|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          835  +|<a name='statistical\_distribution'></a>statistical distribution|[simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
          836  +|<a name='statistics'></a>statistics|[counter](tcllib/files/modules/counter/counter\.md) &#183; [math](tcllib/files/modules/math/math\.md) &#183; [math::PCA](tcllib/files/modules/math/pca\.md) &#183; [math::statistics](tcllib/files/modules/math/statistics\.md)|
          837  +|<a name='stdin'></a>stdin|[tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md)|
          838  +|<a name='stdout'></a>stdout|[tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md)|
          839  +|<a name='stochastic\_modelling'></a>stochastic modelling|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md)|
          840  +|<a name='stream\_cipher'></a>stream cipher|[rc4](tcllib/files/modules/rc4/rc4\.md)|
          841  +|<a name='stream\_copy'></a>stream copy|[tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md)|
          842  +|<a name='string'></a>string|[string::token](tcllib/files/modules/string/token\.md) &#183; [string::token::shell](tcllib/files/modules/string/token\_shell\.md) &#183; [textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md) &#183; [textutil::expander](tcllib/files/modules/textutil/expander\.md) &#183; [textutil::repeat](tcllib/files/modules/textutil/repeat\.md) &#183; [textutil::split](tcllib/files/modules/textutil/textutil\_split\.md) &#183; [textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) &#183; [textutil::tabify](tcllib/files/modules/textutil/tabify\.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim\.md)|
          843  +|<a name='stringprep'></a>stringprep|[stringprep](tcllib/files/modules/stringprep/stringprep\.md) &#183; [stringprep::data](tcllib/files/modules/stringprep/stringprep\_data\.md) &#183; [unicode::data](tcllib/files/modules/stringprep/unicode\_data\.md)|
          844  +|<a name='strongly\_connected\_component'></a>strongly connected component|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          845  +|<a name='struct'></a>struct|[struct::pool](tcllib/files/modules/struct/pool\.md) &#183; [struct::record](tcllib/files/modules/struct/record\.md)|
          846  +|<a name='structure'></a>structure|[control](tcllib/files/modules/control/control\.md)|
          847  +|<a name='structured\_queries'></a>structured queries|[treeql](tcllib/files/modules/treeql/treeql\.md)|
          848  +|<a name='style'></a>style|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md)|
          849  +|<a name='subcommand'></a>subcommand|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
          850  +|<a name='subgraph'></a>subgraph|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          851  +|<a name='subject'></a>subject|[hook](tcllib/files/modules/hook/hook\.md)|
          852  +|<a name='submitbutton'></a>submitbutton|[javascript](tcllib/files/modules/javascript/javascript\.md)|
          853  +|<a name='subscriber'></a>subscriber|[hook](tcllib/files/modules/hook/hook\.md)|
          854  +|<a name='subsequence'></a>subsequence|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          855  +|<a name='subst'></a>subst|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md)|
          856  +|<a name='sum'></a>sum|[sum](tcllib/files/modules/crc/sum\.md)|
          857  +|<a name='swapping'></a>swapping|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
          858  +|<a name='symmetric\_difference'></a>symmetric difference|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          859  +|<a name='synchronous'></a>synchronous|[cache::async](tcllib/files/modules/cache/async\.md)|
          860  +|<a name='syntax\_tree'></a>syntax tree|[grammar::me::util](tcllib/files/modules/grammar\_me/me\_util\.md)|
          861  +
          862  +
          863  +#### <a name='cT'></a>Keywords: T
          864  +
          865  +|||
          866  +|---|---|
          867  +|<a name='table'></a>table|[doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [html](tcllib/files/modules/html/html\.md) &#183; [report](tcllib/files/modules/report/report\.md)|
          868  +|<a name='table\_of\_contents'></a>table of contents|[doctoc\_intro](tcllib/files/modules/doctools/doctoc\_intro\.md) &#183; [doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md) &#183; [doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::export::doctoc](tcllib/files/modules/doctools2toc/export\_doctoc\.md) &#183; [doctools::toc::export::html](tcllib/files/modules/doctools2toc/toc\_export\_html\.md) &#183; [doctools::toc::export::json](tcllib/files/modules/doctools2toc/toc\_export\_json\.md) &#183; [doctools::toc::export::nroff](tcllib/files/modules/doctools2toc/toc\_export\_nroff\.md) &#183; [doctools::toc::export::text](tcllib/files/modules/doctools2toc/toc\_export\_text\.md) &#183; [doctools::toc::export::wiki](tcllib/files/modules/doctools2toc/toc\_export\_wiki\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [doctools::toc::import::doctoc](tcllib/files/modules/doctools2toc/import\_doctoc\.md) &#183; [doctools::toc::import::json](tcllib/files/modules/doctools2toc/toc\_import\_json\.md)|
          869  +|<a name='tabstops'></a>tabstops|[textutil::tabify](tcllib/files/modules/textutil/tabify\.md)|
          870  +|<a name='tallying'></a>tallying|[counter](tcllib/files/modules/counter/counter\.md)|
          871  +|<a name='tape\_archive'></a>tape archive|[tar](tcllib/files/modules/tar/tar\.md)|
          872  +|<a name='tar'></a>tar|[tar](tcllib/files/modules/tar/tar\.md)|
          873  +|<a name='tcl'></a>tcl|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md) &#183; [math::bignum](tcllib/files/modules/math/bignum\.md) &#183; [math::decimal](tcllib/files/modules/math/decimal\.md) &#183; [math::PCA](tcllib/files/modules/math/pca\.md)|
          874  +|<a name='tcl\_module'></a>Tcl module|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
          875  +|<a name='tcl\_syntax'></a>Tcl syntax|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md)|
          876  +|<a name='tcler\_s\_wiki'></a>tcler's wiki|[doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md)|
          877  +|<a name='tcllib'></a>tcllib|[csv](tcllib/files/modules/csv/csv\.md)|
          878  +|<a name='tcloo'></a>TclOO|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md) &#183; [oometa](tcllib/files/modules/oometa/oometa\.md) &#183; [tool](tcllib/files/modules/httpd/httpd\.md) &#183; [tool](tcllib/files/modules/tool/tool\.md) &#183; [tool::dict\_ensemble](tcllib/files/modules/tool/tool\_dict\_ensemble\.md)|
          879  +|<a name='tclparam'></a>TCLPARAM|[pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md)|
          880  +|<a name='tdpl'></a>TDPL|[grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          881  +|<a name='temp\_file'></a>temp file|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
          882  +|<a name='template\_processing'></a>template processing|[textutil::expander](tcllib/files/modules/textutil/expander\.md)|
          883  +|<a name='terminal'></a>terminal|[term](tcllib/files/modules/term/term\.md) &#183; [term::ansi::code](tcllib/files/modules/term/ansi\_code\.md) &#183; [term::ansi::code::attr](tcllib/files/modules/term/ansi\_cattr\.md) &#183; [term::ansi::code::ctrl](tcllib/files/modules/term/ansi\_cctrl\.md) &#183; [term::ansi::code::macros](tcllib/files/modules/term/ansi\_cmacros\.md) &#183; [term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md) &#183; [term::ansi::send](tcllib/files/modules/term/ansi\_send\.md) &#183; [term::interact::menu](tcllib/files/modules/term/imenu\.md) &#183; [term::interact::pager](tcllib/files/modules/term/ipager\.md) &#183; [term::receive](tcllib/files/modules/term/receive\.md) &#183; [term::receive::bind](tcllib/files/modules/term/term\_bind\.md) &#183; [term::send](tcllib/files/modules/term/term\_send\.md)|
          884  +|<a name='test'></a>test|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
          885  +|<a name='testing'></a>Testing|[valtype::common](tcllib/files/modules/valtype/valtype\_common\.md) &#183; [valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md) &#183; [valtype::imei](tcllib/files/modules/valtype/imei\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md) &#183; [valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md) &#183; [valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md) &#183; [valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          886  +|<a name='testing'></a>testing|[bench](tcllib/files/modules/bench/bench\.md) &#183; [bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::csv](tcllib/files/modules/bench/bench\_wcsv\.md) &#183; [bench::out::text](tcllib/files/modules/bench/bench\_wtext\.md) &#183; [bench\_intro](tcllib/files/modules/bench/bench\_intro\.md) &#183; [bench\_lang\_intro](tcllib/files/modules/bench/bench\_lang\_intro\.md) &#183; [bench\_lang\_spec](tcllib/files/modules/bench/bench\_lang\_spec\.md)|
          887  +|<a name='tex'></a>TeX|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
          888  +|<a name='text'></a>text|[bench::in](tcllib/files/modules/bench/bench\_read\.md) &#183; [bench::out::text](tcllib/files/modules/bench/bench\_wtext\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md)|
          889  +|<a name='text\_comparison'></a>text comparison|[soundex](tcllib/files/modules/soundex/soundex\.md)|
          890  +|<a name='text\_conversion'></a>text conversion|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          891  +|<a name='text\_differences'></a>text differences|[rcs](tcllib/files/modules/rcs/rcs\.md)|
          892  +|<a name='text\_display'></a>text display|[term::interact::menu](tcllib/files/modules/term/imenu\.md) &#183; [term::interact::pager](tcllib/files/modules/term/ipager\.md)|
          893  +|<a name='text\_expansion'></a>text expansion|[textutil::expander](tcllib/files/modules/textutil/expander\.md)|
          894  +|<a name='text\_likeness'></a>text likeness|[soundex](tcllib/files/modules/soundex/soundex\.md)|
          895  +|<a name='text\_processing'></a>text processing|[bibtex](tcllib/files/modules/bibtex/bibtex\.md) &#183; [huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [page](tcllib/files/apps/page\.md) &#183; [page\_intro](tcllib/files/modules/page/page\_intro\.md) &#183; [page\_pluginmgr](tcllib/files/modules/page/page\_pluginmgr\.md) &#183; [page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md) &#183; [page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md) &#183; [page\_util\_peg](tcllib/files/modules/page/page\_util\_peg\.md) &#183; [page\_util\_quote](tcllib/files/modules/page/page\_util\_quote\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
          896  +|<a name='text\_widget'></a>text widget|[tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md)|
          897  +|<a name='threads'></a>threads|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          898  +|<a name='throw'></a>throw|[throw](tcllib/files/modules/try/tcllib\_throw\.md)|
          899  +|<a name='thumbnail'></a>thumbnail|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
          900  +|<a name='tie'></a>tie|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
          901  +|<a name='tif'></a>tif|[tiff](tcllib/files/modules/tiff/tiff\.md)|
          902  +|<a name='tiff'></a>tiff|[tiff](tcllib/files/modules/tiff/tiff\.md)|
          903  +|<a name='tile'></a>tile|[map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md)|
          904  +|<a name='time'></a>time|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
          905  +|<a name='timestamp'></a>timestamp|[png](tcllib/files/modules/png/png\.md)|
          906  +|<a name='timestamps'></a>timestamps|[debug::timestamp](tcllib/files/modules/debug/debug\_timestamp\.md)|
          907  +|<a name='tip\_219'></a>tip 219|[tcl::chan::cat](tcllib/files/modules/virtchannel\_base/cat\.md) &#183; [tcl::chan::core](tcllib/files/modules/virtchannel\_core/core\.md) &#183; [tcl::chan::events](tcllib/files/modules/virtchannel\_core/events\.md) &#183; [tcl::chan::facade](tcllib/files/modules/virtchannel\_base/facade\.md) &#183; [tcl::chan::fifo](tcllib/files/modules/virtchannel\_base/tcllib\_fifo\.md) &#183; [tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md) &#183; [tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md) &#183; [tcl::chan::memchan](tcllib/files/modules/virtchannel\_base/tcllib\_memchan\.md) &#183; [tcl::chan::null](tcllib/files/modules/virtchannel\_base/tcllib\_null\.md) &#183; [tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md) &#183; [tcl::chan::random](tcllib/files/modules/virtchannel\_base/tcllib\_random\.md) &#183; [tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md) &#183; [tcl::chan::string](tcllib/files/modules/virtchannel\_base/tcllib\_string\.md) &#183; [tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md) &#183; [tcl::chan::variable](tcllib/files/modules/virtchannel\_base/tcllib\_variable\.md) &#183; [tcl::chan::zero](tcllib/files/modules/virtchannel\_base/tcllib\_zero\.md) &#183; [tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md) &#183; [tcl::transform::core](tcllib/files/modules/virtchannel\_core/transformcore\.md)|
          908  +|<a name='tip\_230'></a>tip 230|[tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) &#183; [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) &#183; [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) &#183; [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) &#183; [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) &#183; [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) &#183; [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
          909  +|<a name='tip\_234'></a>tip 234|[tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
          910  +|<a name='tip\_317'></a>tip 317|[tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md)|
          911  +|<a name='tk'></a>Tk|[tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md)|
          912  +|<a name='tls'></a>tls|[comm](tcllib/files/modules/comm/comm\.md) &#183; [imap4](tcllib/files/modules/imap4/imap4\.md) &#183; [pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md) &#183; [smtp](tcllib/files/modules/mime/smtp\.md) &#183; [transfer::connect](tcllib/files/modules/transfer/connect\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          913  +|<a name='tmml'></a>TMML|[doctools](tcllib/files/modules/doctools/doctools\.md) &#183; [doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [dtplite](tcllib/files/modules/dtplite/pkg\_dtplite\.md) &#183; [dtplite](tcllib/files/apps/dtplite\.md) &#183; [mpexpand](tcllib/files/modules/doctools/mpexpand\.md)|
          914  +|<a name='toc'></a>toc|[doctoc\_intro](tcllib/files/modules/doctools/doctoc\_intro\.md) &#183; [doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export::doctoc](tcllib/files/modules/doctools2toc/export\_doctoc\.md) &#183; [doctools::toc::export::html](tcllib/files/modules/doctools2toc/toc\_export\_html\.md) &#183; [doctools::toc::export::json](tcllib/files/modules/doctools2toc/toc\_export\_json\.md) &#183; [doctools::toc::export::nroff](tcllib/files/modules/doctools2toc/toc\_export\_nroff\.md) &#183; [doctools::toc::export::text](tcllib/files/modules/doctools2toc/toc\_export\_text\.md) &#183; [doctools::toc::export::wiki](tcllib/files/modules/doctools2toc/toc\_export\_wiki\.md) &#183; [doctools::toc::import::doctoc](tcllib/files/modules/doctools2toc/import\_doctoc\.md) &#183; [doctools::toc::import::json](tcllib/files/modules/doctools2toc/toc\_import\_json\.md)|
          915  +|<a name='toc\_formatter'></a>toc formatter|[doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md)|
          916  +|<a name='tokenization'></a>tokenization|[string::token](tcllib/files/modules/string/token\.md) &#183; [string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
          917  +|<a name='tool'></a>TOOL|[oometa](tcllib/files/modules/oometa/oometa\.md) &#183; [tool](tcllib/files/modules/tool/tool\.md) &#183; [tool::dict\_ensemble](tcllib/files/modules/tool/tool\_dict\_ensemble\.md)|
          918  +|<a name='top\_down\_parsing\_languages'></a>top\-down parsing languages|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          919  +|<a name='torrent'></a>torrent|[bee](tcllib/files/modules/bee/bee\.md)|
          920  +|<a name='touch'></a>touch|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
          921  +|<a name='tpdl'></a>TPDL|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
          922  +|<a name='trace'></a>trace|[debug](tcllib/files/modules/debug/debug\.md) &#183; [debug::caller](tcllib/files/modules/debug/debug\_caller\.md) &#183; [debug::heartbeat](tcllib/files/modules/debug/debug\_heartbeat\.md) &#183; [debug::timestamp](tcllib/files/modules/debug/debug\_timestamp\.md)|
          923  +|<a name='transducer'></a>transducer|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md) &#183; [grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) &#183; [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) &#183; [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) &#183; [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) &#183; [grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::peg](tcllib/files/modules/grammar\_peg/peg\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt](tcllib/files/apps/pt\.md) &#183; [pt::ast](tcllib/files/modules/pt/pt\_astree\.md) &#183; [pt::cparam::configuration::critcl](tcllib/files/modules/pt/pt\_cparam\_config\_critcl\.md) &#183; [pt::cparam::configuration::tea](tcllib/files/modules/pt/pt\_cparam\_config\_tea\.md) &#183; [pt::json\_language](tcllib/files/modules/pt/pt\_json\_language\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md) &#183; [pt::pe](tcllib/files/modules/pt/pt\_pexpression\.md) &#183; [pt::pe::op](tcllib/files/modules/pt/pt\_pexpr\_op\.md) &#183; [pt::peg](tcllib/files/modules/pt/pt\_pegrammar\.md) &#183; [pt::peg::container](tcllib/files/modules/pt/pt\_peg\_container\.md) &#183; [pt::peg::container::peg](tcllib/files/modules/pt/pt\_peg\_container\_peg\.md) &#183; [pt::peg::export](tcllib/files/modules/pt/pt\_peg\_export\.md) &#183; [pt::peg::export::container](tcllib/files/modules/pt/pt\_peg\_export\_container\.md) &#183; [pt::peg::export::json](tcllib/files/modules/pt/pt\_peg\_export\_json\.md) &#183; [pt::peg::export::peg](tcllib/files/modules/pt/pt\_peg\_export\_peg\.md) &#183; [pt::peg::from::container](tcllib/files/modules/pt/pt\_peg\_from\_container\.md) &#183; [pt::peg::from::json](tcllib/files/modules/pt/pt\_peg\_from\_json\.md) &#183; [pt::peg::from::peg](tcllib/files/modules/pt/pt\_peg\_from\_peg\.md) &#183; [pt::peg::import](tcllib/files/modules/pt/pt\_peg\_import\.md) &#183; [pt::peg::import::container](tcllib/files/modules/pt/pt\_peg\_import\_container\.md) &#183; [pt::peg::import::json](tcllib/files/modules/pt/pt\_peg\_import\_json\.md) &#183; [pt::peg::import::peg](tcllib/files/modules/pt/pt\_peg\_import\_peg\.md) &#183; [pt::peg::interp](tcllib/files/modules/pt/pt\_peg\_interp\.md) &#183; [pt::peg::to::container](tcllib/files/modules/pt/pt\_peg\_to\_container\.md) &#183; [pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md) &#183; [pt::peg::to::json](tcllib/files/modules/pt/pt\_peg\_to\_json\.md) &#183; [pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md) &#183; [pt::peg::to::peg](tcllib/files/modules/pt/pt\_peg\_to\_peg\.md) &#183; [pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md) &#183; [pt::peg\_language](tcllib/files/modules/pt/pt\_peg\_language\.md) &#183; [pt::pegrammar](tcllib/files/modules/pt/pt\_peg\_introduction\.md) &#183; [pt::pgen](tcllib/files/modules/pt/pt\_pgen\.md) &#183; [pt::rde](tcllib/files/modules/pt/pt\_rdengine\.md) &#183; [pt::tclparam::configuration::nx](tcllib/files/modules/pt/pt\_tclparam\_config\_nx\.md) &#183; [pt::tclparam::configuration::snit](tcllib/files/modules/pt/pt\_tclparam\_config\_snit\.md) &#183; [pt::tclparam::configuration::tcloo](tcllib/files/modules/pt/pt\_tclparam\_config\_tcloo\.md) &#183; [pt::util](tcllib/files/modules/pt/pt\_util\.md) &#183; [pt\_export\_api](tcllib/files/modules/pt/pt\_to\_api\.md) &#183; [pt\_import\_api](tcllib/files/modules/pt/pt\_from\_api\.md) &#183; [pt\_introduction](tcllib/files/modules/pt/pt\_introduction\.md) &#183; [pt\_parse\_peg](tcllib/files/modules/pt/pt\_parse\_peg\.md) &#183; [pt\_parser\_api](tcllib/files/modules/pt/pt\_parser\_api\.md) &#183; [pt\_peg\_op](tcllib/files/modules/pt/pt\_peg\_op\.md)|
          924  +|<a name='transfer'></a>transfer|[transfer::connect](tcllib/files/modules/transfer/connect\.md) &#183; [transfer::copy](tcllib/files/modules/transfer/copyops\.md) &#183; [transfer::copy::queue](tcllib/files/modules/transfer/tqueue\.md) &#183; [transfer::data::destination](tcllib/files/modules/transfer/ddest\.md) &#183; [transfer::data::source](tcllib/files/modules/transfer/dsource\.md) &#183; [transfer::receiver](tcllib/files/modules/transfer/receiver\.md) &#183; [transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          925  +|<a name='transformation'></a>transformation|[page\_util\_peg](tcllib/files/modules/page/page\_util\_peg\.md) &#183; [tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) &#183; [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) &#183; [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) &#183; [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) &#183; [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) &#183; [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) &#183; [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
          926  +|<a name='transmitter'></a>transmitter|[transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
          927  +|<a name='travelling\_salesman'></a>travelling salesman|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          928  +|<a name='traversal'></a>traversal|[fileutil\_traverse](tcllib/files/modules/fileutil/traverse\.md)|
          929  +|<a name='tree'></a>tree|[grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md) &#183; [grammar::me::util](tcllib/files/modules/grammar\_me/me\_util\.md) &#183; [htmlparse](tcllib/files/modules/htmlparse/htmlparse\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::stack](tcllib/files/modules/struct/stack\.md) &#183; [struct::tree](tcllib/files/modules/struct/struct\_tree\.md) &#183; [struct::tree\_v1](tcllib/files/modules/struct/struct\_tree1\.md) &#183; [treeql](tcllib/files/modules/treeql/treeql\.md)|
          930  +|<a name='tree\_query\_language'></a>tree query language|[treeql](tcllib/files/modules/treeql/treeql\.md)|
          931  +|<a name='tree\_walking'></a>tree walking|[page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md) &#183; [page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md) &#183; [page\_util\_norm\_peg](tcllib/files/modules/page/page\_util\_norm\_peg\.md)|
          932  +|<a name='treeql'></a>TreeQL|[treeql](tcllib/files/modules/treeql/treeql\.md)|
          933  +|<a name='trigonometry'></a>trigonometry|[math::trig](tcllib/files/modules/math/trig\.md)|
          934  +|<a name='trimming'></a>trimming|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim\.md)|
          935  +|<a name='twitter'></a>twitter|[oauth](tcllib/files/modules/oauth/oauth\.md)|
          936  +|<a name='type'></a>type|[fileutil](tcllib/files/modules/fileutil/fileutil\.md) &#183; [fileutil::magic::cfront](tcllib/files/modules/fumagic/cfront\.md) &#183; [fileutil::magic::cgen](tcllib/files/modules/fumagic/cgen\.md) &#183; [fileutil::magic::filetype](tcllib/files/modules/fumagic/filetypes\.md) &#183; [fileutil::magic::rt](tcllib/files/modules/fumagic/rtcore\.md) &#183; [snit](tcllib/files/modules/snit/snit\.md)|
          937  +|<a name='type\_checking'></a>Type checking|[valtype::common](tcllib/files/modules/valtype/valtype\_common\.md) &#183; [valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md) &#183; [valtype::imei](tcllib/files/modules/valtype/imei\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md) &#183; [valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md) &#183; [valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md) &#183; [valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          938  +
          939  +
          940  +#### <a name='cU'></a>Keywords: U
          941  +
          942  +|||
          943  +|---|---|
          944  +|<a name='uevent'></a>uevent|[hook](tcllib/files/modules/hook/hook\.md)|
          945  +|<a name='unbind'></a>unbind|[uevent](tcllib/files/modules/uev/uevent\.md)|
          946  +|<a name='uncapitalize'></a>uncapitalize|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
          947  +|<a name='undenting'></a>undenting|[textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
          948  +|<a name='unicode'></a>unicode|[stringprep](tcllib/files/modules/stringprep/stringprep\.md) &#183; [stringprep::data](tcllib/files/modules/stringprep/stringprep\_data\.md) &#183; [unicode](tcllib/files/modules/stringprep/unicode\.md) &#183; [unicode::data](tcllib/files/modules/stringprep/unicode\_data\.md)|
          949  +|<a name='union'></a>union|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md) &#183; [struct::set](tcllib/files/modules/struct/struct\_set\.md)|
          950  +|<a name='unit'></a>unit|[units](tcllib/files/modules/units/units\.md)|
          951  +|<a name='unknown\_hooking'></a>unknown hooking|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          952  +|<a name='untie'></a>untie|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
          953  +|<a name='update'></a>update|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
          954  +|<a name='uri'></a>uri|[uri](tcllib/files/modules/uri/uri\.md) &#183; [uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
          955  +|<a name='url'></a>url|[doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md) &#183; [map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md) &#183; [uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
          956  +|<a name='urn'></a>urn|[uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
          957  +|<a name='us\_npi'></a>US\-NPI|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
          958  +|<a name='utilities'></a>utilities|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
          959  +|<a name='uuencode'></a>uuencode|[uuencode](tcllib/files/modules/base64/uuencode\.md)|
          960  +|<a name='uuid'></a>UUID|[uuid](tcllib/files/modules/uuid/uuid\.md)|
          961  +
          962  +
          963  +#### <a name='cV'></a>Keywords: V
          964  +
          965  +|||
          966  +|---|---|
          967  +|<a name='validation'></a>Validation|[valtype::common](tcllib/files/modules/valtype/valtype\_common\.md) &#183; [valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md) &#183; [valtype::imei](tcllib/files/modules/valtype/imei\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md) &#183; [valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md) &#183; [valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md) &#183; [valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          968  +|<a name='value\_checking'></a>Value checking|[valtype::common](tcllib/files/modules/valtype/valtype\_common\.md) &#183; [valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md) &#183; [valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md) &#183; [valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md) &#183; [valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md) &#183; [valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::iban](tcllib/files/modules/valtype/iban\.md) &#183; [valtype::imei](tcllib/files/modules/valtype/imei\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md) &#183; [valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md) &#183; [valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md) &#183; [valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          969  +|<a name='vectors'></a>vectors|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
          970  +|<a name='verhoeff'></a>verhoeff|[valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
          971  +|<a name='vertex'></a>vertex|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          972  +|<a name='vertex\_cover'></a>vertex cover|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
          973  +|<a name='virtual\_channel'></a>virtual channel|[tcl::chan::cat](tcllib/files/modules/virtchannel\_base/cat\.md) &#183; [tcl::chan::core](tcllib/files/modules/virtchannel\_core/core\.md) &#183; [tcl::chan::events](tcllib/files/modules/virtchannel\_core/events\.md) &#183; [tcl::chan::facade](tcllib/files/modules/virtchannel\_base/facade\.md) &#183; [tcl::chan::fifo](tcllib/files/modules/virtchannel\_base/tcllib\_fifo\.md) &#183; [tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md) &#183; [tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md) &#183; [tcl::chan::memchan](tcllib/files/modules/virtchannel\_base/tcllib\_memchan\.md) &#183; [tcl::chan::null](tcllib/files/modules/virtchannel\_base/tcllib\_null\.md) &#183; [tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md) &#183; [tcl::chan::random](tcllib/files/modules/virtchannel\_base/tcllib\_random\.md) &#183; [tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md) &#183; [tcl::chan::string](tcllib/files/modules/virtchannel\_base/tcllib\_string\.md) &#183; [tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md) &#183; [tcl::chan::variable](tcllib/files/modules/virtchannel\_base/tcllib\_variable\.md) &#183; [tcl::chan::zero](tcllib/files/modules/virtchannel\_base/tcllib\_zero\.md) &#183; [tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md) &#183; [tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) &#183; [tcl::transform::core](tcllib/files/modules/virtchannel\_core/transformcore\.md) &#183; [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) &#183; [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) &#183; [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) &#183; [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) &#183; [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) &#183; [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) &#183; [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) &#183; [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) &#183; [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
          974  +|<a name='virtual\_machine'></a>virtual machine|[grammar::me::cpu](tcllib/files/modules/grammar\_me/me\_cpu\.md) &#183; [grammar::me::cpu::core](tcllib/files/modules/grammar\_me/me\_cpucore\.md) &#183; [grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md) &#183; [grammar::me::tcl](tcllib/files/modules/grammar\_me/me\_tcl\.md) &#183; [grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md) &#183; [grammar::me\_vm](tcllib/files/modules/grammar\_me/me\_vm\.md) &#183; [grammar::peg::interp](tcllib/files/modules/grammar\_peg/peg\_interp\.md) &#183; [pt::param](tcllib/files/modules/pt/pt\_param\.md)|
          975  +|<a name='visa'></a>VISA|[valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md)|
          976  +|<a name='vwait'></a>vwait|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
          977  +
          978  +
          979  +#### <a name='cW'></a>Keywords: W
          980  +
          981  +|||
          982  +|---|---|
          983  +|<a name='wais'></a>wais|[uri](tcllib/files/modules/uri/uri\.md)|
          984  +|<a name='widget'></a>widget|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
          985  +|<a name='widget\_adaptors'></a>widget adaptors|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
          986  +|<a name='wiki'></a>wiki|[doctools::idx](tcllib/files/modules/doctools/docidx\.md) &#183; [doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) &#183; [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) &#183; [doctools::idx::export::wiki](tcllib/files/modules/doctools2idx/idx\_export\_wiki\.md) &#183; [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) &#183; [doctools::toc](tcllib/files/modules/doctools/doctoc\.md) &#183; [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) &#183; [doctools::toc::export::wiki](tcllib/files/modules/doctools2toc/toc\_export\_wiki\.md)|
          987  +|<a name='word'></a>word|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md) &#183; [wip](tcllib/files/modules/wip/wip\.md)|
          988  +|<a name='www'></a>WWW|[tool](tcllib/files/modules/httpd/httpd\.md)|
          989  +|<a name='www'></a>www|[uri](tcllib/files/modules/uri/uri\.md)|
          990  +
          991  +
          992  +#### <a name='cX'></a>Keywords: X
          993  +
          994  +|||
          995  +|---|---|
          996  +|<a name='x\_208'></a>x\.208|[asn](tcllib/files/modules/asn/asn\.md)|
          997  +|<a name='x\_209'></a>x\.209|[asn](tcllib/files/modules/asn/asn\.md)|
          998  +|<a name='x\_500'></a>x\.500|[ldap](tcllib/files/modules/ldap/ldap\.md)|
          999  +|<a name='xgoogletoken'></a>XGoogleToken|[SASL::XGoogleToken](tcllib/files/modules/sasl/gtoken\.md)|
         1000  +|<a name='xml'></a>xml|[xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md)|
         1001  +|<a name='xor'></a>xor|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md)|
         1002  +|<a name='xpath'></a>XPath|[treeql](tcllib/files/modules/treeql/treeql\.md)|
         1003  +|<a name='xslt'></a>XSLT|[treeql](tcllib/files/modules/treeql/treeql\.md)|
         1004  +
         1005  +
         1006  +#### <a name='cY'></a>Keywords: Y
         1007  +
         1008  +|||
         1009  +|---|---|
         1010  +|<a name='yaml'></a>yaml|[huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
         1011  +|<a name='ydecode'></a>ydecode|[yencode](tcllib/files/modules/base64/yencode\.md)|
         1012  +|<a name='yenc'></a>yEnc|[yencode](tcllib/files/modules/base64/yencode\.md)|
         1013  +|<a name='yencode'></a>yencode|[yencode](tcllib/files/modules/base64/yencode\.md)|
         1014  +
         1015  +
         1016  +#### <a name='cZ'></a>Keywords: Z
         1017  +
         1018  +|||
         1019  +|---|---|
         1020  +|<a name='zero'></a>zero|[tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md) &#183; [tcl::chan::zero](tcllib/files/modules/virtchannel\_base/tcllib\_zero\.md)|
         1021  +|<a name='zip'></a>zip|[zipfile::decode](tcllib/files/modules/zip/decode\.md) &#183; [zipfile::encode](tcllib/files/modules/zip/encode\.md) &#183; [zipfile::mkzip](tcllib/files/modules/zip/mkzip\.md)|
         1022  +|<a name='zlib'></a>zlib|[tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
         1023  +|<a name='zoom'></a>zoom|[map::slippy](tcllib/files/modules/map/map\_slippy\.md) &#183; [map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md) &#183; [map::slippy::fetcher](tcllib/files/modules/map/map\_slippy\_fetcher\.md)|

Added embedded/md/tcllib/files/apps/dtplite.md.

            1  +
            2  +[//000000001]: # (dtplite \- Documentation toolbox)
            3  +[//000000002]: # (Generated from file 'dtplite\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2004\-2013 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (dtplite\(n\) 1\.0\.5 tcllib "Documentation toolbox")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +dtplite \- Lightweight DocTools Markup Processor
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +      - [USE CASES](#subsection1)
           27  +
           28  +      - [COMMAND LINE](#subsection2)
           29  +
           30  +      - [OPTIONS](#subsection3)
           31  +
           32  +      - [FORMATS](#subsection4)
           33  +
           34  +      - [DIRECTORY STRUCTURES](#subsection5)
           35  +
           36  +  - [Bugs, Ideas, Feedback](#section2)
           37  +
           38  +  - [See Also](#seealso)
           39  +
           40  +  - [Keywords](#keywords)
           41  +
           42  +  - [Category](#category)
           43  +
           44  +  - [Copyright](#copyright)
           45  +
           46  +# <a name='synopsis'></a>SYNOPSIS
           47  +
           48  +[__dtplite__ __\-o__ *output* ?options? *format* *inputfile*](#1)  
           49  +[__dtplite__ __validate__ *inputfile*](#2)  
           50  +[__dtplite__ __\-o__ *output* ?options? *format* *inputdirectory*](#3)  
           51  +[__dtplite__ __\-merge__ __\-o__ *output* ?options? *format* *inputdirectory*](#4)  
           52  +
           53  +# <a name='description'></a>DESCRIPTION
           54  +
           55  +The application described by this document, __dtplite__, is the successor to
           56  +the extremely simple __[mpexpand](\.\./modules/doctools/mpexpand\.md)__\.
           57  +Influenced in its functionality by the __dtp__ doctools processor it is much
           58  +more powerful than __[mpexpand](\.\./modules/doctools/mpexpand\.md)__, yet
           59  +still as easy to use; definitely easier than __dtp__ with its myriad of
           60  +subcommands and options\.
           61  +
           62  +__dtplite__ is based upon the package
           63  +__[doctools](\.\./modules/doctools/doctools\.md)__, like the other two
           64  +processors\.
           65  +
           66  +## <a name='subsection1'></a>USE CASES
           67  +
           68  +__dtplite__ was written with the following three use cases in mind\.
           69  +
           70  +  1. Validation of a single document, i\.e\. checking that it was written in valid
           71  +     doctools format\. This mode can also be used to get a preliminary version of
           72  +     the formatted output for a single document, for display in a browser,
           73  +     nroff, etc\., allowing proofreading of the formatting\.
           74  +
           75  +  1. Generation of the formatted documentation for a single package, i\.e\. all
           76  +     the manpages, plus a table of contents and an index of keywords\.
           77  +
           78  +  1. An extension of the previous mode of operation, a method for the easy
           79  +     generation of one documentation tree for several packages, and especially
           80  +     of a unified table of contents and keyword index\.
           81  +
           82  +Beyond the above we also want to make use of the customization features provided
           83  +by the HTML formatter\. It is not the only format the application should be able
           84  +to generate, but we anticipiate it to be the most commonly used, and it is one
           85  +of the few which do provide customization hooks\.
           86  +
           87  +We allow the caller to specify a header string, footer string, a stylesheet, and
           88  +data for a bar of navigation links at the top of the generated document\. While
           89  +all can be set as long as the formatting engine provides an appropriate engine
           90  +parameter \(See section [OPTIONS](#subsection3)\) the last two have internal
           91  +processing which make them specific to HTML\.
           92  +
           93  +## <a name='subsection2'></a>COMMAND LINE
           94  +
           95  +  - <a name='1'></a>__dtplite__ __\-o__ *output* ?options? *format* *inputfile*
           96  +
           97  +    This is the form for use case \[1\]\. The *options* will be explained later,
           98  +    in section [OPTIONS](#subsection3)\.
           99  +
          100  +      * path *output* \(in\)
          101  +
          102  +        This argument specifies where to write the generated document\. It can be
          103  +        the path to a file or directory, or __\-__\. The last value causes the
          104  +        application to write the generated documented to __stdout__\.
          105  +
          106  +        If the *output* does not exist then \[file dirname $output\] has to
          107  +        exist and must be a writable directory\. The generated document will be
          108  +        written to a file in that directory, and the name of that file will be
          109  +        derived from the *inputfile*, the *format*, and the value given to
          110  +        option __\-ext__ \(if present\)\.
          111  +
          112  +      * \(path&#124;handle\) *format* \(in\)
          113  +
          114  +        This argument specifies the formatting engine to use when processing the
          115  +        input, and thus the format of the generated document\. See section
          116  +        [FORMATS](#subsection4) for the possibilities recognized by the
          117  +        application\.
          118  +
          119  +      * path *inputfile* \(in\)
          120  +
          121  +        This argument specifies the path to the file to process\. It has to
          122  +        exist, must be readable, and written in
          123  +        *[doctools](\.\./\.\./\.\./index\.md\#doctools)* format\.
          124  +
          125  +  - <a name='2'></a>__dtplite__ __validate__ *inputfile*
          126  +
          127  +    This is a simpler form for use case \[1\]\. The "validate" format generates no
          128  +    output at all, only syntax checks are performed\. As such the specification
          129  +    of an output file or other options is not necessary and left out\.
          130  +
          131  +  - <a name='3'></a>__dtplite__ __\-o__ *output* ?options? *format* *inputdirectory*
          132  +
          133  +    This is the form for use case \[2\]\. It differs from the form for use case \[1\]
          134  +    by having the input documents specified through a directory instead of a
          135  +    file\. The other arguments are identical, except for *output*, which now
          136  +    has to be the path to an existing and writable directory\.
          137  +
          138  +    The input documents are all files in *inputdirectory* or any of its
          139  +    subdirectories which were recognized by __fileutil::fileType__ as
          140  +    containing text in *[doctools](\.\./\.\./\.\./index\.md\#doctools)* format\.
          141  +
          142  +  - <a name='4'></a>__dtplite__ __\-merge__ __\-o__ *output* ?options? *format* *inputdirectory*
          143  +
          144  +    This is the form for use case \[3\]\. The only difference to the form for use
          145  +    case \[2\] is the additional option __\-merge__\.
          146  +
          147  +    Each such call will merge the generated documents coming from processing the
          148  +    input documents under *inputdirectory* or any of its subdirectories to the
          149  +    files under *output*\. In this manner it is possible to incrementally build
          150  +    the unified documentation for any number of packages\. Note that it is
          151  +    necessary to run through all the packages twice to get fully correct
          152  +    cross\-references \(for formats supporting them\)\.
          153  +
          154  +## <a name='subsection3'></a>OPTIONS
          155  +
          156  +This section describes all the options available to the user of the application,
          157  +with the exception of the options __\-o__ and __\-merge__\. These two were
          158  +described already, in section [COMMAND LINE](#subsection2)\.
          159  +
          160  +  - __\-exclude__ string
          161  +
          162  +    This option specifies an exclude \(glob\) pattern\. Any files identified as
          163  +    manpages to process which match the exclude pattern are ignored\. The option
          164  +    can be provided multiple times, each usage adding an additional pattern to
          165  +    the list of exclusions\.
          166  +
          167  +  - __\-ext__ string
          168  +
          169  +    If the name of an output file has to be derived from the name of an input
          170  +    file it will use the name of the *format* as the extension by default\.
          171  +    This option here will override this however, forcing it to use *string* as
          172  +    the file extension\. This option is ignored if the name of the output file is
          173  +    fully specified through option __\-o__\.
          174  +
          175  +    When used multiple times only the last definition is relevant\.
          176  +
          177  +  - __\-header__ file
          178  +
          179  +    This option can be used if and only if the selected *format* provides an
          180  +    engine parameter named "header"\. It takes the contents of the specified file
          181  +    and assign them to that parameter, for whatever use by the engine\. The HTML
          182  +    engine will insert the text just after the tag __<body>__\. If navigation
          183  +    buttons are present \(see option __\-nav__ below\), then the HTML generated
          184  +    for them is appended to the header data originating here before the final
          185  +    assignment to the parameter\.
          186  +
          187  +    When used multiple times only the last definition is relevant\.
          188  +
          189  +  - __\-footer__ file
          190  +
          191  +    Like __\-header__, except that: Any navigation buttons are ignored, the
          192  +    corresponding required engine parameter is named "footer", and the data is
          193  +    inserted just before the tag __</body>__\.
          194  +
          195  +    When used multiple times only the last definition is relevant\.
          196  +
          197  +  - __\-style__ file
          198  +
          199  +    This option can be used if and only if the selected *format* provides an
          200  +    engine parameter named "meta"\. When specified it will generate a piece of
          201  +    HTML code declaring the *file* as the stylesheet for the generated
          202  +    document and assign that to the parameter\. The HTML engine will insert this
          203  +    inot the document, just after the tag __<head>__\.
          204  +
          205  +    When processing an input directory the stylesheet file is copied into the
          206  +    output directory and the generated HTML will refer to the copy, to make the
          207  +    result more self\-contained\. When processing an input file we have no
          208  +    location to copy the stylesheet to and so just reference it as specified\.
          209  +
          210  +    When used multiple times only the last definition is relevant\.
          211  +
          212  +  - __\-toc__ path
          213  +
          214  +    This option specifies a doctoc file to use for the table of contents instead
          215  +    of generating our own\.
          216  +
          217  +    When used multiple times only the last definition is relevant\.
          218  +
          219  +  - __\-pre\+toc__ label path&#124;text
          220  +
          221  +  - __\-post\+toc__ label path&#124;text
          222  +
          223  +    This option specifies additional doctoc files \(or texts\) to use in the
          224  +    navigation bar\.
          225  +
          226  +    Positioning and handling of multiple uses is like for options
          227  +    __\-prenav__ and __\-postnav__, see below\.
          228  +
          229  +  - __\-nav__ label url
          230  +
          231  +  - __\-prenav__ label url
          232  +
          233  +    Use this option to specify a navigation button with *label* to display and
          234  +    the *url* to link to\. This option can be used if and only if the selected
          235  +    *format* provides an engine parameter named "header"\. The HTML generated
          236  +    for this is appended to whatever data we got from option __\-header__
          237  +    before it is inserted into the generated documents\.
          238  +
          239  +    When used multiple times all definitions are collected and a navigation bar
          240  +    is created, with the first definition shown at the left edge and the last
          241  +    definition to the right\.
          242  +
          243  +    The url can be relative\. In that case it is assumed to be relative to the
          244  +    main files \(TOC and Keyword index\), and will be transformed for all others
          245  +    to still link properly\.
          246  +
          247  +  - __\-postnav__ label url
          248  +
          249  +    Use this option to specify a navigation button with *label* to display and
          250  +    the *url* to link to\. This option can be used if and only if the selected
          251  +    *format* provides an engine parameter named "header"\. The HTML generated
          252  +    for this is appended to whatever data we got from option __\-header__
          253  +    before it is inserted into the generated documents\.
          254  +
          255  +    When used multiple times all definitions are collected and a navigation bar
          256  +    is created, with the last definition shown at the right edge and the first
          257  +    definition to the left\.
          258  +
          259  +    The url can be relative\. In that case it is assumed to be relative to the
          260  +    main files \(TOC and Keyword index\), and will be transformed for all others
          261  +    to still link properly\.
          262  +
          263  +## <a name='subsection4'></a>FORMATS
          264  +
          265  +At first the *format* argument will be treated as a path to a tcl file
          266  +containing the code for the requested formatting engine\. The argument will be
          267  +treated as the name of one of the predefined formats listed below if and only if
          268  +the path does not exist\.
          269  +
          270  +*Note a limitation*: If treating the format as path to the tcl script
          271  +implementing the engine was sucessful, then this script has to implement not
          272  +only the engine API for doctools, i\.e\. *doctools\_api*, but for *doctoc\_api*
          273  +and *docidx\_api* as well\. Otherwise the generation of a table of contents and
          274  +of a keyword index will fail\.
          275  +
          276  +List of predefined formats, i\.e\. as provided by the package
          277  +__[doctools](\.\./modules/doctools/doctools\.md)__:
          278  +
          279  +  - __nroff__
          280  +
          281  +    The processor generates \*roff output, the standard format for unix manpages\.
          282  +
          283  +  - __html__
          284  +
          285  +    The processor generates HTML output, for usage in and display by web
          286  +    browsers\. This engine is currently the only one providing the various engine
          287  +    parameters required for the additional customaization of the output\.
          288  +
          289  +  - __tmml__
          290  +
          291  +    The processor generates TMML output, the Tcl Manpage Markup Language, a
          292  +    derivative of XML\.
          293  +
          294  +  - __latex__
          295  +
          296  +    The processor generates LaTeX output\.
          297  +
          298  +  - __wiki__
          299  +
          300  +    The processor generates Wiki markup as understood by __wikit__\.
          301  +
          302  +  - __list__
          303  +
          304  +    The processor extracts the information provided by __manpage\_begin__\.
          305  +    This format is used internally to extract the meta data from which both
          306  +    table of contents and keyword index are derived from\.
          307  +
          308  +  - __null__
          309  +
          310  +    The processor does not generate any output\. This is equivalent to
          311  +    __validate__\.
          312  +
          313  +## <a name='subsection5'></a>DIRECTORY STRUCTURES
          314  +
          315  +In this section we describe the directory structures generated by the
          316  +application under *output* when processing all documents in an
          317  +*inputdirectory*\. In other words, this is only relevant to the use cases \[2\]
          318  +and \[3\]\.
          319  +
          320  +  - \[2\]
          321  +
          322  +    The following directory structure is created when processing a single set of
          323  +    input documents\. The file extension used is for output in HTML, but that is
          324  +    not relevant to the structure and was just used to have proper file names\.
          325  +
          326  +        output/
          327  +            toc.html
          328  +            index.html
          329  +            files/
          330  +                path/to/FOO.html
          331  +
          332  +    The last line in the example shows the document generated for a file FOO
          333  +    located at
          334  +
          335  +        inputdirectory/path/to/FOO
          336  +
          337  +  - \[3\]
          338  +
          339  +    When merging many packages into a unified set of documents the generated
          340  +    directory structure is a bit deeper:
          341  +
          342  +        output
          343  +            .toc
          344  +            .idx
          345  +            .tocdoc
          346  +            .idxdoc
          347  +            .xrf
          348  +            toc.html
          349  +            index.html
          350  +            FOO1/
          351  +                ...
          352  +            FOO2/
          353  +                toc.html
          354  +                files/
          355  +                    path/to/BAR.html
          356  +
          357  +    Each of the directories FOO1, \.\.\. contains the documents generated for the
          358  +    package FOO1, \.\.\. and follows the structure shown for use case \[2\]\. The only
          359  +    exception is that there is no per\-package index\.
          360  +
          361  +    The files "\.toc", "\.idx", and "\.xrf" contain the internal status of the
          362  +    whole output and will be read and updated by the next invokation\. Their
          363  +    contents will not be documented\. Remove these files when all packages wanted
          364  +    for the output have been processed, i\.e\. when the output is complete\.
          365  +
          366  +    The files "\.tocdoc", and "\.idxdoc", are intermediate files in doctoc and
          367  +    docidx markup, respectively, containing the main table of contents and
          368  +    keyword index for the set of documents before their conversion to the chosen
          369  +    output format\. They are left in place, i\.e\. not deleted, to serve as
          370  +    demonstrations of doctoc and docidx markup\.
          371  +
          372  +# <a name='section2'></a>Bugs, Ideas, Feedback
          373  +
          374  +This document, and the package it describes, will undoubtedly contain bugs and
          375  +other problems\. Please report such in the category *doctools* of the [Tcllib
          376  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          377  +for enhancements you may have for either package and/or documentation\.
          378  +
          379  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          380  +__diff \-u__\.
          381  +
          382  +Note further that *attachments* are strongly preferred over inlined patches\.
          383  +Attachments can be made by going to the __Edit__ form of the ticket
          384  +immediately after its creation, and then using the left\-most button in the
          385  +secondary navigation bar\.
          386  +
          387  +# <a name='seealso'></a>SEE ALSO
          388  +
          389  +[docidx introduction](\.\./modules/doctools/docidx\_intro\.md), [doctoc
          390  +introduction](\.\./modules/doctools/doctoc\_intro\.md), [doctools
          391  +introduction](\.\./modules/doctools/doctools\_intro\.md)
          392  +
          393  +# <a name='keywords'></a>KEYWORDS
          394  +
          395  +[HTML](\.\./\.\./\.\./index\.md\#html), [TMML](\.\./\.\./\.\./index\.md\#tmml),
          396  +[conversion](\.\./\.\./\.\./index\.md\#conversion),
          397  +[docidx](\.\./\.\./\.\./index\.md\#docidx), [doctoc](\.\./\.\./\.\./index\.md\#doctoc),
          398  +[doctools](\.\./\.\./\.\./index\.md\#doctools),
          399  +[manpage](\.\./\.\./\.\./index\.md\#manpage),
          400  +[markup](\.\./\.\./\.\./index\.md\#markup), [nroff](\.\./\.\./\.\./index\.md\#nroff)
          401  +
          402  +# <a name='category'></a>CATEGORY
          403  +
          404  +Documentation tools
          405  +
          406  +# <a name='copyright'></a>COPYRIGHT
          407  +
          408  +Copyright &copy; 2004\-2013 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/apps/nns.md.

            1  +
            2  +[//000000001]: # (nns \- Name service facility)
            3  +[//000000002]: # (Generated from file 'nns\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (nns\(n\) 1\.1 tcllib "Name service facility")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +nns \- Name service facility, Commandline Client Application
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +      - [USE CASES](#subsection1)
           27  +
           28  +      - [COMMAND LINE](#subsection2)
           29  +
           30  +      - [OPTIONS](#subsection3)
           31  +
           32  +  - [Bugs, Ideas, Feedback](#section2)
           33  +
           34  +  - [See Also](#seealso)
           35  +
           36  +  - [Keywords](#keywords)
           37  +
           38  +  - [Category](#category)
           39  +
           40  +  - [Copyright](#copyright)
           41  +
           42  +# <a name='synopsis'></a>SYNOPSIS
           43  +
           44  +[__nns__ __bind__ ?__\-host__ *host*? ?__\-port__ *port*? *name* *data*](#1)  
           45  +[__nns__ __search__ ?__\-host__ *host*? ?__\-port__ *port*? ?__\-continuous__? ?*pattern*?](#2)  
           46  +[__nns__ __ident__ ?__\-host__ *host*? ?__\-port__ *port*?](#3)  
           47  +[__nns__ __who__](#4)  
           48  +
           49  +# <a name='description'></a>DESCRIPTION
           50  +
           51  +Please read *[Name service facility,
           52  +introduction](\.\./modules/nns/nns\_intro\.md)* first\.
           53  +
           54  +The application described by this document, __nns__, is a simple command
           55  +line client for the nano name service facility provided by the Tcllib packages
           56  +__[nameserv](\.\./modules/nns/nns\_client\.md)__, and
           57  +__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\. Beyond that the
           58  +application's sources also serve as an example of how to use the client package
           59  +__[nameserv](\.\./modules/nns/nns\_client\.md)__\. All abilities of a client
           60  +are covered, from configuration to registration of names to searching\.
           61  +
           62  +This name service facility has nothing to do with the Internet's *Domain Name
           63  +System*, otherwise known as *[DNS](\.\./\.\./\.\./index\.md\#dns)*\. If the reader
           64  +is looking for a package dealing with that please see either of the packages
           65  +__[dns](\.\./modules/dns/tcllib\_dns\.md)__ and __resolv__, both found
           66  +in Tcllib too\.
           67  +
           68  +## <a name='subsection1'></a>USE CASES
           69  +
           70  +__nns__ was written with the following two main use cases in mind\.
           71  +
           72  +  1. Registration of a name/data pair in the name service\.
           73  +
           74  +  1. Searching the name service for entries matching a glob pattern\.
           75  +
           76  +Beyond the above we also want to be able to identify the client, and get
           77  +information about the name service\.
           78  +
           79  +## <a name='subsection2'></a>COMMAND LINE
           80  +
           81  +  - <a name='1'></a>__nns__ __bind__ ?__\-host__ *host*? ?__\-port__ *port*? *name* *data*
           82  +
           83  +    This form registers the *name*/*data* pair in the specified name
           84  +    service\. In this form the command will *not* exit to keep the registration
           85  +    alive\. The user has to kill it explicitly, either by sending a signal, or
           86  +    through the job\-control facilities of the shell in use\. It will especially
           87  +    survive the loss of the connection to the name service and reestablish the
           88  +    *name*/*data* pair when the connection is restored\.
           89  +
           90  +    The options to specify the name service will be explained later, in section
           91  +    [OPTIONS](#subsection3)\.
           92  +
           93  +  - <a name='2'></a>__nns__ __search__ ?__\-host__ *host*? ?__\-port__ *port*? ?__\-continuous__? ?*pattern*?
           94  +
           95  +    This form searches the specified name service for entries matching the
           96  +    glob\-*pattern* and prints them to stdout, with each entry on its own line\.
           97  +    If no pattern is specified it defaults to __\*__, matching everything\.
           98  +
           99  +    The options to specify the name service will be explained later, in section
          100  +    [OPTIONS](#subsection3)\.
          101  +
          102  +    If the option __\-continuous__ is specified the client will not exit
          103  +    after performing the search, but start to continuously monitor the service
          104  +    for changes to the set of matching entries, appropriately updating the
          105  +    display as changes arrive\. In that form it will especially also survive the
          106  +    loss of the connection to the name service and reestablish the search when
          107  +    the connection is restored\.
          108  +
          109  +  - <a name='3'></a>__nns__ __ident__ ?__\-host__ *host*? ?__\-port__ *port*?
          110  +
          111  +    This form asks the specified name service for the version and features of
          112  +    the name service protocol it supports and prints the results to stdout\.
          113  +
          114  +    The options to specify the name service will be explained later, in section
          115  +    [OPTIONS](#subsection3)\.
          116  +
          117  +  - <a name='4'></a>__nns__ __who__
          118  +
          119  +    This form prints name, version, and protocol version of the application to
          120  +    stdout\.
          121  +
          122  +## <a name='subsection3'></a>OPTIONS
          123  +
          124  +This section describes all the options available to the user of the application
          125  +
          126  +  - __\-host__ name&#124;ipaddress
          127  +
          128  +    If this option is not specified it defaults to __localhost__\. It
          129  +    specifies the name or ip\-address of the host the name service to talk to is
          130  +    running on\.
          131  +
          132  +  - __\-port__ number
          133  +
          134  +    If this option is not specified it defaults to __38573__\. It specifies
          135  +    the TCP port the name service to talk to is listening on for requests\.
          136  +
          137  +# <a name='section2'></a>Bugs, Ideas, Feedback
          138  +
          139  +This document, and the package it describes, will undoubtedly contain bugs and
          140  +other problems\. Please report such in the category *nameserv* of the [Tcllib
          141  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          142  +for enhancements you may have for either package and/or documentation\.
          143  +
          144  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          145  +__diff \-u__\.
          146  +
          147  +Note further that *attachments* are strongly preferred over inlined patches\.
          148  +Attachments can be made by going to the __Edit__ form of the ticket
          149  +immediately after its creation, and then using the left\-most button in the
          150  +secondary navigation bar\.
          151  +
          152  +# <a name='seealso'></a>SEE ALSO
          153  +
          154  +[nameserv\(n\)](\.\./modules/nns/nns\_client\.md),
          155  +[nameserv::common\(n\)](\.\./modules/nns/nns\_common\.md)
          156  +
          157  +# <a name='keywords'></a>KEYWORDS
          158  +
          159  +[application](\.\./\.\./\.\./index\.md\#application),
          160  +[client](\.\./\.\./\.\./index\.md\#client), [name
          161  +service](\.\./\.\./\.\./index\.md\#name\_service)
          162  +
          163  +# <a name='category'></a>CATEGORY
          164  +
          165  +Networking
          166  +
          167  +# <a name='copyright'></a>COPYRIGHT
          168  +
          169  +Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/apps/nnsd.md.

            1  +
            2  +[//000000001]: # (nnsd \- Name service facility)
            3  +[//000000002]: # (Generated from file 'nnsd\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (nnsd\(n\) 1\.0\.1 tcllib "Name service facility")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +nnsd \- Name service facility, Commandline Server Application
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +      - [USE CASES](#subsection1)
           27  +
           28  +      - [COMMAND LINE](#subsection2)
           29  +
           30  +      - [OPTIONS](#subsection3)
           31  +
           32  +  - [Bugs, Ideas, Feedback](#section2)
           33  +
           34  +  - [See Also](#seealso)
           35  +
           36  +  - [Keywords](#keywords)
           37  +
           38  +  - [Category](#category)
           39  +
           40  +  - [Copyright](#copyright)
           41  +
           42  +# <a name='synopsis'></a>SYNOPSIS
           43  +
           44  +[__nnsd__ ?__\-localonly__ *flag*? ?__\-port__ *port*?](#1)  
           45  +
           46  +# <a name='description'></a>DESCRIPTION
           47  +
           48  +Please read *[Name service facility,
           49  +introduction](\.\./modules/nns/nns\_intro\.md)* first\.
           50  +
           51  +The application described by this document, __[nns](nns\.md)__, is a
           52  +simple command line server for the nano name service facility provided by the
           53  +Tcllib packages __[nameserv](\.\./modules/nns/nns\_client\.md)__, and
           54  +__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\. Beyond that the
           55  +application's sources also serve as an example of how to use the server package
           56  +__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\.
           57  +
           58  +This name service facility has nothing to do with the Internet's *Domain Name
           59  +System*, otherwise known as *[DNS](\.\./\.\./\.\./index\.md\#dns)*\. If the reader
           60  +is looking for a package dealing with that please see either of the packages
           61  +__[dns](\.\./modules/dns/tcllib\_dns\.md)__ and __resolv__, both found
           62  +in Tcllib too\.
           63  +
           64  +## <a name='subsection1'></a>USE CASES
           65  +
           66  +__nnsd__ was written with the following main use case in mind\.
           67  +
           68  +  1. Run a nano name service on some host\.
           69  +
           70  +## <a name='subsection2'></a>COMMAND LINE
           71  +
           72  +  - <a name='1'></a>__nnsd__ ?__\-localonly__ *flag*? ?__\-port__ *port*?
           73  +
           74  +    The command configures a server per the specified options and starts it\. The
           75  +    command will not exit on its own, as it keeps the name service database
           76  +    wholly in memory\. The user has to kill it explicitly, either by sending a a
           77  +    signal, or through the job\-control facilities of the shell in use\.
           78  +
           79  +    The options to configure the name service are explained in section
           80  +    [OPTIONS](#subsection3)\.
           81  +
           82  +## <a name='subsection3'></a>OPTIONS
           83  +
           84  +This section describes all the options available to the user of the application
           85  +
           86  +  - __\-localonly__ bool
           87  +
           88  +    If this option is not specified it defaults to __true__, i\.e\. acceptance
           89  +    of only local connections\. The server will accept remote connections, i\.e\.
           90  +    connections from other hosts, if and only if this option is configured to
           91  +    __false__\.
           92  +
           93  +  - __\-port__ number
           94  +
           95  +    If this option is not specified it defaults to __38573__\. It specifies
           96  +    the TCP port the server has to listen on for requests\.
           97  +
           98  +# <a name='section2'></a>Bugs, Ideas, Feedback
           99  +
          100  +This document, and the package it describes, will undoubtedly contain bugs and
          101  +other problems\. Please report such in the category *nameserv* of the [Tcllib
          102  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          103  +for enhancements you may have for either package and/or documentation\.
          104  +
          105  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          106  +__diff \-u__\.
          107  +
          108  +Note further that *attachments* are strongly preferred over inlined patches\.
          109  +Attachments can be made by going to the __Edit__ form of the ticket
          110  +immediately after its creation, and then using the left\-most button in the
          111  +secondary navigation bar\.
          112  +
          113  +# <a name='seealso'></a>SEE ALSO
          114  +
          115  +[nameserv::common\(n\)](\.\./modules/nns/nns\_common\.md),
          116  +[nameserv::server\(n\)](\.\./modules/nns/nns\_server\.md)
          117  +
          118  +# <a name='keywords'></a>KEYWORDS
          119  +
          120  +[application](\.\./\.\./\.\./index\.md\#application), [name
          121  +service](\.\./\.\./\.\./index\.md\#name\_service),
          122  +[server](\.\./\.\./\.\./index\.md\#server)
          123  +
          124  +# <a name='category'></a>CATEGORY
          125  +
          126  +Networking
          127  +
          128  +# <a name='copyright'></a>COPYRIGHT
          129  +
          130  +Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/apps/nnslog.md.

            1  +
            2  +[//000000001]: # (nnslog \- Name service facility)
            3  +[//000000002]: # (Generated from file 'nnslog\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (nnslog\(n\) 1\.0 tcllib "Name service facility")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +nnslog \- Name service facility, Commandline Logging Client Application
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +      - [USE CASES](#subsection1)
           27  +
           28  +      - [COMMAND LINE](#subsection2)
           29  +
           30  +      - [OPTIONS](#subsection3)
           31  +
           32  +  - [Bugs, Ideas, Feedback](#section2)
           33  +
           34  +  - [See Also](#seealso)
           35  +
           36  +  - [Keywords](#keywords)
           37  +
           38  +  - [Category](#category)
           39  +
           40  +  - [Copyright](#copyright)
           41  +
           42  +# <a name='synopsis'></a>SYNOPSIS
           43  +
           44  +[__nnslog__ ?__\-host__ *host*? ?__\-port__ *port*?](#1)  
           45  +
           46  +# <a name='description'></a>DESCRIPTION
           47  +
           48  +Please read *[Name service facility,
           49  +introduction](\.\./modules/nns/nns\_intro\.md)* first\.
           50  +
           51  +The application described by this document, __nnslog__, is a simple command
           52  +line client for the nano name service facility provided by the Tcllib packages
           53  +__[nameserv](\.\./modules/nns/nns\_client\.md)__, and
           54  +__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\.
           55  +
           56  +It essentially implements "__[nns](nns\.md)__ search \-continuous \*", but
           57  +uses a different output formatting\. Instead of continuously showing the current
           58  +contents of the server in the terminal it simply logs all received add/remove
           59  +events to __stdout__\.
           60  +
           61  +This name service facility has nothing to do with the Internet's *Domain Name
           62  +System*, otherwise known as *[DNS](\.\./\.\./\.\./index\.md\#dns)*\. If the reader
           63  +is looking for a package dealing with that please see either of the packages
           64  +__[dns](\.\./modules/dns/tcllib\_dns\.md)__ and __resolv__, both found
           65  +in Tcllib too\.
           66  +
           67  +## <a name='subsection1'></a>USE CASES
           68  +
           69  +__nnslog__ was written with the following main use case in mind\.
           70  +
           71  +  1. Monitoring the name service for all changes and logging them in a text
           72  +     terminal\.
           73  +
           74  +## <a name='subsection2'></a>COMMAND LINE
           75  +
           76  +  - <a name='1'></a>__nnslog__ ?__\-host__ *host*? ?__\-port__ *port*?
           77  +
           78  +    The command connects to the specified name service, sets up a search for all
           79  +    changes and then prints all received events to stdout, with each events on
           80  +    its own line\. The command will not exit until it is explicitly terminated by
           81  +    the user\. It will especially survive the loss of the connection to the name
           82  +    service and reestablish the search and log when the connection is restored\.
           83  +
           84  +    The options to specify the name service will be explained later, in section
           85  +    [OPTIONS](#subsection3)\.
           86  +
           87  +## <a name='subsection3'></a>OPTIONS
           88  +
           89  +This section describes all the options available to the user of the application
           90  +
           91  +  - __\-host__ name&#124;ipaddress
           92  +
           93  +    If this option is not specified it defaults to __localhost__\. It
           94  +    specifies the name or ip\-address of the host the name service to talk to is
           95  +    running on\.
           96  +
           97  +  - __\-port__ number
           98  +
           99  +    If this option is not specified it defaults to __38573__\. It specifies
          100  +    the TCP port the name service to talk to is listening on for requests\.
          101  +
          102  +# <a name='section2'></a>Bugs, Ideas, Feedback
          103  +
          104  +This document, and the package it describes, will undoubtedly contain bugs and
          105  +other problems\. Please report such in the category *nameserv* of the [Tcllib
          106  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          107  +for enhancements you may have for either package and/or documentation\.
          108  +
          109  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          110  +__diff \-u__\.
          111  +
          112  +Note further that *attachments* are strongly preferred over inlined patches\.
          113  +Attachments can be made by going to the __Edit__ form of the ticket
          114  +immediately after its creation, and then using the left\-most button in the
          115  +secondary navigation bar\.
          116  +
          117  +# <a name='seealso'></a>SEE ALSO
          118  +
          119  +[nameserv\(n\)](\.\./modules/nns/nns\_client\.md),
          120  +[nameserv::common\(n\)](\.\./modules/nns/nns\_common\.md)
          121  +
          122  +# <a name='keywords'></a>KEYWORDS
          123  +
          124  +[application](\.\./\.\./\.\./index\.md\#application),
          125  +[client](\.\./\.\./\.\./index\.md\#client), [name
          126  +service](\.\./\.\./\.\./index\.md\#name\_service)
          127  +
          128  +# <a name='category'></a>CATEGORY
          129  +
          130  +Networking
          131  +
          132  +# <a name='copyright'></a>COPYRIGHT
          133  +
          134  +Copyright &copy; 2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/apps/page.md.

            1  +
            2  +[//000000001]: # (page \- Development Tools)
            3  +[//000000002]: # (Generated from file 'page\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (page\(n\) 1\.0 tcllib "Development Tools")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +page \- Parser Generator
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +      - [COMMAND LINE](#subsection1)
           27  +
           28  +      - [OPERATION](#subsection2)
           29  +
           30  +      - [OPTIONS](#subsection3)
           31  +
           32  +      - [PLUGINS](#subsection4)
           33  +
           34  +      - [PLUGIN LOCATIONS](#subsection5)
           35  +
           36  +  - [Bugs, Ideas, Feedback](#section2)
           37  +
           38  +  - [See Also](#seealso)
           39  +
           40  +  - [Keywords](#keywords)
           41  +
           42  +  - [Category](#category)
           43  +
           44  +  - [Copyright](#copyright)
           45  +
           46  +# <a name='synopsis'></a>SYNOPSIS
           47  +
           48  +[__page__ ?*options*\.\.\.? ?*input* ?*output*??](#1)  
           49  +
           50  +# <a name='description'></a>DESCRIPTION
           51  +
           52  +The application described by this document, __page__, is actually not just a
           53  +parser generator, as the name implies, but a generic tool for the execution of
           54  +arbitrary transformations on texts\.
           55  +
           56  +Its genericity comes through the use of *plugins* for reading, transforming,
           57  +and writing data, and the predefined set of plugins provided by Tcllib is for
           58  +the generation of memoizing recursive descent parsers \(aka *packrat parsers*\)
           59  +from grammar specifications \(*Parsing Expression Grammars*\)\.
           60  +
           61  +__page__ is written on top of the package __page::pluginmgr__, wrapping
           62  +its functionality into a command line based application\. All the other
           63  +__page::\*__ packages are plugin and/or supporting packages for the
           64  +generation of parsers\. The parsers themselves are based on the packages
           65  +__[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__,
           66  +__[grammar::peg::interp](\.\./modules/grammar\_peg/peg\_interp\.md)__, and
           67  +__grammar::mengine__\.
           68  +
           69  +## <a name='subsection1'></a>COMMAND LINE
           70  +
           71  +  - <a name='1'></a>__page__ ?*options*\.\.\.? ?*input* ?*output*??
           72  +
           73  +    This is general form for calling __page__\. The application will read the
           74  +    contents of the file *input*, process them under the control of the
           75  +    specified *options*, and then write the result to the file *output*\.
           76  +
           77  +    If *input* is the string __\-__ the data to process will be read from
           78  +    __stdin__ instead of a file\. Analogously the result will be written to
           79  +    __stdout__ instead of a file if *output* is the string __\-__\. A
           80  +    missing output or input specification causes the application to assume
           81  +    __\-__\.
           82  +
           83  +    The detailed specifications of the recognized *options* are provided in
           84  +    section [OPTIONS](#subsection3)\.
           85  +
           86  +      * path *input* \(in\)
           87  +
           88  +        This argument specifies the path to the file to be processed by the
           89  +        application, or __\-__\. The last value causes the application to read
           90  +        the text from __stdin__\. Otherwise it has to exist, and be readable\.
           91  +        If the argument is missing __\-__ is assumed\.
           92  +
           93  +      * path *output* \(in\)
           94  +
           95  +        This argument specifies where to write the generated text\. It can be the
           96  +        path to a file, or __\-__\. The last value causes the application to
           97  +        write the generated documented to __stdout__\.
           98  +
           99  +        If the file *output* does not exist then \[file dirname $output\] has to
          100  +        exist and must be a writable directory, as the application will create
          101  +        the fileto write to\.
          102  +
          103  +        If the argument is missing __\-__ is assumed\.
          104  +
          105  +## <a name='subsection2'></a>OPERATION
          106  +
          107  +\.\.\. reading \.\.\. transforming \.\.\. writing \- plugins \- pipeline \.\.\.
          108  +
          109  +## <a name='subsection3'></a>OPTIONS
          110  +
          111  +This section describes all the options available to the user of the application\.
          112  +Options are always processed in order\. I\.e\. of both __\-\-help__ and
          113  +__\-\-version__ are specified the option encountered first has precedence\.
          114  +
          115  +Unknown options specified before any of the options __\-rd__, __\-wr__, or
          116  +__\-tr__ will cause processing to abort with an error\. Unknown options coming
          117  +in between these options, or after the last of them are assumed to always take a
          118  +single argument and are associated with the last plugin option coming before
          119  +them\. They will be checked after all the relevant plugins, and thus the options
          120  +they understand, are known\. I\.e\. such unknown options cause error if and only if
          121  +the plugin option they are associated with does not understand them, and was not
          122  +superceded by a plugin option coming after\.
          123  +
          124  +Default options are used if and only if the command line did not contain any
          125  +options at all\. They will set the application up as a PEG\-based parser
          126  +generator\. The exact list of options is
          127  +
          128  +    -c peg
          129  +
          130  +And now the recognized options and their arguments, if they have any:
          131  +
          132  +  - __\-\-help__
          133  +
          134  +  - __\-h__
          135  +
          136  +  - __\-?__
          137  +
          138  +    When one of these options is found on the command line all arguments coming
          139  +    before or after are ignored\. The application will print a short description
          140  +    of the recognized options and exit\.
          141  +
          142  +  - __\-\-version__
          143  +
          144  +  - __\-V__
          145  +
          146  +    When one of these options is found on the command line all arguments coming
          147  +    before or after are ignored\. The application will print its own revision and
          148  +    exit\.
          149  +
          150  +  - __\-P__
          151  +
          152  +    This option signals the application to activate visual feedback while
          153  +    reading the input\.
          154  +
          155  +  - __\-T__
          156  +
          157  +    This option signals the application to collect statistics while reading the
          158  +    input and to print them after reading has completed, before processing
          159  +    started\.
          160  +
          161  +  - __\-D__
          162  +
          163  +    This option signals the application to activate logging in the Safe base,
          164  +    for the debugging of problems with plugins\.
          165  +
          166  +  - __\-r__ parser
          167  +
          168  +  - __\-rd__ parser
          169  +
          170  +  - __\-\-reader__ parser
          171  +
          172  +    These options specify the plugin the application has to use for reading the
          173  +    *input*\. If the options are used multiple times the last one will be used\.
          174  +
          175  +  - __\-w__ generator
          176  +
          177  +  - __\-wr__ generator
          178  +
          179  +  - __\-\-writer__ generator
          180  +
          181  +    These options specify the plugin the application has to use for generating
          182  +    and writing the final *output*\. If the options are used multiple times the
          183  +    last one will be used\.
          184  +
          185  +  - __\-t__ process
          186  +
          187  +  - __\-tr__ process
          188  +
          189  +  - __\-\-transform__ process
          190  +
          191  +    These options specify a plugin to run on the input\. In contrast to readers
          192  +    and writers each use will *not* supersede previous uses, but add each
          193  +    chosen plugin to a list of transformations, either at the front, or the end,
          194  +    per the last seen use of either option __\-p__ or __\-a__\. The initial
          195  +    default is to append the new transformations\.
          196  +
          197  +  - __\-a__
          198  +
          199  +  - __\-\-append__
          200  +
          201  +    These options signal the application that all following transformations
          202  +    should be added at the end of the list of transformations\.
          203  +
          204  +  - __\-p__
          205  +
          206  +  - __\-\-prepend__
          207  +
          208  +    These options signal the application that all following transformations
          209  +    should be added at the beginning of the list of transformations\.
          210  +
          211  +  - __\-\-reset__
          212  +
          213  +    This option signals the application to clear the list of transformations\.
          214  +    This is necessary to wipe out the default transformations used\.
          215  +
          216  +  - __\-c__ file
          217  +
          218  +  - __\-\-configuration__ file
          219  +
          220  +    This option causes the application to load a configuration file and/or
          221  +    plugin\. This is a plugin which in essence provides a pre\-defined set of
          222  +    commandline options\. They are processed exactly as if they have been
          223  +    specified in place of the option and its arguments\. This means that unknown
          224  +    options found at the beginning of the configuration file are associated with
          225  +    the last plugin, even if that plugin was specified before the configuration
          226  +    file itself\. Conversely, unknown options coming after the configuration file
          227  +    can be associated with a plugin specified in the file\.
          228  +
          229  +    If the argument is a file which cannot be loaded as a plugin the application
          230  +    will assume that its contents are a list of options and their arguments,
          231  +    separated by space, tabs, and newlines\. Options and argumentes containing
          232  +    spaces can be quoted via double\-quotes \("\) and quotes \('\)\. The quote
          233  +    character can be specified within in a quoted string by doubling it\.
          234  +    Newlines in a quoted string are accepted as is\.
          235  +
          236  +## <a name='subsection4'></a>PLUGINS
          237  +
          238  +__page__ makes use of four different types of plugins, namely: readers,
          239  +writers, transformations, and configurations\. Here we provide only a basic
          240  +introduction on how to use them from __page__\. The exact APIs provided to
          241  +and expected from the plugins can be found in the documentation for
          242  +__page::pluginmgr__, for those who wish to write their own plugins\.
          243  +
          244  +Plugins are specified as arguments to the options __\-r__, __\-w__,
          245  +__\-t__, __\-c__, and their equivalent longer forms\. See the section
          246  +[OPTIONS](#subsection3) for reference\.
          247  +
          248  +Each such argument will be first treated as the name of a file and this file is
          249  +loaded as the plugin\. If however there is no file with that name, then it will
          250  +be translated into the name of a package, and this package is then loaded\. For
          251  +each type of plugins the package management searches not only the regular paths,
          252  +but a set application\- and type\-specific paths as well\. Please see the section
          253  +[PLUGIN LOCATIONS](#subsection5) for a listing of all paths and their
          254  +sources\.
          255  +
          256  +  - __\-c__ *name*
          257  +
          258  +    Configurations\. The name of the package for the plugin *name* is
          259  +    "page::config::*name*"\.
          260  +
          261  +    We have one predefined plugin:
          262  +
          263  +      * *peg*
          264  +
          265  +        It sets the application up as a parser generator accepting parsing
          266  +        expression grammars and writing a packrat parser in Tcl\. The actual
          267  +        arguments it specifies are:
          268  +
          269  +    --reset
          270  +    --append
          271  +    --reader    peg
          272  +    --transform reach
          273  +    --transform use
          274  +    --writer    me
          275  +
          276  +  - __\-r__ *name*
          277  +
          278  +    Readers\. The name of the package for the plugin *name* is
          279  +    "page::reader::*name*"\.
          280  +
          281  +    We have five predefined plugins:
          282  +
          283  +      * *peg*
          284  +
          285  +        Interprets the input as a parsing expression grammar
          286  +        \(*[PEG](\.\./\.\./\.\./index\.md\#peg)*\) and generates a tree
          287  +        representation for it\. Both the syntax of PEGs and the structure of the
          288  +        tree representation are explained in their own manpages\.
          289  +
          290  +      * *hb*
          291  +
          292  +        Interprets the input as Tcl code as generated by the writer plugin
          293  +        *hb* and generates its tree representation\.
          294  +
          295  +      * *ser*
          296  +
          297  +        Interprets the input as the serialization of a PEG, as generated by the
          298  +        writer plugin *ser*, using the package
          299  +        __[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__\.
          300  +
          301  +      * *lemon*
          302  +
          303  +        Interprets the input as a grammar specification as understood by Richard
          304  +        Hipp's *[LEMON](\.\./\.\./\.\./index\.md\#lemon)* parser generator and
          305  +        generates a tree representation for it\. Both the input syntax and the
          306  +        structure of the tree representation are explained in their own
          307  +        manpages\.
          308  +
          309  +      * *treeser*
          310  +
          311  +        Interprets the input as the serialization of a
          312  +        __[struct::tree](\.\./modules/struct/struct\_tree\.md)__\. It is
          313  +        validated as such, but nothing else\. It is *not* assumed to be the
          314  +        tree representation of a grammar\.
          315  +
          316  +  - __\-w__ *name*
          317  +
          318  +    Writers\. The name of the package for the plugin *name* is
          319  +    "page::writer::*name*"\.
          320  +
          321  +    We have eight predefined plugins:
          322  +
          323  +      * *identity*
          324  +
          325  +        Simply writes the incoming data as it is, without making any changes\.
          326  +        This is good for inspecting the raw result of a reader or
          327  +        transformation\.
          328  +
          329  +      * *null*
          330  +
          331  +        Generates nothing, and ignores the incoming data structure\.
          332  +
          333  +      * *tree*
          334  +
          335  +        Assumes that the incoming data structure is a
          336  +        __[struct::tree](\.\./modules/struct/struct\_tree\.md)__ and
          337  +        generates an indented textual representation of all nodes, their
          338  +        parental relationships, and their attribute information\.
          339  +
          340  +      * *peg*
          341  +
          342  +        Assumes that the incoming data structure is a tree representation of a
          343  +        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar and writes
          344  +        it out as a PEG\. The result is nicely formatted and partially simplified
          345  +        \(strings as sequences of characters\)\. A pretty printer in essence, but
          346  +        can also be used to obtain a canonical representation of the input
          347  +        grammar\.
          348  +
          349  +      * *tpc*
          350  +
          351  +        Assumes that the incoming data structure is a tree representation of a
          352  +        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar and writes
          353  +        out Tcl code defining a package which defines a
          354  +        __[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__ object
          355  +        containing the grammar when it is loaded into an interpreter\.
          356  +
          357  +      * *hb*
          358  +
          359  +        This is like the writer plugin *tpc*, but it writes only the
          360  +        statements which define stat expression and grammar rules\. The code
          361  +        making the result a package is left out\.
          362  +
          363  +      * *ser*
          364  +
          365  +        Assumes that the incoming data structure is a tree representation of a
          366  +        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar, transforms
          367  +        it internally into a
          368  +        __[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__ object and
          369  +        writes out its serialization\.
          370  +
          371  +      * *me*
          372  +
          373  +        Assumes that the incoming data structure is a tree representation of a
          374  +        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar and writes
          375  +        out Tcl code defining a package which implements a memoizing recursive
          376  +        descent parser based on the match engine \(ME\) provided by the package
          377  +        __grammar::mengine__\.
          378  +
          379  +  - __\-t__ *name*
          380  +
          381  +    Transformers\. The name of the package for the plugin *name* is
          382  +    "page::transform::*name*"\.
          383  +
          384  +    We have two predefined plugins:
          385  +
          386  +      * *reach*
          387  +
          388  +        Assumes that the incoming data structure is a tree representation of a
          389  +        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar\. It
          390  +        determines which nonterminal symbols and rules are reachable from
          391  +        start\-symbol/expression\. All nonterminal symbols which were not reached
          392  +        are removed\.
          393  +
          394  +      * *use*
          395  +
          396  +        Assumes that the incoming data structure is a tree representation of a
          397  +        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar\. It
          398  +        determines which nonterminal symbols and rules are able to generate a
          399  +        *finite* sequences of terminal symbols \(in the sense for a Context
          400  +        Free Grammar\)\. All nonterminal symbols which were not deemed useful in
          401  +        this sense are removed\.
          402  +
          403  +## <a name='subsection5'></a>PLUGIN LOCATIONS
          404  +
          405  +The application\-specific paths searched by __page__ either are, or come
          406  +from:
          407  +
          408  +  1. The directory "~/\.page/plugin"
          409  +
          410  +  1. The environment variable *PAGE\_PLUGINS*
          411  +
          412  +  1. The registry entry *HKEY\_LOCAL\_MACHINE\\SOFTWARE\\PAGE\\PLUGINS*
          413  +
          414  +  1. The registry entry *HKEY\_CURRENT\_USER\\SOFTWARE\\PAGE\\PLUGINS*
          415  +
          416  +The type\-specific paths searched by __page__ either are, or come from:
          417  +
          418  +  1. The directory "~/\.page/plugin/<TYPE>"
          419  +
          420  +  1. The environment variable *PAGE\_<TYPE>\_PLUGINS*
          421  +
          422  +  1. The registry entry *HKEY\_LOCAL\_MACHINE\\SOFTWARE\\PAGE\\<TYPE>\\PLUGINS*
          423  +
          424  +  1. The registry entry *HKEY\_CURRENT\_USER\\SOFTWARE\\PAGE\\<TYPE>\\PLUGINS*
          425  +
          426  +Where the placeholder *<TYPE>* is always one of the values below, properly
          427  +capitalized\.
          428  +
          429  +  1. reader
          430  +
          431  +  1. writer
          432  +
          433  +  1. transform
          434  +
          435  +  1. config
          436  +
          437  +The registry entries are specific to the Windows\(tm\) platform, all other
          438  +platforms will ignore them\.
          439  +
          440  +The contents of both environment variables and registry entries are interpreted
          441  +as a list of paths, with the elements separated by either colon \(Unix\), or
          442  +semicolon \(Windows\)\.
          443  +
          444  +# <a name='section2'></a>Bugs, Ideas, Feedback
          445  +
          446  +This document, and the package it describes, will undoubtedly contain bugs and
          447  +other problems\. Please report such in the category *page* of the [Tcllib
          448  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          449  +for enhancements you may have for either package and/or documentation\.
          450  +
          451  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          452  +__diff \-u__\.
          453  +
          454  +Note further that *attachments* are strongly preferred over inlined patches\.
          455  +Attachments can be made by going to the __Edit__ form of the ticket
          456  +immediately after its creation, and then using the left\-most button in the
          457  +secondary navigation bar\.
          458  +
          459  +# <a name='seealso'></a>SEE ALSO
          460  +
          461  +page::pluginmgr
          462  +
          463  +# <a name='keywords'></a>KEYWORDS
          464  +
          465  +[parser generator](\.\./\.\./\.\./index\.md\#parser\_generator), [text
          466  +processing](\.\./\.\./\.\./index\.md\#text\_processing)
          467  +
          468  +# <a name='category'></a>CATEGORY
          469  +
          470  +Page Parser Generator
          471  +
          472  +# <a name='copyright'></a>COPYRIGHT
          473  +
          474  +Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/apps/pt.md.

            1  +
            2  +[//000000001]: # (pt \- Parser Tools)
            3  +[//000000002]: # (Generated from file 'pt\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2009 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (pt\(n\) 1 tcllib "Parser Tools")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +pt \- Parser Tools Application
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [Command Line](#section2)
           27  +
           28  +  - [PEG Specification Language](#section3)
           29  +
           30  +  - [JSON Grammar Exchange](#section4)
           31  +
           32  +  - [C Parser Embedded In Tcl](#section5)
           33  +
           34  +  - [C Parser](#section6)
           35  +
           36  +  - [Snit Parser](#section7)
           37  +
           38  +  - [TclOO Parser](#section8)
           39  +
           40  +  - [Grammar Container](#section9)
           41  +
           42  +  - [Example](#section10)
           43  +
           44  +  - [Internals](#section11)
           45  +
           46  +  - [Bugs, Ideas, Feedback](#section12)
           47  +
           48  +  - [Keywords](#keywords)
           49  +
           50  +  - [Category](#category)
           51  +
           52  +  - [Copyright](#copyright)
           53  +
           54  +# <a name='synopsis'></a>SYNOPSIS
           55  +
           56  +package require Tcl 8\.5  
           57  +
           58  +[__pt__ __generate__ *resultformat* ?*options\.\.\.*? *resultfile* *inputformat* *inputfile*](#1)  
           59  +
           60  +# <a name='description'></a>DESCRIPTION
           61  +
           62  +Are you lost ? Do you have trouble understanding this document ? In that case
           63  +please read the overview provided by the *[Introduction to Parser
           64  +Tools](\.\./modules/pt/pt\_introduction\.md)*\. This document is the entrypoint
           65  +to the whole system the current package is a part of\.
           66  +
           67  +This document describes __pt__, the main application of the module, a
           68  +*[parser generator](\.\./\.\./\.\./index\.md\#parser\_generator)*\. Its intended
           69  +audience are people who wish to create a parser for some language of theirs\.
           70  +Should you wish to modify the application instead, please see the section about
           71  +the application's [Internals](#section11) for the basic references\.
           72  +
           73  +It resides in the User Application Layer of Parser Tools\.
           74  +
           75  +![](\.\./\.\./\.\./image/arch\_user\_app\.png)
           76  +
           77  +# <a name='section2'></a>Command Line
           78  +
           79  +  - <a name='1'></a>__pt__ __generate__ *resultformat* ?*options\.\.\.*? *resultfile* *inputformat* *inputfile*
           80  +
           81  +    This sub\-command of the application reads the parsing expression grammar
           82  +    stored in the *inputfile* in the format *inputformat*, converts it to
           83  +    the *resultformat* under the direction of the \(format\-specific\) set of
           84  +    options specified by the user and stores the result in the *resultfile*\.
           85  +
           86  +    The *inputfile* has to exist, while the *resultfile* may be created,
           87  +    overwriting any pre\-existing content of the file\. Any missing directory in
           88  +    the path to the *resultfile* will be created as well\.
           89  +
           90  +    The exact form of the result for, and the set of options supported by the
           91  +    known result\-formats, are explained in the upcoming sections of this
           92  +    document, with the list below providing an index mapping between format name
           93  +    and its associated section\. In alphabetical order:
           94  +
           95  +      * __c__
           96  +
           97  +        A *resultformat*\. See section [C Parser](#section6)\.
           98  +
           99  +      * __container__
          100  +
          101  +        A *resultformat*\. See section [Grammar Container](#section9)\.
          102  +
          103  +      * __critcl__
          104  +
          105  +        A *resultformat*\. See section [C Parser Embedded In
          106  +        Tcl](#section5)\.
          107  +
          108  +      * __json__
          109  +
          110  +        A *input*\- and *resultformat*\. See section [JSON Grammar
          111  +        Exchange](#section4)\.
          112  +
          113  +      * __oo__
          114  +
          115  +        A *resultformat*\. See section [TclOO Parser](#section8)\.
          116  +
          117  +      * __peg__
          118  +
          119  +        A *input*\- and *resultformat*\. See section [PEG Specification
          120  +        Language](#section3)\.
          121  +
          122  +      * __snit__
          123  +
          124  +        A *resultformat*\. See section [Snit Parser](#section7)\.
          125  +
          126  +Of the seven possible results four are parsers outright \(__c__,
          127  +__critcl__, __oo__, and __snit__\), one \(__container__\) provides
          128  +code which can be used in conjunction with a generic parser \(also known as a
          129  +grammar interpreter\), and the last two \(__json__ and __peg__\) are doing
          130  +double\-duty as input formats, allowing the transformation of grammars for
          131  +exchange, reformatting, and the like\.
          132  +
          133  +The created parsers fall into three categories:
          134  +
          135  +![](\.\./\.\./\.\./image/gen\_options\.png)
          136  +
          137  +  - __Specialized parsers implemented in C__
          138  +
          139  +    The fastest parsers are created when using the result formats __c__ and
          140  +    __critcl__\. The first returns the raw C code for the parser, while the
          141  +    latter wraps it into a Tcl package using *CriTcl*\.
          142  +
          143  +    This makes the latter much easier to use than the former\. On the other hand,
          144  +    the former can be adapted to the users' requirements through a multitude of
          145  +    options, allowing for things like usage of the parser outside of a Tcl
          146  +    environment, something the __critcl__ format doesn't support\. As such
          147  +    the __c__ format is meant for more advanced users, or users with special
          148  +    needs\.
          149  +
          150  +    A disadvantage of all the parsers in this section is the need to run them
          151  +    through a C compiler to make them actually executable\. This is not something
          152  +    everyone has the necessary tools for\. The parsers in the next section are
          153  +    for people under such restrictions\.
          154  +
          155  +  - __Specialized parsers implemented in Tcl__
          156  +
          157  +    As the parsers in this section are implemented in Tcl they are quite a bit
          158  +    slower than anything from the previous section\. On the other hand this
          159  +    allows them to be used in pure\-Tcl environments, or in environments which
          160  +    allow only a limited set of binary packages\. In the latter case it will be
          161  +    advantageous to lobby for the inclusion of the C\-based runtime support
          162  +    \(notes below\) into the environment to reduce the impact of Tcl's on the
          163  +    speed of these parsers\.
          164  +
          165  +    The relevant formats are __snit__ and __oo__\. Both place their
          166  +    result into a Tcl package containing a __snit::type__, or TclOO
          167  +    __[class](\.\./\.\./\.\./index\.md\#class)__ respectively\.
          168  +
          169  +    Of the supporting runtime, which is the package
          170  +    __[pt::rde](\.\./modules/pt/pt\_rdengine\.md)__, the user has to know
          171  +    nothing but that it does exist and that the parsers are dependent on it\.
          172  +    Knowledge of the API exported by the runtime for the parsers' consumption is
          173  +    *not* required by the parsers' users\.
          174  +
          175  +  - __Interpreted parsing implemented in Tcl__
          176  +
          177  +    The last category, grammar interpretation\. This means that an interpreter
          178  +    for parsing expression grammars takes the description of the grammar to
          179  +    parse input for, and uses it guide the parsing process\. This is the slowest
          180  +    of the available options, as the interpreter has to continually run through
          181  +    the configured grammar, whereas the specialized parsers of the previous
          182  +    sections have the relevant knowledge about the grammar baked into them\.
          183  +
          184  +    The only places where using interpretation make sense is where the grammar
          185  +    for some input may be changed interactively by the user, as the
          186  +    interpretation allows for quick turnaround after each change, whereas the
          187  +    previous methods require the generation of a whole new parser, which is not
          188  +    as fast\. On the other hand, wherever the grammar to use is fixed, the
          189  +    previous methods are much more advantageous as the time to generate the
          190  +    parser is minuscule compared to the time the parser code is in use\.
          191  +
          192  +    The relevant result format is __container__\. It \(quickly\) generates
          193  +    grammar descriptions \(instead of a full parser\) which match the API expected
          194  +    by ParserTools' grammar interpreter\. The latter is provided by the package
          195  +    __[pt::peg::interp](\.\./modules/pt/pt\_peg\_interp\.md)__\.
          196  +
          197  +All the parsers generated by __critcl__, __snit__, and __oo__, and
          198  +the grammar interpreter share a common API for access to the actual parsing
          199  +functionality, making them all plug\-compatible\. It is described in the
          200  +*[Parser API](\.\./modules/pt/pt\_parser\_api\.md)* specification document\.
          201  +
          202  +# <a name='section3'></a>PEG Specification Language
          203  +
          204  +__peg__, a language for the specification of parsing expression grammars is
          205  +meant to be human readable, and writable as well, yet strict enough to allow its
          206  +processing by machine\. Like any computer language\. It was defined to make
          207  +writing the specification of a grammar easy, something the other formats found
          208  +in the Parser Tools do not lend themselves too\.
          209  +
          210  +For either an introduction to or the formal specification of the language,
          211  +please go and read the *[PEG Language
          212  +Tutorial](\.\./modules/pt/pt\_peg\_language\.md)*\.
          213  +
          214  +When used as a result\-format this format supports the following options:
          215  +
          216  +  - __\-file__ string
          217  +
          218  +    The value of this option is the name of the file or other entity from which
          219  +    the grammar came, for which the command is run\. The default value is
          220  +    __unknown__\.
          221  +
          222  +  - __\-name__ string
          223  +
          224  +    The value of this option is the name of the grammar we are processing\. The
          225  +    default value is __a\_pe\_grammar__\.
          226  +
          227  +  - __\-user__ string
          228  +
          229  +    The value of this option is the name of the user for which the command is
          230  +    run\. The default value is __unknown__\.
          231  +
          232  +  - __\-template__ string
          233  +
          234  +    The value of this option is a string into which to put the generated text
          235  +    and the values of the other options\. The various locations for user\-data are
          236  +    expected to be specified with the placeholders listed below\. The default
          237  +    value is "[email protected]@__"\.
          238  +
          239  +      * [email protected]@__
          240  +
          241  +        To be replaced with the value of the option __\-user__\.
          242  +
          243  +      * [email protected]@__
          244  +
          245  +        To be replaced with the the constant __PEG__\.
          246  +
          247  +      * [email protected]@__
          248  +
          249  +        To be replaced with the value of the option __\-file__\.
          250  +
          251  +      * [email protected]@__
          252  +
          253  +        To be replaced with the value of the option __\-name__\.
          254  +
          255  +      * [email protected]@__
          256  +
          257  +        To be replaced with the generated text\.
          258  +
          259  +# <a name='section4'></a>JSON Grammar Exchange
          260  +
          261  +The __json__ format for parsing expression grammars was written as a data
          262  +exchange format not bound to Tcl\. It was defined to allow the exchange of
          263  +grammars with PackRat/PEG based parser generators for other languages\.
          264  +
          265  +For the formal specification of the JSON grammar exchange format, please go and
          266  +read *[The JSON Grammar Exchange
          267  +Format](\.\./modules/pt/pt\_json\_language\.md)*\.
          268  +
          269  +When used as a result\-format this format supports the following options:
          270  +
          271  +  - __\-file__ string
          272  +
          273  +    The value of this option is the name of the file or other entity from which
          274  +    the grammar came, for which the command is run\. The default value is
          275  +    __unknown__\.
          276  +
          277  +  - __\-name__ string
          278  +
          279  +    The value of this option is the name of the grammar we are processing\. The
          280  +    default value is __a\_pe\_grammar__\.
          281  +
          282  +  - __\-user__ string
          283  +
          284  +    The value of this option is the name of the user for which the command is
          285  +    run\. The default value is __unknown__\.
          286  +
          287  +  - __\-indented__ boolean
          288  +
          289  +    If this option is set the system will break the generated JSON across lines
          290  +    and indent it according to its inner structure, with each key of a
          291  +    dictionary on a separate line\.
          292  +
          293  +    If the option is not set \(the default\), the whole JSON object will be
          294  +    written on a single line, with minimum spacing between all elements\.
          295  +
          296  +  - __\-aligned__ boolean
          297  +
          298  +    If this option is set the system will ensure that the values for the keys in
          299  +    a dictionary are vertically aligned with each other, for a nice table
          300  +    effect\. To make this work this also implies that __\-indented__ is set\.
          301  +
          302  +    If the option is not set \(the default\), the output is formatted as per the
          303  +    value of __indented__, without trying to align the values for dictionary
          304  +    keys\.
          305  +
          306  +# <a name='section5'></a>C Parser Embedded In Tcl
          307  +
          308  +The __critcl__ format is executable code, a parser for the grammar\. It is a
          309  +Tcl package with the actual parser implementation written in C and embedded in
          310  +Tcl via the __critcl__ package\.
          311  +
          312  +This result\-format supports the following options:
          313  +
          314  +  - __\-file__ string
          315  +
          316  +    The value of this option is the name of the file or other entity from which
          317  +    the grammar came, for which the command is run\. The default value is
          318  +    __unknown__\.
          319  +
          320  +  - __\-name__ string
          321  +
          322  +    The value of this option is the name of the grammar we are processing\. The
          323  +    default value is __a\_pe\_grammar__\.
          324  +
          325  +  - __\-user__ string
          326  +
          327  +    The value of this option is the name of the user for which the command is
          328  +    run\. The default value is __unknown__\.
          329  +
          330  +  - __\-class__ string
          331  +
          332  +    The value of this option is the name of the class to generate, without
          333  +    leading colons\. The default value is __CLASS__\.
          334  +
          335  +    For a simple value __X__ without colons, like CLASS, the parser command
          336  +    will be __X__::__X__\. Whereas for a namespaced value __X::Y__
          337  +    the parser command will be __X::Y__\.
          338  +
          339  +  - __\-package__ string
          340  +
          341  +    The value of this option is the name of the package to generate\. The default
          342  +    value is __PACKAGE__\.
          343  +
          344  +  - __\-version__ string
          345  +
          346  +    The value of this option is the version of the package to generate\. The
          347  +    default value is __1__\.
          348  +
          349  +# <a name='section6'></a>C Parser
          350  +
          351  +The __c__ format is executable code, a parser for the grammar\. The parser
          352  +implementation is written in C and can be tweaked to the users' needs through a
          353  +multitude of options\.
          354  +
          355  +The __critcl__ format, for example, is implemented as a canned configuration
          356  +of these options on top of the generator for __c__\.
          357  +
          358  +This result\-format supports the following options:
          359  +
          360  +  - __\-file__ string
          361  +
          362  +    The value of this option is the name of the file or other entity from which
          363  +    the grammar came, for which the command is run\. The default value is
          364  +    __unknown__\.
          365  +
          366  +  - __\-name__ string
          367  +
          368  +    The value of this option is the name of the grammar we are processing\. The
          369  +    default value is __a\_pe\_grammar__\.
          370  +
          371  +  - __\-user__ string
          372  +
          373  +    The value of this option is the name of the user for which the command is
          374  +    run\. The default value is __unknown__\.
          375  +
          376  +  - __\-template__ string
          377  +
          378  +    The value of this option is a string into which to put the generated text
          379  +    and the other configuration settings\. The various locations for user\-data
          380  +    are expected to be specified with the placeholders listed below\. The default
          381  +    value is "[email protected]@__"\.
          382  +
          383  +      * [email protected]@__
          384  +
          385  +        To be replaced with the value of the option __\-user__\.
          386  +
          387  +      * [email protected]@__
          388  +
          389  +        To be replaced with the the constant __C/PARAM__\.
          390  +
          391  +      * [email protected]@__
          392  +
          393  +        To be replaced with the value of the option __\-file__\.
          394  +
          395  +      * [email protected]@__
          396  +
          397  +        To be replaced with the value of the option __\-name__\.
          398  +
          399  +      * [email protected]@__
          400  +
          401  +        To be replaced with the generated Tcl code\.
          402  +
          403  +    The following options are special, in that they will occur within the
          404  +    generated code, and are replaced there as well\.
          405  +
          406  +      * [email protected]@__
          407  +
          408  +        To be replaced with the value of the option __state\-decl__\.
          409  +
          410  +      * [email protected]@__
          411  +
          412  +        To be replaced with the value of the option __state\-ref__\.
          413  +
          414  +      * [email protected]@__
          415  +
          416  +        To be replaced with the value of the option __string\-varname__\.
          417  +
          418  +      * [email protected]@__
          419  +
          420  +        To be replaced with the value of the option __self\-command__\.
          421  +
          422  +      * [email protected]@__
          423  +
          424  +        To be replaced with the value of the option __fun\-qualifier__\.
          425  +
          426  +      * [email protected]@__
          427  +
          428  +        To be replaced with the value of the option __namespace__\.
          429  +
          430  +      * [email protected]@__
          431  +
          432  +        To be replaced with the value of the option __main__\.
          433  +
          434  +      * [email protected]@__
          435  +
          436  +        To be replaced with the value of the option __prelude__\.
          437  +
          438  +  - __\-state\-decl__ string
          439  +
          440  +    A C string representing the argument declaration to use in the generated
          441  +    parsing functions to refer to the parsing state\. In essence type and
          442  +    argument name\. The default value is the string __RDE\_PARAM p__\.
          443  +
          444  +  - __\-state\-ref__ string
          445  +
          446  +    A C string representing the argument named used in the generated parsing
          447  +    functions to refer to the parsing state\. The default value is the string
          448  +    __p__\.
          449  +
          450  +  - __\-self\-command__ string
          451  +
          452  +    A C string representing the reference needed to call the generated parser
          453  +    function \(methods \.\.\.\) from another parser fonction, per the chosen
          454  +    framework \(template\)\. The default value is the empty string\.
          455  +
          456  +  - __\-fun\-qualifier__ string
          457  +
          458  +    A C string containing the attributes to give to the generated functions
          459  +    \(methods \.\.\.\), per the chosen framework \(template\)\. The default value is
          460  +    __static__\.
          461  +
          462  +  - __\-namespace__ string
          463  +
          464  +    The name of the C namespace the parser functions \(methods, \.\.\.\) shall reside
          465  +    in, or a general prefix to add to the function names\. The default value is
          466  +    the empty string\.
          467  +
          468  +  - __\-main__ string
          469  +
          470  +    The name of the main function \(method, \.\.\.\) to be called by the chosen
          471  +    framework \(template\) to start parsing input\. The default value is
          472  +    __\_\_main__\.
          473  +
          474  +  - __\-string\-varname__ string
          475  +
          476  +    The name of the variable used for the table of strings used by the generated
          477  +    parser, i\.e\. error messages, symbol names, etc\. The default value is
          478  +    __p\_string__\.
          479  +
          480  +  - __\-prelude__ string
          481  +
          482  +    A snippet of code to be inserted at the head of each generated parsing
          483  +    function\. The default value is the empty string\.
          484  +
          485  +  - __\-indent__ integer
          486  +
          487  +    The number of characters to indent each line of the generated code by\. The
          488  +    default value is __0__\.
          489  +
          490  +  - __\-comments__ boolean
          491  +
          492  +    A flag controlling the generation of code comments containing the original
          493  +    parsing expression a parsing function is for\. The default value is
          494  +    __on__\.
          495  +
          496  +# <a name='section7'></a>Snit Parser
          497  +
          498  +The __snit__ format is executable code, a parser for the grammar\. It is a
          499  +Tcl package holding a __snit::type__, i\.e\. a class, whose instances are
          500  +parsers for the input grammar\.
          501  +
          502  +This result\-format supports the following options:
          503  +
          504  +  - __\-file__ string
          505  +
          506  +    The value of this option is the name of the file or other entity from which
          507  +    the grammar came, for which the command is run\. The default value is
          508  +    __unknown__\.
          509  +
          510  +  - __\-name__ string
          511  +
          512  +    The value of this option is the name of the grammar we are processing\. The
          513  +    default value is __a\_pe\_grammar__\.
          514  +
          515  +  - __\-user__ string
          516  +
          517  +    The value of this option is the name of the user for which the command is
          518  +    run\. The default value is __unknown__\.
          519  +
          520  +  - __\-class__ string
          521  +
          522  +    The value of this option is the name of the class to generate, without
          523  +    leading colons\. Note, it serves double\-duty as the name of the package to
          524  +    generate too, if option __\-package__ is not specified, see below\. The
          525  +    default value is __CLASS__, applying if neither option __\-class__
          526  +    nor __\-package__ were specified\.
          527  +
          528  +  - __\-package__ string
          529  +
          530  +    The value of this option is the name of the package to generate, without
          531  +    leading colons\. Note, it serves double\-duty as the name of the class to
          532  +    generate too, if option __\-class__ is not specified, see above\. The
          533  +    default value is __PACKAGE__, applying if neither option
          534  +    __\-package__ nor __\-class__ were specified\.
          535  +
          536  +  - __\-version__ string
          537  +
          538  +    The value of this option is the version of the package to generate\. The
          539  +    default value is __1__\.
          540  +
          541  +# <a name='section8'></a>TclOO Parser
          542  +
          543  +The __oo__ format is executable code, a parser for the grammar\. It is a Tcl
          544  +package holding a __[TclOO](\.\./\.\./\.\./index\.md\#tcloo)__ class, whose
          545  +instances are parsers for the input grammar\.
          546  +
          547  +This result\-format supports the following options:
          548  +
          549  +  - __\-file__ string
          550  +
          551  +    The value of this option is the name of the file or other entity from which
          552  +    the grammar came, for which the command is run\. The default value is
          553  +    __unknown__\.
          554  +
          555  +  - __\-name__ string
          556  +
          557  +    The value of this option is the name of the grammar we are processing\. The
          558  +    default value is __a\_pe\_grammar__\.
          559  +
          560  +  - __\-user__ string
          561  +
          562  +    The value of this option is the name of the user for which the command is
          563  +    run\. The default value is __unknown__\.
          564  +
          565  +  - __\-class__ string
          566  +
          567  +    The value of this option is the name of the class to generate, without
          568  +    leading colons\. Note, it serves double\-duty as the name of the package to
          569  +    generate too, if option __\-package__ is not specified, see below\. The
          570  +    default value is __CLASS__, applying if neither option __\-class__
          571  +    nor __\-package__ were specified\.
          572  +
          573  +  - __\-package__ string
          574  +
          575  +    The value of this option is the name of the package to generate, without
          576  +    leading colons\. Note, it serves double\-duty as the name of the class to
          577  +    generate too, if option __\-class__ is not specified, see above\. The
          578  +    default value is __PACKAGE__, applying if neither option
          579  +    __\-package__ nor __\-class__ were specified\.
          580  +
          581  +  - __\-version__ string
          582  +
          583  +    The value of this option is the version of the package to generate\. The
          584  +    default value is __1__\.
          585  +
          586  +# <a name='section9'></a>Grammar Container
          587  +
          588  +The __container__ format is another form of describing parsing expression
          589  +grammars\. While data in this format is executable it does not constitute a
          590  +parser for the grammar\. It always has to be used in conjunction with the package
          591  +__[pt::peg::interp](\.\./modules/pt/pt\_peg\_interp\.md)__, a grammar
          592  +interpreter\.
          593  +
          594  +The format represents grammars by a __snit::type__, i\.e\. class, whose
          595  +instances are API\-compatible to the instances of the
          596  +__[pt::peg::container](\.\./modules/pt/pt\_peg\_container\.md)__ package, and
          597  +which are preloaded with the grammar in question\.
          598  +
          599  +This result\-format supports the following options:
          600  +
          601  +  - __\-file__ string
          602  +
          603  +    The value of this option is the name of the file or other entity from which
          604  +    the grammar came, for which the command is run\. The default value is
          605  +    __unknown__\.
          606  +
          607  +  - __\-name__ string
          608  +
          609  +    The value of this option is the name of the grammar we are processing\. The
          610  +    default value is __a\_pe\_grammar__\.
          611  +
          612  +  - __\-user__ string
          613  +
          614  +    The value of this option is the name of the user for which the command is
          615  +    run\. The default value is __unknown__\.
          616  +
          617  +  - __\-mode__ __bulk__&#124;__incremental__
          618  +
          619  +    The value of this option controls which methods of
          620  +    __[pt::peg::container](\.\./modules/pt/pt\_peg\_container\.md)__
          621  +    instances are used to specify the grammar, i\.e\. preload it into the
          622  +    container\. There are two legal values, as listed below\. The default is
          623  +    __bulk__\.
          624  +
          625  +      * __bulk__
          626  +
          627  +        In this mode the methods __start__, __add__, __modes__, and
          628  +        __rules__ are used to specify the grammar in a bulk manner, i\.e\. as
          629  +        a set of nonterminal symbols, and two dictionaries mapping from the
          630  +        symbols to their semantic modes and parsing expressions\.
          631  +
          632  +        This mode is the default\.
          633  +
          634  +      * __incremental__
          635  +
          636  +        In this mode the methods __start__, __add__, __mode__, and
          637  +        __rule__ are used to specify the grammar piecemal, with each
          638  +        nonterminal having its own block of defining commands\.
          639  +
          640  +  - __\-template__ string
          641  +
          642  +    The value of this option is a string into which to put the generated code
          643  +    and the other configuration settings\. The various locations for user\-data
          644  +    are expected to be specified with the placeholders listed below\. The default
          645  +    value is "[email protected]@__"\.
          646  +
          647  +      * [email protected]@__
          648  +
          649  +        To be replaced with the value of the option __\-user__\.
          650  +
          651  +      * [email protected]@__
          652  +
          653  +        To be replaced with the the constant __CONTAINER__\.
          654  +
          655  +      * [email protected]@__
          656  +
          657  +        To be replaced with the value of the option __\-file__\.
          658  +
          659  +      * [email protected]@__
          660  +
          661  +        To be replaced with the value of the option __\-name__\.
          662  +
          663  +      * [email protected]@__
          664  +
          665  +        To be replaced with the value of the option __\-mode__\.
          666  +
          667  +      * [email protected]@__
          668  +
          669  +        To be replaced with the generated code\.
          670  +
          671  +# <a name='section10'></a>Example
          672  +
          673  +In this section we are working a complete example, starting with a PEG grammar
          674  +and ending with running the parser generated from it over some input, following
          675  +the outline shown in the figure below:
          676  +
          677  +![](\.\./\.\./\.\./image/flow\.png) Our grammar, assumed to the stored in the file
          678  +"calculator\.peg" is
          679  +
          680  +    PEG calculator (Expression)
          681  +        Digit      <- '0'/'1'/'2'/'3'/'4'/'5'/'6'/'7'/'8'/'9'       ;
          682  +        Sign       <- '-' / '+'                                     ;
          683  +        Number     <- Sign? Digit+                                  ;
          684  +        Expression <- Term (AddOp Term)*                            ;
          685  +        MulOp      <- '*' / '/'                                     ;
          686  +        Term       <- Factor (MulOp Factor)*                        ;
          687  +        AddOp      <- '+'/'-'                                       ;
          688  +        Factor     <- '(' Expression ')' / Number                   ;
          689  +    END;
          690  +
          691  +From this we create a snit\-based parser via
          692  +
          693  +    pt generate snit calculator.tcl -class calculator -name calculator peg calculator.peg
          694  +
          695  +which leaves us with the parser package and class written to the file
          696  +"calculator\.tcl"\. Assuming that this package is then properly installed in a
          697  +place where Tcl can find it we can now use this class via a script like
          698  +
          699  +    package require calculator
          700  +
          701  +    lassign $argv input
          702  +    set channel [open $input r]
          703  +
          704  +    set parser [calculator]
          705  +    set ast [$parser parse $channel]
          706  +    $parser destroy
          707  +    close $channel
          708  +
          709  +    ... now process the returned abstract syntax tree ...
          710  +
          711  +where the abstract syntax tree stored in the variable will look like
          712  +
          713  +    set ast {Expression 0 4
          714  +        {Factor 0 4
          715  +            {Term 0 2
          716  +                {Number 0 2
          717  +                    {Digit 0 0}
          718  +                    {Digit 1 1}
          719  +                    {Digit 2 2}
          720  +                }
          721  +            }
          722  +            {AddOp 3 3}
          723  +            {Term 4 4
          724  +                {Number 4 4
          725  +                    {Digit 4 4}
          726  +                }
          727  +            }
          728  +        }
          729  +    }
          730  +
          731  +assuming that the input file and channel contained the text
          732  +
          733  +    120+5
          734  +
          735  +A more graphical representation of the tree would be
          736  +
          737  +![](\.\./\.\./\.\./image/expr\_ast\.png) Regardless, at this point it is the user's
          738  +responsibility to work with the tree to reach whatever goal she desires\. I\.e\.
          739  +analyze it, transform it, etc\. The package
          740  +__[pt::ast](\.\./modules/pt/pt\_astree\.md)__ should be of help here,
          741  +providing commands to walk such ASTs structures in various ways\.
          742  +
          743  +One important thing to note is that the parsers used here return a data
          744  +structure representing the structure of the input per the grammar underlying the
          745  +parser\. There are *no* callbacks during the parsing process, i\.e\. no *parsing
          746  +actions*, as most other parsers will have\.
          747  +
          748  +Going back to the last snippet of code, the execution of the parser for some
          749  +input, note how the parser instance follows the specified *[Parser
          750  +API](\.\./modules/pt/pt\_parser\_api\.md)*\.
          751  +
          752  +# <a name='section11'></a>Internals
          753  +
          754  +This section is intended for users of the application which wish to modify or
          755  +extend it\. Users only interested in the generation of parsers can ignore it\.
          756  +
          757  +The main functionality of the application is encapsulated in the package
          758  +__[pt::pgen](\.\./modules/pt/pt\_pgen\.md)__\. Please read it for more
          759  +information\.
          760  +
          761  +# <a name='section12'></a>Bugs, Ideas, Feedback
          762  +
          763  +This document, and the package it describes, will undoubtedly contain bugs and
          764  +other problems\. Please report such in the category *pt* of the [Tcllib
          765  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          766  +for enhancements you may have for either package and/or documentation\.
          767  +
          768  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          769  +__diff \-u__\.
          770  +
          771  +Note further that *attachments* are strongly preferred over inlined patches\.
          772  +Attachments can be made by going to the __Edit__ form of the ticket
          773  +immediately after its creation, and then using the left\-most button in the
          774  +secondary navigation bar\.
          775  +
          776  +# <a name='keywords'></a>KEYWORDS
          777  +
          778  +[EBNF](\.\./\.\./\.\./index\.md\#ebnf), [LL\(k\)](\.\./\.\./\.\./index\.md\#ll\_k\_),
          779  +[PEG](\.\./\.\./\.\./index\.md\#peg), [TDPL](\.\./\.\./\.\./index\.md\#tdpl),
          780  +[context\-free languages](\.\./\.\./\.\./index\.md\#context\_free\_languages),
          781  +[expression](\.\./\.\./\.\./index\.md\#expression),
          782  +[grammar](\.\./\.\./\.\./index\.md\#grammar),
          783  +[matching](\.\./\.\./\.\./index\.md\#matching),
          784  +[parser](\.\./\.\./\.\./index\.md\#parser), [parsing
          785  +expression](\.\./\.\./\.\./index\.md\#parsing\_expression), [parsing expression
          786  +grammar](\.\./\.\./\.\./index\.md\#parsing\_expression\_grammar), [push down
          787  +automaton](\.\./\.\./\.\./index\.md\#push\_down\_automaton), [recursive
          788  +descent](\.\./\.\./\.\./index\.md\#recursive\_descent),
          789  +[state](\.\./\.\./\.\./index\.md\#state), [top\-down parsing
          790  +languages](\.\./\.\./\.\./index\.md\#top\_down\_parsing\_languages),
          791  +[transducer](\.\./\.\./\.\./index\.md\#transducer)
          792  +
          793  +# <a name='category'></a>CATEGORY
          794  +
          795  +Parsing and Grammars
          796  +
          797  +# <a name='copyright'></a>COPYRIGHT
          798  +
          799  +Copyright &copy; 2009 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/apps/tcldocstrip.md.

            1  +
            2  +[//000000001]: # (tcldocstrip \- Textprocessing toolbox)
            3  +[//000000002]: # (Generated from file 'tcldocstrip\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (tcldocstrip\(n\) 1\.0 tcllib "Textprocessing toolbox")
            6  +
            7  +<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +tcldocstrip \- Tcl\-based Docstrip Processor
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +      - [USE CASES](#subsection1)
           27  +
           28  +      - [COMMAND LINE](#subsection2)
           29  +
           30  +      - [OPTIONS](#subsection3)
           31  +
           32  +  - [Bugs, Ideas, Feedback](#section2)
           33  +
           34  +  - [See Also](#seealso)
           35  +
           36  +  - [Keywords](#keywords)
           37  +
           38  +  - [Category](#category)
           39  +
           40  +  - [Copyright](#copyright)
           41  +
           42  +# <a name='synopsis'></a>SYNOPSIS
           43  +
           44  +[__tcldocstrip__ *output* ?options? *input* ?*guards*?](#1)  
           45  +[__tcldocstrip__ ?options? *output* \(?options? *input* *guards*\)\.\.\.](#2)  
           46  +[__tcldocstrip__ __\-guards__ *input*](#3)  
           47  +
           48  +# <a name='description'></a>DESCRIPTION
           49  +
           50  +The application described by this document, __tcldocstrip__, is a relative
           51  +of __[docstrip](\.\./modules/docstrip/docstrip\.md)__, a simple literate
           52  +programming tool for LaTeX\.
           53  +
           54  +__tcldocstrip__ is based upon the package
           55  +__[docstrip](\.\./modules/docstrip/docstrip\.md)__\.
           56  +
           57  +## <a name='subsection1'></a>USE CASES
           58  +
           59  +__tcldocstrip__ was written with the following three use cases in mind\.
           60  +
           61  +  1. Conversion of a single input file according to the listed guards into the
           62  +     stripped output\. This handles the most simple case of a set of guards
           63  +     specifying a single document found in a single input file\.
           64  +
           65  +  1. Stitching, or the assembly of an output from several sets of guards, in a
           66  +     specific order, and possibly from different files\. This is the second
           67  +     common case\. One document spread over several inputs, and/or spread over
           68  +     different guard sets\.
           69  +
           70  +  1. Extraction and listing of all the unique guard expressions and guards used
           71  +     within a document to help a person which did not author the document in
           72  +     question in familiarizing itself with it\.
           73  +
           74  +## <a name='subsection2'></a>COMMAND LINE
           75  +
           76  +  - <a name='1'></a>__tcldocstrip__ *output* ?options? *input* ?*guards*?
           77  +
           78  +    This is the form for use case \[1\]\. It converts the *input* file according
           79  +    to the specified *guards* and options\. The result is written to the named
           80  +    *output* file\. Usage of the string __\-__ as the name of the output
           81  +    signals that the result should be written to __stdout__\. The guards are
           82  +    document\-specific and have to be known to the caller\. The *options* will
           83  +    be explained later, in section [OPTIONS](#subsection3)\.
           84  +
           85  +      * path *output* \(in\)
           86  +
           87  +        This argument specifies where to write the generated document\. It can be
           88  +        the path to a file or directory, or __\-__\. The last value causes the
           89  +        application to write the generated documented to __stdout__\.
           90  +
           91  +        If the *output* does not exist then \[file dirname $output\] has to
           92  +        exist and must be a writable directory\.
           93  +
           94  +      * path *inputfile* \(in\)
           95  +
           96  +        This argument specifies the path to the file to process\. It has to
           97  +        exist, must be readable, and written in
           98  +        *[docstrip](\.\./\.\./\.\./index\.md\#docstrip)* format\.
           99  +
          100  +  - <a name='2'></a>__tcldocstrip__ ?options? *output* \(?options? *input* *guards*\)\.\.\.
          101  +
          102  +    This is the form for use case \[2\]\. It differs from the form for use case \[1\]
          103  +    by the possibility of having options before the output file, which apply in
          104  +    general, and specifying more than one inputfile, each with its own set of
          105  +    input specific options and guards\.
          106  +
          107  +    It extracts data from the various *input* files, according to the
          108  +    specified *options* and *guards*, and writes the result to the given
          109  +    *output*, in the order of their specification on the command line\. Options
          110  +    specified before the output are global settings, whereas the options
          111  +    specified before each input are valid only just for this input file\.
          112  +    Unspecified values are taken from the global settings, or defaults\. As for
          113  +    form \[1\] using the string __\-__ as output causes the application to
          114  +    write to stdout\. Using the string __\.__ for an input file signals that
          115  +    the last input file should be used again\. This enables the assembly of the
          116  +    output from one input file using multiple and different sets of guards,
          117  +    without having to specify the full name of the file every time\.
          118  +
          119  +  - <a name='3'></a>__tcldocstrip__ __\-guards__ *input*
          120  +
          121  +    This is the form for use case \[3\]\. It determines the guards, and unique
          122  +    guard expressions used within the provided *input* document\. The found
          123  +    strings are written to stdout, one string per line\.
          124  +
          125  +## <a name='subsection3'></a>OPTIONS
          126  +
          127  +This section describes all the options available to the user of the application,
          128  +with the exception of the option __\-guards__\. This option was described
          129  +already, in section [COMMAND LINE](#subsection2)\.
          130  +
          131  +  - __\-metaprefix__ string
          132  +
          133  +    This option is inherited from the command __docstrip::extract__ provided
          134  +    by the package __[docstrip](\.\./modules/docstrip/docstrip\.md)__\.
          135  +
          136  +    It specifies the string by which the '%%' prefix of a metacomment line will
          137  +    be replaced\. Defaults to '%%'\. For Tcl code this would typically be '\#'\.
          138  +
          139  +  - __\-onerror__ mode
          140  +
          141  +    This option is inherited from the command __docstrip::extract__ provided
          142  +    by the package __[docstrip](\.\./modules/docstrip/docstrip\.md)__\.
          143  +
          144  +    It controls what will be done when a format error in the *text* being
          145  +    processed is detected\. The settings are:
          146  +
          147  +      * __ignore__
          148  +
          149  +        Just ignore the error; continue as if nothing happened\.
          150  +
          151  +      * __puts__
          152  +
          153  +        Write an error message to __stderr__, then continue processing\.
          154  +
          155  +      * __throw__
          156  +
          157  +        Throw an error\. __::errorCode__ is set to a list whose first element
          158  +        is __DOCSTRIP__, second element is the type of error, and third
          159  +        element is the line number where the error is detected\. This is the
          160  +        default\.
          161  +
          162  +  - __\-trimlines__ bool
          163  +
          164  +    This option is inherited from the command __docstrip::extract__ provided
          165  +    by the package __[docstrip](\.\./modules/docstrip/docstrip\.md)__\.
          166  +
          167  +    Controls whether *spaces* at the end of a line should be trimmed away
          168  +    before the line is processed\. Defaults to __true__\.
          169  +
          170  +  - __\-preamble__ text
          171  +
          172  +  - __\-postamble__ text
          173  +
          174  +  - __\-nopreamble__
          175  +
          176  +  - __\-nopostamble__
          177  +
          178  +    The \-no\*amble options deactivate file pre\- and postambles altogether,
          179  +    whereas the \-\*amble options specify the *user* part of the file pre\- and
          180  +    postambles\. This part can be empty, in that case only the standard parts are
          181  +    shown\. This is the default\.
          182  +
          183  +    Preambles, when active, are written before the actual content of a generated
          184  +    file\. In the same manner postambles are, when active, written after the
          185  +    actual content of a generated file\.
          186  +
          187  +# <a name='section2'></a>Bugs, Ideas, Feedback
          188  +
          189  +This document, and the package it describes, will undoubtedly contain bugs and
          190  +other problems\. Please report such in the category *docstrip* of the [Tcllib
          191  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          192  +for enhancements you may have for either package and/or documentation\.
          193  +
          194  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          195  +__diff \-u__\.
          196  +
          197  +Note further that *attachments* are strongly preferred over inlined patches\.
          198  +Attachments can be made by going to the __Edit__ form of the ticket
          199  +immediately after its creation, and then using the left\-most button in the
          200  +secondary navigation bar\.
          201  +
          202  +# <a name='seealso'></a>SEE ALSO
          203  +
          204  +[docstrip](\.\./modules/docstrip/docstrip\.md)
          205  +
          206  +# <a name='keywords'></a>KEYWORDS
          207  +
          208  +[\.dtx](\.\./\.\./\.\./index\.md\#\_dtx), [LaTeX](\.\./\.\./\.\./index\.md\#latex),
          209  +[conversion](\.\./\.\./\.\./index\.md\#conversion),
          210  +[docstrip](\.\./\.\./\.\./index\.md\#docstrip),
          211  +[documentation](\.\./\.\./\.\./index\.md\#documentation), [literate
          212  +programming](\.\./\.\./\.\./index\.md\#literate\_programming),
          213  +[markup](\.\./\.\./\.\./index\.md\#markup), [source](\.\./\.\./\.\./index\.md\#source)
          214  +
          215  +# <a name='category'></a>CATEGORY
          216  +
          217  +Documentation tools
          218  +
          219  +# <a name='copyright'></a>COPYRIGHT
          220  +
          221  +Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/modules/aes/aes.md.

            1  +
            2  +[//000000001]: # (aes \- Advanced Encryption Standard \(AES\))
            3  +[//000000002]: # (Generated from file 'aes\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2005, Pat Thoyts <[email protected]\.sourceforge\.net>  
            5  +Copyright &copy; 2012\-2014, Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            6  +[//000000004]: # (aes\(n\) 1\.2\.1 tcllib "Advanced Encryption Standard \(AES\)")
            7  +
            8  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            9  +href="../../../toc.md">Table Of Contents</a> &#124; <a
           10  +href="../../../../index.md">Keyword Index</a> &#124; <a
           11  +href="../../../../toc0.md">Categories</a> &#124; <a
           12  +href="../../../../toc1.md">Modules</a> &#124; <a
           13  +href="../../../../toc2.md">Applications</a> ] <hr>
           14  +
           15  +# NAME
           16  +
           17  +aes \- Implementation of the AES block cipher
           18  +
           19  +# <a name='toc'></a>Table Of Contents
           20  +
           21  +  - [Table Of Contents](#toc)
           22  +
           23  +  - [Synopsis](#synopsis)
           24  +
           25  +  - [Description](#section1)
           26  +
           27  +  - [COMMANDS](#section2)
           28  +
           29  +  - [PROGRAMMING INTERFACE](#section3)
           30  +
           31  +  - [MODES OF OPERATION](#section4)
           32  +
           33  +  - [EXAMPLES](#section5)
           34  +
           35  +  - [REFERENCES](#section6)
           36  +
           37  +  - [AUTHORS](#section7)
           38  +
           39  +  - [Bugs, Ideas, Feedback](#section8)
           40  +
           41  +  - [See Also](#seealso)
           42  +
           43  +  - [Keywords](#keywords)
           44  +
           45  +  - [Category](#category)
           46  +
           47  +  - [Copyright](#copyright)
           48  +
           49  +# <a name='synopsis'></a>SYNOPSIS
           50  +
           51  +package require Tcl 8\.5  
           52  +package require aes ?1\.2\.1?  
           53  +
           54  +[__::aes::aes__ ?*\-mode \[ecb&#124;cbc\]*? ?*\-dir \[encrypt&#124;decrypt\]*? *\-key keydata* ?*\-iv vector*? ?*\-hex*? ?*\-out channel*? ?*\-chunksize size*? \[ *\-in channel* &#124; ?__\-\-__? *data* \]](#1)  
           55  +[__::aes::Init__ *mode* *keydata* *iv*](#2)  
           56  +[__::aes::Encrypt__ *Key* *data*](#3)  
           57  +[__::aes::Decrypt__ *Key* *data*](#4)  
           58  +[__::aes::Reset__ *Key* *iv*](#5)  
           59  +[__::aes::Final__ *Key*](#6)  
           60  +
           61  +# <a name='description'></a>DESCRIPTION
           62  +
           63  +This is an implementation in Tcl of the Advanced Encryption Standard \(AES\) as
           64  +published by the U\.S\. National Institute of Standards and Technology \[1\]\. AES is
           65  +a 128\-bit block cipher with a variable key size of 128, 192 or 256 bits\. This
           66  +implementation supports ECB and CBC modes\.
           67  +
           68  +# <a name='section2'></a>COMMANDS
           69  +
           70  +  - <a name='1'></a>__::aes::aes__ ?*\-mode \[ecb&#124;cbc\]*? ?*\-dir \[encrypt&#124;decrypt\]*? *\-key keydata* ?*\-iv vector*? ?*\-hex*? ?*\-out channel*? ?*\-chunksize size*? \[ *\-in channel* &#124; ?__\-\-__? *data* \]
           71  +
           72  +    Perform the __aes__ algorithm on either the data provided by the
           73  +    argument or on the data read from the *\-in* channel\. If an *\-out*
           74  +    channel is given then the result will be written to this channel\.
           75  +
           76  +    The *\-key* option must be given\. This parameter takes a binary string of
           77  +    either 16, 24 or 32 bytes in length and is used to generate the key
           78  +    schedule\.
           79  +
           80  +    The *\-mode* and *\-dir* options are optional and default to cbc mode and
           81  +    encrypt respectively\. The initialization vector *\-iv* takes a 16 byte
           82  +    binary argument which defaults to all zeros\. See [MODES OF
           83  +    OPERATION](#section4) for more about available modes and their uses\.
           84  +
           85  +    AES is a 128\-bit block cipher\. This means that the data must be provided in
           86  +    units that are a multiple of 16 bytes\.
           87  +
           88  +# <a name='section3'></a>PROGRAMMING INTERFACE
           89  +
           90  +Internal state is maintained in an opaque structure that is returned from the
           91  +__Init__ function\. In ECB mode the state is not affected by the input but
           92  +for CBC mode some input dependent state is maintained and may be reset by
           93  +calling the __Reset__ function with a new initialization vector value\.
           94  +
           95  +  - <a name='2'></a>__::aes::Init__ *mode* *keydata* *iv*
           96  +
           97  +    Construct a new AES key schedule using the specified key data and the given
           98  +    initialization vector\. The initialization vector is not used with ECB mode
           99  +    but is important for CBC mode\. See [MODES OF OPERATION](#section4) for
          100  +    details about cipher modes\.
          101  +
          102  +  - <a name='3'></a>__::aes::Encrypt__ *Key* *data*
          103  +
          104  +    Use a prepared key acquired by calling __Init__ to encrypt the provided
          105  +    data\. The data argument should be a binary array that is a multiple of the
          106  +    AES block size of 16 bytes\. The result is a binary array the same size as
          107  +    the input of encrypted data\.
          108  +
          109  +  - <a name='4'></a>__::aes::Decrypt__ *Key* *data*
          110  +
          111  +    Decipher data using the key\. Note that the same key may be used to encrypt
          112  +    and decrypt data provided that the initialization vector is reset
          113  +    appropriately for CBC mode\.
          114  +
          115  +  - <a name='5'></a>__::aes::Reset__ *Key* *iv*
          116  +
          117  +    Reset the initialization vector\. This permits the programmer to re\-use a key
          118  +    and avoid the cost of re\-generating the key schedule where the same key data
          119  +    is being used multiple times\.
          120  +
          121  +  - <a name='6'></a>__::aes::Final__ *Key*
          122  +
          123  +    This should be called to clean up resources associated with *Key*\. Once
          124  +    this function has been called the key may not be used again\.
          125  +
          126  +# <a name='section4'></a>MODES OF OPERATION
          127  +
          128  +  - Electronic Code Book \(ECB\)
          129  +
          130  +    ECB is the basic mode of all block ciphers\. Each block is encrypted
          131  +    independently and so identical plain text will produce identical output when
          132  +    encrypted with the same key\. Any encryption errors will only affect a single
          133  +    block however this is vulnerable to known plaintext attacks\.
          134  +
          135  +  - Cipher Block Chaining \(CBC\)
          136  +
          137  +    CBC mode uses the output of the last block encryption to affect the current
          138  +    block\. An initialization vector of the same size as the cipher block size is
          139  +    used to handle the first block\. The initialization vector should be chosen
          140  +    randomly and transmitted as the first block of the output\. Errors in
          141  +    encryption affect the current block and the next block after which the
          142  +    cipher will correct itself\. CBC is the most commonly used mode in software
          143  +    encryption\. This is the default mode of operation for this module\.
          144  +
          145  +# <a name='section5'></a>EXAMPLES
          146  +
          147  +    % set nil_block [string repeat \\0 16]
          148  +    % aes::aes -hex -mode cbc -dir encrypt -key $nil_block $nil_block
          149  +    66e94bd4ef8a2c3b884cfa59ca342b2e
          150  +
          151  +    set Key [aes::Init cbc $sixteen_bytes_key_data $sixteen_byte_iv]
          152  +    append ciphertext [aes::Encrypt $Key $plaintext]
          153  +    append ciphertext [aes::Encrypt $Key $additional_plaintext]
          154  +    aes::Final $Key
          155  +
          156  +# <a name='section6'></a>REFERENCES
          157  +
          158  +  1. "Advanced Encryption Standard", Federal Information Processing Standards
          159  +     Publication 197, 2001
          160  +     \([http://csrc\.nist\.gov/publications/fips/fips197/fips\-197\.pdf](http://csrc\.nist\.gov/publications/fips/fips197/fips\-197\.pdf)\)
          161  +
          162  +# <a name='section7'></a>AUTHORS
          163  +
          164  +Thorsten Schloermann, Pat Thoyts
          165  +
          166  +# <a name='section8'></a>Bugs, Ideas, Feedback
          167  +
          168  +This document, and the package it describes, will undoubtedly contain bugs and
          169  +other problems\. Please report such in the category *aes* of the [Tcllib
          170  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          171  +for enhancements you may have for either package and/or documentation\.
          172  +
          173  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          174  +__diff \-u__\.
          175  +
          176  +Note further that *attachments* are strongly preferred over inlined patches\.
          177  +Attachments can be made by going to the __Edit__ form of the ticket
          178  +immediately after its creation, and then using the left\-most button in the
          179  +secondary navigation bar\.
          180  +
          181  +# <a name='seealso'></a>SEE ALSO
          182  +
          183  +[blowfish\(n\)](\.\./blowfish/blowfish\.md), [des\(n\)](\.\./des/des\.md),
          184  +[md5\(n\)](\.\./md5/md5\.md), [sha1\(n\)](\.\./sha1/sha1\.md)
          185  +
          186  +# <a name='keywords'></a>KEYWORDS
          187  +
          188  +[aes](\.\./\.\./\.\./\.\./index\.md\#aes), [block
          189  +cipher](\.\./\.\./\.\./\.\./index\.md\#block\_cipher), [data
          190  +integrity](\.\./\.\./\.\./\.\./index\.md\#data\_integrity),
          191  +[encryption](\.\./\.\./\.\./\.\./index\.md\#encryption),
          192  +[security](\.\./\.\./\.\./\.\./index\.md\#security)
          193  +
          194  +# <a name='category'></a>CATEGORY
          195  +
          196  +Hashes, checksums, and encryption
          197  +
          198  +# <a name='copyright'></a>COPYRIGHT
          199  +
          200  +Copyright &copy; 2005, Pat Thoyts <[email protected]\.sourceforge\.net>  
          201  +Copyright &copy; 2012\-2014, Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/modules/amazon-s3/S3.md.

            1  +
            2  +[//000000001]: # (S3 \- Amazon S3 Web Service Utilities)
            3  +[//000000002]: # (Generated from file 'S3\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (2006,2008 Darren New\. All Rights Reserved\. See LICENSE\.TXT for terms\.)
            5  +[//000000004]: # (S3\(n\) 1\.0\.3 tcllib "Amazon S3 Web Service Utilities")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +S3 \- Amazon S3 Web Service Interface
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [ERROR REPORTING](#section2)
           27  +
           28  +  - [COMMANDS](#section3)
           29  +
           30  +  - [LOW LEVEL COMMANDS](#section4)
           31  +
           32  +  - [HIGH LEVEL COMMANDS](#section5)
           33  +
           34  +  - [LIMITATIONS](#section6)
           35  +
           36  +  - [USAGE SUGGESTIONS](#section7)
           37  +
           38  +  - [FUTURE DEVELOPMENTS](#section8)
           39  +
           40  +  - [TLS Security Considerations](#section9)
           41  +
           42  +  - [Bugs, Ideas, Feedback](#section10)
           43  +
           44  +  - [Keywords](#keywords)
           45  +
           46  +  - [Category](#category)
           47  +
           48  +  - [Copyright](#copyright)
           49  +
           50  +# <a name='synopsis'></a>SYNOPSIS
           51  +
           52  +package require Tcl 8\.5  
           53  +package require S3 ?1\.0\.3?  
           54  +package require sha1 1\.0  
           55  +package require md5 2\.0  
           56  +package require base64 2\.3  
           57  +package require xsxp 1\.0  
           58  +
           59  +[__S3::Configure__ ?__\-reset__ *boolean*? ?__\-retries__ *integer*? ?__\-accesskeyid__ *idstring*? ?__\-secretaccesskey__ *idstring*? ?__\-service\-access\-point__ *FQDN*? ?__\-use\-tls__ *boolean*? ?__\-default\-compare__ *always&#124;never&#124;exists&#124;missing&#124;newer&#124;date&#124;checksum&#124;different*? ?__\-default\-separator__ *string*? ?__\-default\-acl__ *private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read&#124;keep&#124;calc*? ?__\-default\-bucket__ *bucketname*?](#1)  
           60  +[__S3::SuggestBucket__ ?*name*?](#2)  
           61  +[__S3::REST__ *dict*](#3)  
           62  +[__S3::ListAllMyBuckets__ ?__\-blocking__ *boolean*? ?__\-parse\-xml__ *xmlstring*? ?__\-result\-type__ *REST&#124;xml&#124;pxml&#124;dict&#124;names&#124;owner*?](#4)  
           63  +[__S3::PutBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*? ?__\-acl__ *\{\}&#124;private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read*?](#5)  
           64  +[__S3::DeleteBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*?](#6)  
           65  +[__S3::GetBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*? ?__\-parse\-xml__ *xmlstring*? ?__\-max\-count__ *integer*? ?__\-prefix__ *prefixstring*? ?__\-delimiter__ *delimiterstring*? ?__\-result\-type__ *REST&#124;xml&#124;pxml&#124;names&#124;dict*?](#7)  
           66  +[__S3::Put__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-file__ *filename*? ?__\-content__ *contentstring*? ?__\-acl__ *private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read&#124;calc&#124;keep*? ?__\-content\-type__ *contenttypestring*? ?__\-x\-amz\-meta\-\*__ *metadatatext*? ?__\-compare__ *comparemode*?](#8)  
           67  +[__S3::Get__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-compare__ *comparemode*? ?__\-file__ *filename*? ?__\-content__ *contentvarname*? ?__\-timestamp__ *aws&#124;now*? ?__\-headers__ *headervarname*?](#9)  
           68  +[__S3::Head__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-dict__ *dictvarname*? ?__\-headers__ *headersvarname*? ?__\-status__ *statusvarname*?](#10)  
           69  +[__S3::GetAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-result\-type__ *REST&#124;xml&#124;pxml*?](#11)  
           70  +[__S3::PutAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-acl__ *new\-acl*?](#12)  
           71  +[__S3::Delete__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-status__ *statusvar*?](#13)  
           72  +[__S3::Push__ ?__\-bucket__ *bucketname*? __\-directory__ *directoryname* ?__\-prefix__ *prefixstring*? ?__\-compare__ *comparemode*? ?__\-x\-amz\-meta\-\*__ *metastring*? ?__\-acl__ *aclcode*? ?__\-delete__ *boolean*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?](#14)  
           73  +[__S3::Pull__ ?__\-bucket__ *bucketname*? __\-directory__ *directoryname* ?__\-prefix__ *prefixstring*? ?__\-blocking__ *boolean*? ?__\-compare__ *comparemode*? ?__\-delete__ *boolean*? ?__\-timestamp__ *aws&#124;now*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?](#15)  
           74  +[__S3::Toss__ ?__\-bucket__ *bucketname*? __\-prefix__ *prefixstring* ?__\-blocking__ *boolean*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?](#16)  
           75  +
           76  +# <a name='description'></a>DESCRIPTION
           77  +
           78  +This package provides access to Amazon's Simple Storage Solution web service\.
           79  +
           80  +As a quick summary, Amazon Simple Storage Solution provides a for\-fee web
           81  +service allowing the storage of arbitrary data as "resources" within "buckets"
           82  +online\. See [http://www\.amazonaws\.com/](http://www\.amazonaws\.com/) for
           83  +details on that system\. Access to the service is via HTTP \(SOAP or REST\)\. Much
           84  +of this documentation will not make sense if you're not familiar with the terms
           85  +and functionality of the Amazon S3 service\.
           86  +
           87  +This package provides services for reading and writing the data items via the
           88  +REST interface\. It also provides some higher\-level operations\. Other packages in
           89  +the same distribution provide for even more functionality\.
           90  +
           91  +Copyright 2006 Darren New\. All Rights Reserved\. NO WARRANTIES OF ANY TYPE ARE
           92  +PROVIDED\. COPYING OR USE INDEMNIFIES THE AUTHOR IN ALL WAYS\. This software is
           93  +licensed under essentially the same terms as Tcl\. See LICENSE\.txt for the terms\.
           94  +
           95  +# <a name='section2'></a>ERROR REPORTING
           96  +
           97  +The error reporting from this package makes use of $errorCode to provide more
           98  +details on what happened than simply throwing an error\. Any error caught by the
           99  +S3 package \(and we try to catch them all\) will return with an $errorCode being a
          100  +list having at least three elements\. In all cases, the first element will be
          101  +"S3"\. The second element will take on one of six values, with that element
          102  +defining the value of the third and subsequent elements\. S3::REST does not throw
          103  +an error, but rather returns a dictionary with the keys "error", "errorInfo",
          104  +and "errorCode" set\. This allows for reliable background use\. The possible
          105  +second elements are these:
          106  +
          107  +  - usage
          108  +
          109  +    The usage of the package is incorrect\. For example, a command has been
          110  +    invoked which requires the library to be configured before the library has
          111  +    been configured, or an invalid combination of options has been specified\.
          112  +    The third element of $errorCode supplies the name of the parameter that was
          113  +    wrong\. The fourth usually provides the arguments that were actually supplied
          114  +    to the throwing proc, unless the usage error isn't confined to a single
          115  +    proc\.
          116  +
          117  +  - local
          118  +
          119  +    Something happened on the local system which threw an error\. For example, a
          120  +    request to upload or download a file was made and the file permissions
          121  +    denied that sort of access\. The third element of $errorCode is the original
          122  +    $errorCode\.
          123  +
          124  +  - socket
          125  +
          126  +    Something happened with the socket\. It closed prematurely, or some other
          127  +    condition of failure\-to\-communicate\-with\-Amazon was detected\. The third
          128  +    element of $errorCode is the original $errorCode, or sometimes the message
          129  +    from fcopy, or \.\.\.?
          130  +
          131  +  - remote
          132  +
          133  +    The Amazon web service returned an error code outside the 2xx range in the
          134  +    HTTP header\. In other words, everything went as documented, except this
          135  +    particular case was documented not to work\. The third element is the
          136  +    dictionary returned from __::S3::REST__\. Note that S3::REST itself never
          137  +    throws this error, but just returns the dictionary\. Most of the higher\-level
          138  +    commands throw for convenience, unless an argument indicates they should
          139  +    not\. If something is documented as "not throwing an S3 remote error", it
          140  +    means a status return is set rather than throwing an error if Amazon returns
          141  +    a non\-2XX HTTP result code\.
          142  +
          143  +  - notyet
          144  +
          145  +    The user obeyed the documentation, but the author has not yet gotten around
          146  +    to implementing this feature\. \(Right now, only TLS support and sophisticated
          147  +    permissions fall into this category, as well as the S3::Acl command\.\)
          148  +
          149  +  - xml
          150  +
          151  +    The service has returned invalid XML, or XML whose schema is unexpected\. For
          152  +    the high\-level commands that accept service XML as input for parsing, this
          153  +    may also be thrown\.
          154  +
          155  +# <a name='section3'></a>COMMANDS
          156  +
          157  +This package provides several separate levels of complexity\.
          158  +
          159  +  - The lowest level simply takes arguments to be sent to the service, sends
          160  +    them, retrieves the result, and provides it to the caller\. *Note:* This
          161  +    layer allows both synchronous and event\-driven processing\. It depends on the
          162  +    MD5 and SHA1 and base64 packages from Tcllib \(available at
          163  +    [http://core\.tcl\.tk/tcllib/](http://core\.tcl\.tk/tcllib/)\)\. Note that
          164  +    __S3::Configure__ is required for __S3::REST__ to work due to the
          165  +    authentication portion, so we put that in the "lowest level\."
          166  +
          167  +  - The next layer parses the results of calls, allowing for functionality such
          168  +    as uploading only changed files, synchronizing directories, and so on\. This
          169  +    layer depends on the __TclXML__ package as well as the included
          170  +    __[xsxp](xsxp\.md)__ package\. These packages are package required
          171  +    when these more\-sophisticated routines are called, so nothing breaks if they
          172  +    are not correctly installed\.
          173  +
          174  +  - Also included is a separate program that uses the library\. It provides code
          175  +    to parse $argv0 and $argv from the command line, allowing invocation as a
          176  +    tclkit, etc\. \(Not yet implmented\.\)
          177  +
          178  +  - Another separate program provides a GUI interface allowing drag\-and\-drop and
          179  +    other such functionality\. \(Not yet implemented\.\)
          180  +
          181  +  - Also built on this package is the OddJob program\. It is a separate program
          182  +    designed to allow distribution of computational work units over Amazon's
          183  +    Elastic Compute Cloud web service\.
          184  +
          185  +The goal is to have at least the bottom\-most layers implemented in pure Tcl
          186  +using only that which comes from widely\-available sources, such as Tcllib\.
          187  +
          188  +# <a name='section4'></a>LOW LEVEL COMMANDS
          189  +
          190  +These commands do not require any packages not listed above\. They talk directly
          191  +to the service, or they are utility or configuration routines\. Note that the
          192  +"xsxp" package was written to support this package, so it should be available
          193  +wherever you got this package\.
          194  +
          195  +  - <a name='1'></a>__S3::Configure__ ?__\-reset__ *boolean*? ?__\-retries__ *integer*? ?__\-accesskeyid__ *idstring*? ?__\-secretaccesskey__ *idstring*? ?__\-service\-access\-point__ *FQDN*? ?__\-use\-tls__ *boolean*? ?__\-default\-compare__ *always&#124;never&#124;exists&#124;missing&#124;newer&#124;date&#124;checksum&#124;different*? ?__\-default\-separator__ *string*? ?__\-default\-acl__ *private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read&#124;keep&#124;calc*? ?__\-default\-bucket__ *bucketname*?
          196  +
          197  +    There is one command for configuration, and that is __S3::Configure__\.
          198  +    If called with no arguments, it returns a dictionary of key/value pairs
          199  +    listing all current settings\. If called with one argument, it returns the
          200  +    value of that single argument\. If called with two or more arguments, it must
          201  +    be called with pairs of arguments, and it applies the changes in order\.
          202  +    There is only one set of configuration information per interpreter\.
          203  +
          204  +    The following options are accepted:
          205  +
          206  +      * __\-reset__ *boolean*
          207  +
          208  +        By default, false\. If true, any previous changes and any changes on the
          209  +        same call before the reset option will be returned to default values\.
          210  +
          211  +      * __\-retries__ *integer*
          212  +
          213  +        Default value is 3\. If Amazon returns a 500 error, a retry after an
          214  +        exponential backoff delay will be tried this many times before finally
          215  +        throwing the 500 error\. This applies to each call to __S3::REST__
          216  +        from the higher\-level commands, but not to __S3::REST__ itself\. That
          217  +        is, __S3::REST__ will always return httpstatus 500 if that's what it
          218  +        receives\. Functions like __S3::Put__ will retry the PUT call, and
          219  +        will also retry the GET and HEAD calls used to do content comparison\.
          220  +        Changing this to 0 will prevent retries and their associated delays\. In
          221  +        addition, socket errors \(i\.e\., errors whose errorCode starts with "S3
          222  +        socket"\) will be similarly retried after backoffs\.
          223  +
          224  +      * __\-accesskeyid__ *idstring*
          225  +
          226  +      * __\-secretaccesskey__ *idstring*
          227  +
          228  +        Each defaults to an empty string\. These must be set before any calls are
          229  +        made\. This is your S3 ID\. Once you sign up for an account, go to
          230  +        [http://www\.amazonaws\.com/](http://www\.amazonaws\.com/), sign in, go
          231  +        to the "Your Web Services Account" button, pick "AWS Access
          232  +        Identifiers", and your access key ID and secret access keys will be
          233  +        available\. All __S3::REST__ calls are authenticated\. Blame Amazon
          234  +        for the poor choice of names\.
          235  +
          236  +      * __\-service\-access\-point__ *FQDN*
          237  +
          238  +        Defaults to "s3\.amazonaws\.com"\. This is the fully\-qualified domain name
          239  +        of the server to contact for __S3::REST__ calls\. You should probably
          240  +        never need to touch this, unless someone else implements a compatible
          241  +        service, or you wish to test something by pointing the library at your
          242  +        own service\.
          243  +
          244  +      * __\-slop\-seconds__ *integer*
          245  +
          246  +        When comparing dates between Amazon and the local machine, two dates
          247  +        within this many seconds of each other are considered the same\. Useful
          248  +        for clock drift correction, processing overhead time, and so on\.
          249  +
          250  +      * __\-use\-tls__ *boolean*
          251  +
          252  +        Defaults to false\. This is not yet implemented\. If true,
          253  +        __S3::REST__ will negotiate a TLS connection to Amazon\. If false,
          254  +        unencrypted connections are used\.
          255  +
          256  +      * __\-bucket\-prefix__ *string*
          257  +
          258  +        Defaults to "TclS3"\. This string is used by
          259  +        __S3::SuggestBucketName__ if that command is passed an empty string
          260  +        as an argument\. It is used to distinguish different applications using
          261  +        the Amazon service\. Your application should always set this to keep from
          262  +        interfering with the buckets of other users of Amazon S3 or with other
          263  +        buckets of the same user\.
          264  +
          265  +      * __\-default\-compare__ *always&#124;never&#124;exists&#124;missing&#124;newer&#124;date&#124;checksum&#124;different*
          266  +
          267  +        Defaults to "always\." If no \-compare is specified on __S3::Put__,
          268  +        __S3::Get__, or __S3::Delete__, this comparison is used\. See
          269  +        those commands for a description of the meaning\.
          270  +
          271  +      * __\-default\-separator__ *string*
          272  +
          273  +        Defaults to "/"\. This is currently unused\. It might make sense to use
          274  +        this for __S3::Push__ and __S3::Pull__, but allowing resources
          275  +        to have slashes in their names that aren't marking directories would be
          276  +        problematic\. Hence, this currently does nothing\.
          277  +
          278  +      * __\-default\-acl__ *private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read&#124;keep&#124;calc*
          279  +
          280  +        Defaults to an empty string\. If no \-acl argument is provided to
          281  +        __S3::Put__ or __S3::Push__, this string is used \(given as the
          282  +        x\-amz\-acl header if not keep or calc\)\. If this is also empty, no
          283  +        x\-amz\-acl header is generated\. This is *not* used by __S3::REST__\.
          284  +
          285  +      * __\-default\-bucket__ *bucketname*
          286  +
          287  +        If no bucket is given to __S3::GetBucket__, __S3::PutBucket__,
          288  +        __S3::Get__, __S3::Put__, __S3::Head__, __S3::Acl__,
          289  +        __S3::Delete__, __S3::Push__, __S3::Pull__, or
          290  +        __S3::Toss__, and if this configuration variable is not an empty
          291  +        string \(and not simply "/"\), then this value will be used for the
          292  +        bucket\. This is useful if one program does a large amount of resource
          293  +        manipulation within a single bucket\.
          294  +
          295  +  - <a name='2'></a>__S3::SuggestBucket__ ?*name*?
          296  +
          297  +    The __S3::SuggestBucket__ command accepts an optional string as a prefix
          298  +    and returns a valid bucket containing the *name* argument and the Access
          299  +    Key ID\. This makes the name unique to the owner and to the application
          300  +    \(assuming the application picks a good *name* argument\)\. If no name is
          301  +    provided, the name from __S3::Configure__ *\-bucket\-prefix* is used\. If
          302  +    that too is empty \(which is not the default\), an error is thrown\.
          303  +
          304  +  - <a name='3'></a>__S3::REST__ *dict*
          305  +
          306  +    The __S3::REST__ command takes as an argument a dictionary and returns a
          307  +    dictionary\. The return dictionary has the same keys as the input dictionary,
          308  +    and includes additional keys as the result\. The presence or absence of keys
          309  +    in the input dictionary can control the behavior of the routine\. It never
          310  +    throws an error directly, but includes keys "error", "errorInfo", and
          311  +    "errorCode" if necessary\. Some keys are required, some optional\. The routine
          312  +    can run either in blocking or non\-blocking mode, based on the presense of
          313  +    __resultvar__ in the input dictionary\. This requires the
          314  +    *\-accesskeyid* and *\-secretaccesskey* to be configured via
          315  +    __S3::Configure__ before being called\.
          316  +
          317  +    The possible input keys are these:
          318  +
          319  +      * __verb__ *GET&#124;PUT&#124;DELETE&#124;HEAD*
          320  +
          321  +        This required item indicates the verb to be used\.
          322  +
          323  +      * __resource__ *string*
          324  +
          325  +        This required item indicates the resource to be accessed\. A leading / is
          326  +        added if not there already\. It will be URL\-encoded for you if necessary\.
          327  +        Do not supply a resource name that is already URL\-encoded\.
          328  +
          329  +      * ?__rtype__ *torrent&#124;acl*?
          330  +
          331  +        This indicates a torrent or acl resource is being manipulated\. Do not
          332  +        include this in the __resource__ key, or the "?" separator will get
          333  +        URL\-encoded\.
          334  +
          335  +      * ?__parameters__ *dict*?
          336  +
          337  +        This optional dictionary provides parameters added to the URL for the
          338  +        transaction\. The keys must be in the correct case \(which is confusing in
          339  +        the Amazon documentation\) and the values must be valid\. This can be an
          340  +        empty dictionary or omitted entirely if no parameters are desired\. No
          341  +        other error checking on parameters is performed\.
          342  +
          343  +      * ?__headers__ *dict*?
          344  +
          345  +        This optional dictionary provides headers to be added to the HTTP
          346  +        request\. The keys must be in *lower case* for the authentication to
          347  +        work\. The values must not contain embedded newlines or carriage returns\.
          348  +        This is primarily useful for adding x\-amz\-\* headers\. Since
          349  +        authentication is calculated by __S3::REST__, do not add that header
          350  +        here\. Since content\-type gets its own key, also do not add that header
          351  +        here\.
          352  +
          353  +      * ?__inbody__ *contentstring*?
          354  +
          355  +        This optional item, if provided, gives the content that will be sent\. It
          356  +        is sent with a tranfer encoding of binary, and only the low bytes are
          357  +        used, so use \[encoding convertto utf\-8\] if the string is a utf\-8 string\.
          358  +        This is written all in one blast, so if you are using non\-blocking mode
          359  +        and the __inbody__ is especially large, you may wind up blocking on
          360  +        the write socket\.
          361  +
          362  +      * ?__infile__ *filename*?
          363  +
          364  +        This optional item, if provided, and if __inbody__ is not provided,
          365  +        names the file from which the body of the HTTP message will be
          366  +        constructed\. The file is opened for reading and sent progressively by
          367  +        \[fcopy\], so it should not block in non\-blocking mode even if the file is
          368  +        very large\. The file is transfered in binary mode, so the bytes on your
          369  +        disk will match the bytes in your resource\. Due to HTTP restrictions, it
          370  +        must be possible to use \[file size\] on this file to determine the size
          371  +        at the start of the transaction\.
          372  +
          373  +      * ?__S3chan__ *channel*?
          374  +
          375  +        This optional item, if provided, indicates the already\-open socket over
          376  +        which the transaction should be conducted\. If not provided, a connection
          377  +        is made to the service access point specified via __S3::Configure__,
          378  +        which is normally s3\.amazonaws\.com\. If this is provided, the channel is
          379  +        not closed at the end of the transaction\.
          380  +
          381  +      * ?__outchan__ *channel*?
          382  +
          383  +        This optional item, if provided, indicates the already\-open channel to
          384  +        which the body returned from S3 should be written\. That is, to retrieve
          385  +        a large resource, open a file, set the translation mode, and pass the
          386  +        channel as the value of the key outchan\. Output will be written to the
          387  +        channel in pieces so memory does not fill up unnecessarily\. The channel
          388  +        is not closed at the end of the transaction\.
          389  +
          390  +      * ?__resultvar__ *varname*?
          391  +
          392  +        This optional item, if provided, indicates that __S3::REST__ should
          393  +        run in non\-blocking mode\. The *varname* should be fully qualified with
          394  +        respect to namespaces and cannot be local to a proc\. If provided, the
          395  +        result of the __S3::REST__ call is assigned to this variable once
          396  +        everything has completed; use trace or vwait to know when this has
          397  +        happened\. If this key is not provided, the result is simply returned
          398  +        from the call to __S3::REST__ and no calls to the eventloop are
          399  +        invoked from within this call\.
          400  +
          401  +      * ?__throwsocket__ *throw&#124;return*?
          402  +
          403  +        This optional item, if provided, indicates that __S3::REST__ should
          404  +        throw an error if throwmode is throw and a socket error is encountered\.
          405  +        It indicates that __S3::REST__ should return the error code in the
          406  +        returned dictionary if a socket error is encountered and this is set to
          407  +        return\. If __throwsocket__ is set to *return* or if the call is
          408  +        not blocking, then a socket error \(i\.e\., an error whose error code
          409  +        starts with "S3 socket" will be returned in the dictionary as
          410  +        __error__, __errorInfo__, and __errorCode__\. If a foreground
          411  +        call is made \(i\.e\., __resultvar__ is not provided\), and this option
          412  +        is not provided or is set to *throw*, then
          413  +        __[error](\.\./\.\./\.\./\.\./index\.md\#error)__ will be invoked instead\.
          414  +
          415  +    Once the call to __S3::REST__ completes, a new dict is returned, either
          416  +    in the *resultvar* or as the result of execution\. This dict is a copy of
          417  +    the original dict with the results added as new keys\. The possible new keys
          418  +    are these:
          419  +
          420  +      * __error__ *errorstring*
          421  +
          422  +      * __errorInfo__ *errorstring*
          423  +
          424  +      * __errorCode__ *errorstring*
          425  +
          426  +        If an error is caught, these three keys will be set in the result\. Note
          427  +        that __S3::REST__ does *not* consider a non\-2XX HTTP return code
          428  +        as an error\. The __errorCode__ value will be formatted according to
          429  +        the [ERROR REPORTING](#section2) description\. If these are present,
          430  +        other keys described here might not be\.
          431  +
          432  +      * __httpstatus__ *threedigits*
          433  +
          434  +        The three\-digit code from the HTTP transaction\. 2XX for good, 5XX for
          435  +        server error, etc\.
          436  +
          437  +      * __httpmessage__ *text*
          438  +
          439  +        The textual result after the status code\. "OK" or "Forbidden" or etc\.
          440  +
          441  +      * __outbody__ *contentstring*
          442  +
          443  +        If *outchan* was not specified, this key will hold a reference to the
          444  +        \(unencoded\) contents of the body returned\. If Amazon returned an error
          445  +        \(a la the httpstatus not a 2XX value\), the error message will be in
          446  +        __outbody__ or written to __outchan__ as appropriate\.
          447  +
          448  +      * __outheaders__ *dict*
          449  +
          450  +        This contains a dictionary of headers returned by Amazon\. The keys are
          451  +        always lower case\. It's mainly useful for finding the x\-amz\-meta\-\*
          452  +        headers, if any, although things like last\-modified and content\-type are
          453  +        also useful\. The keys of this dictionary are always lower case\. Both
          454  +        keys and values are trimmed of extraneous whitespace\.
          455  +
          456  +# <a name='section5'></a>HIGH LEVEL COMMANDS
          457  +
          458  +The routines in this section all make use of one or more calls to
          459  +__S3::REST__ to do their work, then parse and manage the data in a
          460  +convenient way\. All these commands throw errors as described in [ERROR
          461  +REPORTING](#section2) unless otherwise noted\.
          462  +
          463  +In all these commands, all arguments are presented as name/value pairs, in any
          464  +order\. All the argument names start with a hyphen\.
          465  +
          466  +There are a few options that are common to many of the commands, and those
          467  +common options are documented here\.
          468  +
          469  +  - __\-blocking__ *boolean*
          470  +
          471  +    If provided and specified as false, then any calls to __S3:REST__ will
          472  +    be non\-blocking, and internally these routines will call \[vwait\] to get the
          473  +    results\. In other words, these routines will return the same value, but
          474  +    they'll have event loops running while waiting for Amazon\.
          475  +
          476  +  - __\-parse\-xml__ *xmlstring*
          477  +
          478  +    If provided, the routine skips actually communicating with Amazon, and
          479  +    instead behaves as if the XML string provided was returned as the body of
          480  +    the call\. Since several of these routines allow the return of data in
          481  +    various formats, this argument can be used to parse existing XML to extract
          482  +    the bits of information that are needed\. It's also helpful for testing\.
          483  +
          484  +  - __\-bucket__ *bucketname*
          485  +
          486  +    Almost every high\-level command needs to know what bucket the resources are
          487  +    in\. This option specifies that\. \(Only the command to list available buckets
          488  +    does not require this parameter\.\) This does not need to be URL\-encoded, even
          489  +    if it contains special or non\-ASCII characters\. May or may not contain
          490  +    leading or trailing spaces \- commands normalize the bucket\. If this is not
          491  +    supplied, the value is taken from __S3::Configure \-default\-bucket__ if
          492  +    that string isn't empty\. Note that spaces and slashes are always trimmed
          493  +    from both ends and the rest must leave a valid bucket\.
          494  +
          495  +  - __\-resource__ *resourcename*
          496  +
          497  +    This specifies the resource of interest within the bucket\. It may or may not
          498  +    start with a slash \- both cases are handled\. This does not need to be
          499  +    URL\-encoded, even if it contains special or non\-ASCII characters\.
          500  +
          501  +  - __\-compare__ *always&#124;never&#124;exists&#124;missing&#124;newer&#124;date&#124;checksum&#124;different*
          502  +
          503  +    When commands copy resources to files or files to resources, the caller may
          504  +    specify that the copy should be skipped if the contents are the same\. This
          505  +    argument specifies the conditions under which the files should be copied\. If
          506  +    it is not passed, the result of __S3::Configure \-default\-compare__ is
          507  +    used, which in turn defaults to "always\." The meanings of the various values
          508  +    are these:
          509  +
          510  +      * *always*
          511  +
          512  +        Always copy the data\. This is the default\.
          513  +
          514  +      * *never*
          515  +
          516  +        Never copy the data\. This is essentially a no\-op, except in
          517  +        __S3::Push__ and __S3::Pull__ where the \-delete flag might make
          518  +        a difference\.
          519  +
          520  +      * *exists*
          521  +
          522  +        Copy the data only if the destination already exists\.
          523  +
          524  +      * *missing*
          525  +
          526  +        Copy the data only if the destination does not already exist\.
          527  +
          528  +      * *newer*
          529  +
          530  +        Copy the data if the destination is missing, or if the date on the
          531  +        source is newer than the date on the destination by at least
          532  +        __S3::Configure \-slop\-seconds__ seconds\. If the source is Amazon,
          533  +        the date is taken from the Last\-Modified header\. If the source is local,
          534  +        it is taken as the mtime of the file\. If the source data is specified in
          535  +        a string rather than a file, it is taken as right now, via \[clock
          536  +        seconds\]\.
          537  +
          538  +      * *date*
          539  +
          540  +        Like *newer*, except copy if the date is newer *or* older\.
          541  +
          542  +      * *checksum*
          543  +
          544  +        Calculate the MD5 checksum on the local file or string, ask Amazon for
          545  +        the eTag of the resource, and copy the data if they're different\. Copy
          546  +        the data also if the destination is missing\. Note that this can be slow
          547  +        with large local files unless the C version of the MD5 support is
          548  +        available\.
          549  +
          550  +      * *different*
          551  +
          552  +        Copy the data if the destination does not exist\. If the destination
          553  +        exists and an actual file name was specified \(rather than a content
          554  +        string\), and the date on the file differs from the date on the resource,
          555  +        copy the data\. If the data is provided as a content string, the "date"
          556  +        is treated as "right now", so it will likely always differ unless
          557  +        slop\-seconds is large\. If the dates are the same, the MD5 checksums are
          558  +        compared, and the data is copied if the checksums differ\.
          559  +
          560  +    Note that "newer" and "date" don't care about the contents, and "checksum"
          561  +    doesn't care about the dates, but "different" checks both\.
          562  +
          563  +  - <a name='4'></a>__S3::ListAllMyBuckets__ ?__\-blocking__ *boolean*? ?__\-parse\-xml__ *xmlstring*? ?__\-result\-type__ *REST&#124;xml&#124;pxml&#124;dict&#124;names&#124;owner*?
          564  +
          565  +    This routine performs a GET on the Amazon S3 service, which is defined to
          566  +    return a list of buckets owned by the account identified by the
          567  +    authorization header\. \(Blame Amazon for the dumb names\.\)
          568  +
          569  +      * __\-blocking__ *boolean*
          570  +
          571  +        See above for standard definition\.
          572  +
          573  +      * __\-parse\-xml__ *xmlstring*
          574  +
          575  +        See above for standard definition\.
          576  +
          577  +      * __\-result\-type__ *REST*
          578  +
          579  +        The dictionary returned by __S3::REST__ is the return value of
          580  +        __S3::ListAllMyBuckets__\. In this case, a non\-2XX httpstatus will
          581  +        not throw an error\. You may not combine this with *\-parse\-xml*\.
          582  +
          583  +      * __\-result\-type__ *xml*
          584  +
          585  +        The raw XML of the body is returned as the result \(with no encoding
          586  +        applied\)\.
          587  +
          588  +      * __\-result\-type__ *pxml*
          589  +
          590  +        The XML of the body as parsed by __xsxp::parse__ is returned\.
          591  +
          592  +      * __\-result\-type__ *dict*
          593  +
          594  +        A dictionary of interesting portions of the XML is returned\. The
          595  +        dictionary contains the following keys:
          596  +
          597  +          + Owner/ID
          598  +
          599  +            The Amazon AWS ID \(in hex\) of the owner of the bucket\.
          600  +
          601  +          + Owner/DisplayName
          602  +
          603  +            The Amazon AWS ID's Display Name\.
          604  +
          605  +          + Bucket/Name
          606  +
          607  +            A list of names, one for each bucket\.
          608  +
          609  +          + Bucket/CreationDate
          610  +
          611  +            A list of dates, one for each bucket, in the same order as
          612  +            Bucket/Name, in ISO format \(as returned by Amazon\)\.
          613  +
          614  +      * __\-result\-type__ *names*
          615  +
          616  +        A list of bucket names is returned with all other information stripped
          617  +        out\. This is the default result type for this command\.
          618  +
          619  +      * __\-result\-type__ *owner*
          620  +
          621  +        A list containing two elements is returned\. The first element is the
          622  +        owner's ID, and the second is the owner's display name\.
          623  +
          624  +  - <a name='5'></a>__S3::PutBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*? ?__\-acl__ *\{\}&#124;private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read*?
          625  +
          626  +    This command creates a bucket if it does not already exist\. Bucket names are
          627  +    globally unique, so you may get a "Forbidden" error from Amazon even if you
          628  +    cannot see the bucket in __S3::ListAllMyBuckets__\. See
          629  +    __S3::SuggestBucket__ for ways to minimize this risk\. The x\-amz\-acl
          630  +    header comes from the __\-acl__ option, or from __S3::Configure
          631  +    \-default\-acl__ if not specified\.
          632  +
          633  +  - <a name='6'></a>__S3::DeleteBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*?
          634  +
          635  +    This command deletes a bucket if it is empty and you have such permission\.
          636  +    Note that Amazon's list of buckets is a global resource, requiring far\-flung
          637  +    synchronization\. If you delete a bucket, it may be quite a few minutes \(or
          638  +    hours\) before you can recreate it, yielding "Conflict" errors until then\.
          639  +
          640  +  - <a name='7'></a>__S3::GetBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*? ?__\-parse\-xml__ *xmlstring*? ?__\-max\-count__ *integer*? ?__\-prefix__ *prefixstring*? ?__\-delimiter__ *delimiterstring*? ?__\-result\-type__ *REST&#124;xml&#124;pxml&#124;names&#124;dict*?
          641  +
          642  +    This lists the contents of a bucket\. That is, it returns a directory listing
          643  +    of resources within a bucket, rather than transfering any user data\.
          644  +
          645  +      * __\-bucket__ *bucketname*
          646  +
          647  +        The standard bucket argument\.
          648  +
          649  +      * __\-blocking__ *boolean*
          650  +
          651  +        The standard blocking argument\.
          652  +
          653  +      * __\-parse\-xml__ *xmlstring*
          654  +
          655  +        The standard parse\-xml argument\.
          656  +
          657  +      * __\-max\-count__ *integer*
          658  +
          659  +        If supplied, this is the most number of records to be returned\. If not
          660  +        supplied, the code will iterate until all records have been found\. Not
          661  +        compatible with \-parse\-xml\. Note that if this is supplied, only one call
          662  +        to __S3::REST__ will be made\. Otherwise, enough calls will be made
          663  +        to exhaust the listing, buffering results in memory, so take care if you
          664  +        may have huge buckets\.
          665  +
          666  +      * __\-prefix__ *prefixstring*
          667  +
          668  +        If present, restricts listing to resources with a particular prefix\. One
          669  +        leading / is stripped if present\.
          670  +
          671  +      * __\-delimiter__ *delimiterstring*
          672  +
          673  +        If present, specifies a delimiter for the listing\. The presence of this
          674  +        will summarize multiple resources into one entry, as if S3 supported
          675  +        directories\. See the Amazon documentation for details\.
          676  +
          677  +      * __\-result\-type__ *REST&#124;xml&#124;pxml&#124;names&#124;dict*
          678  +
          679  +        This indicates the format of the return result of the command\.
          680  +
          681  +          + REST
          682  +
          683  +            If *\-max\-count* is specified, the dictionary returned from
          684  +            __S3::REST__ is returned\. If *\-max\-count* is not specified, a
          685  +            list of all the dictionaries returned from the one or more calls to
          686  +            __S3::REST__ is returned\.
          687  +
          688  +          + xml
          689  +
          690  +            If *\-max\-count* is specified, the body returned from
          691  +            __S3::REST__ is returned\. If *\-max\-count* is not specified, a
          692  +            list of all the bodies returned from the one or more calls to
          693  +            __S3::REST__ is returned\.
          694  +
          695  +          + pxml
          696  +
          697  +            If *\-max\-count* is specified, the body returned from
          698  +            __S3::REST__ is passed throught __xsxp::parse__ and then
          699  +            returned\. If *\-max\-count* is not specified, a list of all the
          700  +            bodies returned from the one or more calls to __S3::REST__ are
          701  +            each passed through __xsxp::parse__ and then returned\.
          702  +
          703  +          + names
          704  +
          705  +            Returns a list of all names found in either the Contents/Key fields
          706  +            or the CommonPrefixes/Prefix fields\. If no *\-delimiter* is
          707  +            specified and no *\-max\-count* is specified, this returns a list of
          708  +            all resources with the specified *\-prefix*\.
          709  +
          710  +          + dict
          711  +
          712  +            Returns a dictionary\. \(Returns only one dictionary even if
          713  +            *\-max\-count* wasn't specified\.\) The keys of the dictionary are as
          714  +            follows:
          715  +
          716  +              - Name
          717  +
          718  +                The name of the bucket \(from the final call to
          719  +                __S3::REST__\)\.
          720  +
          721  +              - Prefix
          722  +
          723  +                From the final call to __S3::REST__\.
          724  +
          725  +              - Marker
          726  +
          727  +                From the final call to __S3::REST__\.
          728  +
          729  +              - MaxKeys
          730  +
          731  +                From the final call to __S3::REST__\.
          732  +
          733  +              - IsTruncated
          734  +
          735  +                From the final call to __S3::REST__, so always false if
          736  +                *\-max\-count* is not specified\.
          737  +
          738  +              - NextMarker
          739  +
          740  +                Always provided if IsTruncated is true, and calculated of Amazon
          741  +                does not provide it\. May be empty if IsTruncated is false\.
          742  +
          743  +              - Key
          744  +
          745  +                A list of names of resources in the bucket matching the
          746  +                *\-prefix* and *\-delimiter* restrictions\.
          747  +
          748  +              - LastModified
          749  +
          750  +                A list of times of resources in the bucket, in the same order as
          751  +                Key, in the format returned by Amazon\. \(I\.e\., it is not parsed
          752  +                into a seconds\-from\-epoch\.\)
          753  +
          754  +              - ETag
          755  +
          756  +                A list of entity tags \(a\.k\.a\. MD5 checksums\) in the same order
          757  +                as Key\.
          758  +
          759  +              - Size
          760  +
          761  +                A list of sizes in bytes of the resources, in the same order as
          762  +                Key\.
          763  +
          764  +              - Owner/ID
          765  +
          766  +                A list of owners of the resources in the bucket, in the same
          767  +                order as Key\.
          768  +
          769  +              - Owner/DisplayName
          770  +
          771  +                A list of owners of the resources in the bucket, in the same
          772  +                order as Key\. These are the display names\.
          773  +
          774  +              - CommonPrefixes/Prefix
          775  +
          776  +                A list of prefixes common to multiple entities\. This is present
          777  +                only if *\-delimiter* was supplied\.
          778  +
          779  +  - <a name='8'></a>__S3::Put__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-file__ *filename*? ?__\-content__ *contentstring*? ?__\-acl__ *private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read&#124;calc&#124;keep*? ?__\-content\-type__ *contenttypestring*? ?__\-x\-amz\-meta\-\*__ *metadatatext*? ?__\-compare__ *comparemode*?
          780  +
          781  +    This command sends data to a resource on Amazon's servers for storage, using
          782  +    the HTTP PUT command\. It returns 0 if the __\-compare__ mode prevented
          783  +    the transfer, 1 if the transfer worked, or throws an error if the transfer
          784  +    was attempted but failed\. Server 5XX errors and S3 socket errors are retried
          785  +    according to __S3:Configure \-retries__ settings before throwing an
          786  +    error; other errors throw immediately\.
          787  +
          788  +      * __\-bucket__
          789  +
          790  +        This specifies the bucket into which the resource will be written\.
          791  +        Leading and/or trailing slashes are removed for you, as are spaces\.
          792  +
          793  +      * __\-resource__
          794  +
          795  +        This is the full name of the resource within the bucket\. A single
          796  +        leading slash is removed, but not a trailing slash\. Spaces are not
          797  +        trimmed\.
          798  +
          799  +      * __\-blocking__
          800  +
          801  +        The standard blocking flag\.
          802  +
          803  +      * __\-file__
          804  +
          805  +        If this is specified, the *filename* must exist, must be readable, and
          806  +        must not be a special or directory file\. \[file size\] must apply to it
          807  +        and must not change for the lifetime of the call\. The default
          808  +        content\-type is calculated based on the name and/or contents of the
          809  +        file\. Specifying this is an error if __\-content__ is also specified,
          810  +        but at least one of __\-file__ or __\-content__ must be specified\.
          811  +        \(The file is allowed to not exist or not be readable if __\-compare__
          812  +        *never* is specified\.\)
          813  +
          814  +      * __\-content__
          815  +
          816  +        If this is specified, the *contentstring* is sent as the body of the
          817  +        resource\. The content\-type defaults to "application/octet\-string"\. Only
          818  +        the low bytes are sent, so non\-ASCII should use the appropriate encoding
          819  +        \(such as \[encoding convertto utf\-8\]\) before passing it to this routine,
          820  +        if necessary\. Specifying this is an error if __\-file__ is also
          821  +        specified, but at least one of __\-file__ or __\-content__ must be
          822  +        specified\.
          823  +
          824  +      * __\-acl__
          825  +
          826  +        This defaults to __S3::Configure \-default\-acl__ if not specified\. It
          827  +        sets the x\-amz\-acl header on the PUT operation\. If the value provided is
          828  +        *calc*, the x\-amz\-acl header is calculated based on the I/O
          829  +        permissions of the file to be uploaded; it is an error to specify
          830  +        *calc* and __\-content__\. If the value provided is *keep*, the
          831  +        acl of the resource is read before the PUT \(or the default is used if
          832  +        the resource does not exist\), then set back to what it was after the PUT
          833  +        \(if it existed\)\. An error will occur if the resource is successfully
          834  +        written but the kept ACL cannot be then applied\. This should never
          835  +        happen\. *Note:* *calc* is not currently fully implemented\.
          836  +
          837  +      * __\-x\-amz\-meta\-\*__
          838  +
          839  +        If any header starts with "\-x\-amz\-meta\-", its contents are added to the
          840  +        PUT command to be stored as metadata with the resource\. Again, no
          841  +        encoding is performed, and the metadata should not contain characters
          842  +        like newlines, carriage returns, and so on\. It is best to stick with
          843  +        simple ASCII strings, or to fix the library in several places\.
          844  +
          845  +      * __\-content\-type__
          846  +
          847  +        This overrides the content\-type calculated by __\-file__ or sets the
          848  +        content\-type for __\-content__\.
          849  +
          850  +      * __\-compare__
          851  +
          852  +        This is the standard compare mode argument\. __S3::Put__ returns 1 if
          853  +        the data was copied or 0 if the data was skipped due to the comparison
          854  +        mode so indicating it should be skipped\.
          855  +
          856  +  - <a name='9'></a>__S3::Get__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-compare__ *comparemode*? ?__\-file__ *filename*? ?__\-content__ *contentvarname*? ?__\-timestamp__ *aws&#124;now*? ?__\-headers__ *headervarname*?
          857  +
          858  +    This command retrieves data from a resource on Amazon's S3 servers, using
          859  +    the HTTP GET command\. It returns 0 if the __\-compare__ mode prevented
          860  +    the transfer, 1 if the transfer worked, or throws an error if the transfer
          861  +    was attempted but failed\. Server 5XX errors and S3 socket errors are are
          862  +    retried according to __S3:Configure__ settings before throwing an error;
          863  +    other errors throw immediately\. Note that this is always authenticated as
          864  +    the user configured in via __S3::Configure \-accesskeyid__\. Use the
          865  +    Tcllib http for unauthenticated GETs\.
          866  +
          867  +      * __\-bucket__
          868  +
          869  +        This specifies the bucket from which the resource will be read\. Leading
          870  +        and/or trailing slashes are removed for you, as are spaces\.
          871  +
          872  +      * __\-resource__
          873  +
          874  +        This is the full name of the resource within the bucket\. A single
          875  +        leading slash is removed, but not a trailing slash\. Spaces are not
          876  +        trimmed\.
          877  +
          878  +      * __\-blocking__
          879  +
          880  +        The standard blocking flag\.
          881  +
          882  +      * __\-file__
          883  +
          884  +        If this is specified, the body of the resource will be read into this
          885  +        file, incrementally without pulling it entirely into memory first\. The
          886  +        parent directory must already exist\. If the file already exists, it must
          887  +        be writable\. If an error is thrown part\-way through the process and the
          888  +        file already existed, it may be clobbered\. If an error is thrown
          889  +        part\-way through the process and the file did not already exist, any
          890  +        partial bits will be deleted\. Specifying this is an error if
          891  +        __\-content__ is also specified, but at least one of __\-file__ or
          892  +        __\-content__ must be specified\.
          893  +
          894  +      * __\-timestamp__
          895  +
          896  +        This is only valid in conjunction with __\-file__\. It may be
          897  +        specified as *now* or *aws*\. The default is *now*\. If *now*, the
          898  +        file's modification date is left up to the system\. If *aws*, the
          899  +        file's mtime is set to match the Last\-Modified header on the resource,
          900  +        synchronizing the two appropriately for __\-compare__ *date* or
          901  +        __\-compare__ *newer*\.
          902  +
          903  +      * __\-content__
          904  +
          905  +        If this is specified, the *contentvarname* is a variable in the
          906  +        caller's scope \(not necessarily global\) that receives the value of the
          907  +        body of the resource\. No encoding is done, so if the resource \(for
          908  +        example\) represents a UTF\-8 byte sequence, use \[encoding convertfrom
          909  +        utf\-8\] to get a valid UTF\-8 string\. If this is specified, the
          910  +        __\-compare__ is ignored unless it is *never*, in which case no
          911  +        assignment to *contentvarname* is performed\. Specifying this is an
          912  +        error if __\-file__ is also specified, but at least one of
          913  +        __\-file__ or __\-content__ must be specified\.
          914  +
          915  +      * __\-compare__
          916  +
          917  +        This is the standard compare mode argument\. __S3::Get__ returns 1 if
          918  +        the data was copied or 0 if the data was skipped due to the comparison
          919  +        mode so indicating it should be skipped\.
          920  +
          921  +      * __\-headers__
          922  +
          923  +        If this is specified, the headers resulting from the fetch are stored in
          924  +        the provided variable, as a dictionary\. This will include content\-type
          925  +        and x\-amz\-meta\-\* headers, as well as the usual HTTP headers, the
          926  +        x\-amz\-id debugging headers, and so on\. If no file is fetched \(due to
          927  +        __\-compare__ or other errors\), no assignment to this variable is
          928  +        performed\.
          929  +
          930  +  - <a name='10'></a>__S3::Head__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-dict__ *dictvarname*? ?__\-headers__ *headersvarname*? ?__\-status__ *statusvarname*?
          931  +
          932  +    This command requests HEAD from the resource\. It returns whether a 2XX code
          933  +    was returned as a result of the request, never throwing an S3 remote error\.
          934  +    That is, if this returns 1, the resource exists and is accessible\. If this
          935  +    returns 0, something went wrong, and the __\-status__ result can be
          936  +    consulted for details\.
          937  +
          938  +      * __\-bucket__
          939  +
          940  +        This specifies the bucket from which the resource will be read\. Leading
          941  +        and/or trailing slashes are removed for you, as are spaces\.
          942  +
          943  +      * __\-resource__
          944  +
          945  +        This is the full name of the resource within the bucket\. A single
          946  +        leading slash is removed, but not a trailing slash\. Spaces are not
          947  +        trimmed\.
          948  +
          949  +      * __\-blocking__
          950  +
          951  +        The standard blocking flag\.
          952  +
          953  +      * __\-dict__
          954  +
          955  +        If specified, the resulting dictionary from the __S3::REST__ call is
          956  +        assigned to the indicated \(not necessarily global\) variable in the
          957  +        caller's scope\.
          958  +
          959  +      * __\-headers__
          960  +
          961  +        If specified, the dictionary of headers from the result are assigned to
          962  +        the indicated \(not necessarily global\) variable in the caller's scope\.
          963  +
          964  +      * __\-status__
          965  +
          966  +        If specified, the indicated \(not necessarily global\) variable in the
          967  +        caller's scope is assigned a 2\-element list\. The first element is the
          968  +        3\-digit HTTP status code, while the second element is the HTTP message
          969  +        \(such as "OK" or "Forbidden"\)\.
          970  +
          971  +  - <a name='11'></a>__S3::GetAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-result\-type__ *REST&#124;xml&#124;pxml*?
          972  +
          973  +    This command gets the ACL of the indicated resource or throws an error if it
          974  +    is unavailable\.
          975  +
          976  +      * __\-blocking__ *boolean*
          977  +
          978  +        See above for standard definition\.
          979  +
          980  +      * __\-bucket__
          981  +
          982  +        This specifies the bucket from which the resource will be read\. Leading
          983  +        and/or trailing slashes are removed for you, as are spaces\.
          984  +
          985  +      * __\-resource__
          986  +
          987  +        This is the full name of the resource within the bucket\. A single
          988  +        leading slash is removed, but not a trailing slash\. Spaces are not
          989  +        trimmed\.
          990  +
          991  +      * __\-parse\-xml__ *xml*
          992  +
          993  +        The XML from a previous GetACL can be passed in to be parsed into
          994  +        dictionary form\. In this case, \-result\-type must be pxml or dict\.
          995  +
          996  +      * __\-result\-type__ *REST*
          997  +
          998  +        The dictionary returned by __S3::REST__ is the return value of
          999  +        __S3::GetAcl__\. In this case, a non\-2XX httpstatus will not throw an
         1000  +        error\.
         1001  +
         1002  +      * __\-result\-type__ *xml*
         1003  +
         1004  +        The raw XML of the body is returned as the result \(with no encoding
         1005  +        applied\)\.
         1006  +
         1007  +      * __\-result\-type__ *pxml*
         1008  +
         1009  +        The XML of the body as parsed by __xsxp::parse__ is returned\.
         1010  +
         1011  +      * __\-result\-type__ *dict*
         1012  +
         1013  +        This fetches the ACL, parses it, and returns a dictionary of two
         1014  +        elements\.
         1015  +
         1016  +        The first element has the key "owner" whose value is the canonical ID of
         1017  +        the owner of the resource\.
         1018  +
         1019  +        The second element has the key "acl" whose value is a dictionary\. Each
         1020  +        key in the dictionary is one of Amazon's permissions, namely "READ",
         1021  +        "WRITE", "READ\_ACP", "WRITE\_ACP", or "FULL\_CONTROL"\. Each value of each
         1022  +        key is a list of canonical IDs or group URLs that have that permission\.
         1023  +        Elements are not in the list in any particular order, and not all keys
         1024  +        are necessarily present\. Display names are not returned, as they are not
         1025  +        especially useful; use pxml to obtain them if necessary\.
         1026  +
         1027  +  - <a name='12'></a>__S3::PutAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-acl__ *new\-acl*?
         1028  +
         1029  +    This sets the ACL on the indicated resource\. It returns the XML written to
         1030  +    the ACL, or throws an error if anything went wrong\.
         1031  +
         1032  +      * __\-blocking__ *boolean*
         1033  +
         1034  +        See above for standard definition\.
         1035  +
         1036  +      * __\-bucket__
         1037  +
         1038  +        This specifies the bucket from which the resource will be read\. Leading
         1039  +        and/or trailing slashes are removed for you, as are spaces\.
         1040  +
         1041  +      * __\-resource__
         1042  +
         1043  +        This is the full name of the resource within the bucket\. A single
         1044  +        leading slash is removed, but not a trailing slash\. Spaces are not
         1045  +        trimmed\.
         1046  +
         1047  +      * __\-owner__
         1048  +
         1049  +        If this is provided, it is assumed to match the owner of the resource\.
         1050  +        Otherwise, a GET may need to be issued against the resource to find the
         1051  +        owner\. If you already have the owner \(such as from a call to
         1052  +        __S3::GetAcl__, you can pass the value of the "owner" key as the
         1053  +        value of this option, and it will be used in the construction of the
         1054  +        XML\.
         1055  +
         1056  +      * __\-acl__
         1057  +
         1058  +        If this option is specified, it provides the ACL the caller wishes to
         1059  +        write to the resource\. If this is not supplied or is empty, the value is
         1060  +        taken from __S3::Configure \-default\-acl__\. The ACL is written with a
         1061  +        PUT to the ?acl resource\.
         1062  +
         1063  +        If the value passed to this option starts with "<", it is taken to be a
         1064  +        body to be PUT to the ACL resource\.
         1065  +
         1066  +        If the value matches one of the standard Amazon x\-amz\-acl headers \(i\.e\.,
         1067  +        a canned access policy\), that header is translated to XML and then
         1068  +        applied\. The canned access policies are private, public\-read,
         1069  +        public\-read\-write, and authenticated\-read \(in lower case\)\.
         1070  +
         1071  +        Otherwise, the value is assumed to be a dictionary formatted as the
         1072  +        "acl" sub\-entry within the dict returns by __S3::GetAcl \-result\-type
         1073  +        dict__\. The proper XML is generated and applied to the resource\. Note
         1074  +        that a value containing "//" is assumed to be a group, a value
         1075  +        containing "@" is assumed to be an AmazonCustomerByEmail, and otherwise
         1076  +        the value is assumed to be a canonical Amazon ID\.
         1077  +
         1078  +        Note that you cannot change the owner, so calling GetAcl on a resource
         1079  +        owned by one user and applying it via PutAcl on a resource owned by
         1080  +        another user may not do exactly what you expect\.
         1081  +
         1082  +  - <a name='13'></a>__S3::Delete__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-status__ *statusvar*?
         1083  +
         1084  +    This command deletes the specified resource from the specified bucket\. It
         1085  +    returns 1 if the resource was deleted successfully, 0 otherwise\. It returns
         1086  +    0 rather than throwing an S3 remote error\.
         1087  +
         1088  +      * __\-bucket__
         1089  +
         1090  +        This specifies the bucket from which the resource will be deleted\.
         1091  +        Leading and/or trailing slashes are removed for you, as are spaces\.
         1092  +
         1093  +      * __\-resource__
         1094  +
         1095  +        This is the full name of the resource within the bucket\. A single
         1096  +        leading slash is removed, but not a trailing slash\. Spaces are not
         1097  +        trimmed\.
         1098  +
         1099  +      * __\-blocking__
         1100  +
         1101  +        The standard blocking flag\.
         1102  +
         1103  +      * __\-status__
         1104  +
         1105  +        If specified, the indicated \(not necessarily global\) variable in the
         1106  +        caller's scope is set to a two\-element list\. The first element is the
         1107  +        3\-digit HTTP status code\. The second element is the HTTP message \(such
         1108  +        as "OK" or "Forbidden"\)\. Note that Amazon's DELETE result is 204 on
         1109  +        success, that being the code indicating no content in the returned body\.
         1110  +
         1111  +  - <a name='14'></a>__S3::Push__ ?__\-bucket__ *bucketname*? __\-directory__ *directoryname* ?__\-prefix__ *prefixstring*? ?__\-compare__ *comparemode*? ?__\-x\-amz\-meta\-\*__ *metastring*? ?__\-acl__ *aclcode*? ?__\-delete__ *boolean*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?
         1112  +
         1113  +    This synchronises a local directory with a remote bucket by pushing the
         1114  +    differences using __S3::Put__\. Note that if something has changed in the
         1115  +    bucket but not locally, those changes could be lost\. Thus, this is not a
         1116  +    general two\-way synchronization primitive\. \(See __S3::Sync__ for that\.\)
         1117  +    Note too that resource names are case sensitive, so changing the case of a
         1118  +    file on a Windows machine may lead to otherwise\-unnecessary transfers\. Note
         1119  +    that only regular files are considered, so devices, pipes, symlinks, and
         1120  +    directories are not copied\.
         1121  +
         1122  +      * __\-bucket__
         1123  +
         1124  +        This names the bucket into which data will be pushed\.
         1125  +
         1126  +      * __\-directory__
         1127  +
         1128  +        This names the local directory from which files will be taken\. It must
         1129  +        exist, be readable via \[glob\] and so on\. If only some of the files
         1130  +        therein are readable, __S3::Push__ will PUT those files that are
         1131  +        readable and return in its results the list of files that could not be
         1132  +        opened\.
         1133  +
         1134  +      * __\-prefix__
         1135  +
         1136  +        This names the prefix that will be added to all resources\. That is, it
         1137  +        is the remote equivalent of __\-directory__\. If it is not specified,
         1138  +        the root of the bucket will be treated as the remote directory\. An
         1139  +        example may clarify\.
         1140  +
         1141  +            S3::Push -bucket test -directory /tmp/xyz -prefix hello/world
         1142  +
         1143  +        In this example, /tmp/xyz/pdq\.html will be stored as
         1144  +        http://s3\.amazonaws\.com/test/hello/world/pdq\.html in Amazon's servers\.
         1145  +        Also, /tmp/xyz/abc/def/Hello will be stored as
         1146  +        http://s3\.amazonaws\.com/test/hello/world/abc/def/Hello in Amazon's
         1147  +        servers\. Without the __\-prefix__ option, /tmp/xyz/pdq\.html would be
         1148  +        stored as http://s3\.amazonaws\.com/test/pdq\.html\.
         1149  +
         1150  +      * __\-blocking__
         1151  +
         1152  +        This is the standard blocking option\.
         1153  +
         1154  +      * __\-compare__
         1155  +
         1156  +        If present, this is passed to each invocation of __S3::Put__\.
         1157  +        Naturally, __S3::Configure \-default\-compare__ is used if this is not
         1158  +        specified\.
         1159  +
         1160  +      * __\-x\-amz\-meta\-\*__
         1161  +
         1162  +        If present, this is passed to each invocation of __S3::Put__\. All
         1163  +        copied files will have the same metadata\.
         1164  +
         1165  +      * __\-acl__
         1166  +
         1167  +        If present, this is passed to each invocation of __S3::Put__\.
         1168  +
         1169  +      * __\-delete__
         1170  +
         1171  +        This defaults to false\. If true, resources in the destination that are
         1172  +        not in the source directory are deleted with __S3::Delete__\. Since
         1173  +        only regular files are considered, the existance of a symlink, pipe,
         1174  +        device, or directory in the local source will *not* prevent the
         1175  +        deletion of a remote resource with a corresponding name\.
         1176  +
         1177  +      * __\-error__
         1178  +
         1179  +        This controls the behavior of __S3::Push__ in the event that
         1180  +        __S3::Put__ throws an error\. Note that errors encountered on the
         1181  +        local file system or in reading the list of resources in the remote
         1182  +        bucket always throw errors\. This option allows control over "partial"
         1183  +        errors, when some files were copied and some were not\.
         1184  +        __S3::Delete__ is always finished up, with errors simply recorded in
         1185  +        the return result\.
         1186  +
         1187  +          + throw
         1188  +
         1189  +            The error is rethrown with the same errorCode\.
         1190  +
         1191  +          + break
         1192  +
         1193  +            Processing stops without throwing an error, the error is recorded in
         1194  +            the return value, and the command returns with a normal return\. The
         1195  +            calls to __S3::Delete__ are not started\.
         1196  +
         1197  +          + continue
         1198  +
         1199  +            This is the default\. Processing continues without throwing,
         1200  +            recording the error in the return result, and resuming with the next
         1201  +            file in the local directory to be copied\.
         1202  +
         1203  +      * __\-progress__
         1204  +
         1205  +        If this is specified and the indicated script prefix is not empty, the
         1206  +        indicated script prefix will be invoked several times in the caller's
         1207  +        context with additional arguments at various points in the processing\.
         1208  +        This allows progress reporting without backgrounding\. The provided
         1209  +        prefix will be invoked with additional arguments, with the first
         1210  +        additional argument indicating what part of the process is being
         1211  +        reported on\. The prefix is initially invoked with *args* as the first
         1212  +        additional argument and a dictionary representing the normalized
         1213  +        arguments to the __S3::Push__ call as the second additional
         1214  +        argument\. Then the prefix is invoked with *local* as the first
         1215  +        additional argument and a list of suffixes of the files to be considered
         1216  +        as the second argument\. Then the prefix is invoked with *remote* as
         1217  +        the first additional argument and a list of suffixes existing in the
         1218  +        remote bucket as the second additional argument\. Then, for each file in
         1219  +        the local list, the prefix will be invoked with *start* as the first
         1220  +        additional argument and the common suffix as the second additional
         1221  +        argument\. When __S3::Put__ returns for that file, the prefix will be
         1222  +        invoked with *copy* as the first additional argument, the common
         1223  +        suffix as the second additional argument, and a third argument that will
         1224  +        be "copied" \(if __S3::Put__ sent the resource\), "skipped" \(if
         1225  +        __S3::Put__ decided not to based on __\-compare__\), or the
         1226  +        errorCode that __S3::Put__ threw due to unexpected errors \(in which
         1227  +        case the third argument is a list that starts with "S3"\)\. When all files
         1228  +        have been transfered, the prefix may be invoked zero or more times with
         1229  +        *delete* as the first additional argument and the suffix of the
         1230  +        resource being deleted as the second additional argument, with a third
         1231  +        argument being either an empty string \(if the delete worked\) or the
         1232  +        errorCode from __S3::Delete__ if it failed\. Finally, the prefix will
         1233  +        be invoked with *finished* as the first additional argument and the
         1234  +        return value as the second additional argument\.
         1235  +
         1236  +    The return result from this command is a dictionary\. They keys are the
         1237  +    suffixes \(i\.e\., the common portion of the path after the __\-directory__
         1238  +    and __\-prefix__\), while the values are either "copied", "skipped" \(if
         1239  +    __\-compare__ indicated not to copy the file\), or the errorCode thrown by
         1240  +    __S3::Put__, as appropriate\. If __\-delete__ was true, there may also
         1241  +    be entries for suffixes with the value "deleted" or "notdeleted", indicating
         1242  +    whether the attempted __S3::Delete__ worked or not, respectively\. There
         1243  +    is one additional pair in the return result, whose key is the empty string
         1244  +    and whose value is a nested dictionary\. The keys of this nested dictionary
         1245  +    include "filescopied" \(the number of files successfully copied\),
         1246  +    "bytescopied" \(the number of data bytes in the files copied, excluding
         1247  +    headers, metadata, etc\), "compareskipped" \(the number of files not copied
         1248  +    due to __\-compare__ mode\), "errorskipped" \(the number of files not
         1249  +    copied due to thrown errors\), "filesdeleted" \(the number of resources
         1250  +    deleted due to not having corresponding files locally, or 0 if
         1251  +    __\-delete__ is false\), and "filesnotdeleted" \(the number of resources
         1252  +    whose deletion was attempted but failed\)\.
         1253  +
         1254  +    Note that this is currently implemented somewhat inefficiently\. It fetches
         1255  +    the bucket listing \(including timestamps and eTags\), then calls
         1256  +    __S3::Put__, which uses HEAD to find the timestamps and eTags again\.
         1257  +    Correcting this with no API change is planned for a future upgrade\.
         1258  +
         1259  +  - <a name='15'></a>__S3::Pull__ ?__\-bucket__ *bucketname*? __\-directory__ *directoryname* ?__\-prefix__ *prefixstring*? ?__\-blocking__ *boolean*? ?__\-compare__ *comparemode*? ?__\-delete__ *boolean*? ?__\-timestamp__ *aws&#124;now*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?
         1260  +
         1261  +    This synchronises a remote bucket with a local directory by pulling the
         1262  +    differences using __S3::Get__ If something has been changed locally but
         1263  +    not in the bucket, those difference may be lost\. This is not a general
         1264  +    two\-way synchronization mechanism\. \(See __S3::Sync__ for that\.\) This
         1265  +    creates directories if needed; new directories are created with default
         1266  +    permissions\. Note that resource names are case sensitive, so changing the
         1267  +    case of a file on a Windows machine may lead to otherwise\-unnecessary
         1268  +    transfers\. Also, try not to store data in resources that end with a slash,
         1269  +    or which are prefixes of resources that otherwise would start with a slash;
         1270  +    i\.e\., don't use this if you store data in resources whose names have to be
         1271  +    directories locally\.
         1272  +
         1273  +    Note that this is currently implemented somewhat inefficiently\. It fetches
         1274  +    the bucket listing \(including timestamps and eTags\), then calls
         1275  +    __S3::Get__, which uses HEAD to find the timestamps and eTags again\.
         1276  +    Correcting this with no API change is planned for a future upgrade\.
         1277  +
         1278  +      * __\-bucket__
         1279  +
         1280  +        This names the bucket from which data will be pulled\.
         1281  +
         1282  +      * __\-directory__
         1283  +
         1284  +        This names the local directory into which files will be written It must
         1285  +        exist, be readable via \[glob\], writable for file creation, and so on\. If
         1286  +        only some of the files therein are writable, __S3::Pull__ will GET
         1287  +        those files that are writable and return in its results the list of
         1288  +        files that could not be opened\.
         1289  +
         1290  +      * __\-prefix__
         1291  +
         1292  +        The prefix of resources that will be considered for retrieval\. See
         1293  +        __S3::Push__ for more details, examples, etc\. \(Of course,
         1294  +        __S3::Pull__ reads rather than writes, but the prefix is treated
         1295  +        similarly\.\)
         1296  +
         1297  +      * __\-blocking__
         1298  +
         1299  +        This is the standard blocking option\.
         1300  +
         1301  +      * __\-compare__
         1302  +
         1303  +        This is passed to each invocation of __S3::Get__ if provided\.
         1304  +        Naturally, __S3::Configure \-default\-compare__ is used if this is not
         1305  +        provided\.
         1306  +
         1307  +      * __\-timestamp__
         1308  +
         1309  +        This is passed to each invocation of __S3::Get__ if provided\.
         1310  +
         1311  +      * __\-delete__
         1312  +
         1313  +        If this is specified and true, files that exist in the
         1314  +        __\-directory__ that are not in the __\-prefix__ will be deleted
         1315  +        after all resources have been copied\. In addition, empty directories
         1316  +        \(other than the top\-level __\-directory__\) will be deleted, as Amazon
         1317  +        S3 has no concept of an empty directory\.
         1318  +
         1319  +      * __\-error__
         1320  +
         1321  +        See __S3::Push__ for a description of this option\.
         1322  +
         1323  +      * __\-progress__
         1324  +
         1325  +        See __S3::Push__ for a description of this option\. It differs
         1326  +        slightly in that local directories may be included with a trailing slash
         1327  +        to indicate they are directories\.
         1328  +
         1329  +    The return value from this command is a dictionary\. It is identical in form
         1330  +    and meaning to the description of the return result of __S3::Push__\. It
         1331  +    differs only in that directories may be included, with a trailing slash in
         1332  +    their name, if they are empty and get deleted\.
         1333  +
         1334  +  - <a name='16'></a>__S3::Toss__ ?__\-bucket__ *bucketname*? __\-prefix__ *prefixstring* ?__\-blocking__ *boolean*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?
         1335  +
         1336  +    This deletes some or all resources within a bucket\. It would be considered a
         1337  +    "recursive delete" had Amazon implemented actual directories\.
         1338  +
         1339  +      * __\-bucket__
         1340  +
         1341  +        The bucket from which resources will be deleted\.
         1342  +
         1343  +      * ____\-blocking____
         1344  +
         1345  +        The standard blocking option\.
         1346  +
         1347  +      * ____\-prefix____
         1348  +
         1349  +        The prefix for resources to be deleted\. Any resource that starts with
         1350  +        this string will be deleted\. This is required\. To delete everything in
         1351  +        the bucket, pass an empty string for the prefix\.
         1352  +
         1353  +      * ____\-error____
         1354  +
         1355  +        If this is "throw", __S3::Toss__ rethrows any errors it encounters\.
         1356  +        If this is "break", __S3::Toss__ returns with a normal return after
         1357  +        the first error, recording that error in the return result\. If this is
         1358  +        "continue", which is the default, __S3::Toss__ continues on and
         1359  +        lists all errors in the return result\.
         1360  +
         1361  +      * ____\-progress____
         1362  +
         1363  +        If this is specified and not an empty string, the script prefix will be
         1364  +        invoked several times in the context of the caller with additional
         1365  +        arguments appended\. Initially, it will be invoked with the first
         1366  +        additional argument being *args* and the second being the processed
         1367  +        list of arguments to __S3::Toss__\. Then it is invoked with
         1368  +        *remote* as the first additional argument and the list of suffixes in
         1369  +        the bucket to be deleted as the second additional argument\. Then it is
         1370  +        invoked with the first additional argument being *delete* and the
         1371  +        second additional argument being the suffix deleted and the third
         1372  +        additional argument being "deleted" or "notdeleted" depending on whether
         1373  +        __S3::Delete__ threw an error\. Finally, the script prefix is invoked
         1374  +        with a first additional argument of "finished" and a second additional
         1375  +        argument of the return value\.
         1376  +
         1377  +    The return value is a dictionary\. The keys are the suffixes of files that
         1378  +    __S3::Toss__ attempted to delete, and whose values are either the string
         1379  +    "deleted" or "notdeleted"\. There is also one additional pair, whose key is
         1380  +    the empty string and whose value is an embedded dictionary\. The keys of this
         1381  +    embedded dictionary include "filesdeleted" and "filesnotdeleted", each of
         1382  +    which has integer values\.
         1383  +
         1384  +# <a name='section6'></a>LIMITATIONS
         1385  +
         1386  +  - The pure\-Tcl MD5 checking is slow\. If you are processing files in the
         1387  +    megabyte range, consider ensuring binary support is available\.
         1388  +
         1389  +  - The commands __S3::Pull__ and __S3::Push__ fetch a directory listing
         1390  +    which includes timestamps and MD5 hashes, then invoke __S3::Get__ and
         1391  +    __S3::Put__\. If a complex __\-compare__ mode is specified,
         1392  +    __S3::Get__ and __S3::Put__ will invoke a HEAD operation for each
         1393  +    file to fetch timestamps and MD5 hashes of each resource again\. It is
         1394  +    expected that a future release of this package will solve this without any
         1395  +    API changes\.
         1396  +
         1397  +  - The commands __S3::Pull__ and __S3::Push__ fetch a directory listing
         1398  +    without using __\-max\-count__\. The entire directory is pulled into memory
         1399  +    at once\. For very large buckets, this could be a performance problem\. The
         1400  +    author, at this time, does not plan to change this behavior\. Welcome to Open
         1401  +    Source\.
         1402  +
         1403  +  - __S3::Sync__ is neither designed nor implemented yet\. The intention
         1404  +    would be to keep changes synchronised, so changes could be made to both the
         1405  +    bucket and the local directory and be merged by __S3::Sync__\.
         1406  +
         1407  +  - Nor is __\-compare__ *calc* fully implemented\. This is primarily due to
         1408  +    Windows not providing a convenient method for distinguishing between local
         1409  +    files that are "public\-read" or "public\-read\-write"\. Assistance figuring out
         1410  +    TWAPI for this would be appreciated\. The U\*\*X semantics are difficult to map
         1411  +    directly as well\. See the source for details\. Note that there are not tests
         1412  +    for calc, since it isn't done yet\.
         1413  +
         1414  +  - The HTTP processing is implemented within the library, rather than using a
         1415  +    "real" HTTP package\. Hence, multi\-line headers are not \(yet\) handled
         1416  +    correctly\. Do not include carriage returns or linefeeds in x\-amz\-meta\-\*
         1417  +    headers, content\-type values, and so on\. The author does not at this time
         1418  +    expect to improve this\.
         1419  +
         1420  +  - Internally, __S3::Push__ and __S3::Pull__ and __S3::Toss__ are
         1421  +    all very similar and should be refactored\.
         1422  +
         1423  +  - The idea of using __\-compare__ *never* __\-delete__ *true* to
         1424  +    delete files that have been deleted from one place but not the other yet not
         1425  +    copying changed files is untested\.
         1426  +
         1427  +# <a name='section7'></a>USAGE SUGGESTIONS
         1428  +
         1429  +To fetch a "directory" out of a bucket, make changes, and store it back:
         1430  +
         1431  +    file mkdir ./tempfiles
         1432  +    S3::Pull -bucket sample -prefix of/interest -directory ./tempfiles \
         1433  +      -timestamp aws
         1434  +    do_my_process ./tempfiles other arguments
         1435  +    S3::Push -bucket sample -prefix of/interest -directory ./tempfiles \
         1436  +      -compare newer -delete true
         1437  +
         1438  +To delete files locally that were deleted off of S3 but not otherwise update
         1439  +files:
         1440  +
         1441  +    S3::Pull -bucket sample -prefix of/interest -directory ./myfiles \
         1442  +      -compare never -delete true
         1443  +
         1444  +# <a name='section8'></a>FUTURE DEVELOPMENTS
         1445  +
         1446  +The author intends to work on several additional projects related to this
         1447  +package, in addition to finishing the unfinished features\.
         1448  +
         1449  +First, a command\-line program allowing browsing of buckets and transfer of files
         1450  +from shell scripts and command prompts is useful\.
         1451  +
         1452  +Second, a GUI\-based program allowing visual manipulation of bucket and resource
         1453  +trees not unlike Windows Explorer would be useful\.
         1454  +
         1455  +Third, a command\-line \(and perhaps a GUI\-based\) program called "OddJob" that
         1456  +will use S3 to synchronize computation amongst multiple servers running OddJob\.
         1457  +An S3 bucket will be set up with a number of scripts to run, and the OddJob
         1458  +program can be invoked on multiple machines to run scripts on all the machines,
         1459  +each moving on to the next unstarted task as it finishes each\. This is still
         1460  +being designed, and it is intended primarily to be run on Amazon's Elastic
         1461  +Compute Cloud\.
         1462  +
         1463  +# <a name='section9'></a>TLS Security Considerations
         1464  +
         1465  +This package uses the __[TLS](\.\./\.\./\.\./\.\./index\.md\#tls)__ package to
         1466  +handle the security for __https__ urls and other socket connections\.
         1467  +
         1468  +Policy decisions like the set of protocols to support and what ciphers to use
         1469  +are not the responsibility of __[TLS](\.\./\.\./\.\./\.\./index\.md\#tls)__, nor
         1470  +of this package itself however\. Such decisions are the responsibility of
         1471  +whichever application is using the package, and are likely influenced by the set
         1472  +of servers the application will talk to as well\.
         1473  +
         1474  +For example, in light of the recent [POODLE
         1475  +attack](http://googleonlinesecurity\.blogspot\.co\.uk/2014/10/this\-poodle\-bites\-exploiting\-ssl\-30\.html)
         1476  +discovered by Google many servers will disable support for the SSLv3 protocol\.
         1477  +To handle this change the applications using
         1478  +__[TLS](\.\./\.\./\.\./\.\./index\.md\#tls)__ must be patched, and not this
         1479  +package, nor __[TLS](\.\./\.\./\.\./\.\./index\.md\#tls)__ itself\. Such a patch
         1480  +may be as simple as generally activating __tls1__ support, as shown in the
         1481  +example below\.
         1482  +
         1483  +    package require tls
         1484  +    tls::init -tls1 1 ;# forcibly activate support for the TLS1 protocol
         1485  +
         1486  +    ... your own application code ...
         1487  +
         1488  +# <a name='section10'></a>Bugs, Ideas, Feedback
         1489  +
         1490  +This document, and the package it describes, will undoubtedly contain bugs and
         1491  +other problems\. Please report such in the category *amazon\-s3* of the [Tcllib
         1492  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
         1493  +for enhancements you may have for either package and/or documentation\.
         1494  +
         1495  +When proposing code changes, please provide *unified diffs*, i\.e the output of
         1496  +__diff \-u__\.
         1497  +
         1498  +Note further that *attachments* are strongly preferred over inlined patches\.
         1499  +Attachments can be made by going to the __Edit__ form of the ticket
         1500  +immediately after its creation, and then using the left\-most button in the
         1501  +secondary navigation bar\.
         1502  +
         1503  +# <a name='keywords'></a>KEYWORDS
         1504  +
         1505  +[amazon](\.\./\.\./\.\./\.\./index\.md\#amazon),
         1506  +[cloud](\.\./\.\./\.\./\.\./index\.md\#cloud), [s3](\.\./\.\./\.\./\.\./index\.md\#s3)
         1507  +
         1508  +# <a name='category'></a>CATEGORY
         1509  +
         1510  +Networking
         1511  +
         1512  +# <a name='copyright'></a>COPYRIGHT
         1513  +
         1514  +2006,2008 Darren New\. All Rights Reserved\. See LICENSE\.TXT for terms\.

Added embedded/md/tcllib/files/modules/amazon-s3/xsxp.md.

            1  +
            2  +[//000000001]: # (xsxp \- Amazon S3 Web Service Utilities)
            3  +[//000000002]: # (Generated from file 'xsxp\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (2006 Darren New\. All Rights Reserved\.)
            5  +[//000000004]: # (xsxp\(n\) 1\.0 tcllib "Amazon S3 Web Service Utilities")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +xsxp \- eXtremely Simple Xml Parser
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [COMMANDS](#section2)
           27  +
           28  +  - [Bugs, Ideas, Feedback](#section3)
           29  +
           30  +  - [Keywords](#keywords)
           31  +
           32  +  - [Category](#category)
           33  +
           34  +  - [Copyright](#copyright)
           35  +
           36  +# <a name='synopsis'></a>SYNOPSIS
           37  +
           38  +package require Tcl 8\.4  
           39  +package require xsxp 1  
           40  +package require xml  
           41  +
           42  +[__xsxp::parse__ *xml*](#1)  
           43  +[__xsxp::fetch__ *pxml* *path* ?*part*?](#2)  
           44  +[__xsxp::fetchall__ *pxml\_list* *path* ?*part*?](#3)  
           45  +[__xsxp::only__ *pxml* *tagname*](#4)  
           46  +[__xsxp::prettyprint__ *pxml* ?*chan*?](#5)  
           47  +
           48  +# <a name='description'></a>DESCRIPTION
           49  +
           50  +This package provides a simple interface to parse XML into a pure\-value list\. It
           51  +also provides accessor routines to pull out specific subtags, not unlike DOM
           52  +access\. This package was written for and is used by Darren New's Amazon S3
           53  +access package\.
           54  +
           55  +This is pretty lame, but I needed something like this for S3, and at the time,
           56  +TclDOM would not work with the new 8\.5 Tcl due to version number problems\.
           57  +
           58  +In addition, this is a pure\-value implementation\. There is no garbage to clean
           59  +up in the event of a thrown error, for example\. This simplifies the code for
           60  +sufficiently small XML documents, which is what Amazon's S3 guarantees\.
           61  +
           62  +Copyright 2006 Darren New\. All Rights Reserved\. NO WARRANTIES OF ANY TYPE ARE
           63  +PROVIDED\. COPYING OR USE INDEMNIFIES THE AUTHOR IN ALL WAYS\. This software is
           64  +licensed under essentially the same terms as Tcl\. See LICENSE\.txt for the terms\.
           65  +
           66  +# <a name='section2'></a>COMMANDS
           67  +
           68  +The package implements five rather simple procedures\. One parses, one is for
           69  +debugging, and the rest pull various parts of the parsed document out for
           70  +processing\.
           71  +
           72  +  - <a name='1'></a>__xsxp::parse__ *xml*
           73  +
           74  +    This parses an XML document \(using the standard xml tcllib module in a SAX
           75  +    sort of way\) and builds a data structure which it returns if the parsing
           76  +    succeeded\. The return value is referred to herein as a "pxml", or "parsed
           77  +    xml"\. The list consists of two or more elements:
           78  +
           79  +      * The first element is the name of the tag\.
           80  +
           81  +      * The second element is an array\-get formatted list of key/value pairs\.
           82  +        The keys are attribute names and the values are attribute values\. This
           83  +        is an empty list if there are no attributes on the tag\.
           84  +
           85  +      * The third through end elements are the children of the node, if any\.
           86  +        Each child is, recursively, a pxml\.
           87  +
           88  +      * Note that if the zero'th element, i\.e\. the tag name, is "%PCDATA", then
           89  +        the attributes will be empty and the third element will be the text of
           90  +        the element\. In addition, if an element's contents consists only of
           91  +        PCDATA, it will have only one child, and all the PCDATA will be
           92  +        concatenated\. In other words, this parser works poorly for XML with
           93  +        elements that contain both child tags and PCDATA\. Since Amazon S3 does
           94  +        not do this \(and for that matter most uses of XML where XML is a poor
           95  +        choice don't do this\), this is probably not a serious limitation\.
           96  +
           97  +  - <a name='2'></a>__xsxp::fetch__ *pxml* *path* ?*part*?
           98  +
           99  +    *pxml* is a parsed XML, as returned from xsxp::parse\. *path* is a list
          100  +    of element tag names\. Each element is the name of a child to look up,
          101  +    optionally followed by a hash \("\#"\) and a string of digits\. An empty list or
          102  +    an initial empty element selects *pxml*\. If no hash sign is present, the
          103  +    behavior is as if "\#0" had been appended to that element\. \(In addition to a
          104  +    list, slashes can separate subparts where convenient\.\)
          105  +
          106  +    An element of *path* scans the children at the indicated level for the
          107  +    n'th instance of a child whose tag matches the part of the element before
          108  +    the hash sign\. If an element is simply "\#" followed by digits, that indexed
          109  +    child is selected, regardless of the tags in the children\. Hence, an element
          110  +    of "\#3" will always select the fourth child of the node under consideration\.
          111  +
          112  +    *part* defaults to "%ALL"\. It can be one of the following case\-sensitive
          113  +    terms:
          114  +
          115  +      * %ALL
          116  +
          117  +        returns the entire selected element\.
          118  +
          119  +      * %TAGNAME
          120  +
          121  +        returns lindex 0 of the selected element\.
          122  +
          123  +      * %ATTRIBUTES
          124  +
          125  +        returns index 1 of the selected element\.
          126  +
          127  +      * %CHILDREN
          128  +
          129  +        returns lrange 2 through end of the selected element, resulting in a
          130  +        list of elements being returned\.
          131  +
          132  +      * %PCDATA
          133  +
          134  +        returns a concatenation of all the bodies of direct children of this
          135  +        node whose tag is %PCDATA\. It throws an error if no such children are
          136  +        found\. That is, part=%PCDATA means return the textual content found in
          137  +        that node but not its children nodes\.
          138  +
          139  +      * %PCDATA?
          140  +
          141  +        is like %PCDATA, but returns an empty string if no PCDATA is found\.
          142  +
          143  +    For example, to fetch the first bold text from the fifth paragraph of the
          144  +    body of your HTML file,
          145  +
          146  +        xsxp::fetch $pxml {body p#4 b} %PCDATA
          147  +
          148  +  - <a name='3'></a>__xsxp::fetchall__ *pxml\_list* *path* ?*part*?
          149  +
          150  +    This iterates over each PXML in *pxml\_list* \(which must be a list of
          151  +    pxmls\) selecting the indicated path from it, building a new list with the
          152  +    selected data, and returning that new list\.
          153  +
          154  +    For example, *pxml\_list* might be the %CHILDREN of a particular element,
          155  +    and the *path* and *part* might select from each child a sub\-element in
          156  +    which we're interested\.
          157  +
          158  +  - <a name='4'></a>__xsxp::only__ *pxml* *tagname*
          159  +
          160  +    This iterates over the direct children of *pxml* and selects only those
          161  +    with *tagname* as their tag\. Returns a list of matching elements\.
          162  +
          163  +  - <a name='5'></a>__xsxp::prettyprint__ *pxml* ?*chan*?
          164  +
          165  +    This outputs to *chan* \(default stdout\) a pretty\-printed version of
          166  +    *pxml*\.
          167  +
          168  +# <a name='section3'></a>Bugs, Ideas, Feedback
          169  +
          170  +This document, and the package it describes, will undoubtedly contain bugs and
          171  +other problems\. Please report such in the category *amazon\-s3* of the [Tcllib
          172  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          173  +for enhancements you may have for either package and/or documentation\.
          174  +
          175  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          176  +__diff \-u__\.
          177  +
          178  +Note further that *attachments* are strongly preferred over inlined patches\.
          179  +Attachments can be made by going to the __Edit__ form of the ticket
          180  +immediately after its creation, and then using the left\-most button in the
          181  +secondary navigation bar\.
          182  +
          183  +# <a name='keywords'></a>KEYWORDS
          184  +
          185  +[dom](\.\./\.\./\.\./\.\./index\.md\#dom), [parser](\.\./\.\./\.\./\.\./index\.md\#parser),
          186  +[xml](\.\./\.\./\.\./\.\./index\.md\#xml)
          187  +
          188  +# <a name='category'></a>CATEGORY
          189  +
          190  +Text processing
          191  +
          192  +# <a name='copyright'></a>COPYRIGHT
          193  +
          194  +2006 Darren New\. All Rights Reserved\.

Added embedded/md/tcllib/files/modules/asn/asn.md.

            1  +
            2  +[//000000001]: # (asn \- ASN\.1 processing)
            3  +[//000000002]: # (Generated from file 'asn\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2004 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>  
            5  +Copyright &copy; 2004 Jochen Loewer <[email protected]\.de>  
            6  +Copyright &copy; 2004\-2011 Michael Schlenker <[email protected]\.sourceforge\.net>)
            7  +[//000000004]: # (asn\(n\) 0\.8 tcllib "ASN\.1 processing")
            8  +
            9  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
           10  +href="../../../toc.md">Table Of Contents</a> &#124; <a
           11  +href="../../../../index.md">Keyword Index</a> &#124; <a
           12  +href="../../../../toc0.md">Categories</a> &#124; <a
           13  +href="../../../../toc1.md">Modules</a> &#124; <a
           14  +href="../../../../toc2.md">Applications</a> ] <hr>
           15  +
           16  +# NAME
           17  +
           18  +asn \- ASN\.1 BER encoder/decoder
           19  +
           20  +# <a name='toc'></a>Table Of Contents
           21  +
           22  +  - [Table Of Contents](#toc)
           23  +
           24  +  - [Synopsis](#synopsis)
           25  +
           26  +  - [Description](#section1)
           27  +
           28  +  - [PUBLIC API](#section2)
           29  +
           30  +      - [ENCODER](#subsection1)
           31  +
           32  +      - [DECODER](#subsection2)
           33  +
           34  +      - [HANDLING TAGS](#subsection3)
           35  +
           36  +  - [EXAMPLES](#section3)
           37  +
           38  +  - [Bugs, Ideas, Feedback](#section4)
           39  +
           40  +  - [Keywords](#keywords)
           41  +
           42  +  - [Category](#category)
           43  +
           44  +  - [Copyright](#copyright)
           45  +
           46  +# <a name='synopsis'></a>SYNOPSIS
           47  +
           48  +package require Tcl 8\.4  
           49  +package require asn ?0\.8\.4?  
           50  +
           51  +[__::asn::asnSequence__ *evalue*\.\.\.](#1)  
           52  +[__::asn::asnSequenceFromList__ *elist*](#2)  
           53  +[__::asn::asnSet__ *evalue*\.\.\.](#3)  
           54  +[__::asn::asnSetFromList__ *elist*](#4)  
           55  +[__::asn::asnApplicationConstr__ *appNumber* *evalue*\.\.\.](#5)  
           56  +[__::asn::asnApplication__ *appNumber* *data*](#6)  
           57  +[__::asn::asnChoice__ *appNumber* *evalue*\.\.\.](#7)  
           58  +[__::asn::asnChoiceConstr__ *appNumber* *evalue*\.\.\.](#8)  
           59  +[__::asn::asnInteger__ *number*](#9)  
           60  +[__::asn::asnEnumeration__ *number*](#10)  
           61  +[__::asn::asnBoolean__ *bool*](#11)  
           62  +[__::asn::asnContext__ *context* *data*](#12)  
           63  +[__::asn::asnContextConstr__ *context* *evalue*\.\.\.](#13)  
           64  +[__::asn::asnObjectIdentifier__ *idlist*](#14)  
           65  +[__::asn::asnUTCTime__ *utcstring*](#15)  
           66  +[__::asn::asnNull__](#16)  
           67  +[__::asn::asnBitString__ *string*](#17)  
           68  +[__::asn::asnOctetString__ *string*](#18)  
           69  +[__::asn::asnNumericString__ *string*](#19)  
           70  +[__::asn::asnPrintableString__ *string*](#20)  
           71  +[__::asn::asnIA5String__ *string*](#21)  
           72  +[__::asn::asnBMPString__ *string*](#22)  
           73  +[__::asn::asnUTF8String__ *string*](#23)  
           74  +[__::asn::asnString__ *string*](#24)  
           75  +[__::asn::defaultStringType__ ?*type*?](#25)  
           76  +[__::asn::asnPeekByte__ *data\_var* *byte\_var*](#26)  
           77  +[__::asn::asnGetLength__ *data\_var* *length\_var*](#27)  
           78  +[__::asn::asnGetResponse__ *chan* *data\_var*](#28)  
           79  +[__::asn::asnGetInteger__ *data\_var* *int\_var*](#29)  
           80  +[__::asn::asnGetEnumeration__ *data\_var* *enum\_var*](#30)  
           81  +[__::asn::asnGetOctetString__ *data\_var* *string\_var*](#31)  
           82  +[__::asn::asnGetString__ *data\_var* *string\_var* ?*type\_var*?](#32)  
           83  +[__::asn::asnGetNumericString__ *data\_var* *string\_var*](#33)  
           84  +[__::asn::asnGetPrintableString__ *data\_var* *string\_var*](#34)  
           85  +[__::asn::asnGetIA5String__ *data\_var* *string\_var*](#35)  
           86  +[__::asn::asnGetBMPString__ *data\_var* *string\_var*](#36)  
           87  +[__::asn::asnGetUTF8String__ *data\_var* *string\_var*](#37)  
           88  +[__::asn::asnGetUTCTime__ *data\_var* *utc\_var*](#38)  
           89  +[__::asn::asnGetBitString__ *data\_var* *bits\_var*](#39)  
           90  +[__::asn::asnGetObjectIdentifier__ *data\_var* *oid\_var*](#40)  
           91  +[__::asn::asnGetBoolean__ *data\_var* *bool\_var*](#41)  
           92  +[__::asn::asnGetNull__ *data\_var*](#42)  
           93  +[__::asn::asnGetSequence__ *data\_var* *sequence\_var*](#43)  
           94  +[__::asn::asnGetSet__ *data\_var* *set\_var*](#44)  
           95  +[__::asn::asnGetApplication__ *data\_var* *appNumber\_var* ?*content\_var*? ?*encodingType\_var*?](#45)  
           96  +[__::asn::asnGetContext__ *data\_var* *contextNumber\_var* ?*content\_var*? ?*encodingType\_var*?](#46)  
           97  +[__::asn::asnPeekTag__ *data\_var* *tag\_var* *tagtype\_var* *constr\_var*](#47)  
           98  +[__::asn::asnTag__ *tagnumber* ?*class*? ?*tagstyle*?](#48)  
           99  +[__::asn::asnRetag__ *data\_var* *newTag*](#49)  
          100  +
          101  +# <a name='description'></a>DESCRIPTION
          102  +
          103  +The __asn__ package provides *partial* de\- and encoder commands for BER
          104  +encoded ASN\.1 data\. It can also be used for decoding DER, which is a restricted
          105  +subset of BER\.
          106  +
          107  +ASN\.1 is a standard *Abstract Syntax Notation*, and BER are its *Basic
          108  +Encoding Rules*\.
          109  +
          110  +See
          111  +[http://asn1\.elibel\.tm\.fr/en/standards/index\.htm](http://asn1\.elibel\.tm\.fr/en/standards/index\.htm)
          112  +for more information about the standard\.
          113  +
          114  +Also see
          115  +[http://luca\.ntop\.org/Teaching/Appunti/asn1\.html](http://luca\.ntop\.org/Teaching/Appunti/asn1\.html)
          116  +for *A Layman's Guide to a Subset of ASN\.1, BER, and DER*, an RSA Laboratories
          117  +Technical Note by Burton S\. Kaliski Jr\. \(Revised November 1, 1993\)\. A text
          118  +version of this note is part of the module sources and should be read by any
          119  +implementor\.
          120  +
          121  +# <a name='section2'></a>PUBLIC API
          122  +
          123  +## <a name='subsection1'></a>ENCODER
          124  +
          125  +  - <a name='1'></a>__::asn::asnSequence__ *evalue*\.\.\.
          126  +
          127  +    Takes zero or more encoded values, packs them into an ASN sequence and
          128  +    returns its encoded binary form\.
          129  +
          130  +  - <a name='2'></a>__::asn::asnSequenceFromList__ *elist*
          131  +
          132  +    Takes a list of encoded values, packs them into an ASN sequence and returns
          133  +    its encoded binary form\.
          134  +
          135  +  - <a name='3'></a>__::asn::asnSet__ *evalue*\.\.\.
          136  +
          137  +    Takes zero or more encoded values, packs them into an ASN set and returns
          138  +    its encoded binary form\.
          139  +
          140  +  - <a name='4'></a>__::asn::asnSetFromList__ *elist*
          141  +
          142  +    Takes a list of encoded values, packs them into an ASN set and returns its
          143  +    encoded binary form\.
          144  +
          145  +  - <a name='5'></a>__::asn::asnApplicationConstr__ *appNumber* *evalue*\.\.\.
          146  +
          147  +    Takes zero or more encoded values, packs them into an ASN application
          148  +    construct and returns its encoded binary form\.
          149  +
          150  +  - <a name='6'></a>__::asn::asnApplication__ *appNumber* *data*
          151  +
          152  +    Takes a single encoded value *data*, packs it into an ASN application
          153  +    construct and returns its encoded binary form\.
          154  +
          155  +  - <a name='7'></a>__::asn::asnChoice__ *appNumber* *evalue*\.\.\.
          156  +
          157  +    Takes zero or more encoded values, packs them into an ASN choice construct
          158  +    and returns its encoded binary form\.
          159  +
          160  +  - <a name='8'></a>__::asn::asnChoiceConstr__ *appNumber* *evalue*\.\.\.
          161  +
          162  +    Takes zero or more encoded values, packs them into an ASN choice construct
          163  +    and returns its encoded binary form\.
          164  +
          165  +  - <a name='9'></a>__::asn::asnInteger__ *number*
          166  +
          167  +    Returns the encoded form of the specified integer *number*\.
          168  +
          169  +  - <a name='10'></a>__::asn::asnEnumeration__ *number*
          170  +
          171  +    Returns the encoded form of the specified enumeration id *number*\.
          172  +
          173  +  - <a name='11'></a>__::asn::asnBoolean__ *bool*
          174  +
          175  +    Returns the encoded form of the specified boolean value *bool*\.
          176  +
          177  +  - <a name='12'></a>__::asn::asnContext__ *context* *data*
          178  +
          179  +    Takes an encoded value and packs it into a constructed value with
          180  +    application tag, the *context* number\.
          181  +
          182  +  - <a name='13'></a>__::asn::asnContextConstr__ *context* *evalue*\.\.\.
          183  +
          184  +    Takes zero or more encoded values and packs them into a constructed value
          185  +    with application tag, the *context* number\.
          186  +
          187  +  - <a name='14'></a>__::asn::asnObjectIdentifier__ *idlist*
          188  +
          189  +    Takes a list of at least 2 integers describing an object identifier \(OID\)
          190  +    value, and returns the encoded value\.
          191  +
          192  +  - <a name='15'></a>__::asn::asnUTCTime__ *utcstring*
          193  +
          194  +    Returns the encoded form of the specified UTC time string\.
          195  +
          196  +  - <a name='16'></a>__::asn::asnNull__
          197  +
          198  +    Returns the NULL encoding\.
          199  +
          200  +  - <a name='17'></a>__::asn::asnBitString__ *string*
          201  +
          202  +    Returns the encoded form of the specified *string*\.
          203  +
          204  +  - <a name='18'></a>__::asn::asnOctetString__ *string*
          205  +
          206  +    Returns the encoded form of the specified *string*\.
          207  +
          208  +  - <a name='19'></a>__::asn::asnNumericString__ *string*
          209  +
          210  +    Returns the *string* encoded as ASN\.1 NumericString\. Raises an error if
          211  +    the *string* contains characters other than decimal numbers and space\.
          212  +
          213  +  - <a name='20'></a>__::asn::asnPrintableString__ *string*
          214  +
          215  +    Returns the *string* encoding as ASN\.1 PrintableString\. Raises an error if
          216  +    the *string* contains characters which are not allowed by the Printable
          217  +    String datatype\. The allowed characters are A\-Z, a\-z, 0\-9, space,
          218  +    apostrophe, colon, parentheses, plus, minus, comma, period, forward slash,
          219  +    question mark, and the equals sign\.
          220  +
          221  +  - <a name='21'></a>__::asn::asnIA5String__ *string*
          222  +
          223  +    Returns the *string* encoded as ASN\.1 IA5String\. Raises an error if the
          224  +    *string* contains any characters outside of the US\-ASCII range\.
          225  +
          226  +  - <a name='22'></a>__::asn::asnBMPString__ *string*
          227  +
          228  +    Returns the *string* encoded as ASN\.1 Basic Multilingual Plane string
          229  +    \(Which is essentialy big\-endian UCS2\)\.
          230  +
          231  +  - <a name='23'></a>__::asn::asnUTF8String__ *string*
          232  +
          233  +    Returns the *string* encoded as UTF8 String\. Note that some legacy
          234  +    applications such as Windows CryptoAPI do not like UTF8 strings\. Use
          235  +    BMPStrings if you are not sure\.
          236  +
          237  +  - <a name='24'></a>__::asn::asnString__ *string*
          238  +
          239  +    Returns an encoded form of *string*, choosing the most restricted ASN\.1
          240  +    string type possible\. If the string contains non\-ASCII characters, then
          241  +    there is more than one string type which can be used\. See
          242  +    __::asn::defaultStringType__\.
          243  +
          244  +  - <a name='25'></a>__::asn::defaultStringType__ ?*type*?
          245  +
          246  +    Selects the string type to use for the encoding of non\-ASCII strings\.
          247  +    Returns current default when called without argument\. If the argument
          248  +    *type* is supplied, it should be either __UTF8__ or __BMP__ to
          249  +    choose UTF8String or BMPString respectively\.
          250  +
          251  +## <a name='subsection2'></a>DECODER
          252  +
          253  +General notes:
          254  +
          255  +  1. Nearly all decoder commands take two arguments\. These arguments are
          256  +     variable names, except for __::asn::asnGetResponse__\. The first
          257  +     variable contains the encoded ASN value to decode at the beginning, and
          258  +     more, and the second variable is where the value is stored to\. The
          259  +     remainder of the input after the decoded value is stored back into the
          260  +     datavariable\.
          261  +
          262  +  1. After extraction the data variable is always modified first, before by
          263  +     writing the extracted value to its variable\. This means that if both
          264  +     arguments refer to the same variable, it will always contain the extracted
          265  +     value after the call, and not the remainder of the input\.
          266  +
          267  +  - <a name='26'></a>__::asn::asnPeekByte__ *data\_var* *byte\_var*
          268  +
          269  +    Retrieve the first byte of the data, without modifing *data\_var*\. This can
          270  +    be used to check for implicit tags\.
          271  +
          272  +  - <a name='27'></a>__::asn::asnGetLength__ *data\_var* *length\_var*
          273  +
          274  +    Decode the length information for a block of BER data\. The tag has already
          275  +    to be removed from the data\.
          276  +
          277  +  - <a name='28'></a>__::asn::asnGetResponse__ *chan* *data\_var*
          278  +
          279  +    Reads an encoded ASN *sequence* from the channel *chan* and stores it
          280  +    into the variable named by *data\_var*\.
          281  +
          282  +  - <a name='29'></a>__::asn::asnGetInteger__ *data\_var* *int\_var*
          283  +
          284  +    Assumes that an encoded integer value is at the front of the data stored in
          285  +    the variable named *data\_var*, extracts and stores it into the variable
          286  +    named by *int\_var*\. Additionally removes all bytes associated with the
          287  +    value from the data for further processing by the following decoder
          288  +    commands\.
          289  +
          290  +  - <a name='30'></a>__::asn::asnGetEnumeration__ *data\_var* *enum\_var*
          291  +
          292  +    Assumes that an enumeration id is at the front of the data stored in the
          293  +    variable named *data\_var*, and stores it into the variable named by
          294  +    *enum\_var*\. Additionally removes all bytes associated with the value from
          295  +    the data for further processing by the following decoder commands\.
          296  +
          297  +  - <a name='31'></a>__::asn::asnGetOctetString__ *data\_var* *string\_var*
          298  +
          299  +    Assumes that a string is at the front of the data stored in the variable
          300  +    named *data\_var*, and stores it into the variable named by *string\_var*\.
          301  +    Additionally removes all bytes associated with the value from the data for
          302  +    further processing by the following decoder commands\.
          303  +
          304  +  - <a name='32'></a>__::asn::asnGetString__ *data\_var* *string\_var* ?*type\_var*?
          305  +
          306  +    Decodes a user\-readable string\. This is a convenience function which is able
          307  +    to automatically distinguish all supported ASN\.1 string types and convert
          308  +    the input value appropriately\. See __::asn::asnGetPrintableString__,
          309  +    __::asnGetIA5String__, etc\. below for the type\-specific conversion
          310  +    commands\.
          311  +
          312  +    If the optional third argument *type\_var* is supplied, then the type of
          313  +    the incoming string is stored in the variable named by it\.
          314  +
          315  +    The function throws the error "Invalid command name
          316  +    asnGetSome__UnsupportedString__" if the unsupported string type
          317  +    __Unsupported__ is encountered\. You can create the appropriate function
          318  +    "asn::asnGetSome__UnsupportedString__" in your application if
          319  +    neccessary\.
          320  +
          321  +  - <a name='33'></a>__::asn::asnGetNumericString__ *data\_var* *string\_var*
          322  +
          323  +    Assumes that a numeric string value is at the front of the data stored in
          324  +    the variable named *data\_var*, and stores it into the variable named by
          325  +    *string\_var*\. Additionally removes all bytes associated with the value
          326  +    from the data for further processing by the following decoder commands\.
          327  +
          328  +  - <a name='34'></a>__::asn::asnGetPrintableString__ *data\_var* *string\_var*
          329  +
          330  +    Assumes that a printable string value is at the front of the data stored in
          331  +    the variable named *data\_var*, and stores it into the variable named by
          332  +    *string\_var*\. Additionally removes all bytes associated with the value
          333  +    from the data for further processing by the following decoder commands\.
          334  +
          335  +  - <a name='35'></a>__::asn::asnGetIA5String__ *data\_var* *string\_var*
          336  +
          337  +    Assumes that a IA5 \(ASCII\) string value is at the front of the data stored
          338  +    in the variable named *data\_var*, and stores it into the variable named by
          339  +    *string\_var*\. Additionally removes all bytes associated with the value
          340  +    from the data for further processing by the following decoder commands\.
          341  +
          342  +  - <a name='36'></a>__::asn::asnGetBMPString__ *data\_var* *string\_var*
          343  +
          344  +    Assumes that a BMP \(two\-byte unicode\) string value is at the front of the
          345  +    data stored in the variable named *data\_var*, and stores it into the
          346  +    variable named by *string\_var*, converting it into a proper Tcl string\.
          347  +    Additionally removes all bytes associated with the value from the data for
          348  +    further processing by the following decoder commands\.
          349  +
          350  +  - <a name='37'></a>__::asn::asnGetUTF8String__ *data\_var* *string\_var*
          351  +
          352  +    Assumes that a UTF8 string value is at the front of the data stored in the
          353  +    variable named *data\_var*, and stores it into the variable named by
          354  +    *string\_var*, converting it into a proper Tcl string\. Additionally removes
          355  +    all bytes associated with the value from the data for further processing by
          356  +    the following decoder commands\.
          357  +
          358  +  - <a name='38'></a>__::asn::asnGetUTCTime__ *data\_var* *utc\_var*
          359  +
          360  +    Assumes that a UTC time value is at the front of the data stored in the
          361  +    variable named *data\_var*, and stores it into the variable named by
          362  +    *utc\_var*\. The UTC time value is stored as a string, which has to be
          363  +    decoded with the usual clock scan commands\. Additionally removes all bytes
          364  +    associated with the value from the data for further processing by the
          365  +    following decoder commands\.
          366  +
          367  +  - <a name='39'></a>__::asn::asnGetBitString__ *data\_var* *bits\_var*
          368  +
          369  +    Assumes that a bit string value is at the front of the data stored in the
          370  +    variable named *data\_var*, and stores it into the variable named by
          371  +    *bits\_var* as a string containing only 0 and 1\. Additionally removes all
          372  +    bytes associated with the value from the data for further processing by the
          373  +    following decoder commands\.
          374  +
          375  +  - <a name='40'></a>__::asn::asnGetObjectIdentifier__ *data\_var* *oid\_var*
          376  +
          377  +    Assumes that a object identifier \(OID\) value is at the front of the data
          378  +    stored in the variable named *data\_var*, and stores it into the variable
          379  +    named by *oid\_var* as a list of integers\. Additionally removes all bytes
          380  +    associated with the value from the data for further processing by the
          381  +    following decoder commands\.
          382  +
          383  +  - <a name='41'></a>__::asn::asnGetBoolean__ *data\_var* *bool\_var*
          384  +
          385  +    Assumes that a boolean value is at the front of the data stored in the
          386  +    variable named *data\_var*, and stores it into the variable named by
          387  +    *bool\_var*\. Additionally removes all bytes associated with the value from
          388  +    the data for further processing by the following decoder commands\.
          389  +
          390  +  - <a name='42'></a>__::asn::asnGetNull__ *data\_var*
          391  +
          392  +    Assumes that a NULL value is at the front of the data stored in the variable
          393  +    named *data\_var* and removes the bytes used to encode it from the data\.
          394  +
          395  +  - <a name='43'></a>__::asn::asnGetSequence__ *data\_var* *sequence\_var*
          396  +
          397  +    Assumes that an ASN sequence is at the front of the data stored in the
          398  +    variable named *data\_var*, and stores it into the variable named by
          399  +    *sequence\_var*\. Additionally removes all bytes associated with the value
          400  +    from the data for further processing by the following decoder commands\.
          401  +
          402  +    The data in *sequence\_var* is encoded binary and has to be further decoded
          403  +    according to the definition of the sequence, using the decoder commands
          404  +    here\.
          405  +
          406  +  - <a name='44'></a>__::asn::asnGetSet__ *data\_var* *set\_var*
          407  +
          408  +    Assumes that an ASN set is at the front of the data stored in the variable
          409  +    named *data\_var*, and stores it into the variable named by *set\_var*\.
          410  +    Additionally removes all bytes associated with the value from the data for
          411  +    further processing by the following decoder commands\.
          412  +
          413  +    The data in *set\_var* is encoded binary and has to be further decoded
          414  +    according to the definition of the set, using the decoder commands here\.
          415  +
          416  +  - <a name='45'></a>__::asn::asnGetApplication__ *data\_var* *appNumber\_var* ?*content\_var*? ?*encodingType\_var*?
          417  +
          418  +    Assumes that an ASN application construct is at the front of the data stored
          419  +    in the variable named *data\_var*, and stores its id into the variable
          420  +    named by *appNumber\_var*\. Additionally removes all bytes associated with
          421  +    the value from the data for further processing by the following decoder
          422  +    commands\. If a *content\_var* is specified, then the command places all
          423  +    data associated with it into the named variable, in the binary form which
          424  +    can be processed using the decoder commands of this package\. If a
          425  +    *encodingType\_var* is specified, then that var is set to 1 if the encoding
          426  +    is constructed and 0 if it is primitive\.
          427  +
          428  +    Otherwise it is the responsibility of the caller to decode the remainder of
          429  +    the application construct based on the id retrieved by this command, using
          430  +    the decoder commands of this package\.
          431  +
          432  +  - <a name='46'></a>__::asn::asnGetContext__ *data\_var* *contextNumber\_var* ?*content\_var*? ?*encodingType\_var*?
          433  +
          434  +    Assumes that an ASN context tag construct is at the front of the data stored
          435  +    in the variable named *data\_var*, and stores its id into the variable
          436  +    named by *contextNumber\_var*\. Additionally removes all bytes associated
          437  +    with the value from the data for further processing by the following decoder
          438  +    commands\. If a *content\_var* is specified, then the command places all
          439  +    data associated with it into the named variable, in the binary form which
          440  +    can be processed using the decoder commands of this package\. If a
          441  +    *encodingType\_var* is specified, then that var is set to 1 if the encoding
          442  +    is constructed and 0 if it is primitive\.
          443  +
          444  +    Otherwise it is the responsibility of the caller to decode the remainder of
          445  +    the construct based on the id retrieved by this command, using the decoder
          446  +    commands of this package\.
          447  +
          448  +## <a name='subsection3'></a>HANDLING TAGS
          449  +
          450  +Working with ASN\.1 you often need to decode tagged values, which use a tag thats
          451  +different from the universal tag for a type\. In those cases you have to replace
          452  +the tag with the universal tag used for the type, to decode the value\. To decode
          453  +a tagged value use the __::asn::asnRetag__ to change the tag to the
          454  +appropriate type to use one of the decoders for primitive values\. To help with
          455  +this the module contains three functions:
          456  +
          457  +  - <a name='47'></a>__::asn::asnPeekTag__ *data\_var* *tag\_var* *tagtype\_var* *constr\_var*
          458  +
          459  +    The __::asn::asnPeekTag__ command can be used to take a peek at the data
          460  +    and decode the tag value, without removing it from the data\. The *tag\_var*
          461  +    gets set to the tag number, while the *tagtype\_var* gets set to the class
          462  +    of the tag\. \(Either UNIVERSAL, CONTEXT, APPLICATION or PRIVATE\)\. The
          463  +    *constr\_var* is set to 1 if the tag is for a constructed value, and to 0
          464  +    for not constructed\. It returns the length of the tag\.
          465  +
          466  +  - <a name='48'></a>__::asn::asnTag__ *tagnumber* ?*class*? ?*tagstyle*?
          467  +
          468  +    The __::asn::asnTag__ can be used to create a tag value\. The
          469  +    *tagnumber* gives the number of the tag, while the *class* gives one of
          470  +    the classes \(UNIVERSAL,CONTEXT,APPLICATION or PRIVATE\)\. The class may be
          471  +    abbreviated to just the first letter \(U,C,A,P\), default is UNIVERSAL\. The
          472  +    *tagstyle* is either C for Constructed encoding, or P for primitve
          473  +    encoding\. It defaults to P\. You can also use 1 instead of C and 0 instead of
          474  +    P for direct use of the values returned by __::asn::asnPeekTag__\.
          475  +
          476  +  - <a name='49'></a>__::asn::asnRetag__ *data\_var* *newTag*
          477  +
          478  +    Replaces the tag in front of the data in *data\_var* with *newTag*\. The
          479  +    new Tag can be created using the __::asn::asnTag__ command\.
          480  +
          481  +# <a name='section3'></a>EXAMPLES
          482  +
          483  +Examples for the usage of this package can be found in the implementation of
          484  +package __[ldap](\.\./ldap/ldap\.md)__\.
          485  +
          486  +# <a name='section4'></a>Bugs, Ideas, Feedback
          487  +
          488  +This document, and the package it describes, will undoubtedly contain bugs and
          489  +other problems\. Please report such in the category *asn* of the [Tcllib
          490  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          491  +for enhancements you may have for either package and/or documentation\.
          492  +
          493  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          494  +__diff \-u__\.
          495  +
          496  +Note further that *attachments* are strongly preferred over inlined patches\.
          497  +Attachments can be made by going to the __Edit__ form of the ticket
          498  +immediately after its creation, and then using the left\-most button in the
          499  +secondary navigation bar\.
          500  +
          501  +# <a name='keywords'></a>KEYWORDS
          502  +
          503  +[asn](\.\./\.\./\.\./\.\./index\.md\#asn), [ber](\.\./\.\./\.\./\.\./index\.md\#ber),
          504  +[cer](\.\./\.\./\.\./\.\./index\.md\#cer), [der](\.\./\.\./\.\./\.\./index\.md\#der),
          505  +[internet](\.\./\.\./\.\./\.\./index\.md\#internet),
          506  +[protocol](\.\./\.\./\.\./\.\./index\.md\#protocol),
          507  +[x\.208](\.\./\.\./\.\./\.\./index\.md\#x\_208), [x\.209](\.\./\.\./\.\./\.\./index\.md\#x\_209)
          508  +
          509  +# <a name='category'></a>CATEGORY
          510  +
          511  +Networking
          512  +
          513  +# <a name='copyright'></a>COPYRIGHT
          514  +
          515  +Copyright &copy; 2004 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>  
          516  +Copyright &copy; 2004 Jochen Loewer <[email protected]\.de>  
          517  +Copyright &copy; 2004\-2011 Michael Schlenker <[email protected]\.sourceforge\.net>

Added embedded/md/tcllib/files/modules/base32/base32.md.

            1  +
            2  +[//000000001]: # (base32 \- Base32 encoding)
            3  +[//000000002]: # (Generated from file 'base32\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Public domain)
            5  +[//000000004]: # (base32\(n\) 0\.1 tcllib "Base32 encoding")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +base32 \- base32 standard encoding
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [API](#section2)
           27  +
           28  +  - [Code map](#section3)
           29  +
           30  +  - [Bugs, Ideas, Feedback](#section4)
           31  +
           32  +  - [Keywords](#keywords)
           33  +
           34  +  - [Category](#category)
           35  +
           36  +  - [Copyright](#copyright)
           37  +
           38  +# <a name='synopsis'></a>SYNOPSIS
           39  +
           40  +package require Tcl 8\.4  
           41  +package require base32::core ?0\.1?  
           42  +package require base32 ?0\.1?  
           43  +
           44  +[__::base32::encode__ *string*](#1)  
           45  +[__::base32::decode__ *estring*](#2)  
           46  +
           47  +# <a name='description'></a>DESCRIPTION
           48  +
           49  +This package provides commands for encoding and decoding of strings into and out
           50  +of the standard base32 encoding as specified in RFC 3548\.
           51  +
           52  +# <a name='section2'></a>API
           53  +
           54  +  - <a name='1'></a>__::base32::encode__ *string*
           55  +
           56  +    This command encodes the given *string* in base32 and returns the encoded
           57  +    string as its result\. The result may be padded with the character __=__
           58  +    to signal a partial encoding at the end of the input string\.
           59  +
           60  +  - <a name='2'></a>__::base32::decode__ *estring*
           61  +
           62  +    This commands takes the *estring* and decodes it under the assumption that
           63  +    it is a valid base32 encoded string\. The result of the decoding is returned
           64  +    as the result of the command\.
           65  +
           66  +    Note that while the encoder will generate only uppercase characters this
           67  +    decoder accepts input in lowercase as well\.
           68  +
           69  +    The command will always throw an error whenever encountering conditions
           70  +    which signal some type of bogus input, namely if
           71  +
           72  +      1. the input contains characters which are not valid output of a base32
           73  +         encoder,
           74  +
           75  +      1. the length of the input is not a multiple of eight,
           76  +
           77  +      1. padding appears not at the end of input, but in the middle,
           78  +
           79  +      1. the padding has not of length six, four, three, or one characters,
           80  +
           81  +# <a name='section3'></a>Code map
           82  +
           83  +The code map used to convert 5\-bit sequences is shown below, with the numeric id
           84  +of the bit sequences to the left and the character used to encode it to the
           85  +right\. It should be noted that the characters "0" and "1" are not used by the
           86  +encoding\. This is done as these characters can be easily confused with "O", "o"
           87  +and "l" \(L\)\.
           88  +
           89  +    0 A    9 J   18 S   27 3
           90  +    1 B   10 K   19 T   28 4
           91  +    2 C   11 L   20 U   29 5
           92  +    3 D   12 M   21 V   30 6
           93  +    4 E   13 N   22 W   31 7
           94  +    5 F   14 O   23 X
           95  +    6 G   15 P   24 Y
           96  +    7 H   16 Q   25 Z
           97  +    8 I   17 R   26 2
           98  +
           99  +# <a name='section4'></a>Bugs, Ideas, Feedback
          100  +
          101  +This document, and the package it describes, will undoubtedly contain bugs and
          102  +other problems\. Please report such in the category *base32* of the [Tcllib
          103  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          104  +for enhancements you may have for either package and/or documentation\.
          105  +
          106  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          107  +__diff \-u__\.
          108  +
          109  +Note further that *attachments* are strongly preferred over inlined patches\.
          110  +Attachments can be made by going to the __Edit__ form of the ticket
          111  +immediately after its creation, and then using the left\-most button in the
          112  +secondary navigation bar\.
          113  +
          114  +# <a name='keywords'></a>KEYWORDS
          115  +
          116  +[base32](\.\./\.\./\.\./\.\./index\.md\#base32),
          117  +[rfc3548](\.\./\.\./\.\./\.\./index\.md\#rfc3548)
          118  +
          119  +# <a name='category'></a>CATEGORY
          120  +
          121  +Text processing
          122  +
          123  +# <a name='copyright'></a>COPYRIGHT
          124  +
          125  +Public domain

Added embedded/md/tcllib/files/modules/base32/base32core.md.

            1  +
            2  +[//000000001]: # (base32::core \- Base32 encoding)
            3  +[//000000002]: # (Generated from file 'base32core\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Public domain)
            5  +[//000000004]: # (base32::core\(n\) 0\.1 tcllib "Base32 encoding")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +base32::core \- Expanding basic base32 maps
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [API](#section2)
           27  +
           28  +  - [Bugs, Ideas, Feedback](#section3)
           29  +
           30  +  - [Keywords](#keywords)
           31  +
           32  +  - [Category](#category)
           33  +
           34  +  - [Copyright](#copyright)
           35  +
           36  +# <a name='synopsis'></a>SYNOPSIS
           37  +
           38  +package require Tcl 8\.4  
           39  +package require base32::core ?0\.1?  
           40  +
           41  +[__::base32::core::define__ *map* *forwvar* *backwvar* *ivar*](#1)  
           42  +[__::base32::core::valid__ *string* *pattern* *mvar*](#2)  
           43  +
           44  +# <a name='description'></a>DESCRIPTION
           45  +
           46  +This package provides generic commands for the construction of full base32
           47  +mappings from a basic mapping listing just the codes and associated characters\.
           48  +The full mappings, regular and inverse, created here map to and from bit
           49  +sequences, and also handle the partial mappings at the end of a string\.
           50  +
           51  +This is in essence an internal package to be used by implementors of a base32
           52  +en\- and decoder\. A regular user has no need of this package at all\.
           53  +
           54  +# <a name='section2'></a>API
           55  +
           56  +  - <a name='1'></a>__::base32::core::define__ *map* *forwvar* *backwvar* *ivar*
           57  +
           58  +    This command computes full forward and backward \(inverse\) mappings from the
           59  +    basic *map* and stores them in the variables named by *forwvar* and
           60  +    *backwvar* resp\. It also constructs a regexp pattern for the detection of
           61  +    invalid characters in supposedly base32 encoded input and stores it in the
           62  +    variable named by *ivar*\.
           63  +
           64  +  - <a name='2'></a>__::base32::core::valid__ *string* *pattern* *mvar*
           65  +
           66  +    This command checks if the input *string* is a valid base32 encoded
           67  +    string, based on the *pattern* of invalid characters as generated by
           68  +    __::base32::core::define__, and some other general rules\.
           69  +
           70  +    The result of the command is a boolean flag\. Its value is __True__ for a
           71  +    valid *string*, and __False__ otherwise\. In the latter case an error
           72  +    message describing the problem with the input is stored into the variable
           73  +    named by *mvar*\. The variable is not touched if the input was found to be
           74  +    valid\.
           75  +
           76  +    The rules checked by the command, beyond rejection of bad characters, are:
           77  +
           78  +      1. The length of the input is not a multiple of eight,
           79  +
           80  +      1. The padding appears not at the end of input, but in the middle,
           81  +
           82  +      1. The padding has not of length six, four, three, or one characters,
           83  +
           84  +# <a name='section3'></a>Bugs, Ideas, Feedback
           85  +
           86  +This document, and the package it describes, will undoubtedly contain bugs and
           87  +other problems\. Please report such in the category *base32* of the [Tcllib
           88  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
           89  +for enhancements you may have for either package and/or documentation\.
           90  +
           91  +When proposing code changes, please provide *unified diffs*, i\.e the output of
           92  +__diff \-u__\.
           93  +
           94  +Note further that *attachments* are strongly preferred over inlined patches\.
           95  +Attachments can be made by going to the __Edit__ form of the ticket
           96  +immediately after its creation, and then using the left\-most button in the
           97  +secondary navigation bar\.
           98  +
           99  +# <a name='keywords'></a>KEYWORDS
          100  +
          101  +[base32](\.\./\.\./\.\./\.\./index\.md\#base32)
          102  +
          103  +# <a name='category'></a>CATEGORY
          104  +
          105  +Text processing
          106  +
          107  +# <a name='copyright'></a>COPYRIGHT
          108  +
          109  +Public domain

Added embedded/md/tcllib/files/modules/base32/base32hex.md.

            1  +
            2  +[//000000001]: # (base32::hex \- Base32 encoding)
            3  +[//000000002]: # (Generated from file 'base32hex\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Public domain)
            5  +[//000000004]: # (base32::hex\(n\) 0\.1 tcllib "Base32 encoding")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +base32::hex \- base32 extended hex encoding
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [API](#section2)
           27  +
           28  +  - [Code map](#section3)
           29  +
           30  +  - [Bugs, Ideas, Feedback](#section4)
           31  +
           32  +  - [Keywords](#keywords)
           33  +
           34  +  - [Category](#category)
           35  +
           36  +  - [Copyright](#copyright)
           37  +
           38  +# <a name='synopsis'></a>SYNOPSIS
           39  +
           40  +package require Tcl 8\.4  
           41  +package require base32::core ?0\.1?  
           42  +package require base32::hex ?0\.1?  
           43  +
           44  +[__::base32::hex::encode__ *string*](#1)  
           45  +[__::base32::hex::decode__ *estring*](#2)  
           46  +
           47  +# <a name='description'></a>DESCRIPTION
           48  +
           49  +This package provides commands for encoding and decoding of strings into and out
           50  +of the extended hex base32 encoding as specified in the RFC 3548bis draft\.
           51  +
           52  +# <a name='section2'></a>API
           53  +
           54  +  - <a name='1'></a>__::base32::hex::encode__ *string*
           55  +
           56  +    This command encodes the given *string* in extended hex base32 and returns
           57  +    the encoded string as its result\. The result may be padded with the
           58  +    character __=__ to signal a partial encoding at the end of the input
           59  +    string\.
           60  +
           61  +  - <a name='2'></a>__::base32::hex::decode__ *estring*
           62  +
           63  +    This commands takes the *estring* and decodes it under the assumption that
           64  +    it is a valid extended hex base32 encoded string\. The result of the decoding
           65  +    is returned as the result of the command\.
           66  +
           67  +    Note that while the encoder will generate only uppercase characters this
           68  +    decoder accepts input in lowercase as well\.
           69  +
           70  +    The command will always throw an error whenever encountering conditions
           71  +    which signal some type of bogus input, namely if
           72  +
           73  +      1. the input contains characters which are not valid output of a extended
           74  +         hex base32 encoder,
           75  +
           76  +      1. the length of the input is not a multiple of eight,
           77  +
           78  +      1. padding appears not at the end of input, but in the middle,
           79  +
           80  +      1. the padding has not of length six, four, three, or one characters,
           81  +
           82  +# <a name='section3'></a>Code map
           83  +
           84  +The code map used to convert 5\-bit sequences is shown below, with the numeric id
           85  +of the bit sequences to the left and the character used to encode it to the
           86  +right\. The important feature of the extended hex mapping is that the first 16
           87  +codes map to the digits and hex characters\.
           88  +
           89  +    0 0    9 9        18 I   27 R
           90  +    1 1   10 A        19 J   28 S
           91  +    2 2   11 B        20 K   29 T
           92  +    3 3   12 C        21 L   30 U
           93  +    4 4   13 D        22 M   31 V
           94  +    5 5   14 E        23 N
           95  +    6 6   15 F        24 O
           96  +    7 7        16 G   25 P
           97  +    8 8        17 H   26 Q
           98  +
           99  +# <a name='section4'></a>Bugs, Ideas, Feedback
          100  +
          101  +This document, and the package it describes, will undoubtedly contain bugs and
          102  +other problems\. Please report such in the category *base32* of the [Tcllib
          103  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          104  +for enhancements you may have for either package and/or documentation\.
          105  +
          106  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          107  +__diff \-u__\.
          108  +
          109  +Note further that *attachments* are strongly preferred over inlined patches\.
          110  +Attachments can be made by going to the __Edit__ form of the ticket
          111  +immediately after its creation, and then using the left\-most button in the
          112  +secondary navigation bar\.
          113  +
          114  +# <a name='keywords'></a>KEYWORDS
          115  +
          116  +[base32](\.\./\.\./\.\./\.\./index\.md\#base32), [hex](\.\./\.\./\.\./\.\./index\.md\#hex),
          117  +[rfc3548](\.\./\.\./\.\./\.\./index\.md\#rfc3548)
          118  +
          119  +# <a name='category'></a>CATEGORY
          120  +
          121  +Text processing
          122  +
          123  +# <a name='copyright'></a>COPYRIGHT
          124  +
          125  +Public domain

Added embedded/md/tcllib/files/modules/base64/ascii85.md.

            1  +
            2  +[//000000001]: # (ascii85 \- Text encoding & decoding binary data)
            3  +[//000000002]: # (Generated from file 'ascii85\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2010, Emiliano Gavilán)
            5  +[//000000004]: # (ascii85\(n\) 1\.0 tcllib "Text encoding & decoding binary data")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +ascii85 \- ascii85\-encode/decode binary data
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [EXAMPLES](#section2)
           27  +
           28  +  - [References](#section3)
           29  +
           30  +  - [Bugs, Ideas, Feedback](#section4)
           31  +
           32  +  - [Keywords](#keywords)
           33  +
           34  +  - [Category](#category)
           35  +
           36  +  - [Copyright](#copyright)
           37  +
           38  +# <a name='synopsis'></a>SYNOPSIS
           39  +
           40  +package require Tcl 8\.4  
           41  +package require ascii85 ?1\.0?  
           42  +
           43  +[__::ascii85::encode__ ?__\-maxlen__ *maxlen*? ?__\-wrapchar__ *wrapchar*? *string*](#1)  
           44  +[__::ascii85::decode__ *string*](#2)  
           45  +
           46  +# <a name='description'></a>DESCRIPTION
           47  +
           48  +This package provides procedures to encode binary data into ascii85 and back\.
           49  +
           50  +  - <a name='1'></a>__::ascii85::encode__ ?__\-maxlen__ *maxlen*? ?__\-wrapchar__ *wrapchar*? *string*
           51  +
           52  +    Ascii85 encodes the given binary *string* and returns the encoded result\.
           53  +    Inserts the character *wrapchar* every *maxlen* characters of output\.
           54  +    *wrapchar* defaults to newline\. *maxlen* defaults to __76__\.
           55  +
           56  +    *Note well*: If your string is not simple ascii you should fix the string
           57  +    encoding before doing ascii85 encoding\. See the examples\.
           58  +
           59  +    The command will throw an error for negative values of *maxlen*, or if
           60  +    *maxlen* is not an integer number\.
           61  +
           62  +  - <a name='2'></a>__::ascii85::decode__ *string*
           63  +
           64  +    Ascii85 decodes the given *string* and returns the binary data\. The
           65  +    decoder ignores whitespace in the string, as well as tabs and newlines\.
           66  +
           67  +# <a name='section2'></a>EXAMPLES
           68  +
           69  +    % ascii85::encode "Hello, world"
           70  +    87cURD_*#TDfTZ)
           71  +
           72  +    % ascii85::encode [string repeat xyz 24]
           73  +    G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G
           74  +    ^4U[H$X^\H?a^]
           75  +    % ascii85::encode -wrapchar "" [string repeat xyz 24]
           76  +    G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]G^4U[H$X^\H?a^]
           77  +
           78  +    # NOTE: ascii85 encodes BINARY strings.
           79  +    % set chemical [encoding convertto utf-8 "C\u2088H\u2081\u2080N\u2084O\u2082"]
           80  +    % set encoded [ascii85::encode $chemical]
           81  +    6fN]R8E,5Pidu\UiduhZidua
           82  +    % set caffeine [encoding convertfrom utf-8 [ascii85::decode $encoded]]
           83  +
           84  +# <a name='section3'></a>References
           85  +
           86  +  1. [http://en\.wikipedia\.org/wiki/Ascii85](http://en\.wikipedia\.org/wiki/Ascii85)
           87  +
           88  +  1. Postscript Language Reference Manual, 3rd Edition, page 131\.
           89  +     [http://www\.adobe\.com/devnet/postscript/pdfs/PLRM\.pdf](http://www\.adobe\.com/devnet/postscript/pdfs/PLRM\.pdf)
           90  +
           91  +# <a name='section4'></a>Bugs, Ideas, Feedback
           92  +
           93  +This document, and the package it describes, will undoubtedly contain bugs and
           94  +other problems\. Please report such in the category *base64* of the [Tcllib
           95  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
           96  +for enhancements you may have for either package and/or documentation\.
           97  +
           98  +When proposing code changes, please provide *unified diffs*, i\.e the output of
           99  +__diff \-u__\.
          100  +
          101  +Note further that *attachments* are strongly preferred over inlined patches\.
          102  +Attachments can be made by going to the __Edit__ form of the ticket
          103  +immediately after its creation, and then using the left\-most button in the
          104  +secondary navigation bar\.
          105  +
          106  +# <a name='keywords'></a>KEYWORDS
          107  +
          108  +[ascii85](\.\./\.\./\.\./\.\./index\.md\#ascii85),
          109  +[encoding](\.\./\.\./\.\./\.\./index\.md\#encoding)
          110  +
          111  +# <a name='category'></a>CATEGORY
          112  +
          113  +Text processing
          114  +
          115  +# <a name='copyright'></a>COPYRIGHT
          116  +
          117  +Copyright &copy; 2010, Emiliano Gavilán

Added embedded/md/tcllib/files/modules/base64/base64.md.

            1  +
            2  +[//000000001]: # (base64 \- Text encoding & decoding binary data)
            3  +[//000000002]: # (Generated from file 'base64\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2000, Eric Melski  
            5  +Copyright &copy; 2001, Miguel Sofer)
            6  +[//000000004]: # (base64\(n\) 2\.4\.2 tcllib "Text encoding & decoding binary data")
            7  +
            8  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            9  +href="../../../toc.md">Table Of Contents</a> &#124; <a
           10  +href="../../../../index.md">Keyword Index</a> &#124; <a
           11  +href="../../../../toc0.md">Categories</a> &#124; <a
           12  +href="../../../../toc1.md">Modules</a> &#124; <a
           13  +href="../../../../toc2.md">Applications</a> ] <hr>
           14  +
           15  +# NAME
           16  +
           17  +base64 \- base64\-encode/decode binary data
           18  +
           19  +# <a name='toc'></a>Table Of Contents
           20  +
           21  +  - [Table Of Contents](#toc)
           22  +
           23  +  - [Synopsis](#synopsis)
           24  +
           25  +  - [Description](#section1)
           26  +
           27  +  - [EXAMPLES](#section2)
           28  +
           29  +  - [Bugs, Ideas, Feedback](#section3)
           30  +
           31  +  - [Keywords](#keywords)
           32  +
           33  +  - [Category](#category)
           34  +
           35  +  - [Copyright](#copyright)
           36  +
           37  +# <a name='synopsis'></a>SYNOPSIS
           38  +
           39  +package require Tcl 8  
           40  +package require base64 ?2\.4\.2?  
           41  +
           42  +[__::base64::encode__ ?__\-maxlen__ *maxlen*? ?__\-wrapchar__ *wrapchar*? *string*](#1)  
           43  +[__::base64::decode__ *string*](#2)  
           44  +
           45  +# <a name='description'></a>DESCRIPTION
           46  +
           47  +This package provides procedures to encode binary data into base64 and back\.
           48  +
           49  +  - <a name='1'></a>__::base64::encode__ ?__\-maxlen__ *maxlen*? ?__\-wrapchar__ *wrapchar*? *string*
           50  +
           51  +    Base64 encodes the given binary *string* and returns the encoded result\.
           52  +    Inserts the character *wrapchar* every *maxlen* characters of output\.
           53  +    *wrapchar* defaults to newline\. *maxlen* defaults to __76__\.
           54  +
           55  +    *Note* that if *maxlen* is set to __0__, the output will not be
           56  +    wrapped at all\.
           57  +
           58  +    *Note well*: If your string is not simple ascii you should fix the string
           59  +    encoding before doing base64 encoding\. See the examples\.
           60  +
           61  +    The command will throw an error for negative values of *maxlen*, or if
           62  +    *maxlen* is not an integer number\.
           63  +
           64  +  - <a name='2'></a>__::base64::decode__ *string*
           65  +
           66  +    Base64 decodes the given *string* and returns the binary data\. The decoder
           67  +    ignores whitespace in the string\.
           68  +
           69  +# <a name='section2'></a>EXAMPLES
           70  +
           71  +    % base64::encode "Hello, world"
           72  +    SGVsbG8sIHdvcmxk
           73  +
           74  +    % base64::encode [string repeat xyz 20]
           75  +    eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6
           76  +    eHl6eHl6eHl6
           77  +    % base64::encode -wrapchar "" [string repeat xyz 20]
           78  +    eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6
           79  +
           80  +    # NOTE: base64 encodes BINARY strings.
           81  +    % set chemical [encoding convertto utf-8 "C\u2088H\u2081\u2080N\u2084O\u2082"]
           82  +    % set encoded [base64::encode $chemical]
           83  +    Q+KCiEjigoHigoBO4oKET+KCgg==
           84  +    % set caffeine [encoding convertfrom utf-8 [base64::decode $encoded]]
           85  +
           86  +# <a name='section3'></a>Bugs, Ideas, Feedback
           87  +
           88  +This document, and the package it describes, will undoubtedly contain bugs and
           89  +other problems\. Please report such in the category *base64* of the [Tcllib
           90  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
           91  +for enhancements you may have for either package and/or documentation\.
           92  +
           93  +When proposing code changes, please provide *unified diffs*, i\.e the output of
           94  +__diff \-u__\.
           95  +
           96  +Note further that *attachments* are strongly preferred over inlined patches\.
           97  +Attachments can be made by going to the __Edit__ form of the ticket
           98  +immediately after its creation, and then using the left\-most button in the
           99  +secondary navigation bar\.
          100  +
          101  +# <a name='keywords'></a>KEYWORDS
          102  +
          103  +[base64](\.\./\.\./\.\./\.\./index\.md\#base64),
          104  +[encoding](\.\./\.\./\.\./\.\./index\.md\#encoding)
          105  +
          106  +# <a name='category'></a>CATEGORY
          107  +
          108  +Text processing
          109  +
          110  +# <a name='copyright'></a>COPYRIGHT
          111  +
          112  +Copyright &copy; 2000, Eric Melski  
          113  +Copyright &copy; 2001, Miguel Sofer

Added embedded/md/tcllib/files/modules/base64/uuencode.md.

            1  +
            2  +[//000000001]: # (uuencode \- Text encoding & decoding binary data)
            3  +[//000000002]: # (Generated from file 'uuencode\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2002, Pat Thoyts)
            5  +[//000000004]: # (uuencode\(n\) 1\.1\.4 tcllib "Text encoding & decoding binary data")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +uuencode \- UU\-encode/decode binary data
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [OPTIONS](#section2)
           27  +
           28  +  - [EXAMPLES](#section3)
           29  +
           30  +  - [Bugs, Ideas, Feedback](#section4)
           31  +
           32  +  - [Keywords](#keywords)
           33  +
           34  +  - [Category](#category)
           35  +
           36  +  - [Copyright](#copyright)
           37  +
           38  +# <a name='synopsis'></a>SYNOPSIS
           39  +
           40  +package require Tcl 8  
           41  +package require uuencode ?1\.1\.4?  
           42  +
           43  +[__::uuencode::encode__ *string*](#1)  
           44  +[__::uuencode::decode__ *string*](#2)  
           45  +[__::uuencode::uuencode__ ?__\-name__ *string*? ?__\-mode__ *octal*? \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)](#3)  
           46  +[__::uuencode::uudecode__ \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)](#4)  
           47  +
           48  +# <a name='description'></a>DESCRIPTION
           49  +
           50  +This package provides a Tcl\-only implementation of the __uuencode\(1\)__ and
           51  +__uudecode\(1\)__ commands\. This encoding packs binary data into printable
           52  +ASCII characters\.
           53  +
           54  +  - <a name='1'></a>__::uuencode::encode__ *string*
           55  +
           56  +    returns the uuencoded data\. This will encode all the data passed in even if
           57  +    this is longer than the uuencode maximum line length\. If the number of input
           58  +    bytes is not a multiple of 3 then additional 0 bytes are added to pad the
           59  +    string\.
           60  +
           61  +  - <a name='2'></a>__::uuencode::decode__ *string*
           62  +
           63  +    Decodes the given encoded data\. This will return any padding characters as
           64  +    well and it is the callers responsibility to deal with handling the actual
           65  +    length of the encoded data\. \(see uuencode\)\.
           66  +
           67  +  - <a name='3'></a>__::uuencode::uuencode__ ?__\-name__ *string*? ?__\-mode__ *octal*? \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)
           68  +
           69  +  - <a name='4'></a>__::uuencode::uudecode__ \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)
           70  +
           71  +    UUDecode a file or block of data\. A file may contain more than one embedded
           72  +    file so the result is a list where each element is a three element list of
           73  +    filename, mode value and data\.
           74  +
           75  +# <a name='section2'></a>OPTIONS
           76  +
           77  +  - \-filename name
           78  +
           79  +    Cause the uuencode or uudecode commands to read their data from the named
           80  +    file rather that taking a string parameter\.
           81  +
           82  +  - \-name string
           83  +
           84  +    The uuencoded data header line contains the suggested file name to be used
           85  +    when unpacking the data\. Use this option to change this from the default of
           86  +    "data\.dat"\.
           87  +
           88  +  - \-mode octal
           89  +
           90  +    The uuencoded data header line contains a suggested permissions bit pattern
           91  +    expressed as an octal string\. To change the default of 0644 you can set this
           92  +    option\. For instance, 0755 would be suitable for an executable\. See
           93  +    __chmod\(1\)__\.
           94  +
           95  +# <a name='section3'></a>EXAMPLES
           96  +
           97  +    % set d [uuencode::encode "Hello World!"]
           98  +    2&5L;&\\@5V]R;&0A
           99  +
          100  +    % uuencode::uudecode $d
          101  +    Hello World!
          102  +
          103  +    % set d [uuencode::uuencode -name hello.txt "Hello World"]
          104  +    begin 644 hello.txt
          105  +    +2&5L;&\@5V]R;&0`
          106  +    `
          107  +    end
          108  +
          109  +    % uuencode::uudecode $d
          110  +    {hello.txt 644 {Hello World}}
          111  +
          112  +# <a name='section4'></a>Bugs, Ideas, Feedback
          113  +
          114  +This document, and the package it describes, will undoubtedly contain bugs and
          115  +other problems\. Please report such in the category *base64* of the [Tcllib
          116  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          117  +for enhancements you may have for either package and/or documentation\.
          118  +
          119  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          120  +__diff \-u__\.
          121  +
          122  +Note further that *attachments* are strongly preferred over inlined patches\.
          123  +Attachments can be made by going to the __Edit__ form of the ticket
          124  +immediately after its creation, and then using the left\-most button in the
          125  +secondary navigation bar\.
          126  +
          127  +# <a name='keywords'></a>KEYWORDS
          128  +
          129  +[encoding](\.\./\.\./\.\./\.\./index\.md\#encoding),
          130  +[uuencode](\.\./\.\./\.\./\.\./index\.md\#uuencode)
          131  +
          132  +# <a name='category'></a>CATEGORY
          133  +
          134  +Text processing
          135  +
          136  +# <a name='copyright'></a>COPYRIGHT
          137  +
          138  +Copyright &copy; 2002, Pat Thoyts

Added embedded/md/tcllib/files/modules/base64/yencode.md.

            1  +
            2  +[//000000001]: # (yencode \- Text encoding & decoding binary data)
            3  +[//000000002]: # (Generated from file 'yencode\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2002, Pat Thoyts)
            5  +[//000000004]: # (yencode\(n\) 1\.1\.2 tcllib "Text encoding & decoding binary data")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +yencode \- Y\-encode/decode binary data
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [OPTIONS](#section2)
           27  +
           28  +  - [References](#section3)
           29  +
           30  +  - [Bugs, Ideas, Feedback](#section4)
           31  +
           32  +  - [Keywords](#keywords)
           33  +
           34  +  - [Category](#category)
           35  +
           36  +  - [Copyright](#copyright)
           37  +
           38  +# <a name='synopsis'></a>SYNOPSIS
           39  +
           40  +package require Tcl 8\.2  
           41  +package require yencode ?1\.1\.2?  
           42  +
           43  +[__::yencode::encode__ *string*](#1)  
           44  +[__::yencode::decode__ *string*](#2)  
           45  +[__::yencode::yencode__ ?__\-name__ *string*? ?__\-line__ *integer*? ?__\-crc32__ *boolean*? \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)](#3)  
           46  +[__::yencode::ydecode__ \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)](#4)  
           47  +
           48  +# <a name='description'></a>DESCRIPTION
           49  +
           50  +This package provides a Tcl\-only implementation of the yEnc file encoding\. This
           51  +is a recently introduced method of encoding binary files for transmission
           52  +through Usenet\. This encoding packs binary data into a format that requires an
           53  +8\-bit clean transmission layer but that escapes characters special to the
           54  +*[NNTP](\.\./\.\./\.\./\.\./index\.md\#nntp)* posting protocols\. See
           55  +[http://www\.yenc\.org/](http://www\.yenc\.org/) for details concerning the
           56  +algorithm\.
           57  +
           58  +  - <a name='1'></a>__::yencode::encode__ *string*
           59  +
           60  +    returns the yEnc encoded data\.
           61  +
           62  +  - <a name='2'></a>__::yencode::decode__ *string*
           63  +
           64  +    Decodes the given yEnc encoded data\.
           65  +
           66  +  - <a name='3'></a>__::yencode::yencode__ ?__\-name__ *string*? ?__\-line__ *integer*? ?__\-crc32__ *boolean*? \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)
           67  +
           68  +    Encode a file or block of data\.
           69  +
           70  +  - <a name='4'></a>__::yencode::ydecode__ \(__\-file__ *filename* &#124; ?__\-\-__? *string*\)
           71  +
           72  +    Decode a file or block of data\. A file may contain more than one embedded
           73  +    file so the result is a list where each element is a three element list of
           74  +    filename, file size and data\.
           75  +
           76  +# <a name='section2'></a>OPTIONS
           77  +
           78  +  - \-filename name
           79  +
           80  +    Cause the yencode or ydecode commands to read their data from the named file
           81  +    rather that taking a string parameter\.
           82  +
           83  +  - \-name string
           84  +
           85  +    The encoded data header line contains the suggested file name to be used
           86  +    when unpacking the data\. Use this option to change this from the default of
           87  +    "data\.dat"\.
           88  +
           89  +  - \-line integer
           90  +
           91  +    The yencoded data header line contains records the line length used during
           92  +    the encoding\. Use this option to select a line length other that the default
           93  +    of 128\. Note that NNTP imposes a 1000 character line length limit and some
           94  +    gateways may have trouble with more than 255 characters per line\.
           95  +
           96  +  - \-crc32 boolean
           97  +
           98  +    The yEnc specification recommends the inclusion of a cyclic redundancy check
           99  +    value in the footer\. Use this option to change the default from *true* to
          100  +    *false*\.
          101  +
          102  +    % set d [yencode::yencode -file testfile.txt]
          103  +    =ybegin line=128 size=584 name=testfile.txt
          104  +     -o- data not shown -o-
          105  +    =yend size=584 crc32=ded29f4f
          106  +
          107  +# <a name='section3'></a>References
          108  +
          109  +  1. [http://www\.yenc\.org/yenc\-draft\.1\.3\.txt](http://www\.yenc\.org/yenc\-draft\.1\.3\.txt)
          110  +
          111  +# <a name='section4'></a>Bugs, Ideas, Feedback
          112  +
          113  +This document, and the package it describes, will undoubtedly contain bugs and
          114  +other problems\. Please report such in the category *base64* of the [Tcllib
          115  +Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
          116  +for enhancements you may have for either package and/or documentation\.
          117  +
          118  +When proposing code changes, please provide *unified diffs*, i\.e the output of
          119  +__diff \-u__\.
          120  +
          121  +Note further that *attachments* are strongly preferred over inlined patches\.
          122  +Attachments can be made by going to the __Edit__ form of the ticket
          123  +immediately after its creation, and then using the left\-most button in the
          124  +secondary navigation bar\.
          125  +
          126  +# <a name='keywords'></a>KEYWORDS
          127  +
          128  +[encoding](\.\./\.\./\.\./\.\./index\.md\#encoding),
          129  +[yEnc](\.\./\.\./\.\./\.\./index\.md\#yenc),
          130  +[ydecode](\.\./\.\./\.\./\.\./index\.md\#ydecode),
          131  +[yencode](\.\./\.\./\.\./\.\./index\.md\#yencode)
          132  +
          133  +# <a name='category'></a>CATEGORY
          134  +
          135  +Text processing
          136  +
          137  +# <a name='copyright'></a>COPYRIGHT
          138  +
          139  +Copyright &copy; 2002, Pat Thoyts

Added embedded/md/tcllib/files/modules/bee/bee.md.

            1  +
            2  +[//000000001]: # (bee \- BitTorrent)
            3  +[//000000002]: # (Generated from file 'bee\.man' by tcllib/doctools with format 'markdown')
            4  +[//000000003]: # (Copyright &copy; 2004 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
            5  +[//000000004]: # (bee\(n\) 0\.1 tcllib "BitTorrent")
            6  +
            7  +<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
            8  +href="../../../toc.md">Table Of Contents</a> &#124; <a
            9  +href="../../../../index.md">Keyword Index</a> &#124; <a
           10  +href="../../../../toc0.md">Categories</a> &#124; <a
           11  +href="../../../../toc1.md">Modules</a> &#124; <a
           12  +href="../../../../toc2.md">Applications</a> ] <hr>
           13  +
           14  +# NAME
           15  +
           16  +bee \- BitTorrent Serialization Format Encoder/Decoder
           17  +
           18  +# <a name='toc'></a>Table Of Contents
           19  +
           20  +  - [Table Of Contents](#toc)
           21  +
           22  +  - [Synopsis](#synopsis)
           23  +
           24  +  - [Description](#section1)
           25  +
           26  +  - [PUBLIC API](#section2)
           27  +
           28  +      - [ENCODER](#subsection1)
           29  +
           30  +      - [DECODER](#subsection2)
           31  +
           32  +  - [FORMAT DEFINITION](#section3)
           33  +
           34  +  - [EXAMPLES](#section4)
           35  +
           36  +  - [Bugs, Ideas, Feedback](#section5)
           37  +
           38  +  - [Keywords](#keywords)
           39  +
           40  +  - [Category](#category)
           41  +
           42  +  - [Copyright](#copyright)
           43  +
           44  +# <a name='synopsis'></a>SYNOPSIS
           45  +
           46  +package require Tcl 8\.4  
           47  +package require bee ?0\.1?  
           48  +
           49  +[__::bee::encodeString__ *string*](#1)  
           50  +[__::bee::encodeNumber__ *integer*](#2)  
           51  +[__::bee::encodeListArgs__ *value*\.\.\.](#3)  
           52  +[__::bee::encodeList__ *list*](#4)  
           53  +[__::bee::encodeDictArgs__ *key* *value*\.\.\.](#5)  
           54  +[__::bee::encodeDict__ *dict*](#6)  
           55  +[__::bee::decode__ *string* ?*endvar*? ?*start*?](#7)  
           56  +[__::bee::decodeIndices__ *string* ?*endvar*? ?*start*?](#8)  
           57  +[__::bee::decodeChannel__ *chan* __\-command__ *cmdprefix* ?__\-exact__? ?__\-prefix__ *data*?](#9)  
           58  +[__cmdprefix__ __eof__ *token*](#10)  
           59  +[__cmdprefix__ __error__ *token* *message*](#11)  
           60  +[__cmdprefix__ __value__ *token* *value*](#12)  
           61  +[__::bee::decodeCancel__ *token*](#13)  
           62  +[__::bee::decodePush__ *token* *string*](#14)  
           63  +
           64  +# <a name='description'></a>DESCRIPTION
           65  +
           66  +The __bee__ package provides de\- and encoder commands for data in bencoding
           67  +\(speak 'bee'\), the serialization format for data and messages used by the
           68  +BitTorrent protocol\.
           69  +
           70  +# <a name='section2'></a>PUBLIC API
           71  +
           72  +## <a name='subsection1'></a>ENCODER
           73  +
           74  +The package provides one encoder command for each of the basic forms, and two
           75  +commands per container, one taking a proper tcl data structure to encode in the
           76  +container, the other taking the same information as several arguments\.
           77  +
           78  +  - <a name='1'></a>__::bee::encodeString__ *string*
           79  +
           80  +    Returns the bee\-encoding of the *string*\.
           81  +
           82  +  - <a name='2'></a>__::bee::encodeNumber__ *integer*
           83  +
           84  +    Returns the bee\-encoding of the *integer* number\.
           85  +
           86  +  - <a name='3'></a>__::bee::encodeListArgs__ *value*\.\.\.
           87  +
           88  +    Takes zero or more bee\-encoded values and returns the bee\-encoding of their
           89  +    list\.
           90  +
           91  +  - <a name='4'></a>__::bee::encodeList__ *list*
           92  +
           93  +    Takes a list of bee\-encoded values and returns the bee\-encoding of the list\.
           94  +
           95  +  - <a name='5'></a>__::bee::encodeDictArgs__ *key* *value*\.\.\.
           96  +
           97  +    Takes zero or more pairs of keys and values and returns the bee\-encoding of
           98  +    the dictionary they form\. The values are expected to be already bee\-encoded,
           99  +    but the keys must not be\. Their encoding will be done by the command itself\.
          100  +
          101  +  - <a name='6'></a>__::bee::encodeDict__ *dict*
          102  +
          103  +    Takes a dictionary list of string keys and bee\-encoded values and returns
          104  +    the bee\-encoding of the list\. Note that the keys in the input must not be
          105  +    bee\-encoded already\. This will be done by the command itself\.
          106  +
          107  +## <a name='subsection2'></a>DECODER
          108  +
          109  +The package provides two main decoder commands, one for decoding a string
          110  +expected to contain a complete data structure, the other for the incremental
          111  +decoding of bee\-values arriving on a channel\. The latter command is asynchronous
          112  +and provides the completed decoded values to the user through a command
          113  +callback\.
          114  +
          115  +  - <a name='7'></a>__::bee::decode__ *string* ?*endvar*? ?*start*?
          116  +
          117  +    Takes the bee\-encoding in the string and returns one decoded value\. In the
          118  +    case of this being a container all contained values are decoded recursively
          119  +    as well and the result is a properly nested tcl list and/or dictionary\.
          120  +
          121  +    If the optional *endvar* is set then it is the name of a variable to store
          122  +    the index of the first character *after* the decoded value into\. In other
          123  +    words, if the string contains more than one value then *endvar* can be
          124  +    used to obtain the position of the bee\-value after the bee\-value currently
          125  +    decoded\. together with *start*, see below, it is possible to iterate over
          126  +    the string to extract all contained values\.
          127  +
          128  +    The optional *start* index defaults to __0__, i\.e\. the beginning of
          129  +    the string\. It is the index of the first character of the bee\-encoded value
          130  +    to extract\.
          131  +
          132  +  - <a name='8'></a>__::bee::decodeIndices__ *string* ?*endvar*? ?*start*?
          133  +
          134  +    Takes the same arguments as __::bee::decode__ and returns the same
          135  +    information in *endvar*\. The result however is different\. Instead of the
          136  +    tcl value contained in the *string* it returns a list describing the value
          137  +    with respect to type and location \(indices for the first and last character
          138  +    of the bee\-value\)\. In case of a container the structure also contains the
          139  +    same information for all the embedded values\.
          140  +
          141  +    Formally the results for the various types of bee\-values are:
          142  +
          143  +      * string
          144  +
          145  +        A list containing three elements:
          146  +
          147  +          + The constant string __string__, denoting the type of the value\.
          148  +
          149  +          + An integer number greater than or equal to zero\. This is the index
          150  +            of the first character of the bee\-value in the input *string*\.
          151  +
          152  +          + An integer number greater than or equal to zero\. This is the index
          153  +            of the last character of the bee\-value in the input *string*\.
          154  +
          155  +        *Note* that this information is present in the results for all four
          156  +        types of bee\-values, with only the first element changing according to
          157  +        the type of the value\.
          158  +
          159  +      * integer
          160  +
          161  +        The result is like for strings, except that the type element contains
          162  +        the constant string __integer__\.
          163  +
          164  +      * list
          165  +
          166  +        The result is like before, with two exceptions: One, the type element
          167  +        contains the constant string __list__\. And two, the result actually
          168  +        contains four elements\. The last element is new, and contains the index
          169  +        data as described here for all elements of the bee\-list\.
          170  +
          171  +      * dictionary
          172  +
          173  +        The result is like for strings, except that the type element contains
          174  +        the constant string __dict__\. A fourth element is present as well,
          175  +        with a slightly different structure than for lists\. The element is a
          176  +        dictionary mapping from the strings keys of the bee\-dictionary to a list
          177  +        containing two elements\. The first of them is the index information for
          178  +        the key, and the second element is the index information for the value
          179  +        the key maps to\. This structure is the only which contains not only
          180  +        index data, but actual values from the bee\-string\. While the index
          181  +        information of the keys is unique enough, i\.e\. serviceable as keys, they
          182  +        are not easy to navigate when trying to find particular element\. Using
          183  +        the actual keys makes this much easier\.
          184  +
          185  +  - <a name='9'></a>__::bee::decodeChannel__ *chan* __\-command__ *cmdprefix* ?__\-exact__? ?__\-prefix__ *data*?
          186  +
          187  +    The command creates a decoder for a series of bee\-values arriving on the
          188  +    channel *chan* and returns its handle\. This handle can be used to remove
          189  +    the decoder again\. Setting up another bee decoder on *chan* while a bee
          190  +    decoder is still active will fail with an error message\.
          191  +
          192  +      * __\-command__
          193  +
          194  +        The command prefix *cmdprefix* specified by the *required* option
          195  +        __\-command__ is used to report extracted values and exceptional
          196  +        situations \(error, and EOF on the channel\)\. The callback will be
          197  +        executed at the global level of the interpreter, with two or three
          198  +        arguments\. The exact call signatures are
          199  +
          200  +          + <a name='10'></a>__cmdprefix__ __eof__ *token*
          201  +
          202  +            The decoder has reached eof on the channel *chan*\. No further
          203  +            invocations of the callback will be made after this\. The channel has
          204  +            already been closed at the time of the call, and the *token* is
          205  +            not valid anymore as well\.
          206  +
          207  +          + <a name='11'></a>__cmdprefix__ __error__ *token* *message*
          208  +
          209  +            The decoder encountered an error, which is not eof\. For example a
          210  +            malformed bee\-value\. The *message* provides details about the
          211  +            error\. The decoder token is in the same state as for eof, i\.e\.
          212  +            invalid\. The channel however is kept open\.
          213  +
          214  +          + <a name='12'></a>__cmdprefix__ __value__ *token* *value*
          215  +
          216  +            The decoder received and successfully decoded a bee\-value\. The
          217  +            format of the equivalent tcl *value* is the same as returned by
          218  +            __::bee::decode__\. The channel is still open and the decoder
          219  +            token is valid\. This means that the callback is able to remove the
          220  +            decoder\.
          221  +
          222  +      * __\-exact__
          223  +
          224  +        By default the decoder assumes that the remainder of the data in the
          225  +        channel consists only of bee\-values, and reads as much as possible per
          226  +        event, without regard for boundaries between bee\-values\. This means that
          227  +        if the the input contains non\-bee data after a series of bee\-value the
          228  +        beginning of that data may be lost because it was already read by the
          229  +        decoder, but not processed\.
          230  +
          231  +        The __\-exact__ was made for this situation\. When specified the
          232  +        decoder will take care to not read any characters behind the currently
          233  +        processed bee\-value, so that any non\-bee data is kept in the channel for
          234  +        further processing after removal of the decoder\.
          235  +
          236  +