Tcl Library Source Code

Check-in [67c2cce9ef]
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:More polishing to bring the embedded markdown documentation nearer to par with HTML. Only the styling HTML had is missing, and that is a limit of MD itself. - Markdown: Added support for engine parameter 'header'. Needed for navbar from dtplite. Added missing copyright information (see also HTML). Added character protection to engine, to mark the special command characters. Special characters in the input are quoted at the end, to prevent them from being seen as special by markdown. This required support in the general text engine too, when handling indents. It must not count the protection character (\1). - dtplite: Use HTML entity for the vertical bar in the navbar. This prevents misidentification as special character in the markdown engine, while keeping it usable for the HTML engine. - Removed HTML stylesheet for fossil integration. Unused now with the embedded docs using markdown and fossil doing the render. - Regenerated embedded docs, inserting copyright comment, and navbar.
Timelines: family | ancestors | descendants | both | doc-fixup-and-markdown
Files: files | file ages | folders
SHA3-256: 67c2cce9ef525eba12464359e22b42bc4d0f00c0956622faed5b7466d5f52f3e
User & Date: aku 2019-03-22 07:17:07
Original Comment: - Markdown: Added support for engine parameter 'header'. Needed for navbar from dtplite. Added missing copyright information (see also HTML). Added character protection to engine, to mark the special command characters. Special characters in the input are quoted at the end, to prevent them from being seen as special by markdown. This required support in the general text engine too, when handling indents. It must not count the protection character (\1). - dtplite: Use HTML entity for the vertical bar in the navbar. This prevents misidentification as special character in the markdown engine, while keeping it usable for the HTML engine. - Removed HTML stylesheet for fossil integration. Unused now with the embedded docs using markdown and fossil doing the render. - Regenerated embedded docs, inserting copyright comment, and navbar.
Context
2019-03-22
19:16
Documentation updated to include Markdown as a possible output format. Regenerated embedded documentation. Version bumps EF (markdown) B (text, html, tmml, nroff, latex, wiki) I (text) T (*) D (*) doctools 1.5 doctoc 1.2 docidx 1.1 Closed-Leaf check-in: 14a3046674 user: aku tags: doc-fixup-and-markdown
07:17
More polishing to bring the embedded markdown documentation nearer to par with HTML. Only the styling HTML had is missing, and that is a limit of MD itself. - Markdown: Added support for engine parameter 'header'. Needed for navbar from dtplite. Added missing copyright information (see also HTML). Added character protection to engine, to mark the special command characters. Special characters in the input are quoted at the end, to prevent them from being seen as special by markdown. This required support in the general text engine too, when handling indents. It must not count the protection character (\1). - dtplite: Use HTML entity for the vertical bar in the navbar. This prevents misidentification as special character in the markdown engine, while keeping it usable for the HTML engine. - Removed HTML stylesheet for fossil integration. Unused now with the embedded docs using markdown and fossil doing the render. - Regenerated embedded docs, inserting copyright comment, and navbar. check-in: 67c2cce9ef user: aku tags: doc-fixup-and-markdown
2019-03-21
20:05
Switched homepage over to markdown. check-in: 2c7245df25 user: aku tags: doc-fixup-and-markdown
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to embedded/md/index.md.

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
----

#### <a name='c3'></a>Keywords: 3

|||
|---|---|
|<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)|


#### <a name='cA'></a>Keywords: A

|||
|---|---|
|<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)|
|<a name='acceptance'></a>acceptance|[grammar::fa::dacceptor](tcllib/files/modules/grammar_fa/dacceptor.md)|
|<a name='acceptor'></a>acceptor|[grammar::fa::dacceptor](tcllib/files/modules/grammar_fa/dacceptor.md)|
|<a name='active'></a>active|[transfer::connect](tcllib/files/modules/transfer/connect.md)|
|<a name='adaptors'></a>adaptors|[snit](tcllib/files/modules/snit/snit.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq.md)|
|<a name='adjacency_list'></a>adjacency list|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='adjacency_matrix'></a>adjacency matrix|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='adjacent'></a>adjacent|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='adjusting'></a>adjusting|[textutil::adjust](tcllib/files/modules/textutil/adjust.md)|
|<a name='adler32'></a>adler32|[tcl::transform::adler32](tcllib/files/modules/virtchannel_transform/adler32.md)|
|<a name='aes'></a>aes|[aes](tcllib/files/modules/aes/aes.md)|
|<a name='after'></a>after|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<a name='alias'></a>alias|[interp](tcllib/files/modules/interp/tcllib_interp.md)|
|<a name='amazon'></a>amazon|[S3](tcllib/files/modules/amazon-s3/S3.md)|
|<a name='ambiguous'></a>ambiguous|[grammar::aycock](tcllib/files/modules/grammar_aycock/aycock.md)|
|<a name='american_express'></a>American Express|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc_amex.md)|
|<a name='amex'></a>AMEX|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc_amex.md)|
|<a name='angle'></a>angle|[math::geometry](tcllib/files/modules/math/math_geometry.md) &#183; [units](tcllib/files/modules/units/units.md)|
|<a name='anonymous_procedure'></a>anonymous procedure|[lambda](tcllib/files/modules/lambda/lambda.md)|
|<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)|
|<a name='appender'></a>appender|[logger::appender](tcllib/files/modules/log/loggerAppender.md) &#183; [logger::utils](tcllib/files/modules/log/loggerUtils.md)|
|<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)|
|<a name='approximation_algorithm'></a>approximation algorithm|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='arc'></a>arc|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='arcfour'></a>arcfour|[rc4](tcllib/files/modules/rc4/rc4.md)|
|<a name='archive'></a>archive|[tar](tcllib/files/modules/tar/tar.md)|
|<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)|
|<a name='argument_processing'></a>argument processing|[cmdline](tcllib/files/modules/cmdline/cmdline.md)|
|<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)|
|<a name='arguments'></a>arguments|[tepam](tcllib/files/modules/tepam/tepam_introduction.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam_procedure.md)|
|<a name='argv'></a>argv|[cmdline](tcllib/files/modules/cmdline/cmdline.md)|
|<a name='argv0'></a>argv0|[cmdline](tcllib/files/modules/cmdline/cmdline.md)|
|<a name='array'></a>array|[tie](tcllib/files/modules/tie/tie_std.md) &#183; [tie](tcllib/files/modules/tie/tie.md)|
|<a name='articulation_point'></a>articulation point|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='ascii85'></a>ascii85|[ascii85](tcllib/files/modules/base64/ascii85.md)|
|<a name='asn'></a>asn|[asn](tcllib/files/modules/asn/asn.md)|
|<a name='assembler'></a>assembler|[grammar::me::cpu::gasm](tcllib/files/modules/grammar_me/gasm.md)|
|<a name='assert'></a>assert|[control](tcllib/files/modules/control/control.md)|
|<a name='assign'></a>assign|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='ast'></a>AST|[grammar::me_ast](tcllib/files/modules/grammar_me/me_ast.md)|
|<a name='asynchronous'></a>asynchronous|[cache::async](tcllib/files/modules/cache/async.md)|
|<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)|
|<a name='augmenting_network'></a>augmenting network|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='augmenting_path'></a>augmenting path|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='automatic'></a>automatic|[nameserv::auto](tcllib/files/modules/nns/nns_auto.md)|
|<a name='automatic_documentation'></a>automatic documentation|[tepam::doc_gen](tcllib/files/modules/tepam/tepam_doc_gen.md)|
|<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)|
|<a name='aycock'></a>aycock|[grammar::aycock](tcllib/files/modules/grammar_aycock/aycock.md)|


#### <a name='cB'></a>Keywords: B

|||
|---|---|
|<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)|
|<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)|
|<a name='base64'></a>base64|[base64](tcllib/files/modules/base64/base64.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel_transform/vt_base64.md)|
|<a name='bash'></a>bash|[string::token::shell](tcllib/files/modules/string/token_shell.md)|
|<a name='bee'></a>bee|[bee](tcllib/files/modules/bee/bee.md)|
|<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)|
|<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)|
|<a name='ber'></a>ber|[asn](tcllib/files/modules/asn/asn.md)|
|<a name='bessel_functions'></a>Bessel functions|[math::special](tcllib/files/modules/math/special.md)|
|<a name='bfs'></a>bfs|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='bibliography'></a>bibliography|[bibtex](tcllib/files/modules/bibtex/bibtex.md)|
|<a name='bibtex'></a>bibtex|[bibtex](tcllib/files/modules/bibtex/bibtex.md)|
|<a name='bignums'></a>bignums|[math::bignum](tcllib/files/modules/math/bignum.md)|
|<a name='bind'></a>bind|[uevent](tcllib/files/modules/uev/uevent.md)|
|<a name='bipartite'></a>bipartite|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='bittorrent'></a>BitTorrent|[bee](tcllib/files/modules/bee/bee.md)|
|<a name='bittorrent'></a>bittorrent|[bee](tcllib/files/modules/bee/bee.md)|
|<a name='blanks'></a>blanks|[textutil::repeat](tcllib/files/modules/textutil/repeat.md)|
|<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)|
|<a name='blocking_flow'></a>blocking flow|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='blowfish'></a>blowfish|[blowfish](tcllib/files/modules/blowfish/blowfish.md)|
|<a name='book_number'></a>Book Number|[valtype::isbn](tcllib/files/modules/valtype/isbn.md)|
|<a name='breadth_first'></a>breadth-first|[struct::tree](tcllib/files/modules/struct/struct_tree.md)|
|<a name='bridge'></a>bridge|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='bwidget'></a>BWidget|[snit](tcllib/files/modules/snit/snit.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq.md)|


#### <a name='cC'></a>Keywords: C

|||
|---|---|
|<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)|
|<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)|
|<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)|
|<a name='caesar_cipher'></a>caesar cipher|[tcl::transform::rot](tcllib/files/modules/virtchannel_transform/rot.md)|
|<a name='calculus'></a>calculus|[math::calculus](tcllib/files/modules/math/calculus.md)|
|<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)|
|<a name='callbacks'></a>callbacks|[tcl::chan::halfpipe](tcllib/files/modules/virtchannel_base/halfpipe.md)|
|<a name='capitalize'></a>capitalize|[textutil::string](tcllib/files/modules/textutil/textutil_string.md)|
|<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)|
|<a name='cardinality'></a>cardinality|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='cat'></a>cat|[fileutil](tcllib/files/modules/fileutil/fileutil.md)|
|<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)|
|<a name='catalogue'></a>catalogue|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md)|
|<a name='cell_phone'></a>cell-phone|[valtype::imei](tcllib/files/modules/valtype/imei.md)|
|<a name='cer'></a>cer|[asn](tcllib/files/modules/asn/asn.md)|
|<a name='cfg'></a>CFG|[grammar::me_intro](tcllib/files/modules/grammar_me/me_intro.md)|
|<a name='cfl'></a>CFL|[grammar::me_intro](tcllib/files/modules/grammar_me/me_intro.md)|
|<a name='cgi'></a>CGI|[ncgi](tcllib/files/modules/ncgi/ncgi.md)|
|<a name='cgraph'></a>cgraph|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph_v1](tcllib/files/modules/struct/graph1.md)|
|<a name='changelog'></a>changelog|[doctools::changelog](tcllib/files/modules/doctools/changelog.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='checkbox'></a>checkbox|[html](tcllib/files/modules/html/html.md) &#183; [javascript](tcllib/files/modules/javascript/javascript.md)|
|<a name='checkbutton'></a>checkbutton|[html](tcllib/files/modules/html/html.md)|
|<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)|
|<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)|
|<a name='chop'></a>chop|[textutil::string](tcllib/files/modules/textutil/textutil_string.md)|
|<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)|
|<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)|
|<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)|
|<a name='class_methods'></a>class methods|[oo::util](tcllib/files/modules/tool/meta.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil.md)|
|<a name='class_variables'></a>class variables|[oo::util](tcllib/files/modules/tool/meta.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil.md)|
|<a name='cleanup'></a>cleanup|[defer](tcllib/files/modules/defer/defer.md) &#183; [try](tcllib/files/modules/try/tcllib_try.md)|
|<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)|
|<a name='cloud'></a>cloud|[S3](tcllib/files/modules/amazon-s3/S3.md)|
|<a name='cmdline_processing'></a>cmdline processing|[cmdline](tcllib/files/modules/cmdline/cmdline.md)|
|<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)|
|<a name='columns'></a>columns|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi_ctrlu.md)|
|<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)|
|<a name='command'></a>command|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl_parse.md)|
|<a name='command_line_processing'></a>command line processing|[cmdline](tcllib/files/modules/cmdline/cmdline.md)|
|<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)|
|<a name='comment'></a>comment|[jpeg](tcllib/files/modules/jpeg/jpeg.md) &#183; [png](tcllib/files/modules/png/png.md)|
|<a name='common'></a>common|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='common_prefix'></a>common prefix|[textutil::string](tcllib/files/modules/textutil/textutil_string.md)|
|<a name='communication'></a>communication|[comm](tcllib/files/modules/comm/comm.md) &#183; [comm_wire](tcllib/files/modules/comm/comm_wire.md)|
|<a name='comparison'></a>comparison|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='complete_graph'></a>complete graph|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='complex_numbers'></a>complex numbers|[math::complexnumbers](tcllib/files/modules/math/qcomplex.md) &#183; [math::fourier](tcllib/files/modules/math/fourier.md)|
|<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)|
|<a name='computations'></a>computations|[math::bigfloat](tcllib/files/modules/math/bigfloat.md)|
|<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)|
|<a name='connected_component'></a>connected component|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='connected_fifos'></a>connected fifos|[tcl::chan::fifo2](tcllib/files/modules/virtchannel_base/tcllib_fifo2.md)|
|<a name='connection'></a>connection|[transfer::connect](tcllib/files/modules/transfer/connect.md)|
|<a name='constants'></a>constants|[math::constants](tcllib/files/modules/math/constants.md) &#183; [units](tcllib/files/modules/units/units.md)|
|<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)|
|<a name='contents'></a>contents|[doctools2toc_introduction](tcllib/files/modules/doctools2toc/toc_introduction.md)|
|<a name='context_free_grammar'></a>context-free grammar|[grammar::me_intro](tcllib/files/modules/grammar_me/me_intro.md)|
|<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)|
|<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)|
|<a name='control_structure'></a>control structure|[generator](tcllib/files/modules/generator/generator.md)|
|<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)|
|<a name='cooked'></a>cooked|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi_ctrlu.md)|
|<a name='cookie'></a>cookie|[ncgi](tcllib/files/modules/ncgi/ncgi.md)|
|<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)|
|<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)|
|<a name='cost'></a>Cost|[treeql](tcllib/files/modules/treeql/treeql.md)|
|<a name='counter'></a>counter|[tcl::transform::counter](tcllib/files/modules/virtchannel_transform/vt_counter.md)|
|<a name='counting'></a>counting|[counter](tcllib/files/modules/counter/counter.md)|
|<a name='cparam'></a>CPARAM|[pt::peg::to::cparam](tcllib/files/modules/pt/pt_peg_to_cparam.md)|
|<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)|
|<a name='crc16'></a>crc16|[crc16](tcllib/files/modules/crc/crc16.md)|
|<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)|
|<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)|
|<a name='cron'></a>cron|[cron](tcllib/files/modules/cron/cron.md)|
|<a name='cryptography'></a>cryptography|[blowfish](tcllib/files/modules/blowfish/blowfish.md)|
|<a name='css'></a>CSS|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html_cssdefaults.md)|
|<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)|
|<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)|
|<a name='cut_edge'></a>cut edge|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='cut_vertex'></a>cut vertex|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='cvs'></a>CVS|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='cvs'></a>cvs|[doctools::cvs](tcllib/files/modules/doctools/cvs.md)|
|<a name='cvs_log'></a>cvs log|[doctools::cvs](tcllib/files/modules/doctools/cvs.md)|
|<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)|


#### <a name='cD'></a>Keywords: D

|||
|---|---|
|<a name='data_analysis'></a>data analysis|[math::statistics](tcllib/files/modules/math/statistics.md)|
|<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)|
|<a name='data_entry_form'></a>data entry form|[tepam::argument_dialogbox](tcllib/files/modules/tepam/tepam_argument_dialogbox.md)|
|<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)|
|<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)|
|<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)|
|<a name='data_structures'></a>data structures|[struct::record](tcllib/files/modules/struct/record.md)|
|<a name='database'></a>database|[tie](tcllib/files/modules/tie/tie_std.md) &#183; [tie](tcllib/files/modules/tie/tie.md)|
|<a name='dataflow'></a>dataflow|[page_util_flow](tcllib/files/modules/page/page_util_flow.md)|
|<a name='_ddt'></a>.ddt|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md)|
|<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)|
|<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)|
|<a name='decimal'></a>decimal|[math::decimal](tcllib/files/modules/math/decimal.md)|
|<a name='declare'></a>declare|[term::ansi::code](tcllib/files/modules/term/ansi_code.md)|
|<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)|
|<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)|
|<a name='deferal'></a>deferal|[uevent::onidle](tcllib/files/modules/uev/uevent_onidle.md)|
|<a name='define'></a>define|[term::ansi::code](tcllib/files/modules/term/ansi_code.md)|
|<a name='degree'></a>degree|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='degree_constrained_spanning_tree'></a>degree constrained spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='degrees'></a>degrees|[math::constants](tcllib/files/modules/math/constants.md)|
|<a name='delegation'></a>delegation|[deleg_method](tcllib/files/modules/interp/deleg_method.md) &#183; [deleg_proc](tcllib/files/modules/interp/deleg_proc.md)|
|<a name='depth_first'></a>depth-first|[struct::tree](tcllib/files/modules/struct/struct_tree.md)|
|<a name='der'></a>der|[asn](tcllib/files/modules/asn/asn.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='diameter'></a>diameter|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='dict'></a>dict|[dicttool](tcllib/files/modules/dicttool/dicttool.md)|
|<a name='diff'></a>diff|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md) &#183; [struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='diff_n_format'></a>diff -n format|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='difference'></a>difference|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='differential'></a>differential|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='differential_equations'></a>differential equations|[math::calculus](tcllib/files/modules/math/calculus.md)|
|<a name='dijkstra'></a>dijkstra|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='directory_access'></a>directory access|[ldap](tcllib/files/modules/ldap/ldap.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx.md)|
|<a name='directory_traversal'></a>directory traversal|[fileutil_traverse](tcllib/files/modules/fileutil/traverse.md)|
|<a name='discover'></a>Discover|[valtype::creditcard::discover](tcllib/files/modules/valtype/cc_discover.md)|
|<a name='discrete_items'></a>discrete items|[struct::pool](tcllib/files/modules/struct/pool.md)|
|<a name='disjoint_set'></a>disjoint set|[struct::disjointset](tcllib/files/modules/struct/disjointset.md)|
|<a name='dispatcher'></a>dispatcher|[term::receive::bind](tcllib/files/modules/term/term_bind.md)|
|<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)|
|<a name='dns'></a>DNS|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<a name='do'></a>do|[control](tcllib/files/modules/control/control.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='document'></a>document|[doctools_plugin_apiref](tcllib/files/modules/doctools/doctools_plugin_apiref.md)|
|<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)|
|<a name='dom'></a>DOM|[treeql](tcllib/files/modules/treeql/treeql.md)|
|<a name='dom'></a>dom|[xsxp](tcllib/files/modules/amazon-s3/xsxp.md)|
|<a name='domain_name_service'></a>domain name service|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<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)|


#### <a name='cE'></a>Keywords: E

|||
|---|---|
|<a name='e'></a>e|[math::constants](tcllib/files/modules/math/constants.md)|
|<a name='ean'></a>EAN|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn.md)|
|<a name='ean13'></a>EAN13|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn.md)|
|<a name='earley'></a>earley|[grammar::aycock](tcllib/files/modules/grammar_aycock/aycock.md)|
|<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)|
|<a name='eccentricity'></a>eccentricity|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='edge'></a>edge|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='emacs'></a>emacs|[doctools::changelog](tcllib/files/modules/doctools/changelog.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs.md)|
|<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)|
|<a name='emptiness'></a>emptiness|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='empty_interpreter'></a>empty interpreter|[interp](tcllib/files/modules/interp/tcllib_interp.md)|
|<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)|
|<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)|
|<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)|
|<a name='entry_mask'></a>entry mask|[tepam](tcllib/files/modules/tepam/tepam_introduction.md)|
|<a name='equal'></a>equal|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='equality'></a>equality|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='equivalence_class'></a>equivalence class|[struct::disjointset](tcllib/files/modules/struct/disjointset.md)|
|<a name='error'></a>error|[throw](tcllib/files/modules/try/tcllib_throw.md) &#183; [try](tcllib/files/modules/try/tcllib_try.md)|
|<a name='error_function'></a>error function|[math::special](tcllib/files/modules/math/special.md)|
|<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)|
|<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)|
|<a name='event_management'></a>event management|[tcl::chan::events](tcllib/files/modules/virtchannel_core/events.md)|
|<a name='events'></a>events|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<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)|
|<a name='exception'></a>exception|[try](tcllib/files/modules/try/tcllib_try.md)|
|<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)|
|<a name='exclusion'></a>exclusion|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='execution'></a>execution|[grammar::fa::dexec](tcllib/files/modules/grammar_fa/dexec.md)|
|<a name='exif'></a>exif|[jpeg](tcllib/files/modules/jpeg/jpeg.md)|
|<a name='exit'></a>exit|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<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)|
|<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)|
|<a name='extended_namespace'></a>extended namespace|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|


#### <a name='cF'></a>Keywords: F

|||
|---|---|
|<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)|
|<a name='fetching_information'></a>fetching information|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='fft'></a>FFT|[math::fourier](tcllib/files/modules/math/fourier.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='filesystem'></a>filesystem|[map::slippy::cache](tcllib/files/modules/map/map_slippy_cache.md)|
|<a name='filter'></a>filter|[generator](tcllib/files/modules/generator/generator.md) &#183; [struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='final'></a>final|[try](tcllib/files/modules/try/tcllib_try.md)|
|<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)|
|<a name='find'></a>find|[struct::disjointset](tcllib/files/modules/struct/disjointset.md)|
|<a name='finite'></a>finite|[struct::pool](tcllib/files/modules/struct/pool.md)|
|<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)|
|<a name='fips_180_1'></a>FIPS 180-1|[sha1](tcllib/files/modules/sha1/sha1.md) &#183; [sha256](tcllib/files/modules/sha1/sha256.md)|
|<a name='first_permutation'></a>first permutation|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='fisher_yates'></a>Fisher-Yates|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='flatten'></a>flatten|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='floating_point'></a>floating-point|[math::bigfloat](tcllib/files/modules/math/bigfloat.md) &#183; [math::fuzzy](tcllib/files/modules/math/fuzzy.md)|
|<a name='flow'></a>flow|[control](tcllib/files/modules/control/control.md)|
|<a name='flow_network'></a>flow network|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='folding'></a>folding|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='foldl'></a>foldl|[generator](tcllib/files/modules/generator/generator.md)|
|<a name='foldr'></a>foldr|[generator](tcllib/files/modules/generator/generator.md)|
|<a name='foreach'></a>foreach|[generator](tcllib/files/modules/generator/generator.md)|
|<a name='form'></a>form|[html](tcllib/files/modules/html/html.md) &#183; [ncgi](tcllib/files/modules/ncgi/ncgi.md)|
|<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)|
|<a name='formatter'></a>formatter|[doctools_plugin_apiref](tcllib/files/modules/doctools/doctools_plugin_apiref.md)|
|<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)|
|<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)|
|<a name='fourier_transform'></a>Fourier transform|[math::fourier](tcllib/files/modules/math/fourier.md)|
|<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)|
|<a name='frame'></a>frame|[term::ansi::code::macros](tcllib/files/modules/term/ansi_cmacros.md)|
|<a name='framework'></a>framework|[tool](tcllib/files/modules/tool/tool.md)|
|<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)|
|<a name='ftpd'></a>ftpd|[ftpd](tcllib/files/modules/ftpd/ftpd.md)|
|<a name='ftpserver'></a>ftpserver|[ftpd](tcllib/files/modules/ftpd/ftpd.md)|
|<a name='full_outer_join'></a>full outer join|[struct::list](tcllib/files/modules/struct/struct_list.md)|


#### <a name='cG'></a>Keywords: G

|||
|---|---|
|<a name='generate_event'></a>generate event|[uevent](tcllib/files/modules/uev/uevent.md)|
|<a name='generate_permutations'></a>generate permutations|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<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)|
|<a name='generator'></a>generator|[generator](tcllib/files/modules/generator/generator.md)|
|<a name='geocoding'></a>geocoding|[map::geocode::nominatim](tcllib/files/modules/map/map_geocode_nominatim.md)|
|<a name='geodesy'></a>geodesy|[map::slippy](tcllib/files/modules/map/map_slippy.md) &#183; [mapproj](tcllib/files/modules/mapproj/mapproj.md)|
|<a name='geography'></a>geography|[map::slippy](tcllib/files/modules/map/map_slippy.md)|
|<a name='get_character'></a>get character|[term::receive](tcllib/files/modules/term/receive.md)|
|<a name='gets'></a>gets|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<a name='global'></a>global|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<a name='golang'></a>golang|[defer](tcllib/files/modules/defer/defer.md)|
|<a name='gopher'></a>gopher|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='gps'></a>gps|[gpx](tcllib/files/modules/gpx/gpx.md) &#183; [nmea](tcllib/files/modules/nmea/nmea.md)|
|<a name='gpx'></a>gpx|[gpx](tcllib/files/modules/gpx/gpx.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='grep'></a>grep|[fileutil](tcllib/files/modules/fileutil/fileutil.md)|
|<a name='guid'></a>GUID|[uuid](tcllib/files/modules/uuid/uuid.md)|


#### <a name='cH'></a>Keywords: H

|||
|---|---|
|<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)|
|<a name='heartbeat'></a>heartbeat|[debug::heartbeat](tcllib/files/modules/debug/debug_heartbeat.md)|
|<a name='heuristic'></a>heuristic|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='hex'></a>hex|[base32::hex](tcllib/files/modules/base32/base32hex.md)|
|<a name='hexadecimal'></a>hexadecimal|[tcl::transform::hex](tcllib/files/modules/virtchannel_transform/hex.md)|
|<a name='histogram'></a>histogram|[counter](tcllib/files/modules/counter/counter.md)|
|<a name='hook'></a>hook|[hook](tcllib/files/modules/hook/hook.md) &#183; [uevent](tcllib/files/modules/uev/uevent.md)|
|<a name='horspool'></a>horspool|[grammar::aycock](tcllib/files/modules/grammar_aycock/aycock.md)|
|<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)|
|<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)|
|<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)|
|<a name='httpd'></a>httpd|[tool](tcllib/files/modules/httpd/httpd.md)|
|<a name='https'></a>https|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='httpserver'></a>httpserver|[tool](tcllib/files/modules/httpd/httpd.md)|
|<a name='huddle'></a>huddle|[huddle](tcllib/files/modules/yaml/huddle.md) &#183; [yaml](tcllib/files/modules/yaml/yaml.md)|
|<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)|
|<a name='hyphenation'></a>hyphenation|[textutil](tcllib/files/modules/textutil/textutil.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust.md)|


#### <a name='cI'></a>Keywords: I

|||
|---|---|
|<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)|
|<a name='iban'></a>IBAN|[valtype::iban](tcllib/files/modules/valtype/iban.md)|
|<a name='ident'></a>ident|[ident](tcllib/files/modules/ident/ident.md)|
|<a name='identification'></a>identification|[ident](tcllib/files/modules/ident/ident.md)|
|<a name='identity'></a>identity|[tcl::transform::identity](tcllib/files/modules/virtchannel_transform/identity.md)|
|<a name='idle'></a>idle|[uevent::onidle](tcllib/files/modules/uev/uevent_onidle.md)|
|<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)|
|<a name='imap'></a>imap|[imap4](tcllib/files/modules/imap4/imap4.md)|
|<a name='imei'></a>IMEI|[valtype::imei](tcllib/files/modules/valtype/imei.md)|
|<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)|
|<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)|
|<a name='in_order'></a>in-order|[struct::tree](tcllib/files/modules/struct/struct_tree.md)|
|<a name='inclusion'></a>inclusion|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='incr_tcl'></a>Incr Tcl|[snit](tcllib/files/modules/snit/snit.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq.md)|
|<a name='indenting'></a>indenting|[textutil](tcllib/files/modules/textutil/textutil.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust.md)|
|<a name='independent_set'></a>independent set|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='index_formatter'></a>index formatter|[docidx_plugin_apiref](tcllib/files/modules/doctools/docidx_plugin_apiref.md)|
|<a name='info'></a>info|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|
|<a name='inner_join'></a>inner join|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='input_mode'></a>input mode|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi_ctrlu.md)|
|<a name='integer'></a>integer|[math::roman](tcllib/files/modules/math/roman.md)|
|<a name='integration'></a>integration|[math::calculus](tcllib/files/modules/math/calculus.md)|
|<a name='inter_thread_communication'></a>inter-thread communication|[tcl::chan::fifo2](tcllib/files/modules/virtchannel_base/tcllib_fifo2.md)|
|<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)|
|<a name='international_bank_account_number'></a>International Bank Account Number|[valtype::iban](tcllib/files/modules/valtype/iban.md)|
|<a name='international_mobile_equipment_identity'></a>International Mobile Equipment Identity|[valtype::imei](tcllib/files/modules/valtype/imei.md)|
|<a name='international_standard_book_number'></a>International Standard Book Number|[valtype::isbn](tcllib/files/modules/valtype/isbn.md)|
|<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)|
|<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)|
|<a name='internet_address'></a>internet address|[tcllib_ip](tcllib/files/modules/dns/tcllib_ip.md)|
|<a name='interpolation'></a>interpolation|[math::interpolate](tcllib/files/modules/math/interpolate.md)|
|<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)|
|<a name='intersection'></a>intersection|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='interval'></a>interval|[math::bigfloat](tcllib/files/modules/math/bigfloat.md)|
|<a name='ip'></a>ip|[tcllib_ip](tcllib/files/modules/dns/tcllib_ip.md)|
|<a name='ipc'></a>ipc|[comm](tcllib/files/modules/comm/comm.md) &#183; [comm_wire](tcllib/files/modules/comm/comm_wire.md)|
|<a name='ipv4'></a>ipv4|[tcllib_ip](tcllib/files/modules/dns/tcllib_ip.md)|
|<a name='ipv6'></a>ipv6|[tcllib_ip](tcllib/files/modules/dns/tcllib_ip.md)|
|<a name='irc'></a>irc|[irc](tcllib/files/modules/irc/irc.md) &#183; [picoirc](tcllib/files/modules/irc/picoirc.md)|
|<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)|
|<a name='isbn'></a>ISBN|[valtype::isbn](tcllib/files/modules/valtype/isbn.md)|
|<a name='isthmus'></a>isthmus|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='iterator'></a>iterator|[generator](tcllib/files/modules/generator/generator.md)|


#### <a name='cJ'></a>Keywords: J

|||
|---|---|
|<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)|
|<a name='jfif'></a>jfif|[jpeg](tcllib/files/modules/jpeg/jpeg.md)|
|<a name='join'></a>join|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='jpeg'></a>jpeg|[jpeg](tcllib/files/modules/jpeg/jpeg.md)|
|<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)|
|<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)|
|<a name='justification'></a>justification|[textutil::adjust](tcllib/files/modules/textutil/adjust.md)|


#### <a name='cK'></a>Keywords: K

|||
|---|---|
|<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)|
|<a name='keywords'></a>keywords|[docidx_plugin_apiref](tcllib/files/modules/doctools/docidx_plugin_apiref.md)|
|<a name='knuth'></a>knuth|[soundex](tcllib/files/modules/soundex/soundex.md)|


#### <a name='cL'></a>Keywords: L

|||
|---|---|
|<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)|
|<a name='lambda'></a>lambda|[lambda](tcllib/files/modules/lambda/lambda.md)|
|<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)|
|<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)|
|<a name='latitute'></a>latitute|[map::slippy](tcllib/files/modules/map/map_slippy.md)|
|<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)|
|<a name='ldap_client'></a>ldap client|[ldap](tcllib/files/modules/ldap/ldap.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx.md)|
|<a name='ldif'></a>ldif|[ldapx](tcllib/files/modules/ldap/ldapx.md)|
|<a name='least_squares'></a>least squares|[math::linearalgebra](tcllib/files/modules/math/linalg.md)|
|<a name='left_outer_join'></a>left outer join|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='lemon'></a>lemon|[page_util_norm_lemon](tcllib/files/modules/page/page_util_norm_lemon.md)|
|<a name='level_graph'></a>level graph|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='lexing'></a>lexing|[string::token](tcllib/files/modules/string/token.md) &#183; [string::token::shell](tcllib/files/modules/string/token_shell.md)|
|<a name='limitsize'></a>limitsize|[tcl::transform::limitsize](tcllib/files/modules/virtchannel_transform/limitsize.md)|
|<a name='line'></a>line|[math::geometry](tcllib/files/modules/math/math_geometry.md)|
|<a name='linear_algebra'></a>linear algebra|[math::linearalgebra](tcllib/files/modules/math/linalg.md)|
|<a name='linear_equations'></a>linear equations|[math::linearalgebra](tcllib/files/modules/math/linalg.md)|
|<a name='linear_program'></a>linear program|[math::optimize](tcllib/files/modules/math/optimize.md)|
|<a name='lines'></a>lines|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi_ctrlu.md)|
|<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)|
|<a name='listener'></a>listener|[term::receive](tcllib/files/modules/term/receive.md) &#183; [term::receive::bind](tcllib/files/modules/term/term_bind.md)|
|<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)|
|<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)|
|<a name='local_searching'></a>local searching|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<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)|
|<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)|
|<a name='log_level'></a>log level|[log](tcllib/files/modules/log/log.md) &#183; [logger](tcllib/files/modules/log/logger.md)|
|<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)|
|<a name='longest_common_subsequence'></a>longest common subsequence|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='longitude'></a>longitude|[map::slippy](tcllib/files/modules/map/map_slippy.md)|
|<a name='loop'></a>loop|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='luhn'></a>luhn|[valtype::luhn](tcllib/files/modules/valtype/luhn.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5.md)|
|<a name='luhn_5'></a>luhn-5|[valtype::luhn5](tcllib/files/modules/valtype/luhn5.md)|


#### <a name='cM'></a>Keywords: M

|||
|---|---|
|<a name='macros'></a>macros|[doctools::nroff::man_macros](tcllib/files/modules/doctools2base/nroff_manmacros.md)|
|<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)|
|<a name='mailto'></a>mailto|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='man_macros'></a>man_macros|[doctools::nroff::man_macros](tcllib/files/modules/doctools2base/nroff_manmacros.md)|
|<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)|
|<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)|
|<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)|
|<a name='mastercard'></a>MasterCard|[valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc_mastercard.md)|
|<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)|
|<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)|
|<a name='mathematics'></a>mathematics|[math::fourier](tcllib/files/modules/math/fourier.md) &#183; [math::statistics](tcllib/files/modules/math/statistics.md)|
|<a name='matrices'></a>matrices|[math::linearalgebra](tcllib/files/modules/math/linalg.md)|
|<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)|
|<a name='max_cut'></a>max cut|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='maximum'></a>maximum|[math::optimize](tcllib/files/modules/math/optimize.md)|
|<a name='maximum_flow'></a>maximum flow|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='md5'></a>md5|[md5](tcllib/files/modules/md5/md5.md) &#183; [md5crypt](tcllib/files/modules/md5crypt/md5crypt.md)|
|<a name='md5crypt'></a>md5crypt|[md5crypt](tcllib/files/modules/md5crypt/md5crypt.md)|
|<a name='medicare'></a>medicare|[valtype::usnpi](tcllib/files/modules/valtype/usnpi.md)|
|<a name='mega_widget'></a>mega widget|[snit](tcllib/files/modules/snit/snit.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq.md)|
|<a name='membership'></a>membership|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<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)|
|<a name='merge'></a>merge|[tcl::randomseed](tcllib/files/modules/virtchannel_base/randseed.md) &#183; [uevent::onidle](tcllib/files/modules/uev/uevent_onidle.md)|
|<a name='merge_find'></a>merge find|[struct::disjointset](tcllib/files/modules/struct/disjointset.md)|
|<a name='merging'></a>merging|[bench](tcllib/files/modules/bench/bench.md)|
|<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)|
|<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)|
|<a name='message_level'></a>message level|[log](tcllib/files/modules/log/log.md)|
|<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)|
|<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)|
|<a name='metakit'></a>metakit|[tie](tcllib/files/modules/tie/tie_std.md) &#183; [tie](tcllib/files/modules/tie/tie.md)|
|<a name='method'></a>method|[deleg_method](tcllib/files/modules/interp/deleg_method.md) &#183; [interp](tcllib/files/modules/interp/tcllib_interp.md)|
|<a name='method_reference'></a>method reference|[oo::util](tcllib/files/modules/tool/meta.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil.md)|
|<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)|
|<a name='minimal_spanning_tree'></a>minimal spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='minimum'></a>minimum|[math::optimize](tcllib/files/modules/math/optimize.md)|
|<a name='minimum_cost_flow'></a>minimum cost flow|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='minimum_degree_spanning_tree'></a>minimum degree spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='minimum_diameter_spanning_tree'></a>minimum diameter spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='mobile_phone'></a>mobile phone|[valtype::imei](tcllib/files/modules/valtype/imei.md)|
|<a name='module'></a>module|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md)|
|<a name='montecarlo_simulation'></a>montecarlo simulation|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo.md)|
|<a name='move'></a>move|[fileutil::multi](tcllib/files/modules/fileutil/multi.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop.md)|
|<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)|
|<a name='multiplexer'></a>multiplexer|[multiplexer](tcllib/files/modules/multiplexer/multiplexer.md)|
|<a name='multiprecision'></a>multiprecision|[math::bigfloat](tcllib/files/modules/math/bigfloat.md) &#183; [math::bignum](tcllib/files/modules/math/bignum.md)|
|<a name='my_method'></a>my method|[oo::util](tcllib/files/modules/tool/meta.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil.md)|


#### <a name='cN'></a>Keywords: N

|||
|---|---|
|<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)|
|<a name='namespace_unknown'></a>namespace unknown|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|
|<a name='namespace_utilities'></a>namespace utilities|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|
|<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)|
|<a name='national_provider_identifier'></a>National Provider Identifier|[valtype::usnpi](tcllib/files/modules/valtype/usnpi.md)|
|<a name='neighbour'></a>neighbour|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='nettool'></a>nettool|[nettool](tcllib/files/modules/nettool/nettool.md)|
|<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)|
|<a name='news'></a>news|[nntp](tcllib/files/modules/nntp/nntp.md) &#183; [uri](tcllib/files/modules/uri/uri.md)|
|<a name='next_permutation'></a>next permutation|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='nmea'></a>nmea|[nmea](tcllib/files/modules/nmea/nmea.md)|
|<a name='nntp'></a>nntp|[nntp](tcllib/files/modules/nntp/nntp.md)|
|<a name='nntpclient'></a>nntpclient|[nntp](tcllib/files/modules/nntp/nntp.md)|
|<a name='no_op'></a>no-op|[control](tcllib/files/modules/control/control.md)|
|<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)|
|<a name='nominatim'></a>nominatim|[map::geocode::nominatim](tcllib/files/modules/map/map_geocode_nominatim.md)|
|<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)|
|<a name='npi'></a>NPI|[valtype::usnpi](tcllib/files/modules/valtype/usnpi.md)|
|<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)|
|<a name='ntlm'></a>NTLM|[SASL::NTLM](tcllib/files/modules/sasl/ntlm.md)|
|<a name='ntp'></a>NTP|[ntp_time](tcllib/files/modules/ntp/ntp_time.md)|
|<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)|
|<a name='number_theory'></a>number theory|[math::numtheory](tcllib/files/modules/math/numtheory.md)|


#### <a name='cO'></a>Keywords: O

|||
|---|---|
|<a name='oauth'></a>oauth|[oauth](tcllib/files/modules/oauth/oauth.md)|
|<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)|
|<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)|
|<a name='observer'></a>observer|[hook](tcllib/files/modules/hook/hook.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel_transform/observe.md)|
|<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)|
|<a name='on_idle'></a>on-idle|[uevent::onidle](tcllib/files/modules/uev/uevent_onidle.md)|
|<a name='one_time_pad'></a>one time pad|[tcl::transform::otp](tcllib/files/modules/virtchannel_transform/vt_otp.md)|
|<a name='optimization'></a>optimization|[math::optimize](tcllib/files/modules/math/optimize.md) &#183; [simulation::annealing](tcllib/files/modules/simulation/annealing.md)|
|<a name='ordered_list'></a>ordered list|[struct::prioqueue](tcllib/files/modules/struct/prioqueue.md)|
|<a name='otp'></a>otp|[tcl::transform::otp](tcllib/files/modules/virtchannel_transform/vt_otp.md)|
|<a name='outer_join'></a>outer join|[struct::list](tcllib/files/modules/struct/struct_list.md)|


#### <a name='cP'></a>Keywords: P

|||
|---|---|
|<a name='package'></a>package|[csv](tcllib/files/modules/csv/csv.md)|
|<a name='package_indexing'></a>package indexing|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md)|
|<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)|
|<a name='pager'></a>pager|[term::interact::pager](tcllib/files/modules/term/ipager.md)|
|<a name='paragraph'></a>paragraph|[textutil](tcllib/files/modules/textutil/textutil.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust.md)|
|<a name='param'></a>PARAM|[pt::peg::to::param](tcllib/files/modules/pt/pt_peg_to_param.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='partial_application'></a>partial application|[lambda](tcllib/files/modules/lambda/lambda.md)|
|<a name='partition'></a>partition|[struct::disjointset](tcllib/files/modules/struct/disjointset.md)|
|<a name='partitioned_set'></a>partitioned set|[struct::disjointset](tcllib/files/modules/struct/disjointset.md)|
|<a name='passive'></a>passive|[transfer::connect](tcllib/files/modules/transfer/connect.md)|
|<a name='password'></a>password|[otp](tcllib/files/modules/otp/otp.md)|
|<a name='patch'></a>patch|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md)|
|<a name='patching'></a>patching|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='pca'></a>PCA|[math::PCA](tcllib/files/modules/math/pca.md)|
|<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)|
|<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)|
|<a name='permutation'></a>permutation|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='persistence'></a>persistence|[tie](tcllib/files/modules/tie/tie_std.md) &#183; [tie](tcllib/files/modules/tie/tie.md)|
|<a name='phone'></a>phone|[valtype::imei](tcllib/files/modules/valtype/imei.md)|
|<a name='pi'></a>pi|[math::constants](tcllib/files/modules/math/constants.md)|
|<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)|
|<a name='plane_geometry'></a>plane geometry|[math::geometry](tcllib/files/modules/math/math_geometry.md)|
|<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)|
|<a name='plugin_management'></a>plugin management|[pluginmgr](tcllib/files/modules/pluginmgr/pluginmgr.md)|
|<a name='plugin_search'></a>plugin search|[pluginmgr](tcllib/files/modules/pluginmgr/pluginmgr.md)|
|<a name='png'></a>png|[png](tcllib/files/modules/png/png.md)|
|<a name='point'></a>point|[math::geometry](tcllib/files/modules/math/math_geometry.md)|
|<a name='polynomial_functions'></a>polynomial functions|[math::polynomials](tcllib/files/modules/math/polynomials.md)|
|<a name='pool'></a>pool|[struct::pool](tcllib/files/modules/struct/pool.md) &#183; [struct::queue](tcllib/files/modules/struct/queue.md)|
|<a name='pop'></a>pop|[pop3](tcllib/files/modules/pop3/pop3.md)|
|<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)|
|<a name='post_order'></a>post-order|[struct::tree](tcllib/files/modules/struct/struct_tree.md)|
|<a name='practcl'></a>practcl|[practcl](tcllib/files/modules/practcl/practcl.md)|
|<a name='pre_order'></a>pre-order|[struct::tree](tcllib/files/modules/struct/struct_tree.md)|
|<a name='prefix'></a>prefix|[textutil::string](tcllib/files/modules/textutil/textutil_string.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim.md)|
|<a name='prime'></a>prime|[math::numtheory](tcllib/files/modules/math/numtheory.md)|
|<a name='prioqueue'></a>prioqueue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue.md) &#183; [struct::queue](tcllib/files/modules/struct/queue.md)|
|<a name='priority_queue'></a>priority queue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue.md)|
|<a name='proc'></a>proc|[lambda](tcllib/files/modules/lambda/lambda.md)|
|<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)|
|<a name='procedure_documentation'></a>procedure documentation|[tepam::doc_gen](tcllib/files/modules/tepam/tepam_doc_gen.md)|
|<a name='processman'></a>processman|[processman](tcllib/files/modules/processman/processman.md)|
|<a name='producer'></a>producer|[hook](tcllib/files/modules/hook/hook.md)|
|<a name='profile'></a>profile|[profiler](tcllib/files/modules/profiler/profiler.md)|
|<a name='projection'></a>projection|[mapproj](tcllib/files/modules/mapproj/mapproj.md)|
|<a name='prospero'></a>prospero|[uri](tcllib/files/modules/uri/uri.md)|
|<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)|
|<a name='proxy'></a>proxy|[autoproxy](tcllib/files/modules/http/autoproxy.md)|
|<a name='public_key_cipher'></a>public key cipher|[pki](tcllib/files/modules/pki/pki.md)|
|<a name='publisher'></a>publisher|[hook](tcllib/files/modules/hook/hook.md)|
|<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)|


#### <a name='cQ'></a>Keywords: Q

|||
|---|---|
|<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)|
|<a name='quoting'></a>quoting|[page_util_quote](tcllib/files/modules/page/page_util_quote.md)|


#### <a name='cR'></a>Keywords: R

|||
|---|---|
|<a name='radians'></a>radians|[math::constants](tcllib/files/modules/math/constants.md) &#183; [units](tcllib/files/modules/units/units.md)|
|<a name='radiobutton'></a>radiobutton|[html](tcllib/files/modules/html/html.md)|
|<a name='radius'></a>radius|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='random_numbers'></a>random numbers|[simulation::random](tcllib/files/modules/simulation/simulation_random.md)|
|<a name='rational_functions'></a>rational functions|[math::rationalfunctions](tcllib/files/modules/math/rational_funcs.md)|
|<a name='raw'></a>raw|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi_ctrlu.md)|
|<a name='rc4'></a>rc4|[rc4](tcllib/files/modules/rc4/rc4.md)|
|<a name='rcs'></a>RCS|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='rcs_patch'></a>RCS patch|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='read'></a>read|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<a name='reading'></a>reading|[bench::in](tcllib/files/modules/bench/bench_read.md)|
|<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)|
|<a name='reconnect'></a>reconnect|[nameserv::auto](tcllib/files/modules/nns/nns_auto.md)|
|<a name='record'></a>record|[struct::queue](tcllib/files/modules/struct/queue.md) &#183; [struct::record](tcllib/files/modules/struct/record.md)|
|<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)|
|<a name='reduce'></a>reduce|[generator](tcllib/files/modules/generator/generator.md) &#183; [struct::list](tcllib/files/modules/struct/struct_list.md)|
|<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)|
|<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)|
|<a name='regex'></a>regex|[string::token](tcllib/files/modules/string/token.md)|
|<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)|
|<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)|
|<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)|
|<a name='remote_communication'></a>remote communication|[comm](tcllib/files/modules/comm/comm.md) &#183; [comm_wire](tcllib/files/modules/comm/comm_wire.md)|
|<a name='remote_execution'></a>remote execution|[comm](tcllib/files/modules/comm/comm.md) &#183; [comm_wire](tcllib/files/modules/comm/comm_wire.md)|
|<a name='remove'></a>remove|[fileutil::multi](tcllib/files/modules/fileutil/multi.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop.md)|
|<a name='repeating'></a>repeating|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='repetition'></a>repetition|[struct::list](tcllib/files/modules/struct/struct_list.md) &#183; [textutil::repeat](tcllib/files/modules/textutil/repeat.md)|
|<a name='report'></a>report|[report](tcllib/files/modules/report/report.md)|
|<a name='reshuffle'></a>reshuffle|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='residual_graph'></a>residual graph|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='resolver'></a>resolver|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<a name='resource_management'></a>resource management|[try](tcllib/files/modules/try/tcllib_try.md)|
|<a name='restore'></a>restore|[nameserv::auto](tcllib/files/modules/nns/nns_auto.md)|
|<a name='return'></a>return|[throw](tcllib/files/modules/try/tcllib_throw.md)|
|<a name='reverse'></a>reverse|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<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)|
|<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)|
|<a name='rfc_868'></a>rfc 868|[ntp_time](tcllib/files/modules/ntp/ntp_time.md)|
|<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)|
|<a name='rfc_977'></a>rfc 977|[nntp](tcllib/files/modules/nntp/nntp.md)|
|<a name='rfc_1034'></a>rfc 1034|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<a name='rfc_1035'></a>rfc 1035|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<a name='rfc_1036'></a>rfc 1036|[nntp](tcllib/files/modules/nntp/nntp.md)|
|<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)|
|<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)|
|<a name='rfc_1413'></a>rfc 1413|[ident](tcllib/files/modules/ident/ident.md)|
|<a name='rfc_1630'></a>rfc 1630|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='rfc_1886'></a>rfc 1886|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<a name='rfc_1939'></a>rfc 1939|[pop3](tcllib/files/modules/pop3/pop3.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d.md)|
|<a name='rfc_2030'></a>rfc 2030|[ntp_time](tcllib/files/modules/ntp/ntp_time.md)|
|<a name='rfc_2045'></a>rfc 2045|[mime](tcllib/files/modules/mime/mime.md)|
|<a name='rfc_2046'></a>rfc 2046|[mime](tcllib/files/modules/mime/mime.md)|
|<a name='rfc_2049'></a>rfc 2049|[mime](tcllib/files/modules/mime/mime.md)|
|<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)|
|<a name='rfc_2141'></a>rfc 2141|[uri_urn](tcllib/files/modules/uri/urn-scheme.md)|
|<a name='rfc_2251'></a>rfc 2251|[ldap](tcllib/files/modules/ldap/ldap.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx.md)|
|<a name='rfc_2255'></a>rfc 2255|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='rfc_2289'></a>rfc 2289|[otp](tcllib/files/modules/otp/otp.md)|
|<a name='rfc_2396'></a>rfc 2396|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='rfc_2554'></a>rfc 2554|[smtp](tcllib/files/modules/mime/smtp.md)|
|<a name='rfc_2718'></a>RFC 2718|[oauth](tcllib/files/modules/oauth/oauth.md)|
|<a name='rfc_2821'></a>rfc 2821|[smtp](tcllib/files/modules/mime/smtp.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd.md)|
|<a name='rfc_2849'></a>rfc 2849|[ldapx](tcllib/files/modules/ldap/ldapx.md)|
|<a name='rfc_3207'></a>rfc 3207|[smtp](tcllib/files/modules/mime/smtp.md)|
|<a name='rfc_3513'></a>rfc 3513|[tcllib_ip](tcllib/files/modules/dns/tcllib_ip.md)|
|<a name='rfc_3986'></a>rfc 3986|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='rfc_4511'></a>rfc 4511|[ldap](tcllib/files/modules/ldap/ldap.md)|
|<a name='rfc_5849'></a>RFC 5849|[oauth](tcllib/files/modules/oauth/oauth.md)|
|<a name='rfc_6455'></a>rfc 6455|[websocket](tcllib/files/modules/websocket/websocket.md)|
|<a name='rfc_7858'></a>rfc 7858|[dns](tcllib/files/modules/dns/tcllib_dns.md)|
|<a name='rfc3501'></a>rfc3501|[imap4](tcllib/files/modules/imap4/imap4.md)|
|<a name='rfc3548'></a>rfc3548|[base32](tcllib/files/modules/base32/base32.md) &#183; [base32::hex](tcllib/files/modules/base32/base32hex.md)|
|<a name='right_outer_join'></a>right outer join|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='ripemd'></a>RIPEMD|[ripemd128](tcllib/files/modules/ripemd/ripemd128.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160.md)|
|<a name='roman_numeral'></a>roman numeral|[math::roman](tcllib/files/modules/math/roman.md)|
|<a name='roots'></a>roots|[math::calculus](tcllib/files/modules/math/calculus.md)|
|<a name='rot'></a>rot|[tcl::transform::rot](tcllib/files/modules/virtchannel_transform/rot.md)|
|<a name='rot13'></a>rot13|[tcl::transform::rot](tcllib/files/modules/virtchannel_transform/rot.md)|
|<a name='rounding'></a>rounding|[math::fuzzy](tcllib/files/modules/math/fuzzy.md)|
|<a name='rows'></a>rows|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi_ctrlu.md)|
|<a name='rpc'></a>rpc|[comm](tcllib/files/modules/comm/comm.md) &#183; [comm_wire](tcllib/files/modules/comm/comm_wire.md)|
|<a name='rsa'></a>rsa|[pki](tcllib/files/modules/pki/pki.md)|
|<a name='running'></a>running|[grammar::fa::dexec](tcllib/files/modules/grammar_fa/dexec.md)|


#### <a name='cS'></a>Keywords: S

|||
|---|---|
|<a name='s3'></a>s3|[S3](tcllib/files/modules/amazon-s3/S3.md)|
|<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)|
|<a name='scanl'></a>scanl|[generator](tcllib/files/modules/generator/generator.md)|
|<a name='sccs'></a>SCCS|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='scram'></a>SCRAM|[SASL::SCRAM](tcllib/files/modules/sasl/scram.md)|
|<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)|
|<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)|
|<a name='seed'></a>seed|[tcl::randomseed](tcllib/files/modules/virtchannel_base/randseed.md)|
|<a name='selectionbox'></a>selectionbox|[javascript](tcllib/files/modules/javascript/javascript.md)|
|<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)|
|<a name='send'></a>send|[comm](tcllib/files/modules/comm/comm.md)|
|<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)|
|<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)|
|<a name='service'></a>service|[logger](tcllib/files/modules/log/logger.md)|
|<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)|
|<a name='set'></a>set|[struct::queue](tcllib/files/modules/struct/queue.md) &#183; [struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='sha1'></a>sha1|[sha1](tcllib/files/modules/sha1/sha1.md)|
|<a name='sha256'></a>sha256|[sha256](tcllib/files/modules/sha1/sha256.md)|
|<a name='shell'></a>shell|[string::token::shell](tcllib/files/modules/string/token_shell.md)|
|<a name='shortest_path'></a>shortest path|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='shuffle'></a>shuffle|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='simulated_annealing'></a>simulated annealing|[simulation::annealing](tcllib/files/modules/simulation/annealing.md)|
|<a name='simulation'></a>simulation|[simulation::random](tcllib/files/modules/simulation/simulation_random.md)|
|<a name='singleton'></a>singleton|[oo::util](tcllib/files/modules/tool/meta.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil.md)|
|<a name='size_limit'></a>size limit|[tcl::transform::limitsize](tcllib/files/modules/virtchannel_transform/limitsize.md)|
|<a name='skiplist'></a>skiplist|[struct::queue](tcllib/files/modules/struct/queue.md) &#183; [struct::skiplist](tcllib/files/modules/struct/skiplist.md)|
|<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)|
|<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)|
|<a name='smtpd'></a>smtpd|[smtpd](tcllib/files/modules/smtpd/smtpd.md)|
|<a name='snit'></a>Snit|[snit](tcllib/files/modules/snit/snit.md)|
|<a name='snit'></a>snit|[deleg_method](tcllib/files/modules/interp/deleg_method.md) &#183; [interp](tcllib/files/modules/interp/tcllib_interp.md)|
|<a name='sntp'></a>SNTP|[ntp_time](tcllib/files/modules/ntp/ntp_time.md)|
|<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)|
|<a name='soundex'></a>soundex|[soundex](tcllib/files/modules/soundex/soundex.md)|
|<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)|
|<a name='spacing'></a>spacing|[tcl::transform::spacer](tcllib/files/modules/virtchannel_transform/spacer.md)|
|<a name='spatial_interpolation'></a>spatial interpolation|[math::interpolate](tcllib/files/modules/math/interpolate.md)|
|<a name='special_functions'></a>special functions|[math::special](tcllib/files/modules/math/special.md)|
|<a name='specification'></a>specification|[bench_lang_spec](tcllib/files/modules/bench/bench_lang_spec.md)|
|<a name='speed'></a>speed|[profiler](tcllib/files/modules/profiler/profiler.md)|
|<a name='split'></a>split|[textutil::split](tcllib/files/modules/textutil/textutil_split.md)|
|<a name='squared_graph'></a>squared graph|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<a name='stack'></a>stack|[struct::queue](tcllib/files/modules/struct/queue.md)|
|<a name='standard_io'></a>standard io|[tcl::chan::std](tcllib/files/modules/virtchannel_base/std.md)|
|<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)|
|<a name='state_de_serialization'></a>state (de)serialization|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|
|<a name='statistical_distribution'></a>statistical distribution|[simulation::random](tcllib/files/modules/simulation/simulation_random.md)|
|<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)|
|<a name='stdin'></a>stdin|[tcl::chan::std](tcllib/files/modules/virtchannel_base/std.md)|
|<a name='stdout'></a>stdout|[tcl::chan::std](tcllib/files/modules/virtchannel_base/std.md)|
|<a name='stochastic_modelling'></a>stochastic modelling|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo.md)|
|<a name='stream_cipher'></a>stream cipher|[rc4](tcllib/files/modules/rc4/rc4.md)|
|<a name='stream_copy'></a>stream copy|[tcl::transform::observe](tcllib/files/modules/virtchannel_transform/observe.md)|
|<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)|
|<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)|
|<a name='strongly_connected_component'></a>strongly connected component|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='struct'></a>struct|[struct::pool](tcllib/files/modules/struct/pool.md) &#183; [struct::record](tcllib/files/modules/struct/record.md)|
|<a name='structure'></a>structure|[control](tcllib/files/modules/control/control.md)|
|<a name='structured_queries'></a>structured queries|[treeql](tcllib/files/modules/treeql/treeql.md)|
|<a name='style'></a>style|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html_cssdefaults.md)|
|<a name='subcommand'></a>subcommand|[tepam](tcllib/files/modules/tepam/tepam_introduction.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam_procedure.md)|
|<a name='subgraph'></a>subgraph|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='subject'></a>subject|[hook](tcllib/files/modules/hook/hook.md)|
|<a name='submitbutton'></a>submitbutton|[javascript](tcllib/files/modules/javascript/javascript.md)|
|<a name='subscriber'></a>subscriber|[hook](tcllib/files/modules/hook/hook.md)|
|<a name='subsequence'></a>subsequence|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='subst'></a>subst|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl_parse.md)|
|<a name='sum'></a>sum|[sum](tcllib/files/modules/crc/sum.md)|
|<a name='swapping'></a>swapping|[struct::list](tcllib/files/modules/struct/struct_list.md)|
|<a name='symmetric_difference'></a>symmetric difference|[struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='synchronous'></a>synchronous|[cache::async](tcllib/files/modules/cache/async.md)|
|<a name='syntax_tree'></a>syntax tree|[grammar::me::util](tcllib/files/modules/grammar_me/me_util.md)|


#### <a name='cT'></a>Keywords: T

|||
|---|---|
|<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)|
|<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)|
|<a name='tabstops'></a>tabstops|[textutil::tabify](tcllib/files/modules/textutil/tabify.md)|
|<a name='tallying'></a>tallying|[counter](tcllib/files/modules/counter/counter.md)|
|<a name='tape_archive'></a>tape archive|[tar](tcllib/files/modules/tar/tar.md)|
|<a name='tar'></a>tar|[tar](tcllib/files/modules/tar/tar.md)|
|<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)|
|<a name='tcl_module'></a>Tcl module|[docstrip_util](tcllib/files/modules/docstrip/docstrip_util.md)|
|<a name='tcl_syntax'></a>Tcl syntax|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl_parse.md)|
|<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)|
|<a name='tcllib'></a>tcllib|[csv](tcllib/files/modules/csv/csv.md)|
|<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)|
|<a name='tclparam'></a>TCLPARAM|[pt::peg::to::tclparam](tcllib/files/modules/pt/pt_peg_to_tclparam.md)|
|<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)|
|<a name='temp_file'></a>temp file|[fileutil](tcllib/files/modules/fileutil/fileutil.md)|
|<a name='template_processing'></a>template processing|[textutil::expander](tcllib/files/modules/textutil/expander.md)|
|<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)|
|<a name='test'></a>test|[fileutil](tcllib/files/modules/fileutil/fileutil.md)|
|<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)|
|<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)|
|<a name='tex'></a>TeX|[textutil](tcllib/files/modules/textutil/textutil.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust.md)|
|<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)|
|<a name='text_comparison'></a>text comparison|[soundex](tcllib/files/modules/soundex/soundex.md)|
|<a name='text_conversion'></a>text conversion|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<a name='text_differences'></a>text differences|[rcs](tcllib/files/modules/rcs/rcs.md)|
|<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)|
|<a name='text_expansion'></a>text expansion|[textutil::expander](tcllib/files/modules/textutil/expander.md)|
|<a name='text_likeness'></a>text likeness|[soundex](tcllib/files/modules/soundex/soundex.md)|
|<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)|
|<a name='text_widget'></a>text widget|[tcl::chan::textwindow](tcllib/files/modules/virtchannel_base/textwindow.md)|
|<a name='threads'></a>threads|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<a name='throw'></a>throw|[throw](tcllib/files/modules/try/tcllib_throw.md)|
|<a name='thumbnail'></a>thumbnail|[jpeg](tcllib/files/modules/jpeg/jpeg.md)|
|<a name='tie'></a>tie|[tie](tcllib/files/modules/tie/tie_std.md) &#183; [tie](tcllib/files/modules/tie/tie.md)|
|<a name='tif'></a>tif|[tiff](tcllib/files/modules/tiff/tiff.md)|
|<a name='tiff'></a>tiff|[tiff](tcllib/files/modules/tiff/tiff.md)|
|<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)|
|<a name='time'></a>time|[ntp_time](tcllib/files/modules/ntp/ntp_time.md)|
|<a name='timestamp'></a>timestamp|[png](tcllib/files/modules/png/png.md)|
|<a name='timestamps'></a>timestamps|[debug::timestamp](tcllib/files/modules/debug/debug_timestamp.md)|
|<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)|
|<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)|
|<a name='tip_234'></a>tip 234|[tcl::transform::zlib](tcllib/files/modules/virtchannel_transform/tcllib_zlib.md)|
|<a name='tip_317'></a>tip 317|[tcl::transform::base64](tcllib/files/modules/virtchannel_transform/vt_base64.md)|
|<a name='tk'></a>Tk|[tcl::chan::textwindow](tcllib/files/modules/virtchannel_base/textwindow.md)|
|<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)|
|<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)|
|<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)|
|<a name='toc_formatter'></a>toc formatter|[doctoc_plugin_apiref](tcllib/files/modules/doctools/doctoc_plugin_apiref.md)|
|<a name='tokenization'></a>tokenization|[string::token](tcllib/files/modules/string/token.md) &#183; [string::token::shell](tcllib/files/modules/string/token_shell.md)|
|<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)|
|<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)|
|<a name='torrent'></a>torrent|[bee](tcllib/files/modules/bee/bee.md)|
|<a name='touch'></a>touch|[fileutil](tcllib/files/modules/fileutil/fileutil.md)|
|<a name='tpdl'></a>TPDL|[grammar::me_intro](tcllib/files/modules/grammar_me/me_intro.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='transmitter'></a>transmitter|[transfer::transmitter](tcllib/files/modules/transfer/transmitter.md)|
|<a name='travelling_salesman'></a>travelling salesman|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='traversal'></a>traversal|[fileutil_traverse](tcllib/files/modules/fileutil/traverse.md)|
|<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)|
|<a name='tree_query_language'></a>tree query language|[treeql](tcllib/files/modules/treeql/treeql.md)|
|<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)|
|<a name='treeql'></a>TreeQL|[treeql](tcllib/files/modules/treeql/treeql.md)|
|<a name='trigonometry'></a>trigonometry|[math::trig](tcllib/files/modules/math/trig.md)|
|<a name='trimming'></a>trimming|[textutil](tcllib/files/modules/textutil/textutil.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim.md)|
|<a name='twitter'></a>twitter|[oauth](tcllib/files/modules/oauth/oauth.md)|
|<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)|
|<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)|


#### <a name='cU'></a>Keywords: U

|||
|---|---|
|<a name='uevent'></a>uevent|[hook](tcllib/files/modules/hook/hook.md)|
|<a name='unbind'></a>unbind|[uevent](tcllib/files/modules/uev/uevent.md)|
|<a name='uncapitalize'></a>uncapitalize|[textutil::string](tcllib/files/modules/textutil/textutil_string.md)|
|<a name='undenting'></a>undenting|[textutil::adjust](tcllib/files/modules/textutil/adjust.md)|
|<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)|
|<a name='union'></a>union|[struct::disjointset](tcllib/files/modules/struct/disjointset.md) &#183; [struct::set](tcllib/files/modules/struct/struct_set.md)|
|<a name='unit'></a>unit|[units](tcllib/files/modules/units/units.md)|
|<a name='unknown_hooking'></a>unknown hooking|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|
|<a name='untie'></a>untie|[tie](tcllib/files/modules/tie/tie_std.md) &#183; [tie](tcllib/files/modules/tie/tie.md)|
|<a name='update'></a>update|[coroutine](tcllib/files/modules/coroutine/tcllib_coroutine.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro_auto.md)|
|<a name='uri'></a>uri|[uri](tcllib/files/modules/uri/uri.md) &#183; [uri_urn](tcllib/files/modules/uri/urn-scheme.md)|
|<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)|
|<a name='urn'></a>urn|[uri_urn](tcllib/files/modules/uri/urn-scheme.md)|
|<a name='us_npi'></a>US-NPI|[valtype::usnpi](tcllib/files/modules/valtype/usnpi.md)|
|<a name='utilities'></a>utilities|[namespacex](tcllib/files/modules/namespacex/namespacex.md)|
|<a name='uuencode'></a>uuencode|[uuencode](tcllib/files/modules/base64/uuencode.md)|
|<a name='uuid'></a>UUID|[uuid](tcllib/files/modules/uuid/uuid.md)|


#### <a name='cV'></a>Keywords: V

|||
|---|---|
|<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)|
|<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)|
|<a name='vectors'></a>vectors|[math::linearalgebra](tcllib/files/modules/math/linalg.md)|
|<a name='verhoeff'></a>verhoeff|[valtype::verhoeff](tcllib/files/modules/valtype/verhoeff.md)|
|<a name='vertex'></a>vertex|[struct::graph](tcllib/files/modules/struct/graph.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<a name='vertex_cover'></a>vertex cover|[struct::graph::op](tcllib/files/modules/struct/graphops.md)|
|<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)|
|<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)|
|<a name='visa'></a>VISA|[valtype::creditcard::visa](tcllib/files/modules/valtype/cc_visa.md)|
|<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)|


#### <a name='cW'></a>Keywords: W

|||
|---|---|
|<a name='wais'></a>wais|[uri](tcllib/files/modules/uri/uri.md)|
|<a name='widget'></a>widget|[snit](tcllib/files/modules/snit/snit.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq.md)|
|<a name='widget_adaptors'></a>widget adaptors|[snit](tcllib/files/modules/snit/snit.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq.md)|
|<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)|
|<a name='word'></a>word|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl_parse.md) &#183; [wip](tcllib/files/modules/wip/wip.md)|
|<a name='www'></a>WWW|[tool](tcllib/files/modules/httpd/httpd.md)|
|<a name='www'></a>www|[uri](tcllib/files/modules/uri/uri.md)|


#### <a name='cX'></a>Keywords: X

|||
|---|---|
|<a name='x_208'></a>x.208|[asn](tcllib/files/modules/asn/asn.md)|
|<a name='x_209'></a>x.209|[asn](tcllib/files/modules/asn/asn.md)|
|<a name='x_500'></a>x.500|[ldap](tcllib/files/modules/ldap/ldap.md)|
|<a name='xgoogletoken'></a>XGoogleToken|[SASL::XGoogleToken](tcllib/files/modules/sasl/gtoken.md)|
|<a name='xml'></a>xml|[xsxp](tcllib/files/modules/amazon-s3/xsxp.md)|
|<a name='xor'></a>xor|[tcl::transform::otp](tcllib/files/modules/virtchannel_transform/vt_otp.md)|
|<a name='xpath'></a>XPath|[treeql](tcllib/files/modules/treeql/treeql.md)|
|<a name='xslt'></a>XSLT|[treeql](tcllib/files/modules/treeql/treeql.md)|


#### <a name='cY'></a>Keywords: Y

|||
|---|---|
|<a name='yaml'></a>yaml|[huddle](tcllib/files/modules/yaml/huddle.md) &#183; [yaml](tcllib/files/modules/yaml/yaml.md)|
|<a name='ydecode'></a>ydecode|[yencode](tcllib/files/modules/base64/yencode.md)|
|<a name='yenc'></a>yEnc|[yencode](tcllib/files/modules/base64/yencode.md)|
|<a name='yencode'></a>yencode|[yencode](tcllib/files/modules/base64/yencode.md)|


#### <a name='cZ'></a>Keywords: Z

|||
|---|---|
|<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)|
|<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)|
|<a name='zlib'></a>zlib|[tcl::transform::zlib](tcllib/files/modules/virtchannel_transform/tcllib_zlib.md)|
|<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)|






|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|






|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|






|
|
|
|
|
|
|






|
|
|
|
|
|
|
|






|
|
|
|






|
|
|
|
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
----

#### <a name='c3'></a>Keywords: 3

|||
|---|---|
|<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)|


#### <a name='cA'></a>Keywords: A

|||
|---|---|
|<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)|
|<a name='acceptance'></a>acceptance|[grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md)|
|<a name='acceptor'></a>acceptor|[grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md)|
|<a name='active'></a>active|[transfer::connect](tcllib/files/modules/transfer/connect\.md)|
|<a name='adaptors'></a>adaptors|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
|<a name='adjacency\_list'></a>adjacency list|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='adjacency\_matrix'></a>adjacency matrix|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='adjacent'></a>adjacent|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='adjusting'></a>adjusting|[textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
|<a name='adler32'></a>adler32|[tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md)|
|<a name='aes'></a>aes|[aes](tcllib/files/modules/aes/aes\.md)|
|<a name='after'></a>after|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<a name='alias'></a>alias|[interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
|<a name='amazon'></a>amazon|[S3](tcllib/files/modules/amazon\-s3/S3\.md)|
|<a name='ambiguous'></a>ambiguous|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
|<a name='american\_express'></a>American Express|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md)|
|<a name='amex'></a>AMEX|[valtype::creditcard::amex](tcllib/files/modules/valtype/cc\_amex\.md)|
|<a name='angle'></a>angle|[math::geometry](tcllib/files/modules/math/math\_geometry\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
|<a name='anonymous\_procedure'></a>anonymous procedure|[lambda](tcllib/files/modules/lambda/lambda\.md)|
|<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)|
|<a name='appender'></a>appender|[logger::appender](tcllib/files/modules/log/loggerAppender\.md) &#183; [logger::utils](tcllib/files/modules/log/loggerUtils\.md)|
|<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)|
|<a name='approximation\_algorithm'></a>approximation algorithm|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='arc'></a>arc|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='arcfour'></a>arcfour|[rc4](tcllib/files/modules/rc4/rc4\.md)|
|<a name='archive'></a>archive|[tar](tcllib/files/modules/tar/tar\.md)|
|<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)|
|<a name='argument\_processing'></a>argument processing|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
|<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)|
|<a name='arguments'></a>arguments|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
|<a name='argv'></a>argv|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
|<a name='argv0'></a>argv0|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
|<a name='array'></a>array|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
|<a name='articulation\_point'></a>articulation point|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='ascii85'></a>ascii85|[ascii85](tcllib/files/modules/base64/ascii85\.md)|
|<a name='asn'></a>asn|[asn](tcllib/files/modules/asn/asn\.md)|
|<a name='assembler'></a>assembler|[grammar::me::cpu::gasm](tcllib/files/modules/grammar\_me/gasm\.md)|
|<a name='assert'></a>assert|[control](tcllib/files/modules/control/control\.md)|
|<a name='assign'></a>assign|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='ast'></a>AST|[grammar::me\_ast](tcllib/files/modules/grammar\_me/me\_ast\.md)|
|<a name='asynchronous'></a>asynchronous|[cache::async](tcllib/files/modules/cache/async\.md)|
|<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)|
|<a name='augmenting\_network'></a>augmenting network|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='augmenting\_path'></a>augmenting path|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='automatic'></a>automatic|[nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md)|
|<a name='automatic\_documentation'></a>automatic documentation|[tepam::doc\_gen](tcllib/files/modules/tepam/tepam\_doc\_gen\.md)|
|<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)|
|<a name='aycock'></a>aycock|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|


#### <a name='cB'></a>Keywords: B

|||
|---|---|
|<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)|
|<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)|
|<a name='base64'></a>base64|[base64](tcllib/files/modules/base64/base64\.md) &#183; [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md)|
|<a name='bash'></a>bash|[string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
|<a name='bee'></a>bee|[bee](tcllib/files/modules/bee/bee\.md)|
|<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)|
|<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)|
|<a name='ber'></a>ber|[asn](tcllib/files/modules/asn/asn\.md)|
|<a name='bessel\_functions'></a>Bessel functions|[math::special](tcllib/files/modules/math/special\.md)|
|<a name='bfs'></a>bfs|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='bibliography'></a>bibliography|[bibtex](tcllib/files/modules/bibtex/bibtex\.md)|
|<a name='bibtex'></a>bibtex|[bibtex](tcllib/files/modules/bibtex/bibtex\.md)|
|<a name='bignums'></a>bignums|[math::bignum](tcllib/files/modules/math/bignum\.md)|
|<a name='bind'></a>bind|[uevent](tcllib/files/modules/uev/uevent\.md)|
|<a name='bipartite'></a>bipartite|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='bittorrent'></a>BitTorrent|[bee](tcllib/files/modules/bee/bee\.md)|
|<a name='bittorrent'></a>bittorrent|[bee](tcllib/files/modules/bee/bee\.md)|
|<a name='blanks'></a>blanks|[textutil::repeat](tcllib/files/modules/textutil/repeat\.md)|
|<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)|
|<a name='blocking\_flow'></a>blocking flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='blowfish'></a>blowfish|[blowfish](tcllib/files/modules/blowfish/blowfish\.md)|
|<a name='book\_number'></a>Book Number|[valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
|<a name='breadth\_first'></a>breadth\-first|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
|<a name='bridge'></a>bridge|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='bwidget'></a>BWidget|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|


#### <a name='cC'></a>Keywords: C

|||
|---|---|
|<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)|
|<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)|
|<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)|
|<a name='caesar\_cipher'></a>caesar cipher|[tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
|<a name='calculus'></a>calculus|[math::calculus](tcllib/files/modules/math/calculus\.md)|
|<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)|
|<a name='callbacks'></a>callbacks|[tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md)|
|<a name='capitalize'></a>capitalize|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
|<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)|
|<a name='cardinality'></a>cardinality|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='cat'></a>cat|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
|<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)|
|<a name='catalogue'></a>catalogue|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
|<a name='cell\_phone'></a>cell\-phone|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
|<a name='cer'></a>cer|[asn](tcllib/files/modules/asn/asn\.md)|
|<a name='cfg'></a>CFG|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
|<a name='cfl'></a>CFL|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
|<a name='cgi'></a>CGI|[ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
|<a name='cgraph'></a>cgraph|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph\_v1](tcllib/files/modules/struct/graph1\.md)|
|<a name='changelog'></a>changelog|[doctools::changelog](tcllib/files/modules/doctools/changelog\.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='checkbox'></a>checkbox|[html](tcllib/files/modules/html/html\.md) &#183; [javascript](tcllib/files/modules/javascript/javascript\.md)|
|<a name='checkbutton'></a>checkbutton|[html](tcllib/files/modules/html/html\.md)|
|<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)|
|<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)|
|<a name='chop'></a>chop|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
|<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)|
|<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)|
|<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)|
|<a name='class\_methods'></a>class methods|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
|<a name='class\_variables'></a>class variables|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
|<a name='cleanup'></a>cleanup|[defer](tcllib/files/modules/defer/defer\.md) &#183; [try](tcllib/files/modules/try/tcllib\_try\.md)|
|<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)|
|<a name='cloud'></a>cloud|[S3](tcllib/files/modules/amazon\-s3/S3\.md)|
|<a name='cmdline\_processing'></a>cmdline processing|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
|<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)|
|<a name='columns'></a>columns|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
|<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)|
|<a name='command'></a>command|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md)|
|<a name='command\_line\_processing'></a>command line processing|[cmdline](tcllib/files/modules/cmdline/cmdline\.md)|
|<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)|
|<a name='comment'></a>comment|[jpeg](tcllib/files/modules/jpeg/jpeg\.md) &#183; [png](tcllib/files/modules/png/png\.md)|
|<a name='common'></a>common|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='common\_prefix'></a>common prefix|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
|<a name='communication'></a>communication|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
|<a name='comparison'></a>comparison|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='complete\_graph'></a>complete graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='complex\_numbers'></a>complex numbers|[math::complexnumbers](tcllib/files/modules/math/qcomplex\.md) &#183; [math::fourier](tcllib/files/modules/math/fourier\.md)|
|<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)|
|<a name='computations'></a>computations|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md)|
|<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)|
|<a name='connected\_component'></a>connected component|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='connected\_fifos'></a>connected fifos|[tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md)|
|<a name='connection'></a>connection|[transfer::connect](tcllib/files/modules/transfer/connect\.md)|
|<a name='constants'></a>constants|[math::constants](tcllib/files/modules/math/constants\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
|<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)|
|<a name='contents'></a>contents|[doctools2toc\_introduction](tcllib/files/modules/doctools2toc/toc\_introduction\.md)|
|<a name='context\_free\_grammar'></a>context\-free grammar|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
|<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)|
|<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)|
|<a name='control\_structure'></a>control structure|[generator](tcllib/files/modules/generator/generator\.md)|
|<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)|
|<a name='cooked'></a>cooked|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
|<a name='cookie'></a>cookie|[ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
|<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)|
|<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)|
|<a name='cost'></a>Cost|[treeql](tcllib/files/modules/treeql/treeql\.md)|
|<a name='counter'></a>counter|[tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md)|
|<a name='counting'></a>counting|[counter](tcllib/files/modules/counter/counter\.md)|
|<a name='cparam'></a>CPARAM|[pt::peg::to::cparam](tcllib/files/modules/pt/pt\_peg\_to\_cparam\.md)|
|<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)|
|<a name='crc16'></a>crc16|[crc16](tcllib/files/modules/crc/crc16\.md)|
|<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)|
|<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)|
|<a name='cron'></a>cron|[cron](tcllib/files/modules/cron/cron\.md)|
|<a name='cryptography'></a>cryptography|[blowfish](tcllib/files/modules/blowfish/blowfish\.md)|
|<a name='css'></a>CSS|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md)|
|<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)|
|<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)|
|<a name='cut\_edge'></a>cut edge|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='cut\_vertex'></a>cut vertex|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='cvs'></a>CVS|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='cvs'></a>cvs|[doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
|<a name='cvs\_log'></a>cvs log|[doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
|<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)|


#### <a name='cD'></a>Keywords: D

|||
|---|---|
|<a name='data\_analysis'></a>data analysis|[math::statistics](tcllib/files/modules/math/statistics\.md)|
|<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)|
|<a name='data\_entry\_form'></a>data entry form|[tepam::argument\_dialogbox](tcllib/files/modules/tepam/tepam\_argument\_dialogbox\.md)|
|<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)|
|<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)|
|<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)|
|<a name='data\_structures'></a>data structures|[struct::record](tcllib/files/modules/struct/record\.md)|
|<a name='database'></a>database|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
|<a name='dataflow'></a>dataflow|[page\_util\_flow](tcllib/files/modules/page/page\_util\_flow\.md)|
|<a name='\_ddt'></a>\.ddt|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
|<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)|
|<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)|
|<a name='decimal'></a>decimal|[math::decimal](tcllib/files/modules/math/decimal\.md)|
|<a name='declare'></a>declare|[term::ansi::code](tcllib/files/modules/term/ansi\_code\.md)|
|<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)|
|<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)|
|<a name='deferal'></a>deferal|[uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
|<a name='define'></a>define|[term::ansi::code](tcllib/files/modules/term/ansi\_code\.md)|
|<a name='degree'></a>degree|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='degree\_constrained\_spanning\_tree'></a>degree constrained spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='degrees'></a>degrees|[math::constants](tcllib/files/modules/math/constants\.md)|
|<a name='delegation'></a>delegation|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [deleg\_proc](tcllib/files/modules/interp/deleg\_proc\.md)|
|<a name='depth\_first'></a>depth\-first|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
|<a name='der'></a>der|[asn](tcllib/files/modules/asn/asn\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='diameter'></a>diameter|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='dict'></a>dict|[dicttool](tcllib/files/modules/dicttool/dicttool\.md)|
|<a name='diff'></a>diff|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='diff\_n\_format'></a>diff \-n format|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='difference'></a>difference|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='differential'></a>differential|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='differential\_equations'></a>differential equations|[math::calculus](tcllib/files/modules/math/calculus\.md)|
|<a name='dijkstra'></a>dijkstra|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='directory\_access'></a>directory access|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md)|
|<a name='directory\_traversal'></a>directory traversal|[fileutil\_traverse](tcllib/files/modules/fileutil/traverse\.md)|
|<a name='discover'></a>Discover|[valtype::creditcard::discover](tcllib/files/modules/valtype/cc\_discover\.md)|
|<a name='discrete\_items'></a>discrete items|[struct::pool](tcllib/files/modules/struct/pool\.md)|
|<a name='disjoint\_set'></a>disjoint set|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
|<a name='dispatcher'></a>dispatcher|[term::receive::bind](tcllib/files/modules/term/term\_bind\.md)|
|<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)|
|<a name='dns'></a>DNS|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<a name='do'></a>do|[control](tcllib/files/modules/control/control\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='document'></a>document|[doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md)|
|<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)|
|<a name='dom'></a>DOM|[treeql](tcllib/files/modules/treeql/treeql\.md)|
|<a name='dom'></a>dom|[xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md)|
|<a name='domain\_name\_service'></a>domain name service|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<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)|


#### <a name='cE'></a>Keywords: E

|||
|---|---|
|<a name='e'></a>e|[math::constants](tcllib/files/modules/math/constants\.md)|
|<a name='ean'></a>EAN|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
|<a name='ean13'></a>EAN13|[valtype::gs1::ean13](tcllib/files/modules/valtype/ean13\.md) &#183; [valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
|<a name='earley'></a>earley|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
|<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)|
|<a name='eccentricity'></a>eccentricity|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='edge'></a>edge|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='emacs'></a>emacs|[doctools::changelog](tcllib/files/modules/doctools/changelog\.md) &#183; [doctools::cvs](tcllib/files/modules/doctools/cvs\.md)|
|<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)|
|<a name='emptiness'></a>emptiness|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='empty\_interpreter'></a>empty interpreter|[interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
|<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)|
|<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)|
|<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)|
|<a name='entry\_mask'></a>entry mask|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md)|
|<a name='equal'></a>equal|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='equality'></a>equality|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='equivalence\_class'></a>equivalence class|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
|<a name='error'></a>error|[throw](tcllib/files/modules/try/tcllib\_throw\.md) &#183; [try](tcllib/files/modules/try/tcllib\_try\.md)|
|<a name='error\_function'></a>error function|[math::special](tcllib/files/modules/math/special\.md)|
|<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)|
|<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)|
|<a name='event\_management'></a>event management|[tcl::chan::events](tcllib/files/modules/virtchannel\_core/events\.md)|
|<a name='events'></a>events|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<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)|
|<a name='exception'></a>exception|[try](tcllib/files/modules/try/tcllib\_try\.md)|
|<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)|
|<a name='exclusion'></a>exclusion|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='execution'></a>execution|[grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md)|
|<a name='exif'></a>exif|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
|<a name='exit'></a>exit|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<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)|
|<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)|
|<a name='extended\_namespace'></a>extended namespace|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|


#### <a name='cF'></a>Keywords: F

|||
|---|---|
|<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)|
|<a name='fetching\_information'></a>fetching information|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='fft'></a>FFT|[math::fourier](tcllib/files/modules/math/fourier\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='filesystem'></a>filesystem|[map::slippy::cache](tcllib/files/modules/map/map\_slippy\_cache\.md)|
|<a name='filter'></a>filter|[generator](tcllib/files/modules/generator/generator\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='final'></a>final|[try](tcllib/files/modules/try/tcllib\_try\.md)|
|<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)|
|<a name='find'></a>find|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
|<a name='finite'></a>finite|[struct::pool](tcllib/files/modules/struct/pool\.md)|
|<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)|
|<a name='fips\_180\_1'></a>FIPS 180\-1|[sha1](tcllib/files/modules/sha1/sha1\.md) &#183; [sha256](tcllib/files/modules/sha1/sha256\.md)|
|<a name='first\_permutation'></a>first permutation|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='fisher\_yates'></a>Fisher\-Yates|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='flatten'></a>flatten|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='floating\_point'></a>floating\-point|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md) &#183; [math::fuzzy](tcllib/files/modules/math/fuzzy\.md)|
|<a name='flow'></a>flow|[control](tcllib/files/modules/control/control\.md)|
|<a name='flow\_network'></a>flow network|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='folding'></a>folding|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='foldl'></a>foldl|[generator](tcllib/files/modules/generator/generator\.md)|
|<a name='foldr'></a>foldr|[generator](tcllib/files/modules/generator/generator\.md)|
|<a name='foreach'></a>foreach|[generator](tcllib/files/modules/generator/generator\.md)|
|<a name='form'></a>form|[html](tcllib/files/modules/html/html\.md) &#183; [ncgi](tcllib/files/modules/ncgi/ncgi\.md)|
|<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)|
|<a name='formatter'></a>formatter|[doctools\_plugin\_apiref](tcllib/files/modules/doctools/doctools\_plugin\_apiref\.md)|
|<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)|
|<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)|
|<a name='fourier\_transform'></a>Fourier transform|[math::fourier](tcllib/files/modules/math/fourier\.md)|
|<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)|
|<a name='frame'></a>frame|[term::ansi::code::macros](tcllib/files/modules/term/ansi\_cmacros\.md)|
|<a name='framework'></a>framework|[tool](tcllib/files/modules/tool/tool\.md)|
|<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)|
|<a name='ftpd'></a>ftpd|[ftpd](tcllib/files/modules/ftpd/ftpd\.md)|
|<a name='ftpserver'></a>ftpserver|[ftpd](tcllib/files/modules/ftpd/ftpd\.md)|
|<a name='full\_outer\_join'></a>full outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|


#### <a name='cG'></a>Keywords: G

|||
|---|---|
|<a name='generate\_event'></a>generate event|[uevent](tcllib/files/modules/uev/uevent\.md)|
|<a name='generate\_permutations'></a>generate permutations|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<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)|
|<a name='generator'></a>generator|[generator](tcllib/files/modules/generator/generator\.md)|
|<a name='geocoding'></a>geocoding|[map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md)|
|<a name='geodesy'></a>geodesy|[map::slippy](tcllib/files/modules/map/map\_slippy\.md) &#183; [mapproj](tcllib/files/modules/mapproj/mapproj\.md)|
|<a name='geography'></a>geography|[map::slippy](tcllib/files/modules/map/map\_slippy\.md)|
|<a name='get\_character'></a>get character|[term::receive](tcllib/files/modules/term/receive\.md)|
|<a name='gets'></a>gets|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<a name='global'></a>global|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<a name='golang'></a>golang|[defer](tcllib/files/modules/defer/defer\.md)|
|<a name='gopher'></a>gopher|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='gps'></a>gps|[gpx](tcllib/files/modules/gpx/gpx\.md) &#183; [nmea](tcllib/files/modules/nmea/nmea\.md)|
|<a name='gpx'></a>gpx|[gpx](tcllib/files/modules/gpx/gpx\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='grep'></a>grep|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
|<a name='guid'></a>GUID|[uuid](tcllib/files/modules/uuid/uuid\.md)|


#### <a name='cH'></a>Keywords: H

|||
|---|---|
|<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)|
|<a name='heartbeat'></a>heartbeat|[debug::heartbeat](tcllib/files/modules/debug/debug\_heartbeat\.md)|
|<a name='heuristic'></a>heuristic|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='hex'></a>hex|[base32::hex](tcllib/files/modules/base32/base32hex\.md)|
|<a name='hexadecimal'></a>hexadecimal|[tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md)|
|<a name='histogram'></a>histogram|[counter](tcllib/files/modules/counter/counter\.md)|
|<a name='hook'></a>hook|[hook](tcllib/files/modules/hook/hook\.md) &#183; [uevent](tcllib/files/modules/uev/uevent\.md)|
|<a name='horspool'></a>horspool|[grammar::aycock](tcllib/files/modules/grammar\_aycock/aycock\.md)|
|<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)|
|<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)|
|<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)|
|<a name='httpd'></a>httpd|[tool](tcllib/files/modules/httpd/httpd\.md)|
|<a name='https'></a>https|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='httpserver'></a>httpserver|[tool](tcllib/files/modules/httpd/httpd\.md)|
|<a name='huddle'></a>huddle|[huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
|<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)|
|<a name='hyphenation'></a>hyphenation|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|


#### <a name='cI'></a>Keywords: I

|||
|---|---|
|<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)|
|<a name='iban'></a>IBAN|[valtype::iban](tcllib/files/modules/valtype/iban\.md)|
|<a name='ident'></a>ident|[ident](tcllib/files/modules/ident/ident\.md)|
|<a name='identification'></a>identification|[ident](tcllib/files/modules/ident/ident\.md)|
|<a name='identity'></a>identity|[tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md)|
|<a name='idle'></a>idle|[uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
|<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)|
|<a name='imap'></a>imap|[imap4](tcllib/files/modules/imap4/imap4\.md)|
|<a name='imei'></a>IMEI|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
|<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)|
|<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)|
|<a name='in\_order'></a>in\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
|<a name='inclusion'></a>inclusion|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='incr\_tcl'></a>Incr Tcl|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
|<a name='indenting'></a>indenting|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
|<a name='independent\_set'></a>independent set|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='index\_formatter'></a>index formatter|[docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md)|
|<a name='info'></a>info|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
|<a name='inner\_join'></a>inner join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='input\_mode'></a>input mode|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
|<a name='integer'></a>integer|[math::roman](tcllib/files/modules/math/roman\.md)|
|<a name='integration'></a>integration|[math::calculus](tcllib/files/modules/math/calculus\.md)|
|<a name='inter\_thread\_communication'></a>inter\-thread communication|[tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md)|
|<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)|
|<a name='international\_bank\_account\_number'></a>International Bank Account Number|[valtype::iban](tcllib/files/modules/valtype/iban\.md)|
|<a name='international\_mobile\_equipment\_identity'></a>International Mobile Equipment Identity|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
|<a name='international\_standard\_book\_number'></a>International Standard Book Number|[valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
|<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)|
|<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)|
|<a name='internet\_address'></a>internet address|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
|<a name='interpolation'></a>interpolation|[math::interpolate](tcllib/files/modules/math/interpolate\.md)|
|<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)|
|<a name='intersection'></a>intersection|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='interval'></a>interval|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md)|
|<a name='ip'></a>ip|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
|<a name='ipc'></a>ipc|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
|<a name='ipv4'></a>ipv4|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
|<a name='ipv6'></a>ipv6|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
|<a name='irc'></a>irc|[irc](tcllib/files/modules/irc/irc\.md) &#183; [picoirc](tcllib/files/modules/irc/picoirc\.md)|
|<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)|
|<a name='isbn'></a>ISBN|[valtype::isbn](tcllib/files/modules/valtype/isbn\.md)|
|<a name='isthmus'></a>isthmus|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='iterator'></a>iterator|[generator](tcllib/files/modules/generator/generator\.md)|


#### <a name='cJ'></a>Keywords: J

|||
|---|---|
|<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)|
|<a name='jfif'></a>jfif|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
|<a name='join'></a>join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='jpeg'></a>jpeg|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
|<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)|
|<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)|
|<a name='justification'></a>justification|[textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|


#### <a name='cK'></a>Keywords: K

|||
|---|---|
|<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)|
|<a name='keywords'></a>keywords|[docidx\_plugin\_apiref](tcllib/files/modules/doctools/docidx\_plugin\_apiref\.md)|
|<a name='knuth'></a>knuth|[soundex](tcllib/files/modules/soundex/soundex\.md)|


#### <a name='cL'></a>Keywords: L

|||
|---|---|
|<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)|
|<a name='lambda'></a>lambda|[lambda](tcllib/files/modules/lambda/lambda\.md)|
|<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)|
|<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)|
|<a name='latitute'></a>latitute|[map::slippy](tcllib/files/modules/map/map\_slippy\.md)|
|<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)|
|<a name='ldap\_client'></a>ldap client|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md)|
|<a name='ldif'></a>ldif|[ldapx](tcllib/files/modules/ldap/ldapx\.md)|
|<a name='least\_squares'></a>least squares|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
|<a name='left\_outer\_join'></a>left outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='lemon'></a>lemon|[page\_util\_norm\_lemon](tcllib/files/modules/page/page\_util\_norm\_lemon\.md)|
|<a name='level\_graph'></a>level graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='lexing'></a>lexing|[string::token](tcllib/files/modules/string/token\.md) &#183; [string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
|<a name='limitsize'></a>limitsize|[tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md)|
|<a name='line'></a>line|[math::geometry](tcllib/files/modules/math/math\_geometry\.md)|
|<a name='linear\_algebra'></a>linear algebra|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
|<a name='linear\_equations'></a>linear equations|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
|<a name='linear\_program'></a>linear program|[math::optimize](tcllib/files/modules/math/optimize\.md)|
|<a name='lines'></a>lines|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
|<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)|
|<a name='listener'></a>listener|[term::receive](tcllib/files/modules/term/receive\.md) &#183; [term::receive::bind](tcllib/files/modules/term/term\_bind\.md)|
|<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)|
|<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)|
|<a name='local\_searching'></a>local searching|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<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)|
|<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)|
|<a name='log\_level'></a>log level|[log](tcllib/files/modules/log/log\.md) &#183; [logger](tcllib/files/modules/log/logger\.md)|
|<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)|
|<a name='longest\_common\_subsequence'></a>longest common subsequence|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='longitude'></a>longitude|[map::slippy](tcllib/files/modules/map/map\_slippy\.md)|
|<a name='loop'></a>loop|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='luhn'></a>luhn|[valtype::luhn](tcllib/files/modules/valtype/luhn\.md) &#183; [valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md)|
|<a name='luhn\_5'></a>luhn\-5|[valtype::luhn5](tcllib/files/modules/valtype/luhn5\.md)|


#### <a name='cM'></a>Keywords: M

|||
|---|---|
|<a name='macros'></a>macros|[doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md)|
|<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)|
|<a name='mailto'></a>mailto|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='man\_macros'></a>man\_macros|[doctools::nroff::man\_macros](tcllib/files/modules/doctools2base/nroff\_manmacros\.md)|
|<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)|
|<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)|
|<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)|
|<a name='mastercard'></a>MasterCard|[valtype::creditcard::mastercard](tcllib/files/modules/valtype/cc\_mastercard\.md)|
|<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)|
|<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)|
|<a name='mathematics'></a>mathematics|[math::fourier](tcllib/files/modules/math/fourier\.md) &#183; [math::statistics](tcllib/files/modules/math/statistics\.md)|
|<a name='matrices'></a>matrices|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
|<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)|
|<a name='max\_cut'></a>max cut|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='maximum'></a>maximum|[math::optimize](tcllib/files/modules/math/optimize\.md)|
|<a name='maximum\_flow'></a>maximum flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='md5'></a>md5|[md5](tcllib/files/modules/md5/md5\.md) &#183; [md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md)|
|<a name='md5crypt'></a>md5crypt|[md5crypt](tcllib/files/modules/md5crypt/md5crypt\.md)|
|<a name='medicare'></a>medicare|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
|<a name='mega\_widget'></a>mega widget|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
|<a name='membership'></a>membership|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<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)|
|<a name='merge'></a>merge|[tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md) &#183; [uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
|<a name='merge\_find'></a>merge find|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
|<a name='merging'></a>merging|[bench](tcllib/files/modules/bench/bench\.md)|
|<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)|
|<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)|
|<a name='message\_level'></a>message level|[log](tcllib/files/modules/log/log\.md)|
|<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)|
|<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)|
|<a name='metakit'></a>metakit|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
|<a name='method'></a>method|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
|<a name='method\_reference'></a>method reference|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
|<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)|
|<a name='minimal\_spanning\_tree'></a>minimal spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='minimum'></a>minimum|[math::optimize](tcllib/files/modules/math/optimize\.md)|
|<a name='minimum\_cost\_flow'></a>minimum cost flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='minimum\_degree\_spanning\_tree'></a>minimum degree spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='minimum\_diameter\_spanning\_tree'></a>minimum diameter spanning tree|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='mobile\_phone'></a>mobile phone|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
|<a name='module'></a>module|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
|<a name='montecarlo\_simulation'></a>montecarlo simulation|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md)|
|<a name='move'></a>move|[fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md)|
|<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)|
|<a name='multiplexer'></a>multiplexer|[multiplexer](tcllib/files/modules/multiplexer/multiplexer\.md)|
|<a name='multiprecision'></a>multiprecision|[math::bigfloat](tcllib/files/modules/math/bigfloat\.md) &#183; [math::bignum](tcllib/files/modules/math/bignum\.md)|
|<a name='my\_method'></a>my method|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|


#### <a name='cN'></a>Keywords: N

|||
|---|---|
|<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)|
|<a name='namespace\_unknown'></a>namespace unknown|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
|<a name='namespace\_utilities'></a>namespace utilities|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
|<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)|
|<a name='national\_provider\_identifier'></a>National Provider Identifier|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
|<a name='neighbour'></a>neighbour|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='nettool'></a>nettool|[nettool](tcllib/files/modules/nettool/nettool\.md)|
|<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)|
|<a name='news'></a>news|[nntp](tcllib/files/modules/nntp/nntp\.md) &#183; [uri](tcllib/files/modules/uri/uri\.md)|
|<a name='next\_permutation'></a>next permutation|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='nmea'></a>nmea|[nmea](tcllib/files/modules/nmea/nmea\.md)|
|<a name='nntp'></a>nntp|[nntp](tcllib/files/modules/nntp/nntp\.md)|
|<a name='nntpclient'></a>nntpclient|[nntp](tcllib/files/modules/nntp/nntp\.md)|
|<a name='no\_op'></a>no\-op|[control](tcllib/files/modules/control/control\.md)|
|<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)|
|<a name='nominatim'></a>nominatim|[map::geocode::nominatim](tcllib/files/modules/map/map\_geocode\_nominatim\.md)|
|<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)|
|<a name='npi'></a>NPI|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
|<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)|
|<a name='ntlm'></a>NTLM|[SASL::NTLM](tcllib/files/modules/sasl/ntlm\.md)|
|<a name='ntp'></a>NTP|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
|<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)|
|<a name='number\_theory'></a>number theory|[math::numtheory](tcllib/files/modules/math/numtheory\.md)|


#### <a name='cO'></a>Keywords: O

|||
|---|---|
|<a name='oauth'></a>oauth|[oauth](tcllib/files/modules/oauth/oauth\.md)|
|<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)|
|<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)|
|<a name='observer'></a>observer|[hook](tcllib/files/modules/hook/hook\.md) &#183; [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md)|
|<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)|
|<a name='on\_idle'></a>on\-idle|[uevent::onidle](tcllib/files/modules/uev/uevent\_onidle\.md)|
|<a name='one\_time\_pad'></a>one time pad|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md)|
|<a name='optimization'></a>optimization|[math::optimize](tcllib/files/modules/math/optimize\.md) &#183; [simulation::annealing](tcllib/files/modules/simulation/annealing\.md)|
|<a name='ordered\_list'></a>ordered list|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md)|
|<a name='otp'></a>otp|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md)|
|<a name='outer\_join'></a>outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|


#### <a name='cP'></a>Keywords: P

|||
|---|---|
|<a name='package'></a>package|[csv](tcllib/files/modules/csv/csv\.md)|
|<a name='package\_indexing'></a>package indexing|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
|<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)|
|<a name='pager'></a>pager|[term::interact::pager](tcllib/files/modules/term/ipager\.md)|
|<a name='paragraph'></a>paragraph|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
|<a name='param'></a>PARAM|[pt::peg::to::param](tcllib/files/modules/pt/pt\_peg\_to\_param\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='partial\_application'></a>partial application|[lambda](tcllib/files/modules/lambda/lambda\.md)|
|<a name='partition'></a>partition|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
|<a name='partitioned\_set'></a>partitioned set|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md)|
|<a name='passive'></a>passive|[transfer::connect](tcllib/files/modules/transfer/connect\.md)|
|<a name='password'></a>password|[otp](tcllib/files/modules/otp/otp\.md)|
|<a name='patch'></a>patch|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
|<a name='patching'></a>patching|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='pca'></a>PCA|[math::PCA](tcllib/files/modules/math/pca\.md)|
|<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)|
|<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)|
|<a name='permutation'></a>permutation|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='persistence'></a>persistence|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
|<a name='phone'></a>phone|[valtype::imei](tcllib/files/modules/valtype/imei\.md)|
|<a name='pi'></a>pi|[math::constants](tcllib/files/modules/math/constants\.md)|
|<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)|
|<a name='plane\_geometry'></a>plane geometry|[math::geometry](tcllib/files/modules/math/math\_geometry\.md)|
|<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)|
|<a name='plugin\_management'></a>plugin management|[pluginmgr](tcllib/files/modules/pluginmgr/pluginmgr\.md)|
|<a name='plugin\_search'></a>plugin search|[pluginmgr](tcllib/files/modules/pluginmgr/pluginmgr\.md)|
|<a name='png'></a>png|[png](tcllib/files/modules/png/png\.md)|
|<a name='point'></a>point|[math::geometry](tcllib/files/modules/math/math\_geometry\.md)|
|<a name='polynomial\_functions'></a>polynomial functions|[math::polynomials](tcllib/files/modules/math/polynomials\.md)|
|<a name='pool'></a>pool|[struct::pool](tcllib/files/modules/struct/pool\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md)|
|<a name='pop'></a>pop|[pop3](tcllib/files/modules/pop3/pop3\.md)|
|<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)|
|<a name='post\_order'></a>post\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
|<a name='practcl'></a>practcl|[practcl](tcllib/files/modules/practcl/practcl\.md)|
|<a name='pre\_order'></a>pre\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)|
|<a name='prefix'></a>prefix|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim\.md)|
|<a name='prime'></a>prime|[math::numtheory](tcllib/files/modules/math/numtheory\.md)|
|<a name='prioqueue'></a>prioqueue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) &#183; [struct::queue](tcllib/files/modules/struct/queue\.md)|
|<a name='priority\_queue'></a>priority queue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md)|
|<a name='proc'></a>proc|[lambda](tcllib/files/modules/lambda/lambda\.md)|
|<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)|
|<a name='procedure\_documentation'></a>procedure documentation|[tepam::doc\_gen](tcllib/files/modules/tepam/tepam\_doc\_gen\.md)|
|<a name='processman'></a>processman|[processman](tcllib/files/modules/processman/processman\.md)|
|<a name='producer'></a>producer|[hook](tcllib/files/modules/hook/hook\.md)|
|<a name='profile'></a>profile|[profiler](tcllib/files/modules/profiler/profiler\.md)|
|<a name='projection'></a>projection|[mapproj](tcllib/files/modules/mapproj/mapproj\.md)|
|<a name='prospero'></a>prospero|[uri](tcllib/files/modules/uri/uri\.md)|
|<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)|
|<a name='proxy'></a>proxy|[autoproxy](tcllib/files/modules/http/autoproxy\.md)|
|<a name='public\_key\_cipher'></a>public key cipher|[pki](tcllib/files/modules/pki/pki\.md)|
|<a name='publisher'></a>publisher|[hook](tcllib/files/modules/hook/hook\.md)|
|<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)|


#### <a name='cQ'></a>Keywords: Q

|||
|---|---|
|<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)|
|<a name='quoting'></a>quoting|[page\_util\_quote](tcllib/files/modules/page/page\_util\_quote\.md)|


#### <a name='cR'></a>Keywords: R

|||
|---|---|
|<a name='radians'></a>radians|[math::constants](tcllib/files/modules/math/constants\.md) &#183; [units](tcllib/files/modules/units/units\.md)|
|<a name='radiobutton'></a>radiobutton|[html](tcllib/files/modules/html/html\.md)|
|<a name='radius'></a>radius|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='random\_numbers'></a>random numbers|[simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
|<a name='rational\_functions'></a>rational functions|[math::rationalfunctions](tcllib/files/modules/math/rational\_funcs\.md)|
|<a name='raw'></a>raw|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
|<a name='rc4'></a>rc4|[rc4](tcllib/files/modules/rc4/rc4\.md)|
|<a name='rcs'></a>RCS|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='rcs\_patch'></a>RCS patch|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='read'></a>read|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<a name='reading'></a>reading|[bench::in](tcllib/files/modules/bench/bench\_read\.md)|
|<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)|
|<a name='reconnect'></a>reconnect|[nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md)|
|<a name='record'></a>record|[struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::record](tcllib/files/modules/struct/record\.md)|
|<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)|
|<a name='reduce'></a>reduce|[generator](tcllib/files/modules/generator/generator\.md) &#183; [struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<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)|
|<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)|
|<a name='regex'></a>regex|[string::token](tcllib/files/modules/string/token\.md)|
|<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)|
|<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)|
|<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)|
|<a name='remote\_communication'></a>remote communication|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
|<a name='remote\_execution'></a>remote execution|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
|<a name='remove'></a>remove|[fileutil::multi](tcllib/files/modules/fileutil/multi\.md) &#183; [fileutil::multi::op](tcllib/files/modules/fileutil/multiop\.md)|
|<a name='repeating'></a>repeating|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='repetition'></a>repetition|[struct::list](tcllib/files/modules/struct/struct\_list\.md) &#183; [textutil::repeat](tcllib/files/modules/textutil/repeat\.md)|
|<a name='report'></a>report|[report](tcllib/files/modules/report/report\.md)|
|<a name='reshuffle'></a>reshuffle|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='residual\_graph'></a>residual graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='resolver'></a>resolver|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<a name='resource\_management'></a>resource management|[try](tcllib/files/modules/try/tcllib\_try\.md)|
|<a name='restore'></a>restore|[nameserv::auto](tcllib/files/modules/nns/nns\_auto\.md)|
|<a name='return'></a>return|[throw](tcllib/files/modules/try/tcllib\_throw\.md)|
|<a name='reverse'></a>reverse|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<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)|
|<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)|
|<a name='rfc\_868'></a>rfc 868|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
|<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)|
|<a name='rfc\_977'></a>rfc 977|[nntp](tcllib/files/modules/nntp/nntp\.md)|
|<a name='rfc\_1034'></a>rfc 1034|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<a name='rfc\_1035'></a>rfc 1035|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<a name='rfc\_1036'></a>rfc 1036|[nntp](tcllib/files/modules/nntp/nntp\.md)|
|<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)|
|<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)|
|<a name='rfc\_1413'></a>rfc 1413|[ident](tcllib/files/modules/ident/ident\.md)|
|<a name='rfc\_1630'></a>rfc 1630|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='rfc\_1886'></a>rfc 1886|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<a name='rfc\_1939'></a>rfc 1939|[pop3](tcllib/files/modules/pop3/pop3\.md) &#183; [pop3d](tcllib/files/modules/pop3d/pop3d\.md)|
|<a name='rfc\_2030'></a>rfc 2030|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
|<a name='rfc\_2045'></a>rfc 2045|[mime](tcllib/files/modules/mime/mime\.md)|
|<a name='rfc\_2046'></a>rfc 2046|[mime](tcllib/files/modules/mime/mime\.md)|
|<a name='rfc\_2049'></a>rfc 2049|[mime](tcllib/files/modules/mime/mime\.md)|
|<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)|
|<a name='rfc\_2141'></a>rfc 2141|[uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
|<a name='rfc\_2251'></a>rfc 2251|[ldap](tcllib/files/modules/ldap/ldap\.md) &#183; [ldapx](tcllib/files/modules/ldap/ldapx\.md)|
|<a name='rfc\_2255'></a>rfc 2255|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='rfc\_2289'></a>rfc 2289|[otp](tcllib/files/modules/otp/otp\.md)|
|<a name='rfc\_2396'></a>rfc 2396|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='rfc\_2554'></a>rfc 2554|[smtp](tcllib/files/modules/mime/smtp\.md)|
|<a name='rfc\_2718'></a>RFC 2718|[oauth](tcllib/files/modules/oauth/oauth\.md)|
|<a name='rfc\_2821'></a>rfc 2821|[smtp](tcllib/files/modules/mime/smtp\.md) &#183; [smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
|<a name='rfc\_2849'></a>rfc 2849|[ldapx](tcllib/files/modules/ldap/ldapx\.md)|
|<a name='rfc\_3207'></a>rfc 3207|[smtp](tcllib/files/modules/mime/smtp\.md)|
|<a name='rfc\_3513'></a>rfc 3513|[tcllib\_ip](tcllib/files/modules/dns/tcllib\_ip\.md)|
|<a name='rfc\_3986'></a>rfc 3986|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='rfc\_4511'></a>rfc 4511|[ldap](tcllib/files/modules/ldap/ldap\.md)|
|<a name='rfc\_5849'></a>RFC 5849|[oauth](tcllib/files/modules/oauth/oauth\.md)|
|<a name='rfc\_6455'></a>rfc 6455|[websocket](tcllib/files/modules/websocket/websocket\.md)|
|<a name='rfc\_7858'></a>rfc 7858|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)|
|<a name='rfc3501'></a>rfc3501|[imap4](tcllib/files/modules/imap4/imap4\.md)|
|<a name='rfc3548'></a>rfc3548|[base32](tcllib/files/modules/base32/base32\.md) &#183; [base32::hex](tcllib/files/modules/base32/base32hex\.md)|
|<a name='right\_outer\_join'></a>right outer join|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='ripemd'></a>RIPEMD|[ripemd128](tcllib/files/modules/ripemd/ripemd128\.md) &#183; [ripemd160](tcllib/files/modules/ripemd/ripemd160\.md)|
|<a name='roman\_numeral'></a>roman numeral|[math::roman](tcllib/files/modules/math/roman\.md)|
|<a name='roots'></a>roots|[math::calculus](tcllib/files/modules/math/calculus\.md)|
|<a name='rot'></a>rot|[tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
|<a name='rot13'></a>rot13|[tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md)|
|<a name='rounding'></a>rounding|[math::fuzzy](tcllib/files/modules/math/fuzzy\.md)|
|<a name='rows'></a>rows|[term::ansi::ctrl::unix](tcllib/files/modules/term/ansi\_ctrlu\.md)|
|<a name='rpc'></a>rpc|[comm](tcllib/files/modules/comm/comm\.md) &#183; [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)|
|<a name='rsa'></a>rsa|[pki](tcllib/files/modules/pki/pki\.md)|
|<a name='running'></a>running|[grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md)|


#### <a name='cS'></a>Keywords: S

|||
|---|---|
|<a name='s3'></a>s3|[S3](tcllib/files/modules/amazon\-s3/S3\.md)|
|<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)|
|<a name='scanl'></a>scanl|[generator](tcllib/files/modules/generator/generator\.md)|
|<a name='sccs'></a>SCCS|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='scram'></a>SCRAM|[SASL::SCRAM](tcllib/files/modules/sasl/scram\.md)|
|<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)|
|<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)|
|<a name='seed'></a>seed|[tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md)|
|<a name='selectionbox'></a>selectionbox|[javascript](tcllib/files/modules/javascript/javascript\.md)|
|<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)|
|<a name='send'></a>send|[comm](tcllib/files/modules/comm/comm\.md)|
|<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)|
|<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)|
|<a name='service'></a>service|[logger](tcllib/files/modules/log/logger\.md)|
|<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)|
|<a name='set'></a>set|[struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='sha1'></a>sha1|[sha1](tcllib/files/modules/sha1/sha1\.md)|
|<a name='sha256'></a>sha256|[sha256](tcllib/files/modules/sha1/sha256\.md)|
|<a name='shell'></a>shell|[string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
|<a name='shortest\_path'></a>shortest path|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='shuffle'></a>shuffle|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='simulated\_annealing'></a>simulated annealing|[simulation::annealing](tcllib/files/modules/simulation/annealing\.md)|
|<a name='simulation'></a>simulation|[simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
|<a name='singleton'></a>singleton|[oo::util](tcllib/files/modules/tool/meta\.md) &#183; [oo::util](tcllib/files/modules/ooutil/ooutil\.md)|
|<a name='size\_limit'></a>size limit|[tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md)|
|<a name='skiplist'></a>skiplist|[struct::queue](tcllib/files/modules/struct/queue\.md) &#183; [struct::skiplist](tcllib/files/modules/struct/skiplist\.md)|
|<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)|
|<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)|
|<a name='smtpd'></a>smtpd|[smtpd](tcllib/files/modules/smtpd/smtpd\.md)|
|<a name='snit'></a>Snit|[snit](tcllib/files/modules/snit/snit\.md)|
|<a name='snit'></a>snit|[deleg\_method](tcllib/files/modules/interp/deleg\_method\.md) &#183; [interp](tcllib/files/modules/interp/tcllib\_interp\.md)|
|<a name='sntp'></a>SNTP|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
|<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)|
|<a name='soundex'></a>soundex|[soundex](tcllib/files/modules/soundex/soundex\.md)|
|<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)|
|<a name='spacing'></a>spacing|[tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md)|
|<a name='spatial\_interpolation'></a>spatial interpolation|[math::interpolate](tcllib/files/modules/math/interpolate\.md)|
|<a name='special\_functions'></a>special functions|[math::special](tcllib/files/modules/math/special\.md)|
|<a name='specification'></a>specification|[bench\_lang\_spec](tcllib/files/modules/bench/bench\_lang\_spec\.md)|
|<a name='speed'></a>speed|[profiler](tcllib/files/modules/profiler/profiler\.md)|
|<a name='split'></a>split|[textutil::split](tcllib/files/modules/textutil/textutil\_split\.md)|
|<a name='squared\_graph'></a>squared graph|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<a name='stack'></a>stack|[struct::queue](tcllib/files/modules/struct/queue\.md)|
|<a name='standard\_io'></a>standard io|[tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md)|
|<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)|
|<a name='state\_de\_serialization'></a>state \(de\)serialization|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
|<a name='statistical\_distribution'></a>statistical distribution|[simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)|
|<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)|
|<a name='stdin'></a>stdin|[tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md)|
|<a name='stdout'></a>stdout|[tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md)|
|<a name='stochastic\_modelling'></a>stochastic modelling|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md)|
|<a name='stream\_cipher'></a>stream cipher|[rc4](tcllib/files/modules/rc4/rc4\.md)|
|<a name='stream\_copy'></a>stream copy|[tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md)|
|<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)|
|<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)|
|<a name='strongly\_connected\_component'></a>strongly connected component|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='struct'></a>struct|[struct::pool](tcllib/files/modules/struct/pool\.md) &#183; [struct::record](tcllib/files/modules/struct/record\.md)|
|<a name='structure'></a>structure|[control](tcllib/files/modules/control/control\.md)|
|<a name='structured\_queries'></a>structured queries|[treeql](tcllib/files/modules/treeql/treeql\.md)|
|<a name='style'></a>style|[doctools::html::cssdefaults](tcllib/files/modules/doctools2base/html\_cssdefaults\.md)|
|<a name='subcommand'></a>subcommand|[tepam](tcllib/files/modules/tepam/tepam\_introduction\.md) &#183; [tepam::procedure](tcllib/files/modules/tepam/tepam\_procedure\.md)|
|<a name='subgraph'></a>subgraph|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='subject'></a>subject|[hook](tcllib/files/modules/hook/hook\.md)|
|<a name='submitbutton'></a>submitbutton|[javascript](tcllib/files/modules/javascript/javascript\.md)|
|<a name='subscriber'></a>subscriber|[hook](tcllib/files/modules/hook/hook\.md)|
|<a name='subsequence'></a>subsequence|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='subst'></a>subst|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md)|
|<a name='sum'></a>sum|[sum](tcllib/files/modules/crc/sum\.md)|
|<a name='swapping'></a>swapping|[struct::list](tcllib/files/modules/struct/struct\_list\.md)|
|<a name='symmetric\_difference'></a>symmetric difference|[struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='synchronous'></a>synchronous|[cache::async](tcllib/files/modules/cache/async\.md)|
|<a name='syntax\_tree'></a>syntax tree|[grammar::me::util](tcllib/files/modules/grammar\_me/me\_util\.md)|


#### <a name='cT'></a>Keywords: T

|||
|---|---|
|<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)|
|<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)|
|<a name='tabstops'></a>tabstops|[textutil::tabify](tcllib/files/modules/textutil/tabify\.md)|
|<a name='tallying'></a>tallying|[counter](tcllib/files/modules/counter/counter\.md)|
|<a name='tape\_archive'></a>tape archive|[tar](tcllib/files/modules/tar/tar\.md)|
|<a name='tar'></a>tar|[tar](tcllib/files/modules/tar/tar\.md)|
|<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)|
|<a name='tcl\_module'></a>Tcl module|[docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md)|
|<a name='tcl\_syntax'></a>Tcl syntax|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md)|
|<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)|
|<a name='tcllib'></a>tcllib|[csv](tcllib/files/modules/csv/csv\.md)|
|<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)|
|<a name='tclparam'></a>TCLPARAM|[pt::peg::to::tclparam](tcllib/files/modules/pt/pt\_peg\_to\_tclparam\.md)|
|<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)|
|<a name='temp\_file'></a>temp file|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
|<a name='template\_processing'></a>template processing|[textutil::expander](tcllib/files/modules/textutil/expander\.md)|
|<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)|
|<a name='test'></a>test|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
|<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)|
|<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)|
|<a name='tex'></a>TeX|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
|<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)|
|<a name='text\_comparison'></a>text comparison|[soundex](tcllib/files/modules/soundex/soundex\.md)|
|<a name='text\_conversion'></a>text conversion|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<a name='text\_differences'></a>text differences|[rcs](tcllib/files/modules/rcs/rcs\.md)|
|<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)|
|<a name='text\_expansion'></a>text expansion|[textutil::expander](tcllib/files/modules/textutil/expander\.md)|
|<a name='text\_likeness'></a>text likeness|[soundex](tcllib/files/modules/soundex/soundex\.md)|
|<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)|
|<a name='text\_widget'></a>text widget|[tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md)|
|<a name='threads'></a>threads|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<a name='throw'></a>throw|[throw](tcllib/files/modules/try/tcllib\_throw\.md)|
|<a name='thumbnail'></a>thumbnail|[jpeg](tcllib/files/modules/jpeg/jpeg\.md)|
|<a name='tie'></a>tie|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
|<a name='tif'></a>tif|[tiff](tcllib/files/modules/tiff/tiff\.md)|
|<a name='tiff'></a>tiff|[tiff](tcllib/files/modules/tiff/tiff\.md)|
|<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)|
|<a name='time'></a>time|[ntp\_time](tcllib/files/modules/ntp/ntp\_time\.md)|
|<a name='timestamp'></a>timestamp|[png](tcllib/files/modules/png/png\.md)|
|<a name='timestamps'></a>timestamps|[debug::timestamp](tcllib/files/modules/debug/debug\_timestamp\.md)|
|<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)|
|<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)|
|<a name='tip\_234'></a>tip 234|[tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
|<a name='tip\_317'></a>tip 317|[tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md)|
|<a name='tk'></a>Tk|[tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md)|
|<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)|
|<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)|
|<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)|
|<a name='toc\_formatter'></a>toc formatter|[doctoc\_plugin\_apiref](tcllib/files/modules/doctools/doctoc\_plugin\_apiref\.md)|
|<a name='tokenization'></a>tokenization|[string::token](tcllib/files/modules/string/token\.md) &#183; [string::token::shell](tcllib/files/modules/string/token\_shell\.md)|
|<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)|
|<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)|
|<a name='torrent'></a>torrent|[bee](tcllib/files/modules/bee/bee\.md)|
|<a name='touch'></a>touch|[fileutil](tcllib/files/modules/fileutil/fileutil\.md)|
|<a name='tpdl'></a>TPDL|[grammar::me\_intro](tcllib/files/modules/grammar\_me/me\_intro\.md)|
|<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)|
|<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)|
|<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)|
|<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)|
|<a name='transmitter'></a>transmitter|[transfer::transmitter](tcllib/files/modules/transfer/transmitter\.md)|
|<a name='travelling\_salesman'></a>travelling salesman|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='traversal'></a>traversal|[fileutil\_traverse](tcllib/files/modules/fileutil/traverse\.md)|
|<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)|
|<a name='tree\_query\_language'></a>tree query language|[treeql](tcllib/files/modules/treeql/treeql\.md)|
|<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)|
|<a name='treeql'></a>TreeQL|[treeql](tcllib/files/modules/treeql/treeql\.md)|
|<a name='trigonometry'></a>trigonometry|[math::trig](tcllib/files/modules/math/trig\.md)|
|<a name='trimming'></a>trimming|[textutil](tcllib/files/modules/textutil/textutil\.md) &#183; [textutil::trim](tcllib/files/modules/textutil/trim\.md)|
|<a name='twitter'></a>twitter|[oauth](tcllib/files/modules/oauth/oauth\.md)|
|<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)|
|<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)|


#### <a name='cU'></a>Keywords: U

|||
|---|---|
|<a name='uevent'></a>uevent|[hook](tcllib/files/modules/hook/hook\.md)|
|<a name='unbind'></a>unbind|[uevent](tcllib/files/modules/uev/uevent\.md)|
|<a name='uncapitalize'></a>uncapitalize|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md)|
|<a name='undenting'></a>undenting|[textutil::adjust](tcllib/files/modules/textutil/adjust\.md)|
|<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)|
|<a name='union'></a>union|[struct::disjointset](tcllib/files/modules/struct/disjointset\.md) &#183; [struct::set](tcllib/files/modules/struct/struct\_set\.md)|
|<a name='unit'></a>unit|[units](tcllib/files/modules/units/units\.md)|
|<a name='unknown\_hooking'></a>unknown hooking|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
|<a name='untie'></a>untie|[tie](tcllib/files/modules/tie/tie\_std\.md) &#183; [tie](tcllib/files/modules/tie/tie\.md)|
|<a name='update'></a>update|[coroutine](tcllib/files/modules/coroutine/tcllib\_coroutine\.md) &#183; [coroutine::auto](tcllib/files/modules/coroutine/coro\_auto\.md)|
|<a name='uri'></a>uri|[uri](tcllib/files/modules/uri/uri\.md) &#183; [uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
|<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)|
|<a name='urn'></a>urn|[uri\_urn](tcllib/files/modules/uri/urn\-scheme\.md)|
|<a name='us\_npi'></a>US\-NPI|[valtype::usnpi](tcllib/files/modules/valtype/usnpi\.md)|
|<a name='utilities'></a>utilities|[namespacex](tcllib/files/modules/namespacex/namespacex\.md)|
|<a name='uuencode'></a>uuencode|[uuencode](tcllib/files/modules/base64/uuencode\.md)|
|<a name='uuid'></a>UUID|[uuid](tcllib/files/modules/uuid/uuid\.md)|


#### <a name='cV'></a>Keywords: V

|||
|---|---|
|<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)|
|<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)|
|<a name='vectors'></a>vectors|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)|
|<a name='verhoeff'></a>verhoeff|[valtype::verhoeff](tcllib/files/modules/valtype/verhoeff\.md)|
|<a name='vertex'></a>vertex|[struct::graph](tcllib/files/modules/struct/graph\.md) &#183; [struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<a name='vertex\_cover'></a>vertex cover|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)|
|<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)|
|<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)|
|<a name='visa'></a>VISA|[valtype::creditcard::visa](tcllib/files/modules/valtype/cc\_visa\.md)|
|<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)|


#### <a name='cW'></a>Keywords: W

|||
|---|---|
|<a name='wais'></a>wais|[uri](tcllib/files/modules/uri/uri\.md)|
|<a name='widget'></a>widget|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
|<a name='widget\_adaptors'></a>widget adaptors|[snit](tcllib/files/modules/snit/snit\.md) &#183; [snitfaq](tcllib/files/modules/snit/snitfaq\.md)|
|<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)|
|<a name='word'></a>word|[doctools::tcl::parse](tcllib/files/modules/doctools2base/tcl\_parse\.md) &#183; [wip](tcllib/files/modules/wip/wip\.md)|
|<a name='www'></a>WWW|[tool](tcllib/files/modules/httpd/httpd\.md)|
|<a name='www'></a>www|[uri](tcllib/files/modules/uri/uri\.md)|


#### <a name='cX'></a>Keywords: X

|||
|---|---|
|<a name='x\_208'></a>x\.208|[asn](tcllib/files/modules/asn/asn\.md)|
|<a name='x\_209'></a>x\.209|[asn](tcllib/files/modules/asn/asn\.md)|
|<a name='x\_500'></a>x\.500|[ldap](tcllib/files/modules/ldap/ldap\.md)|
|<a name='xgoogletoken'></a>XGoogleToken|[SASL::XGoogleToken](tcllib/files/modules/sasl/gtoken\.md)|
|<a name='xml'></a>xml|[xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md)|
|<a name='xor'></a>xor|[tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md)|
|<a name='xpath'></a>XPath|[treeql](tcllib/files/modules/treeql/treeql\.md)|
|<a name='xslt'></a>XSLT|[treeql](tcllib/files/modules/treeql/treeql\.md)|


#### <a name='cY'></a>Keywords: Y

|||
|---|---|
|<a name='yaml'></a>yaml|[huddle](tcllib/files/modules/yaml/huddle\.md) &#183; [yaml](tcllib/files/modules/yaml/yaml\.md)|
|<a name='ydecode'></a>ydecode|[yencode](tcllib/files/modules/base64/yencode\.md)|
|<a name='yenc'></a>yEnc|[yencode](tcllib/files/modules/base64/yencode\.md)|
|<a name='yencode'></a>yencode|[yencode](tcllib/files/modules/base64/yencode\.md)|


#### <a name='cZ'></a>Keywords: Z

|||
|---|---|
|<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)|
|<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)|
|<a name='zlib'></a>zlib|[tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)|
|<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)|

Changes to embedded/md/tcllib/files/apps/dtplite.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

52
53
54


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307

308
309

310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388

389
390
391
392
393
394
395
396
[//000000001]: # (dtplite - Documentation toolbox)
[//000000002]: # (Generated from file 'dtplite.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (dtplite(n) 1.0.5 tcllib "Documentation toolbox")








# NAME

dtplite - Lightweight DocTools Markup Processor

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

      -  [USE CASES](#subsection1)

      -  [COMMAND LINE](#subsection2)

      -  [OPTIONS](#subsection3)

      -  [FORMATS](#subsection4)

      -  [DIRECTORY STRUCTURES](#subsection5)

  -  [Bugs, Ideas, Feedback](#section2)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__dtplite__ __-o__ *output* ?options? *format* *inputfile*](#1)  
[__dtplite__ __validate__ *inputfile*](#2)  
[__dtplite__ __-o__ *output* ?options? *format* *inputdirectory*](#3)  
[__dtplite__ __-merge__ __-o__ *output* ?options? *format* *inputdirectory*](#4)  

# <a name='description'></a>DESCRIPTION

The application described by this document, __dtplite__, is the successor to the
extremely simple __[mpexpand](../modules/doctools/mpexpand.md)__. Influenced in
its functionality by the __dtp__ doctools processor it is much more powerful
than __[mpexpand](../modules/doctools/mpexpand.md)__, yet still as easy to use;
definitely easier than __dtp__ with its myriad of subcommands and options.


__dtplite__ is based upon the package
__[doctools](../modules/doctools/doctools.md)__, like the other two processors.



## <a name='subsection1'></a>USE CASES

__dtplite__ was written with the following three use cases in mind.

  1. Validation of a single document, i.e. checking that it was written in valid
     doctools format. This mode can also be used to get a preliminary version of
     the formatted output for a single document, for display in a browser,
     nroff, etc., allowing proofreading of the formatting.

  1. Generation of the formatted documentation for a single package, i.e. all
     the manpages, plus a table of contents and an index of keywords.

  1. An extension of the previous mode of operation, a method for the easy
     generation of one documentation tree for several packages, and especially
     of a unified table of contents and keyword index.

Beyond the above we also want to make use of the customization features provided
by the HTML formatter. It is not the only format the application should be able
to generate, but we anticipiate it to be the most commonly used, and it is one
of the few which do provide customization hooks.

We allow the caller to specify a header string, footer string, a stylesheet, and
data for a bar of navigation links at the top of the generated document. While
all can be set as long as the formatting engine provides an appropriate engine
parameter (See section [OPTIONS](#subsection3)) the last two have internal
processing which make them specific to HTML.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__dtplite__ __-o__ *output* ?options? *format* *inputfile*

    This is the form for use case [1]. The *options* will be explained later, in
    section [OPTIONS](#subsection3).

      * path *output* (in)

        This argument specifies where to write the generated document. It can be
        the path to a file or directory, or __-__. The last value causes the
        application to write the generated documented to __stdout__.

        If the *output* does not exist then [file dirname $output] has to exist
        and must be a writable directory. The generated document will be written
        to a file in that directory, and the name of that file will be derived
        from the *inputfile*, the *format*, and the value given to option
        __-ext__ (if present).

      * (path|handle) *format* (in)

        This argument specifies the formatting engine to use when processing the
        input, and thus the format of the generated document. See section
        [FORMATS](#subsection4) for the possibilities recognized by the
        application.

      * path *inputfile* (in)

        This argument specifies the path to the file to process. It has to
        exist, must be readable, and written in
        *[doctools](../../../index.md#doctools)* format.

  - <a name='2'></a>__dtplite__ __validate__ *inputfile*

    This is a simpler form for use case [1]. The "validate" format generates no
    output at all, only syntax checks are performed. As such the specification
    of an output file or other options is not necessary and left out.

  - <a name='3'></a>__dtplite__ __-o__ *output* ?options? *format* *inputdirectory*

    This is the form for use case [2]. It differs from the form for use case [1]
    by having the input documents specified through a directory instead of a
    file. The other arguments are identical, except for *output*, which now has
    to be the path to an existing and writable directory.

    The input documents are all files in *inputdirectory* or any of its
    subdirectories which were recognized by __fileutil::fileType__ as containing
    text in *[doctools](../../../index.md#doctools)* format.

  - <a name='4'></a>__dtplite__ __-merge__ __-o__ *output* ?options? *format* *inputdirectory*

    This is the form for use case [3]. The only difference to the form for use
    case [2] is the additional option __-merge__.

    Each such call will merge the generated documents coming from processing the
    input documents under *inputdirectory* or any of its subdirectories to the
    files under *output*. In this manner it is possible to incrementally build
    the unified documentation for any number of packages. Note that it is
    necessary to run through all the packages twice to get fully correct
    cross-references (for formats supporting them).

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application,
with the exception of the options __-o__ and __-merge__. These two were
described already, in section [COMMAND LINE](#subsection2).

  - __-exclude__ string

    This option specifies an exclude (glob) pattern. Any files identified as
    manpages to process which match the exclude pattern are ignored. The option
    can be provided multiple times, each usage adding an additional pattern to
    the list of exclusions.

  - __-ext__ string

    If the name of an output file has to be derived from the name of an input
    file it will use the name of the *format* as the extension by default. This
    option here will override this however, forcing it to use *string* as the
    file extension. This option is ignored if the name of the output file is
    fully specified through option __-o__.

    When used multiple times only the last definition is relevant.

  - __-header__ file

    This option can be used if and only if the selected *format* provides an
    engine parameter named "header". It takes the contents of the specified file
    and assign them to that parameter, for whatever use by the engine. The HTML
    engine will insert the text just after the tag __<body>__. If navigation
    buttons are present (see option __-nav__ below), then the HTML generated for
    them is appended to the header data originating here before the final
    assignment to the parameter.

    When used multiple times only the last definition is relevant.

  - __-footer__ file

    Like __-header__, except that: Any navigation buttons are ignored, the
    corresponding required engine parameter is named "footer", and the data is
    inserted just before the tag __</body>__.

    When used multiple times only the last definition is relevant.

  - __-style__ file

    This option can be used if and only if the selected *format* provides an
    engine parameter named "meta". When specified it will generate a piece of
    HTML code declaring the *file* as the stylesheet for the generated document
    and assign that to the parameter. The HTML engine will insert this inot the
    document, just after the tag __<head>__.

    When processing an input directory the stylesheet file is copied into the
    output directory and the generated HTML will refer to the copy, to make the
    result more self-contained. When processing an input file we have no
    location to copy the stylesheet to and so just reference it as specified.

    When used multiple times only the last definition is relevant.

  - __-toc__ path

    This option specifies a doctoc file to use for the table of contents instead
    of generating our own.

    When used multiple times only the last definition is relevant.

  - __-pre+toc__ label path|text

  - __-post+toc__ label path|text

    This option specifies additional doctoc files (or texts) to use in the
    navigation bar.

    Positioning and handling of multiple uses is like for options __-prenav__
    and __-postnav__, see below.

  - __-nav__ label url

  - __-prenav__ label url

    Use this option to specify a navigation button with *label* to display and
    the *url* to link to. This option can be used if and only if the selected
    *format* provides an engine parameter named "header". The HTML generated for
    this is appended to whatever data we got from option __-header__ before it
    is inserted into the generated documents.

    When used multiple times all definitions are collected and a navigation bar
    is created, with the first definition shown at the left edge and the last
    definition to the right.

    The url can be relative. In that case it is assumed to be relative to the
    main files (TOC and Keyword index), and will be transformed for all others
    to still link properly.

  - __-postnav__ label url

    Use this option to specify a navigation button with *label* to display and
    the *url* to link to. This option can be used if and only if the selected
    *format* provides an engine parameter named "header". The HTML generated for
    this is appended to whatever data we got from option __-header__ before it
    is inserted into the generated documents.

    When used multiple times all definitions are collected and a navigation bar
    is created, with the last definition shown at the right edge and the first
    definition to the left.

    The url can be relative. In that case it is assumed to be relative to the
    main files (TOC and Keyword index), and will be transformed for all others
    to still link properly.

## <a name='subsection4'></a>FORMATS

At first the *format* argument will be treated as a path to a tcl file
containing the code for the requested formatting engine. The argument will be
treated as the name of one of the predefined formats listed below if and only if
the path does not exist.

*Note a limitation*: If treating the format as path to the tcl script
implementing the engine was sucessful, then this script has to implement not
only the engine API for doctools, i.e. *doctools_api*, but for *doctoc_api* and
*docidx_api* as well. Otherwise the generation of a table of contents and of a
keyword index will fail.

List of predefined formats, i.e. as provided by the package
__[doctools](../modules/doctools/doctools.md)__:

  - __nroff__

    The processor generates *roff output, the standard format for unix manpages.

  - __html__

    The processor generates HTML output, for usage in and display by web
    browsers. This engine is currently the only one providing the various engine
    parameters required for the additional customaization of the output.

  - __tmml__

    The processor generates TMML output, the Tcl Manpage Markup Language, a
    derivative of XML.

  - __latex__

    The processor generates LaTeX output.

  - __wiki__

    The processor generates Wiki markup as understood by __wikit__.

  - __list__

    The processor extracts the information provided by __manpage_begin__. This
    format is used internally to extract the meta data from which both table of
    contents and keyword index are derived from.

  - __null__

    The processor does not generate any output. This is equivalent to
    __validate__.

## <a name='subsection5'></a>DIRECTORY STRUCTURES

In this section we describe the directory structures generated by the
application under *output* when processing all documents in an *inputdirectory*.
In other words, this is only relevant to the use cases [2] and [3].


  - [2]


    The following directory structure is created when processing a single set of
    input documents. The file extension used is for output in HTML, but that is
    not relevant to the structure and was just used to have proper file names.

        output/
            toc.html
            index.html
            files/
                path/to/FOO.html

    The last line in the example shows the document generated for a file FOO
    located at

        inputdirectory/path/to/FOO

  - [3]

    When merging many packages into a unified set of documents the generated
    directory structure is a bit deeper:

        output
            .toc
            .idx
            .tocdoc
            .idxdoc
            .xrf
            toc.html
            index.html
            FOO1/
                ...
            FOO2/
                toc.html
                files/
                    path/to/BAR.html

    Each of the directories FOO1, ... contains the documents generated for the
    package FOO1, ... and follows the structure shown for use case [2]. The only
    exception is that there is no per-package index.

    The files ".toc", ".idx", and ".xrf" contain the internal status of the
    whole output and will be read and updated by the next invokation. Their
    contents will not be documented. Remove these files when all packages wanted
    for the output have been processed, i.e. when the output is complete.

    The files ".tocdoc", and ".idxdoc", are intermediate files in doctoc and
    docidx markup, respectively, containing the main table of contents and
    keyword index for the set of documents before their conversion to the chosen
    output format. They are left in place, i.e. not deleted, to serve as
    demonstrations of doctoc and docidx markup.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *doctools* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

[docidx introduction](../modules/doctools/docidx_intro.md), [doctoc
introduction](../modules/doctools/doctoc_intro.md), [doctools
introduction](../modules/doctools/doctools_intro.md)

# <a name='keywords'></a>KEYWORDS

[HTML](../../../index.md#html), [TMML](../../../index.md#tmml),
[conversion](../../../index.md#conversion), [docidx](../../../index.md#docidx),
[doctoc](../../../index.md#doctoc), [doctools](../../../index.md#doctools),
[manpage](../../../index.md#manpage), [markup](../../../index.md#markup),
[nroff](../../../index.md#nroff)


# <a name='category'></a>CATEGORY

Documentation tools

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2004-2013 Andreas Kupries <andreas[email protected].net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|

|

|



|

|
|



|
|
|
|
|
>


<
>
>



|

|
|

|

|
|



|


|

|


|

|
|



|

|
|

|

|
|
|

|
|
|
|
|

|


|

|

|

|

|



|
|
|

|

|

|
|


|
|

|

|
|



|
|

|




|
|

|

|
|

|

|


|
|
|
|

|

|


|
|
|
|
|
|

|

|

|

|

|

|


|
|
|
|



|
|

|

|


|

|

|

|

|
|

|
|

|

|


|
|
|
|



|

|
|
|

|


|
|
|
|



|

|
|
|




|

|



|
|
|

|
|



|




|
|




|



|



|



|
|
|



|
|




|
|
>

<
>


|
|


|
|

|






|





|
|
|
|
|
|
|

|

|

|

|
|
|

|
|
|
|

|


|
|




|
|
|

|
|

|
|
|
|

|

|
|
|



|
|
|
|
|
>







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319

320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
[//000000001]: # (dtplite \- Documentation toolbox)
[//000000002]: # (Generated from file 'dtplite\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2004\-2013 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (dtplite\(n\) 1\.0\.5 tcllib "Documentation toolbox")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

dtplite \- Lightweight DocTools Markup Processor

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

      - [USE CASES](#subsection1)

      - [COMMAND LINE](#subsection2)

      - [OPTIONS](#subsection3)

      - [FORMATS](#subsection4)

      - [DIRECTORY STRUCTURES](#subsection5)

  - [Bugs, Ideas, Feedback](#section2)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__dtplite__ __\-o__ *output* ?options? *format* *inputfile*](#1)  
[__dtplite__ __validate__ *inputfile*](#2)  
[__dtplite__ __\-o__ *output* ?options? *format* *inputdirectory*](#3)  
[__dtplite__ __\-merge__ __\-o__ *output* ?options? *format* *inputdirectory*](#4)  

# <a name='description'></a>DESCRIPTION

The application described by this document, __dtplite__, is the successor to
the extremely simple __[mpexpand](\.\./modules/doctools/mpexpand\.md)__\.
Influenced in its functionality by the __dtp__ doctools processor it is much
more powerful than __[mpexpand](\.\./modules/doctools/mpexpand\.md)__, yet
still as easy to use; definitely easier than __dtp__ with its myriad of
subcommands and options\.

__dtplite__ is based upon the package

__[doctools](\.\./modules/doctools/doctools\.md)__, like the other two
processors\.

## <a name='subsection1'></a>USE CASES

__dtplite__ was written with the following three use cases in mind\.

  1. Validation of a single document, i\.e\. checking that it was written in valid
     doctools format\. This mode can also be used to get a preliminary version of
     the formatted output for a single document, for display in a browser,
     nroff, etc\., allowing proofreading of the formatting\.

  1. Generation of the formatted documentation for a single package, i\.e\. all
     the manpages, plus a table of contents and an index of keywords\.

  1. An extension of the previous mode of operation, a method for the easy
     generation of one documentation tree for several packages, and especially
     of a unified table of contents and keyword index\.

Beyond the above we also want to make use of the customization features provided
by the HTML formatter\. It is not the only format the application should be able
to generate, but we anticipiate it to be the most commonly used, and it is one
of the few which do provide customization hooks\.

We allow the caller to specify a header string, footer string, a stylesheet, and
data for a bar of navigation links at the top of the generated document\. While
all can be set as long as the formatting engine provides an appropriate engine
parameter \(See section [OPTIONS](#subsection3)\) the last two have internal
processing which make them specific to HTML\.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__dtplite__ __\-o__ *output* ?options? *format* *inputfile*

    This is the form for use case \[1\]\. The *options* will be explained later,
    in section [OPTIONS](#subsection3)\.

      * path *output* \(in\)

        This argument specifies where to write the generated document\. It can be
        the path to a file or directory, or __\-__\. The last value causes the
        application to write the generated documented to __stdout__\.

        If the *output* does not exist then \[file dirname $output\] has to
        exist and must be a writable directory\. The generated document will be
        written to a file in that directory, and the name of that file will be
        derived from the *inputfile*, the *format*, and the value given to
        option __\-ext__ \(if present\)\.

      * \(path&#124;handle\) *format* \(in\)

        This argument specifies the formatting engine to use when processing the
        input, and thus the format of the generated document\. See section
        [FORMATS](#subsection4) for the possibilities recognized by the
        application\.

      * path *inputfile* \(in\)

        This argument specifies the path to the file to process\. It has to
        exist, must be readable, and written in
        *[doctools](\.\./\.\./\.\./index\.md\#doctools)* format\.

  - <a name='2'></a>__dtplite__ __validate__ *inputfile*

    This is a simpler form for use case \[1\]\. The "validate" format generates no
    output at all, only syntax checks are performed\. As such the specification
    of an output file or other options is not necessary and left out\.

  - <a name='3'></a>__dtplite__ __\-o__ *output* ?options? *format* *inputdirectory*

    This is the form for use case \[2\]\. It differs from the form for use case \[1\]
    by having the input documents specified through a directory instead of a
    file\. The other arguments are identical, except for *output*, which now
    has to be the path to an existing and writable directory\.

    The input documents are all files in *inputdirectory* or any of its
    subdirectories which were recognized by __fileutil::fileType__ as
    containing text in *[doctools](\.\./\.\./\.\./index\.md\#doctools)* format\.

  - <a name='4'></a>__dtplite__ __\-merge__ __\-o__ *output* ?options? *format* *inputdirectory*

    This is the form for use case \[3\]\. The only difference to the form for use
    case \[2\] is the additional option __\-merge__\.

    Each such call will merge the generated documents coming from processing the
    input documents under *inputdirectory* or any of its subdirectories to the
    files under *output*\. In this manner it is possible to incrementally build
    the unified documentation for any number of packages\. Note that it is
    necessary to run through all the packages twice to get fully correct
    cross\-references \(for formats supporting them\)\.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application,
with the exception of the options __\-o__ and __\-merge__\. These two were
described already, in section [COMMAND LINE](#subsection2)\.

  - __\-exclude__ string

    This option specifies an exclude \(glob\) pattern\. Any files identified as
    manpages to process which match the exclude pattern are ignored\. The option
    can be provided multiple times, each usage adding an additional pattern to
    the list of exclusions\.

  - __\-ext__ string

    If the name of an output file has to be derived from the name of an input
    file it will use the name of the *format* as the extension by default\.
    This option here will override this however, forcing it to use *string* as
    the file extension\. This option is ignored if the name of the output file is
    fully specified through option __\-o__\.

    When used multiple times only the last definition is relevant\.

  - __\-header__ file

    This option can be used if and only if the selected *format* provides an
    engine parameter named "header"\. It takes the contents of the specified file
    and assign them to that parameter, for whatever use by the engine\. The HTML
    engine will insert the text just after the tag __<body>__\. If navigation
    buttons are present \(see option __\-nav__ below\), then the HTML generated
    for them is appended to the header data originating here before the final
    assignment to the parameter\.

    When used multiple times only the last definition is relevant\.

  - __\-footer__ file

    Like __\-header__, except that: Any navigation buttons are ignored, the
    corresponding required engine parameter is named "footer", and the data is
    inserted just before the tag __</body>__\.

    When used multiple times only the last definition is relevant\.

  - __\-style__ file

    This option can be used if and only if the selected *format* provides an
    engine parameter named "meta"\. When specified it will generate a piece of
    HTML code declaring the *file* as the stylesheet for the generated
    document and assign that to the parameter\. The HTML engine will insert this
    inot the document, just after the tag __<head>__\.

    When processing an input directory the stylesheet file is copied into the
    output directory and the generated HTML will refer to the copy, to make the
    result more self\-contained\. When processing an input file we have no
    location to copy the stylesheet to and so just reference it as specified\.

    When used multiple times only the last definition is relevant\.

  - __\-toc__ path

    This option specifies a doctoc file to use for the table of contents instead
    of generating our own\.

    When used multiple times only the last definition is relevant\.

  - __\-pre\+toc__ label path&#124;text

  - __\-post\+toc__ label path&#124;text

    This option specifies additional doctoc files \(or texts\) to use in the
    navigation bar\.

    Positioning and handling of multiple uses is like for options
    __\-prenav__ and __\-postnav__, see below\.

  - __\-nav__ label url

  - __\-prenav__ label url

    Use this option to specify a navigation button with *label* to display and
    the *url* to link to\. This option can be used if and only if the selected
    *format* provides an engine parameter named "header"\. The HTML generated
    for this is appended to whatever data we got from option __\-header__
    before it is inserted into the generated documents\.

    When used multiple times all definitions are collected and a navigation bar
    is created, with the first definition shown at the left edge and the last
    definition to the right\.

    The url can be relative\. In that case it is assumed to be relative to the
    main files \(TOC and Keyword index\), and will be transformed for all others
    to still link properly\.

  - __\-postnav__ label url

    Use this option to specify a navigation button with *label* to display and
    the *url* to link to\. This option can be used if and only if the selected
    *format* provides an engine parameter named "header"\. The HTML generated
    for this is appended to whatever data we got from option __\-header__
    before it is inserted into the generated documents\.

    When used multiple times all definitions are collected and a navigation bar
    is created, with the last definition shown at the right edge and the first
    definition to the left\.

    The url can be relative\. In that case it is assumed to be relative to the
    main files \(TOC and Keyword index\), and will be transformed for all others
    to still link properly\.

## <a name='subsection4'></a>FORMATS

At first the *format* argument will be treated as a path to a tcl file
containing the code for the requested formatting engine\. The argument will be
treated as the name of one of the predefined formats listed below if and only if
the path does not exist\.

*Note a limitation*: If treating the format as path to the tcl script
implementing the engine was sucessful, then this script has to implement not
only the engine API for doctools, i\.e\. *doctools\_api*, but for *doctoc\_api*
and *docidx\_api* as well\. Otherwise the generation of a table of contents and
of a keyword index will fail\.

List of predefined formats, i\.e\. as provided by the package
__[doctools](\.\./modules/doctools/doctools\.md)__:

  - __nroff__

    The processor generates \*roff output, the standard format for unix manpages\.

  - __html__

    The processor generates HTML output, for usage in and display by web
    browsers\. This engine is currently the only one providing the various engine
    parameters required for the additional customaization of the output\.

  - __tmml__

    The processor generates TMML output, the Tcl Manpage Markup Language, a
    derivative of XML\.

  - __latex__

    The processor generates LaTeX output\.

  - __wiki__

    The processor generates Wiki markup as understood by __wikit__\.

  - __list__

    The processor extracts the information provided by __manpage\_begin__\.
    This format is used internally to extract the meta data from which both
    table of contents and keyword index are derived from\.

  - __null__

    The processor does not generate any output\. This is equivalent to
    __validate__\.

## <a name='subsection5'></a>DIRECTORY STRUCTURES

In this section we describe the directory structures generated by the
application under *output* when processing all documents in an
*inputdirectory*\. In other words, this is only relevant to the use cases \[2\]
and \[3\]\.


  - \[2\]

    The following directory structure is created when processing a single set of
    input documents\. The file extension used is for output in HTML, but that is
    not relevant to the structure and was just used to have proper file names\.

        output/
            toc\.html
            index\.html
            files/
                path/to/FOO\.html

    The last line in the example shows the document generated for a file FOO
    located at

        inputdirectory/path/to/FOO

  - \[3\]

    When merging many packages into a unified set of documents the generated
    directory structure is a bit deeper:

        output
            \.toc
            \.idx
            \.tocdoc
            \.idxdoc
            \.xrf
            toc\.html
            index\.html
            FOO1/
                \.\.\.
            FOO2/
                toc\.html
                files/
                    path/to/BAR\.html

    Each of the directories FOO1, \.\.\. contains the documents generated for the
    package FOO1, \.\.\. and follows the structure shown for use case \[2\]\. The only
    exception is that there is no per\-package index\.

    The files "\.toc", "\.idx", and "\.xrf" contain the internal status of the
    whole output and will be read and updated by the next invokation\. Their
    contents will not be documented\. Remove these files when all packages wanted
    for the output have been processed, i\.e\. when the output is complete\.

    The files "\.tocdoc", and "\.idxdoc", are intermediate files in doctoc and
    docidx markup, respectively, containing the main table of contents and
    keyword index for the set of documents before their conversion to the chosen
    output format\. They are left in place, i\.e\. not deleted, to serve as
    demonstrations of doctoc and docidx markup\.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *doctools* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

[docidx introduction](\.\./modules/doctools/docidx\_intro\.md), [doctoc
introduction](\.\./modules/doctools/doctoc\_intro\.md), [doctools
introduction](\.\./modules/doctools/doctools\_intro\.md)

# <a name='keywords'></a>KEYWORDS

[HTML](\.\./\.\./\.\./index\.md\#html), [TMML](\.\./\.\./\.\./index\.md\#tmml),
[conversion](\.\./\.\./\.\./index\.md\#conversion),
[docidx](\.\./\.\./\.\./index\.md\#docidx), [doctoc](\.\./\.\./\.\./index\.md\#doctoc),
[doctools](\.\./\.\./\.\./index\.md\#doctools),
[manpage](\.\./\.\./\.\./index\.md\#manpage),
[markup](\.\./\.\./\.\./index\.md\#markup), [nroff](\.\./\.\./\.\./index\.md\#nroff)

# <a name='category'></a>CATEGORY

Documentation tools

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2004\-2013 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/apps/nns.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
[//000000001]: # (nns - Name service facility)
[//000000002]: # (Generated from file 'nns.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (nns(n) 1.1 tcllib "Name service facility")








# NAME

nns - Name service facility, Commandline Client Application

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

      -  [USE CASES](#subsection1)

      -  [COMMAND LINE](#subsection2)

      -  [OPTIONS](#subsection3)

  -  [Bugs, Ideas, Feedback](#section2)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__nns__ __bind__ ?__-host__ *host*? ?__-port__ *port*? *name* *data*](#1)  
[__nns__ __search__ ?__-host__ *host*? ?__-port__ *port*? ?__-continuous__? ?*pattern*?](#2)  
[__nns__ __ident__ ?__-host__ *host*? ?__-port__ *port*?](#3)  
[__nns__ __who__](#4)  

# <a name='description'></a>DESCRIPTION

Please read *[Name service facility, introduction](../modules/nns/nns_intro.md)*
first.

The application described by this document, __nns__, is a simple command line
client for the nano name service facility provided by the Tcllib packages
__[nameserv](../modules/nns/nns_client.md)__, and
__[nameserv::server](../modules/nns/nns_server.md)__. Beyond that the
application's sources also serve as an example of how to use the client package
__[nameserv](../modules/nns/nns_client.md)__. All abilities of a client are
covered, from configuration to registration of names to searching.

This name service facility has nothing to do with the Internet's *Domain Name
System*, otherwise known as *[DNS](../../../index.md#dns)*. If the reader is
looking for a package dealing with that please see either of the packages
__[dns](../modules/dns/tcllib_dns.md)__ and __resolv__, both found in Tcllib
too.

## <a name='subsection1'></a>USE CASES

__nns__ was written with the following two main use cases in mind.

  1. Registration of a name/data pair in the name service.

  1. Searching the name service for entries matching a glob pattern.

Beyond the above we also want to be able to identify the client, and get
information about the name service.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__nns__ __bind__ ?__-host__ *host*? ?__-port__ *port*? *name* *data*

    This form registers the *name*/*data* pair in the specified name service. In
    this form the command will *not* exit to keep the registration alive. The
    user has to kill it explicitly, either by sending a signal, or through the
    job-control facilities of the shell in use. It will especially survive the
    loss of the connection to the name service and reestablish the *name*/*data*
    pair when the connection is restored.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3).

  - <a name='2'></a>__nns__ __search__ ?__-host__ *host*? ?__-port__ *port*? ?__-continuous__? ?*pattern*?

    This form searches the specified name service for entries matching the
    glob-*pattern* and prints them to stdout, with each entry on its own line.
    If no pattern is specified it defaults to __*__, matching everything.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3).

    If the option __-continuous__ is specified the client will not exit after
    performing the search, but start to continuously monitor the service for
    changes to the set of matching entries, appropriately updating the display
    as changes arrive. In that form it will especially also survive the loss of
    the connection to the name service and reestablish the search when the
    connection is restored.

  - <a name='3'></a>__nns__ __ident__ ?__-host__ *host*? ?__-port__ *port*?

    This form asks the specified name service for the version and features of
    the name service protocol it supports and prints the results to stdout.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3).

  - <a name='4'></a>__nns__ __who__

    This form prints name, version, and protocol version of the application to
    stdout.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application

  - __-host__ name|ipaddress

    If this option is not specified it defaults to __localhost__. It specifies
    the name or ip-address of the host the name service to talk to is running
    on.

  - __-port__ number

    If this option is not specified it defaults to __38573__. It specifies the
    TCP port the name service to talk to is listening on for requests.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *nameserv* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

[nameserv(n)](../modules/nns/nns_client.md),
[nameserv::common(n)](../modules/nns/nns_common.md)

# <a name='keywords'></a>KEYWORDS

[application](../../../index.md#application),
[client](../../../index.md#client), [name
service](../../../index.md#name_service)

# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2007-2008 Andreas Kupries <andreas[email protected].net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|



|
|
|




|
|

|
|
|
|

|
|


|
|
|
|



|

|

|


|



|

|
|
|
|
|
|


|

|


|
|


|

|
|
|
|
|
|

|


|


|




|





|

|
|
|

|

|
|




|
|
|

|
|

|
|
|
|

|

|
|



|
|
|







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
[//000000001]: # (nns \- Name service facility)
[//000000002]: # (Generated from file 'nns\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (nns\(n\) 1\.1 tcllib "Name service facility")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

nns \- Name service facility, Commandline Client Application

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

      - [USE CASES](#subsection1)

      - [COMMAND LINE](#subsection2)

      - [OPTIONS](#subsection3)

  - [Bugs, Ideas, Feedback](#section2)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__nns__ __bind__ ?__\-host__ *host*? ?__\-port__ *port*? *name* *data*](#1)  
[__nns__ __search__ ?__\-host__ *host*? ?__\-port__ *port*? ?__\-continuous__? ?*pattern*?](#2)  
[__nns__ __ident__ ?__\-host__ *host*? ?__\-port__ *port*?](#3)  
[__nns__ __who__](#4)  

# <a name='description'></a>DESCRIPTION

Please read *[Name service facility,
introduction](\.\./modules/nns/nns\_intro\.md)* first\.

The application described by this document, __nns__, is a simple command
line client for the nano name service facility provided by the Tcllib packages
__[nameserv](\.\./modules/nns/nns\_client\.md)__, and
__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\. Beyond that the
application's sources also serve as an example of how to use the client package
__[nameserv](\.\./modules/nns/nns\_client\.md)__\. All abilities of a client
are covered, from configuration to registration of names to searching\.

This name service facility has nothing to do with the Internet's *Domain Name
System*, otherwise known as *[DNS](\.\./\.\./\.\./index\.md\#dns)*\. If the reader
is looking for a package dealing with that please see either of the packages
__[dns](\.\./modules/dns/tcllib\_dns\.md)__ and __resolv__, both found
in Tcllib too\.

## <a name='subsection1'></a>USE CASES

__nns__ was written with the following two main use cases in mind\.

  1. Registration of a name/data pair in the name service\.

  1. Searching the name service for entries matching a glob pattern\.

Beyond the above we also want to be able to identify the client, and get
information about the name service\.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__nns__ __bind__ ?__\-host__ *host*? ?__\-port__ *port*? *name* *data*

    This form registers the *name*/*data* pair in the specified name
    service\. In this form the command will *not* exit to keep the registration
    alive\. The user has to kill it explicitly, either by sending a signal, or
    through the job\-control facilities of the shell in use\. It will especially
    survive the loss of the connection to the name service and reestablish the
    *name*/*data* pair when the connection is restored\.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3)\.

  - <a name='2'></a>__nns__ __search__ ?__\-host__ *host*? ?__\-port__ *port*? ?__\-continuous__? ?*pattern*?

    This form searches the specified name service for entries matching the
    glob\-*pattern* and prints them to stdout, with each entry on its own line\.
    If no pattern is specified it defaults to __\*__, matching everything\.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3)\.

    If the option __\-continuous__ is specified the client will not exit
    after performing the search, but start to continuously monitor the service
    for changes to the set of matching entries, appropriately updating the
    display as changes arrive\. In that form it will especially also survive the
    loss of the connection to the name service and reestablish the search when
    the connection is restored\.

  - <a name='3'></a>__nns__ __ident__ ?__\-host__ *host*? ?__\-port__ *port*?

    This form asks the specified name service for the version and features of
    the name service protocol it supports and prints the results to stdout\.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3)\.

  - <a name='4'></a>__nns__ __who__

    This form prints name, version, and protocol version of the application to
    stdout\.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application

  - __\-host__ name&#124;ipaddress

    If this option is not specified it defaults to __localhost__\. It
    specifies the name or ip\-address of the host the name service to talk to is
    running on\.

  - __\-port__ number

    If this option is not specified it defaults to __38573__\. It specifies
    the TCP port the name service to talk to is listening on for requests\.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *nameserv* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

[nameserv\(n\)](\.\./modules/nns/nns\_client\.md),
[nameserv::common\(n\)](\.\./modules/nns/nns\_common\.md)

# <a name='keywords'></a>KEYWORDS

[application](\.\./\.\./\.\./index\.md\#application),
[client](\.\./\.\./\.\./index\.md\#client), [name
service](\.\./\.\./\.\./index\.md\#name\_service)

# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/apps/nnsd.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

114
115
116
117
118
119
120
121
[//000000001]: # (nnsd - Name service facility)
[//000000002]: # (Generated from file 'nnsd.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (nnsd(n) 1.0.1 tcllib "Name service facility")








# NAME

nnsd - Name service facility, Commandline Server Application

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

      -  [USE CASES](#subsection1)

      -  [COMMAND LINE](#subsection2)

      -  [OPTIONS](#subsection3)

  -  [Bugs, Ideas, Feedback](#section2)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__nnsd__ ?__-localonly__ *flag*? ?__-port__ *port*?](#1)  

# <a name='description'></a>DESCRIPTION

Please read *[Name service facility, introduction](../modules/nns/nns_intro.md)*
first.

The application described by this document, __[nns](nns.md)__, is a simple
command line server for the nano name service facility provided by the Tcllib
packages __[nameserv](../modules/nns/nns_client.md)__, and
__[nameserv::server](../modules/nns/nns_server.md)__. Beyond that the
application's sources also serve as an example of how to use the server package
__[nameserv::server](../modules/nns/nns_server.md)__.

This name service facility has nothing to do with the Internet's *Domain Name
System*, otherwise known as *[DNS](../../../index.md#dns)*. If the reader is
looking for a package dealing with that please see either of the packages
__[dns](../modules/dns/tcllib_dns.md)__ and __resolv__, both found in Tcllib
too.

## <a name='subsection1'></a>USE CASES

__nnsd__ was written with the following main use case in mind.

  1. Run a nano name service on some host.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__nnsd__ ?__-localonly__ *flag*? ?__-port__ *port*?

    The command configures a server per the specified options and starts it. The
    command will not exit on its own, as it keeps the name service database
    wholly in memory. The user has to kill it explicitly, either by sending a a
    signal, or through the job-control facilities of the shell in use.

    The options to configure the name service are explained in section
    [OPTIONS](#subsection3).

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application

  - __-localonly__ bool

    If this option is not specified it defaults to __true__, i.e. acceptance of
    only local connections. The server will accept remote connections, i.e.
    connections from other hosts, if and only if this option is configured to
    __false__.

  - __-port__ number

    If this option is not specified it defaults to __38573__. It specifies the
    TCP port the server has to listen on for requests.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *nameserv* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

[nameserv::common(n)](../modules/nns/nns_common.md),
[nameserv::server(n)](../modules/nns/nns_server.md)

# <a name='keywords'></a>KEYWORDS

[application](../../../index.md#application), [name
service](../../../index.md#name_service), [server](../../../index.md#server)


# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2007-2008 Andreas Kupries <andreas[email protected].net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|



|



|
|

|
|
|
|

|


|
|
|
|



|

|



|

|

|
|


|





|

|
|

|

|

|
|




|
|
|

|
|

|
|
|
|

|

|
|



|
|
>







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
[//000000001]: # (nnsd \- Name service facility)
[//000000002]: # (Generated from file 'nnsd\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (nnsd\(n\) 1\.0\.1 tcllib "Name service facility")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

nnsd \- Name service facility, Commandline Server Application

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

      - [USE CASES](#subsection1)

      - [COMMAND LINE](#subsection2)

      - [OPTIONS](#subsection3)

  - [Bugs, Ideas, Feedback](#section2)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__nnsd__ ?__\-localonly__ *flag*? ?__\-port__ *port*?](#1)  

# <a name='description'></a>DESCRIPTION

Please read *[Name service facility,
introduction](\.\./modules/nns/nns\_intro\.md)* first\.

The application described by this document, __[nns](nns\.md)__, is a
simple command line server for the nano name service facility provided by the
Tcllib packages __[nameserv](\.\./modules/nns/nns\_client\.md)__, and
__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\. Beyond that the
application's sources also serve as an example of how to use the server package
__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\.

This name service facility has nothing to do with the Internet's *Domain Name
System*, otherwise known as *[DNS](\.\./\.\./\.\./index\.md\#dns)*\. If the reader
is looking for a package dealing with that please see either of the packages
__[dns](\.\./modules/dns/tcllib\_dns\.md)__ and __resolv__, both found
in Tcllib too\.

## <a name='subsection1'></a>USE CASES

__nnsd__ was written with the following main use case in mind\.

  1. Run a nano name service on some host\.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__nnsd__ ?__\-localonly__ *flag*? ?__\-port__ *port*?

    The command configures a server per the specified options and starts it\. The
    command will not exit on its own, as it keeps the name service database
    wholly in memory\. The user has to kill it explicitly, either by sending a a
    signal, or through the job\-control facilities of the shell in use\.

    The options to configure the name service are explained in section
    [OPTIONS](#subsection3)\.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application

  - __\-localonly__ bool

    If this option is not specified it defaults to __true__, i\.e\. acceptance
    of only local connections\. The server will accept remote connections, i\.e\.
    connections from other hosts, if and only if this option is configured to
    __false__\.

  - __\-port__ number

    If this option is not specified it defaults to __38573__\. It specifies
    the TCP port the server has to listen on for requests\.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *nameserv* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

[nameserv::common\(n\)](\.\./modules/nns/nns\_common\.md),
[nameserv::server\(n\)](\.\./modules/nns/nns\_server\.md)

# <a name='keywords'></a>KEYWORDS

[application](\.\./\.\./\.\./index\.md\#application), [name
service](\.\./\.\./\.\./index\.md\#name\_service),
[server](\.\./\.\./\.\./index\.md\#server)

# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2007\-2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/apps/nnslog.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
[//000000001]: # (nnslog - Name service facility)
[//000000002]: # (Generated from file 'nnslog.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (nnslog(n) 1.0 tcllib "Name service facility")








# NAME

nnslog - Name service facility, Commandline Logging Client Application

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

      -  [USE CASES](#subsection1)

      -  [COMMAND LINE](#subsection2)

      -  [OPTIONS](#subsection3)

  -  [Bugs, Ideas, Feedback](#section2)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__nnslog__ ?__-host__ *host*? ?__-port__ *port*?](#1)  

# <a name='description'></a>DESCRIPTION

Please read *[Name service facility, introduction](../modules/nns/nns_intro.md)*
first.

The application described by this document, __nnslog__, is a simple command line
client for the nano name service facility provided by the Tcllib packages
__[nameserv](../modules/nns/nns_client.md)__, and
__[nameserv::server](../modules/nns/nns_server.md)__.

It essentially implements "__[nns](nns.md)__ search -continuous *", but uses a
different output formatting. Instead of continuously showing the current
contents of the server in the terminal it simply logs all received add/remove
events to __stdout__.

This name service facility has nothing to do with the Internet's *Domain Name
System*, otherwise known as *[DNS](../../../index.md#dns)*. If the reader is
looking for a package dealing with that please see either of the packages
__[dns](../modules/dns/tcllib_dns.md)__ and __resolv__, both found in Tcllib
too.

## <a name='subsection1'></a>USE CASES

__nnslog__ was written with the following main use case in mind.

  1. Monitoring the name service for all changes and logging them in a text
     terminal.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__nnslog__ ?__-host__ *host*? ?__-port__ *port*?

    The command connects to the specified name service, sets up a search for all
    changes and then prints all received events to stdout, with each events on
    its own line. The command will not exit until it is explicitly terminated by
    the user. It will especially survive the loss of the connection to the name
    service and reestablish the search and log when the connection is restored.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3).

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application

  - __-host__ name|ipaddress

    If this option is not specified it defaults to __localhost__. It specifies
    the name or ip-address of the host the name service to talk to is running
    on.

  - __-port__ number

    If this option is not specified it defaults to __38573__. It specifies the
    TCP port the name service to talk to is listening on for requests.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *nameserv* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

[nameserv(n)](../modules/nns/nns_client.md),
[nameserv::common(n)](../modules/nns/nns_common.md)

# <a name='keywords'></a>KEYWORDS

[application](../../../index.md#application),
[client](../../../index.md#client), [name
service](../../../index.md#name_service)

# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2008 Andreas Kupries <[email protected].sourceforge.net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|



|



|
|

|
|
|
|

|
|

|


|
|
|
|



|


|



|



|
|
|


|





|

|
|
|

|

|
|




|
|
|

|
|

|
|
|
|

|

|
|



|
|
|







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
[//000000001]: # (nnslog \- Name service facility)
[//000000002]: # (Generated from file 'nnslog\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (nnslog\(n\) 1\.0 tcllib "Name service facility")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

nnslog \- Name service facility, Commandline Logging Client Application

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

      - [USE CASES](#subsection1)

      - [COMMAND LINE](#subsection2)

      - [OPTIONS](#subsection3)

  - [Bugs, Ideas, Feedback](#section2)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__nnslog__ ?__\-host__ *host*? ?__\-port__ *port*?](#1)  

# <a name='description'></a>DESCRIPTION

Please read *[Name service facility,
introduction](\.\./modules/nns/nns\_intro\.md)* first\.

The application described by this document, __nnslog__, is a simple command
line client for the nano name service facility provided by the Tcllib packages
__[nameserv](\.\./modules/nns/nns\_client\.md)__, and
__[nameserv::server](\.\./modules/nns/nns\_server\.md)__\.

It essentially implements "__[nns](nns\.md)__ search \-continuous \*", but
uses a different output formatting\. Instead of continuously showing the current
contents of the server in the terminal it simply logs all received add/remove
events to __stdout__\.

This name service facility has nothing to do with the Internet's *Domain Name
System*, otherwise known as *[DNS](\.\./\.\./\.\./index\.md\#dns)*\. If the reader
is looking for a package dealing with that please see either of the packages
__[dns](\.\./modules/dns/tcllib\_dns\.md)__ and __resolv__, both found
in Tcllib too\.

## <a name='subsection1'></a>USE CASES

__nnslog__ was written with the following main use case in mind\.

  1. Monitoring the name service for all changes and logging them in a text
     terminal\.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__nnslog__ ?__\-host__ *host*? ?__\-port__ *port*?

    The command connects to the specified name service, sets up a search for all
    changes and then prints all received events to stdout, with each events on
    its own line\. The command will not exit until it is explicitly terminated by
    the user\. It will especially survive the loss of the connection to the name
    service and reestablish the search and log when the connection is restored\.

    The options to specify the name service will be explained later, in section
    [OPTIONS](#subsection3)\.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application

  - __\-host__ name&#124;ipaddress

    If this option is not specified it defaults to __localhost__\. It
    specifies the name or ip\-address of the host the name service to talk to is
    running on\.

  - __\-port__ number

    If this option is not specified it defaults to __38573__\. It specifies
    the TCP port the name service to talk to is listening on for requests\.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *nameserv* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

[nameserv\(n\)](\.\./modules/nns/nns\_client\.md),
[nameserv::common\(n\)](\.\./modules/nns/nns\_common\.md)

# <a name='keywords'></a>KEYWORDS

[application](\.\./\.\./\.\./index\.md\#application),
[client](\.\./\.\./\.\./index\.md\#client), [name
service](\.\./\.\./\.\./index\.md\#name\_service)

# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2008 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/apps/page.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244

245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296

297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356

357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393

394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
[//000000001]: # (page - Development Tools)
[//000000002]: # (Generated from file 'page.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (page(n) 1.0 tcllib "Development Tools")








# NAME

page - Parser Generator

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

      -  [COMMAND LINE](#subsection1)

      -  [OPERATION](#subsection2)

      -  [OPTIONS](#subsection3)

      -  [PLUGINS](#subsection4)

      -  [PLUGIN LOCATIONS](#subsection5)

  -  [Bugs, Ideas, Feedback](#section2)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__page__ ?*options*...? ?*input* ?*output*??](#1)  

# <a name='description'></a>DESCRIPTION

The application described by this document, __page__, is actually not just a
parser generator, as the name implies, but a generic tool for the execution of
arbitrary transformations on texts.

Its genericity comes through the use of *plugins* for reading, transforming, and
writing data, and the predefined set of plugins provided by Tcllib is for the
generation of memoizing recursive descent parsers (aka *packrat parsers*) from
grammar specifications (*Parsing Expression Grammars*).

__page__ is written on top of the package __page::pluginmgr__, wrapping its
functionality into a command line based application. All the other __page::*__
packages are plugin and/or supporting packages for the generation of parsers.
The parsers themselves are based on the packages
__[grammar::peg](../modules/grammar_peg/peg.md)__,
__[grammar::peg::interp](../modules/grammar_peg/peg_interp.md)__, and
__grammar::mengine__.

## <a name='subsection1'></a>COMMAND LINE

  - <a name='1'></a>__page__ ?*options*...? ?*input* ?*output*??

    This is general form for calling __page__. The application will read the
    contents of the file *input*, process them under the control of the
    specified *options*, and then write the result to the file *output*.

    If *input* is the string __-__ the data to process will be read from
    __stdin__ instead of a file. Analogously the result will be written to
    __stdout__ instead of a file if *output* is the string __-__. A missing
    output or input specification causes the application to assume __-__.


    The detailed specifications of the recognized *options* are provided in
    section [OPTIONS](#subsection3).

      * path *input* (in)

        This argument specifies the path to the file to be processed by the
        application, or __-__. The last value causes the application to read the
        text from __stdin__. Otherwise it has to exist, and be readable. If the
        argument is missing __-__ is assumed.

      * path *output* (in)

        This argument specifies where to write the generated text. It can be the
        path to a file, or __-__. The last value causes the application to write
        the generated documented to __stdout__.

        If the file *output* does not exist then [file dirname $output] has to
        exist and must be a writable directory, as the application will create
        the fileto write to.

        If the argument is missing __-__ is assumed.

## <a name='subsection2'></a>OPERATION

... reading ... transforming ... writing - plugins - pipeline ...

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application.
Options are always processed in order. I.e. of both __--help__ and __--version__
are specified the option encountered first has precedence.

Unknown options specified before any of the options __-rd__, __-wr__, or __-tr__
will cause processing to abort with an error. Unknown options coming in between
these options, or after the last of them are assumed to always take a single
argument and are associated with the last plugin option coming before them. They
will be checked after all the relevant plugins, and thus the options they
understand, are known. I.e. such unknown options cause error if and only if the
plugin option they are associated with does not understand them, and was not
superceded by a plugin option coming after.

Default options are used if and only if the command line did not contain any
options at all. They will set the application up as a PEG-based parser
generator. The exact list of options is

    -c peg

And now the recognized options and their arguments, if they have any:

  - __--help__

  - __-h__

  - __-?__

    When one of these options is found on the command line all arguments coming
    before or after are ignored. The application will print a short description
    of the recognized options and exit.

  - __--version__

  - __-V__

    When one of these options is found on the command line all arguments coming
    before or after are ignored. The application will print its own revision and
    exit.

  - __-P__

    This option signals the application to activate visual feedback while
    reading the input.

  - __-T__

    This option signals the application to collect statistics while reading the
    input and to print them after reading has completed, before processing
    started.

  - __-D__

    This option signals the application to activate logging in the Safe base,
    for the debugging of problems with plugins.

  - __-r__ parser

  - __-rd__ parser

  - __--reader__ parser

    These options specify the plugin the application has to use for reading the
    *input*. If the options are used multiple times the last one will be used.

  - __-w__ generator

  - __-wr__ generator

  - __--writer__ generator

    These options specify the plugin the application has to use for generating
    and writing the final *output*. If the options are used multiple times the
    last one will be used.

  - __-t__ process

  - __-tr__ process

  - __--transform__ process

    These options specify a plugin to run on the input. In contrast to readers
    and writers each use will *not* supersede previous uses, but add each chosen
    plugin to a list of transformations, either at the front, or the end, per
    the last seen use of either option __-p__ or __-a__. The initial default is
    to append the new transformations.

  - __-a__

  - __--append__

    These options signal the application that all following transformations
    should be added at the end of the list of transformations.

  - __-p__

  - __--prepend__

    These options signal the application that all following transformations
    should be added at the beginning of the list of transformations.

  - __--reset__

    This option signals the application to clear the list of transformations.
    This is necessary to wipe out the default transformations used.

  - __-c__ file

  - __--configuration__ file

    This option causes the application to load a configuration file and/or
    plugin. This is a plugin which in essence provides a pre-defined set of
    commandline options. They are processed exactly as if they have been
    specified in place of the option and its arguments. This means that unknown
    options found at the beginning of the configuration file are associated with
    the last plugin, even if that plugin was specified before the configuration
    file itself. Conversely, unknown options coming after the configuration file
    can be associated with a plugin specified in the file.

    If the argument is a file which cannot be loaded as a plugin the application
    will assume that its contents are a list of options and their arguments,
    separated by space, tabs, and newlines. Options and argumentes containing
    spaces can be quoted via double-quotes (") and quotes ('). The quote
    character can be specified within in a quoted string by doubling it.
    Newlines in a quoted string are accepted as is.

## <a name='subsection4'></a>PLUGINS

__page__ makes use of four different types of plugins, namely: readers, writers,
transformations, and configurations. Here we provide only a basic introduction
on how to use them from __page__. The exact APIs provided to and expected from
the plugins can be found in the documentation for __page::pluginmgr__, for those
who wish to write their own plugins.

Plugins are specified as arguments to the options __-r__, __-w__, __-t__,
__-c__, and their equivalent longer forms. See the section
[OPTIONS](#subsection3) for reference.

Each such argument will be first treated as the name of a file and this file is
loaded as the plugin. If however there is no file with that name, then it will
be translated into the name of a package, and this package is then loaded. For
each type of plugins the package management searches not only the regular paths,
but a set application- and type-specific paths as well. Please see the section
[PLUGIN LOCATIONS](#subsection5) for a listing of all paths and their sources.


  - __-c__ *name*

    Configurations. The name of the package for the plugin *name* is
    "page::config::*name*".

    We have one predefined plugin:

      * *peg*

        It sets the application up as a parser generator accepting parsing
        expression grammars and writing a packrat parser in Tcl. The actual
        arguments it specifies are:

    --reset
    --append
    --reader    peg
    --transform reach
    --transform use
    --writer    me

  - __-r__ *name*

    Readers. The name of the package for the plugin *name* is
    "page::reader::*name*".

    We have five predefined plugins:

      * *peg*

        Interprets the input as a parsing expression grammar
        (*[PEG](../../../index.md#peg)*) and generates a tree representation for
        it. Both the syntax of PEGs and the structure of the tree representation
        are explained in their own manpages.

      * *hb*

        Interprets the input as Tcl code as generated by the writer plugin *hb*
        and generates its tree representation.

      * *ser*

        Interprets the input as the serialization of a PEG, as generated by the
        writer plugin *ser*, using the package
        __[grammar::peg](../modules/grammar_peg/peg.md)__.

      * *lemon*

        Interprets the input as a grammar specification as understood by Richard
        Hipp's *[LEMON](../../../index.md#lemon)* parser generator and generates
        a tree representation for it. Both the input syntax and the structure of
        the tree representation are explained in their own manpages.


      * *treeser*

        Interprets the input as the serialization of a
        __[struct::tree](../modules/struct/struct_tree.md)__. It is validated as
        such, but nothing else. It is *not* assumed to be the tree
        representation of a grammar.

  - __-w__ *name*

    Writers. The name of the package for the plugin *name* is
    "page::writer::*name*".

    We have eight predefined plugins:

      * *identity*

        Simply writes the incoming data as it is, without making any changes.
        This is good for inspecting the raw result of a reader or
        transformation.

      * *null*

        Generates nothing, and ignores the incoming data structure.

      * *tree*

        Assumes that the incoming data structure is a
        __[struct::tree](../modules/struct/struct_tree.md)__ and generates an
        indented textual representation of all nodes, their parental
        relationships, and their attribute information.

      * *peg*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](../../../index.md#peg)* or other other grammar and writes it out
        as a PEG. The result is nicely formatted and partially simplified
        (strings as sequences of characters). A pretty printer in essence, but
        can also be used to obtain a canonical representation of the input
        grammar.

      * *tpc*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](../../../index.md#peg)* or other other grammar and writes out Tcl
        code defining a package which defines a
        __[grammar::peg](../modules/grammar_peg/peg.md)__ object containing the
        grammar when it is loaded into an interpreter.

      * *hb*

        This is like the writer plugin *tpc*, but it writes only the statements
        which define stat expression and grammar rules. The code making the
        result a package is left out.

      * *ser*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](../../../index.md#peg)* or other other grammar, transforms it
        internally into a __[grammar::peg](../modules/grammar_peg/peg.md)__

        object and writes out its serialization.

      * *me*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](../../../index.md#peg)* or other other grammar and writes out Tcl
        code defining a package which implements a memoizing recursive descent
        parser based on the match engine (ME) provided by the package
        __grammar::mengine__.

  - __-t__ *name*

    Transformers. The name of the package for the plugin *name* is
    "page::transform::*name*".

    We have two predefined plugins:

      * *reach*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](../../../index.md#peg)* or other other grammar. It determines
        which nonterminal symbols and rules are reachable from
        start-symbol/expression. All nonterminal symbols which were not reached
        are removed.

      * *use*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](../../../index.md#peg)* or other other grammar. It determines
        which nonterminal symbols and rules are able to generate a *finite*
        sequences of terminal symbols (in the sense for a Context Free Grammar).
        All nonterminal symbols which were not deemed useful in this sense are
        removed.

## <a name='subsection5'></a>PLUGIN LOCATIONS

The application-specific paths searched by __page__ either are, or come from:


  1. The directory "~/.page/plugin"

  1. The environment variable *PAGE_PLUGINS*

  1. The registry entry *HKEY_LOCAL_MACHINE\SOFTWARE\PAGE\PLUGINS*

  1. The registry entry *HKEY_CURRENT_USER\SOFTWARE\PAGE\PLUGINS*

The type-specific paths searched by __page__ either are, or come from:

  1. The directory "~/.page/plugin/<TYPE>"

  1. The environment variable *PAGE_<TYPE>_PLUGINS*

  1. The registry entry *HKEY_LOCAL_MACHINE\SOFTWARE\PAGE\<TYPE>\PLUGINS*

  1. The registry entry *HKEY_CURRENT_USER\SOFTWARE\PAGE\<TYPE>\PLUGINS*

Where the placeholder *<TYPE>* is always one of the values below, properly
capitalized.

  1. reader

  1. writer

  1. transform

  1. config

The registry entries are specific to the Windows(tm) platform, all other
platforms will ignore them.

The contents of both environment variables and registry entries are interpreted
as a list of paths, with the elements separated by either colon (Unix), or
semicolon (Windows).

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *page* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

page::pluginmgr

# <a name='keywords'></a>KEYWORDS

[parser generator](../../../index.md#parser_generator), [text
processing](../../../index.md#text_processing)

# <a name='category'></a>CATEGORY

Page Parser Generator

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2005 Andreas Kupries <[email protected].sourceforge.net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|

|

|



|





|

|
|
|
|

|
|
|
|
|
|
|



|

|

|

|
|
|
|
>


|

|


|
|
|

|

|
|
|

|

|

|



|



|
|
|

|
|
|
|
|
|
|
|


|
|

|



|

|

|


|
|

|

|


|
|

|


|

|



|

|


|

|

|

|


|

|

|

|


|
|

|

|

|

|
|
|
|
|

|

|


|

|

|


|

|

|
|

|

|


|
|
|


|
|



|
|
|
|



|
|
|
|
|

|
|
|


|
|

|
|
>

|

|
|






|


|
|
|
|
|
|

|

|
|






|
|
|



|
|





|




|
|
|
>




|
|
|

|

|
|





|

|



|




|
|
|




|
|
|

|




|
|
|
|



|
|
|




|
|
>
|




|
|
|
|

|

|
|






|
|
|
|




|
|
|
|
|



|
>

|

|

|

|

|

|

|

|

|


|









|
|


|
|




|
|
|

|
|

|
|
|
|

|





|
|







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
[//000000001]: # (page \- Development Tools)
[//000000002]: # (Generated from file 'page\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (page\(n\) 1\.0 tcllib "Development Tools")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

page \- Parser Generator

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

      - [COMMAND LINE](#subsection1)

      - [OPERATION](#subsection2)

      - [OPTIONS](#subsection3)

      - [PLUGINS](#subsection4)

      - [PLUGIN LOCATIONS](#subsection5)

  - [Bugs, Ideas, Feedback](#section2)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__page__ ?*options*\.\.\.? ?*input* ?*output*??](#1)  

# <a name='description'></a>DESCRIPTION

The application described by this document, __page__, is actually not just a
parser generator, as the name implies, but a generic tool for the execution of
arbitrary transformations on texts\.

Its genericity comes through the use of *plugins* for reading, transforming,
and writing data, and the predefined set of plugins provided by Tcllib is for
the generation of memoizing recursive descent parsers \(aka *packrat parsers*\)
from grammar specifications \(*Parsing Expression Grammars*\)\.

__page__ is written on top of the package __page::pluginmgr__, wrapping
its functionality into a command line based application\. All the other
__page::\*__ packages are plugin and/or supporting packages for the
generation of parsers\. The parsers themselves are based on the packages
__[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__,
__[grammar::peg::interp](\.\./modules/grammar\_peg/peg\_interp\.md)__, and
__grammar::mengine__\.

## <a name='subsection1'></a>COMMAND LINE

  - <a name='1'></a>__page__ ?*options*\.\.\.? ?*input* ?*output*??

    This is general form for calling __page__\. The application will read the
    contents of the file *input*, process them under the control of the
    specified *options*, and then write the result to the file *output*\.

    If *input* is the string __\-__ the data to process will be read from
    __stdin__ instead of a file\. Analogously the result will be written to
    __stdout__ instead of a file if *output* is the string __\-__\. A
    missing output or input specification causes the application to assume
    __\-__\.

    The detailed specifications of the recognized *options* are provided in
    section [OPTIONS](#subsection3)\.

      * path *input* \(in\)

        This argument specifies the path to the file to be processed by the
        application, or __\-__\. The last value causes the application to read
        the text from __stdin__\. Otherwise it has to exist, and be readable\.
        If the argument is missing __\-__ is assumed\.

      * path *output* \(in\)

        This argument specifies where to write the generated text\. It can be the
        path to a file, or __\-__\. The last value causes the application to
        write the generated documented to __stdout__\.

        If the file *output* does not exist then \[file dirname $output\] has to
        exist and must be a writable directory, as the application will create
        the fileto write to\.

        If the argument is missing __\-__ is assumed\.

## <a name='subsection2'></a>OPERATION

\.\.\. reading \.\.\. transforming \.\.\. writing \- plugins \- pipeline \.\.\.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application\.
Options are always processed in order\. I\.e\. of both __\-\-help__ and
__\-\-version__ are specified the option encountered first has precedence\.

Unknown options specified before any of the options __\-rd__, __\-wr__, or
__\-tr__ will cause processing to abort with an error\. Unknown options coming
in between these options, or after the last of them are assumed to always take a
single argument and are associated with the last plugin option coming before
them\. They will be checked after all the relevant plugins, and thus the options
they understand, are known\. I\.e\. such unknown options cause error if and only if
the plugin option they are associated with does not understand them, and was not
superceded by a plugin option coming after\.

Default options are used if and only if the command line did not contain any
options at all\. They will set the application up as a PEG\-based parser
generator\. The exact list of options is

    \-c peg

And now the recognized options and their arguments, if they have any:

  - __\-\-help__

  - __\-h__

  - __\-?__

    When one of these options is found on the command line all arguments coming
    before or after are ignored\. The application will print a short description
    of the recognized options and exit\.

  - __\-\-version__

  - __\-V__

    When one of these options is found on the command line all arguments coming
    before or after are ignored\. The application will print its own revision and
    exit\.

  - __\-P__

    This option signals the application to activate visual feedback while
    reading the input\.

  - __\-T__

    This option signals the application to collect statistics while reading the
    input and to print them after reading has completed, before processing
    started\.

  - __\-D__

    This option signals the application to activate logging in the Safe base,
    for the debugging of problems with plugins\.

  - __\-r__ parser

  - __\-rd__ parser

  - __\-\-reader__ parser

    These options specify the plugin the application has to use for reading the
    *input*\. If the options are used multiple times the last one will be used\.

  - __\-w__ generator

  - __\-wr__ generator

  - __\-\-writer__ generator

    These options specify the plugin the application has to use for generating
    and writing the final *output*\. If the options are used multiple times the
    last one will be used\.

  - __\-t__ process

  - __\-tr__ process

  - __\-\-transform__ process

    These options specify a plugin to run on the input\. In contrast to readers
    and writers each use will *not* supersede previous uses, but add each
    chosen plugin to a list of transformations, either at the front, or the end,
    per the last seen use of either option __\-p__ or __\-a__\. The initial
    default is to append the new transformations\.

  - __\-a__

  - __\-\-append__

    These options signal the application that all following transformations
    should be added at the end of the list of transformations\.

  - __\-p__

  - __\-\-prepend__

    These options signal the application that all following transformations
    should be added at the beginning of the list of transformations\.

  - __\-\-reset__

    This option signals the application to clear the list of transformations\.
    This is necessary to wipe out the default transformations used\.

  - __\-c__ file

  - __\-\-configuration__ file

    This option causes the application to load a configuration file and/or
    plugin\. This is a plugin which in essence provides a pre\-defined set of
    commandline options\. They are processed exactly as if they have been
    specified in place of the option and its arguments\. This means that unknown
    options found at the beginning of the configuration file are associated with
    the last plugin, even if that plugin was specified before the configuration
    file itself\. Conversely, unknown options coming after the configuration file
    can be associated with a plugin specified in the file\.

    If the argument is a file which cannot be loaded as a plugin the application
    will assume that its contents are a list of options and their arguments,
    separated by space, tabs, and newlines\. Options and argumentes containing
    spaces can be quoted via double\-quotes \("\) and quotes \('\)\. The quote
    character can be specified within in a quoted string by doubling it\.
    Newlines in a quoted string are accepted as is\.

## <a name='subsection4'></a>PLUGINS

__page__ makes use of four different types of plugins, namely: readers,
writers, transformations, and configurations\. Here we provide only a basic
introduction on how to use them from __page__\. The exact APIs provided to
and expected from the plugins can be found in the documentation for
__page::pluginmgr__, for those who wish to write their own plugins\.

Plugins are specified as arguments to the options __\-r__, __\-w__,
__\-t__, __\-c__, and their equivalent longer forms\. See the section
[OPTIONS](#subsection3) for reference\.

Each such argument will be first treated as the name of a file and this file is
loaded as the plugin\. If however there is no file with that name, then it will
be translated into the name of a package, and this package is then loaded\. For
each type of plugins the package management searches not only the regular paths,
but a set application\- and type\-specific paths as well\. Please see the section
[PLUGIN LOCATIONS](#subsection5) for a listing of all paths and their
sources\.

  - __\-c__ *name*

    Configurations\. The name of the package for the plugin *name* is
    "page::config::*name*"\.

    We have one predefined plugin:

      * *peg*

        It sets the application up as a parser generator accepting parsing
        expression grammars and writing a packrat parser in Tcl\. The actual
        arguments it specifies are:

    \-\-reset
    \-\-append
    \-\-reader    peg
    \-\-transform reach
    \-\-transform use
    \-\-writer    me

  - __\-r__ *name*

    Readers\. The name of the package for the plugin *name* is
    "page::reader::*name*"\.

    We have five predefined plugins:

      * *peg*

        Interprets the input as a parsing expression grammar
        \(*[PEG](\.\./\.\./\.\./index\.md\#peg)*\) and generates a tree
        representation for it\. Both the syntax of PEGs and the structure of the
        tree representation are explained in their own manpages\.

      * *hb*

        Interprets the input as Tcl code as generated by the writer plugin
        *hb* and generates its tree representation\.

      * *ser*

        Interprets the input as the serialization of a PEG, as generated by the
        writer plugin *ser*, using the package
        __[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__\.

      * *lemon*

        Interprets the input as a grammar specification as understood by Richard
        Hipp's *[LEMON](\.\./\.\./\.\./index\.md\#lemon)* parser generator and
        generates a tree representation for it\. Both the input syntax and the
        structure of the tree representation are explained in their own
        manpages\.

      * *treeser*

        Interprets the input as the serialization of a
        __[struct::tree](\.\./modules/struct/struct\_tree\.md)__\. It is
        validated as such, but nothing else\. It is *not* assumed to be the
        tree representation of a grammar\.

  - __\-w__ *name*

    Writers\. The name of the package for the plugin *name* is
    "page::writer::*name*"\.

    We have eight predefined plugins:

      * *identity*

        Simply writes the incoming data as it is, without making any changes\.
        This is good for inspecting the raw result of a reader or
        transformation\.

      * *null*

        Generates nothing, and ignores the incoming data structure\.

      * *tree*

        Assumes that the incoming data structure is a
        __[struct::tree](\.\./modules/struct/struct\_tree\.md)__ and
        generates an indented textual representation of all nodes, their
        parental relationships, and their attribute information\.

      * *peg*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar and writes
        it out as a PEG\. The result is nicely formatted and partially simplified
        \(strings as sequences of characters\)\. A pretty printer in essence, but
        can also be used to obtain a canonical representation of the input
        grammar\.

      * *tpc*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar and writes
        out Tcl code defining a package which defines a
        __[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__ object
        containing the grammar when it is loaded into an interpreter\.

      * *hb*

        This is like the writer plugin *tpc*, but it writes only the
        statements which define stat expression and grammar rules\. The code
        making the result a package is left out\.

      * *ser*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar, transforms
        it internally into a
        __[grammar::peg](\.\./modules/grammar\_peg/peg\.md)__ object and
        writes out its serialization\.

      * *me*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar and writes
        out Tcl code defining a package which implements a memoizing recursive
        descent parser based on the match engine \(ME\) provided by the package
        __grammar::mengine__\.

  - __\-t__ *name*

    Transformers\. The name of the package for the plugin *name* is
    "page::transform::*name*"\.

    We have two predefined plugins:

      * *reach*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar\. It
        determines which nonterminal symbols and rules are reachable from
        start\-symbol/expression\. All nonterminal symbols which were not reached
        are removed\.

      * *use*

        Assumes that the incoming data structure is a tree representation of a
        *[PEG](\.\./\.\./\.\./index\.md\#peg)* or other other grammar\. It
        determines which nonterminal symbols and rules are able to generate a
        *finite* sequences of terminal symbols \(in the sense for a Context
        Free Grammar\)\. All nonterminal symbols which were not deemed useful in
        this sense are removed\.

## <a name='subsection5'></a>PLUGIN LOCATIONS

The application\-specific paths searched by __page__ either are, or come
from:

  1. The directory "~/\.page/plugin"

  1. The environment variable *PAGE\_PLUGINS*

  1. The registry entry *HKEY\_LOCAL\_MACHINE\\SOFTWARE\\PAGE\\PLUGINS*

  1. The registry entry *HKEY\_CURRENT\_USER\\SOFTWARE\\PAGE\\PLUGINS*

The type\-specific paths searched by __page__ either are, or come from:

  1. The directory "~/\.page/plugin/<TYPE>"

  1. The environment variable *PAGE\_<TYPE>\_PLUGINS*

  1. The registry entry *HKEY\_LOCAL\_MACHINE\\SOFTWARE\\PAGE\\<TYPE>\\PLUGINS*

  1. The registry entry *HKEY\_CURRENT\_USER\\SOFTWARE\\PAGE\\<TYPE>\\PLUGINS*

Where the placeholder *<TYPE>* is always one of the values below, properly
capitalized\.

  1. reader

  1. writer

  1. transform

  1. config

The registry entries are specific to the Windows\(tm\) platform, all other
platforms will ignore them\.

The contents of both environment variables and registry entries are interpreted
as a list of paths, with the elements separated by either colon \(Unix\), or
semicolon \(Windows\)\.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *page* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

page::pluginmgr

# <a name='keywords'></a>KEYWORDS

[parser generator](\.\./\.\./\.\./index\.md\#parser\_generator), [text
processing](\.\./\.\./\.\./index\.md\#text\_processing)

# <a name='category'></a>CATEGORY

Page Parser Generator

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/apps/pt.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119

120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255

256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481

482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578

579
580
581
582

583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606

607
608

609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706


707
708
709
710




711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743

744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766

767
768
769
770
771
772
773


774
775
776
777
778
779
780
781
[//000000001]: # (pt - Parser Tools)
[//000000002]: # (Generated from file 'pt.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (pt(n) 1 tcllib "Parser Tools")








# NAME

pt - Parser Tools Application

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

  -  [Command Line](#section2)

  -  [PEG Specification Language](#section3)

  -  [JSON Grammar Exchange](#section4)

  -  [C Parser Embedded In Tcl](#section5)

  -  [C Parser](#section6)

  -  [Snit Parser](#section7)

  -  [TclOO Parser](#section8)

  -  [Grammar Container](#section9)

  -  [Example](#section10)

  -  [Internals](#section11)

  -  [Bugs, Ideas, Feedback](#section12)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

package require Tcl 8.5  

[__pt__ __generate__ *resultformat* ?*options...*? *resultfile* *inputformat* *inputfile*](#1)  

# <a name='description'></a>DESCRIPTION

Are you lost ? Do you have trouble understanding this document ? In that case
please read the overview provided by the *[Introduction to Parser
Tools](../modules/pt/pt_introduction.md)*. This document is the entrypoint to
the whole system the current package is a part of.

This document describes __pt__, the main application of the module, a *[parser
generator](../../../index.md#parser_generator)*. Its intended audience are
people who wish to create a parser for some language of theirs. Should you wish
to modify the application instead, please see the section about the
application's [Internals](#section11) for the basic references.

It resides in the User Application Layer of Parser Tools.

![](../../../image/arch_user_app.png)

# <a name='section2'></a>Command Line

  - <a name='1'></a>__pt__ __generate__ *resultformat* ?*options...*? *resultfile* *inputformat* *inputfile*

    This sub-command of the application reads the parsing expression grammar
    stored in the *inputfile* in the format *inputformat*, converts it to the
    *resultformat* under the direction of the (format-specific) set of options
    specified by the user and stores the result in the *resultfile*.

    The *inputfile* has to exist, while the *resultfile* may be created,
    overwriting any pre-existing content of the file. Any missing directory in
    the path to the *resultfile* will be created as well.

    The exact form of the result for, and the set of options supported by the
    known result-formats, are explained in the upcoming sections of this
    document, with the list below providing an index mapping between format name
    and its associated section. In alphabetical order:

      * __c__

        A *resultformat*. See section [C Parser](#section6).

      * __container__

        A *resultformat*. See section [Grammar Container](#section9).

      * __critcl__

        A *resultformat*. See section [C Parser Embedded In Tcl](#section5).


      * __json__

        A *input*- and *resultformat*. See section [JSON Grammar
        Exchange](#section4).

      * __oo__

        A *resultformat*. See section [TclOO Parser](#section8).

      * __peg__

        A *input*- and *resultformat*. See section [PEG Specification
        Language](#section3).

      * __snit__

        A *resultformat*. See section [Snit Parser](#section7).

Of the seven possible results four are parsers outright (__c__, __critcl__,
__oo__, and __snit__), one (__container__) provides code which can be used in
conjunction with a generic parser (also known as a grammar interpreter), and the

last two (__json__ and __peg__) are doing double-duty as input formats, allowing
the transformation of grammars for exchange, reformatting, and the like.

The created parsers fall into three categories:

![](../../../image/gen_options.png)

  - __Specialized parsers implemented in C__

    The fastest parsers are created when using the result formats __c__ and
    __critcl__. The first returns the raw C code for the parser, while the
    latter wraps it into a Tcl package using *CriTcl*.

    This makes the latter much easier to use than the former. On the other hand,
    the former can be adapted to the users' requirements through a multitude of
    options, allowing for things like usage of the parser outside of a Tcl
    environment, something the __critcl__ format doesn't support. As such the
    __c__ format is meant for more advanced users, or users with special needs.


    A disadvantage of all the parsers in this section is the need to run them
    through a C compiler to make them actually executable. This is not something
    everyone has the necessary tools for. The parsers in the next section are
    for people under such restrictions.

  - __Specialized parsers implemented in Tcl__

    As the parsers in this section are implemented in Tcl they are quite a bit
    slower than anything from the previous section. On the other hand this
    allows them to be used in pure-Tcl environments, or in environments which
    allow only a limited set of binary packages. In the latter case it will be
    advantageous to lobby for the inclusion of the C-based runtime support
    (notes below) into the environment to reduce the impact of Tcl's on the
    speed of these parsers.

    The relevant formats are __snit__ and __oo__. Both place their result into a
    Tcl package containing a __snit::type__, or TclOO
    __[class](../../../index.md#class)__ respectively.

    Of the supporting runtime, which is the package
    __[pt::rde](../modules/pt/pt_rdengine.md)__, the user has to know nothing
    but that it does exist and that the parsers are dependent on it. Knowledge
    of the API exported by the runtime for the parsers' consumption is *not*
    required by the parsers' users.

  - __Interpreted parsing implemented in Tcl__

    The last category, grammar interpretation. This means that an interpreter
    for parsing expression grammars takes the description of the grammar to
    parse input for, and uses it guide the parsing process. This is the slowest
    of the available options, as the interpreter has to continually run through
    the configured grammar, whereas the specialized parsers of the previous
    sections have the relevant knowledge about the grammar baked into them.

    The only places where using interpretation make sense is where the grammar
    for some input may be changed interactively by the user, as the
    interpretation allows for quick turnaround after each change, whereas the
    previous methods require the generation of a whole new parser, which is not
    as fast. On the other hand, wherever the grammar to use is fixed, the
    previous methods are much more advantageous as the time to generate the
    parser is minuscule compared to the time the parser code is in use.

    The relevant result format is __container__. It (quickly) generates grammar
    descriptions (instead of a full parser) which match the API expected by
    ParserTools' grammar interpreter. The latter is provided by the package
    __[pt::peg::interp](../modules/pt/pt_peg_interp.md)__.

All the parsers generated by __critcl__, __snit__, and __oo__, and the grammar
interpreter share a common API for access to the actual parsing functionality,
making them all plug-compatible. It is described in the *[Parser
API](../modules/pt/pt_parser_api.md)* specification document.

# <a name='section3'></a>PEG Specification Language

__peg__, a language for the specification of parsing expression grammars is
meant to be human readable, and writable as well, yet strict enough to allow its
processing by machine. Like any computer language. It was defined to make
writing the specification of a grammar easy, something the other formats found
in the Parser Tools do not lend themselves too.

For either an introduction to or the formal specification of the language,
please go and read the *[PEG Language
Tutorial](../modules/pt/pt_peg_language.md)*.

When used as a result-format this format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-template__ string

    The value of this option is a string into which to put the generated text
    and the values of the other options. The various locations for user-data are
    expected to be specified with the placeholders listed below. The default
    value is "[email protected]@__".

      * [email protected]@__

        To be replaced with the value of the option __-user__.

      * [email protected]@__

        To be replaced with the the constant __PEG__.

      * [email protected]@__

        To be replaced with the value of the option __-file__.

      * [email protected]@__

        To be replaced with the value of the option __-name__.

      * [email protected]@__

        To be replaced with the generated text.

# <a name='section4'></a>JSON Grammar Exchange

The __json__ format for parsing expression grammars was written as a data
exchange format not bound to Tcl. It was defined to allow the exchange of
grammars with PackRat/PEG based parser generators for other languages.

For the formal specification of the JSON grammar exchange format, please go and
read *[The JSON Grammar Exchange Format](../modules/pt/pt_json_language.md)*.


When used as a result-format this format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-indented__ boolean

    If this option is set the system will break the generated JSON across lines
    and indent it according to its inner structure, with each key of a
    dictionary on a separate line.

    If the option is not set (the default), the whole JSON object will be
    written on a single line, with minimum spacing between all elements.

  - __-aligned__ boolean

    If this option is set the system will ensure that the values for the keys in
    a dictionary are vertically aligned with each other, for a nice table
    effect. To make this work this also implies that __-indented__ is set.

    If the option is not set (the default), the output is formatted as per the
    value of __indented__, without trying to align the values for dictionary
    keys.

# <a name='section5'></a>C Parser Embedded In Tcl

The __critcl__ format is executable code, a parser for the grammar. It is a Tcl
package with the actual parser implementation written in C and embedded in Tcl
via the __critcl__ package.

This result-format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-class__ string

    The value of this option is the name of the class to generate, without
    leading colons. The default value is __CLASS__.

    For a simple value __X__ without colons, like CLASS, the parser command will
    be __X__::__X__. Whereas for a namespaced value __X::Y__ the parser command
    will be __X::Y__.

  - __-package__ string

    The value of this option is the name of the package to generate. The default
    value is __PACKAGE__.

  - __-version__ string

    The value of this option is the version of the package to generate. The
    default value is __1__.

# <a name='section6'></a>C Parser

The __c__ format is executable code, a parser for the grammar. The parser
implementation is written in C and can be tweaked to the users' needs through a
multitude of options.

The __critcl__ format, for example, is implemented as a canned configuration of
these options on top of the generator for __c__.

This result-format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-template__ string

    The value of this option is a string into which to put the generated text
    and the other configuration settings. The various locations for user-data
    are expected to be specified with the placeholders listed below. The default
    value is "[email protected]@__".

      * [email protected]@__

        To be replaced with the value of the option __-user__.

      * [email protected]@__

        To be replaced with the the constant __C/PARAM__.

      * [email protected]@__

        To be replaced with the value of the option __-file__.

      * [email protected]@__

        To be replaced with the value of the option __-name__.

      * [email protected]@__

        To be replaced with the generated Tcl code.

    The following options are special, in that they will occur within the
    generated code, and are replaced there as well.

      * [email protected]@__

        To be replaced with the value of the option __state-decl__.

      * [email protected]@__

        To be replaced with the value of the option __state-ref__.

      * [email protected]@__

        To be replaced with the value of the option __string-varname__.

      * [email protected]@__

        To be replaced with the value of the option __self-command__.

      * [email protected]@__

        To be replaced with the value of the option __fun-qualifier__.

      * [email protected]@__

        To be replaced with the value of the option __namespace__.

      * [email protected]@__

        To be replaced with the value of the option __main__.

      * [email protected]@__

        To be replaced with the value of the option __prelude__.

  - __-state-decl__ string

    A C string representing the argument declaration to use in the generated
    parsing functions to refer to the parsing state. In essence type and
    argument name. The default value is the string __RDE_PARAM p__.

  - __-state-ref__ string

    A C string representing the argument named used in the generated parsing
    functions to refer to the parsing state. The default value is the string
    __p__.

  - __-self-command__ string

    A C string representing the reference needed to call the generated parser
    function (methods ...) from another parser fonction, per the chosen
    framework (template). The default value is the empty string.

  - __-fun-qualifier__ string

    A C string containing the attributes to give to the generated functions
    (methods ...), per the chosen framework (template). The default value is
    __static__.

  - __-namespace__ string

    The name of the C namespace the parser functions (methods, ...) shall reside
    in, or a general prefix to add to the function names. The default value is
    the empty string.

  - __-main__ string

    The name of the main function (method, ...) to be called by the chosen
    framework (template) to start parsing input. The default value is
    ____main__.

  - __-string-varname__ string

    The name of the variable used for the table of strings used by the generated
    parser, i.e. error messages, symbol names, etc. The default value is
    __p_string__.

  - __-prelude__ string

    A snippet of code to be inserted at the head of each generated parsing
    function. The default value is the empty string.

  - __-indent__ integer

    The number of characters to indent each line of the generated code by. The
    default value is __0__.

  - __-comments__ boolean

    A flag controlling the generation of code comments containing the original
    parsing expression a parsing function is for. The default value is __on__.


# <a name='section7'></a>Snit Parser

The __snit__ format is executable code, a parser for the grammar. It is a Tcl
package holding a __snit::type__, i.e. a class, whose instances are parsers for
the input grammar.

This result-format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-class__ string

    The value of this option is the name of the class to generate, without
    leading colons. Note, it serves double-duty as the name of the package to
    generate too, if option __-package__ is not specified, see below. The
    default value is __CLASS__, applying if neither option __-class__ nor
    __-package__ were specified.

  - __-package__ string

    The value of this option is the name of the package to generate, without
    leading colons. Note, it serves double-duty as the name of the class to
    generate too, if option __-class__ is not specified, see above. The default
    value is __PACKAGE__, applying if neither option __-package__ nor __-class__
    were specified.

  - __-version__ string

    The value of this option is the version of the package to generate. The
    default value is __1__.

# <a name='section8'></a>TclOO Parser

The __oo__ format is executable code, a parser for the grammar. It is a Tcl
package holding a __[TclOO](../../../index.md#tcloo)__ class, whose instances
are parsers for the input grammar.

This result-format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-class__ string

    The value of this option is the name of the class to generate, without
    leading colons. Note, it serves double-duty as the name of the package to
    generate too, if option __-package__ is not specified, see below. The
    default value is __CLASS__, applying if neither option __-class__ nor
    __-package__ were specified.

  - __-package__ string

    The value of this option is the name of the package to generate, without
    leading colons. Note, it serves double-duty as the name of the class to
    generate too, if option __-class__ is not specified, see above. The default
    value is __PACKAGE__, applying if neither option __-package__ nor __-class__
    were specified.

  - __-version__ string

    The value of this option is the version of the package to generate. The
    default value is __1__.

# <a name='section9'></a>Grammar Container

The __container__ format is another form of describing parsing expression
grammars. While data in this format is executable it does not constitute a
parser for the grammar. It always has to be used in conjunction with the package
__[pt::peg::interp](../modules/pt/pt_peg_interp.md)__, a grammar interpreter.


The format represents grammars by a __snit::type__, i.e. class, whose instances
are API-compatible to the instances of the
__[pt::peg::container](../modules/pt/pt_peg_container.md)__ package, and which

are preloaded with the grammar in question.

This result-format supports the following options:

  - __-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run. The default value is
    __unknown__.

  - __-name__ string

    The value of this option is the name of the grammar we are processing. The
    default value is __a_pe_grammar__.

  - __-user__ string

    The value of this option is the name of the user for which the command is
    run. The default value is __unknown__.

  - __-mode__ __bulk__|__incremental__

    The value of this option controls which methods of
    __[pt::peg::container](../modules/pt/pt_peg_container.md)__ instances are

    used to specify the grammar, i.e. preload it into the container. There are
    two legal values, as listed below. The default is __bulk__.


      * __bulk__

        In this mode the methods __start__, __add__, __modes__, and __rules__
        are used to specify the grammar in a bulk manner, i.e. as a set of
        nonterminal symbols, and two dictionaries mapping from the symbols to
        their semantic modes and parsing expressions.

        This mode is the default.

      * __incremental__

        In this mode the methods __start__, __add__, __mode__, and __rule__ are
        used to specify the grammar piecemal, with each nonterminal having its
        own block of defining commands.

  - __-template__ string

    The value of this option is a string into which to put the generated code
    and the other configuration settings. The various locations for user-data
    are expected to be specified with the placeholders listed below. The default
    value is "[email protected]@__".

      * [email protected]@__

        To be replaced with the value of the option __-user__.

      * [email protected]@__

        To be replaced with the the constant __CONTAINER__.

      * [email protected]@__

        To be replaced with the value of the option __-file__.

      * [email protected]@__

        To be replaced with the value of the option __-name__.

      * [email protected]@__

        To be replaced with the value of the option __-mode__.

      * [email protected]@__

        To be replaced with the generated code.

# <a name='section10'></a>Example

In this section we are working a complete example, starting with a PEG grammar
and ending with running the parser generated from it over some input, following
the outline shown in the figure below:

![](../../../image/flow.png) Our grammar, assumed to the stored in the file
"calculator.peg" is

    PEG calculator (Expression)
        Digit      <- '0'/'1'/'2'/'3'/'4'/'5'/'6'/'7'/'8'/'9'       ;
        Sign       <- '-' / '+'                                     ;
        Number     <- Sign? Digit+                                  ;
        Expression <- Term (AddOp Term)*                            ;
        MulOp      <- '*' / '/'                                     ;
        Term       <- Factor (MulOp Factor)*                        ;
        AddOp      <- '+'/'-'                                       ;
        Factor     <- '(' Expression ')' / Number                   ;
    END;

From this we create a snit-based parser via

    pt generate snit calculator.tcl -class calculator -name calculator peg calculator.peg

which leaves us with the parser package and class written to the file
"calculator.tcl". Assuming that this package is then properly installed in a
place where Tcl can find it we can now use this class via a script like

    package require calculator

    lassign $argv input
    set channel [open $input r]

    set parser [calculator]
    set ast [$parser parse $channel]
    $parser destroy
    close $channel

    ... now process the returned abstract syntax tree ...

where the abstract syntax tree stored in the variable will look like

    set ast {Expression 0 4
        {Factor 0 4
            {Term 0 2
                {Number 0 2
                    {Digit 0 0}
                    {Digit 1 1}
                    {Digit 2 2}
                }
            }


            {AddOp 3 3}
            {Term 4 4
                {Number 4 4
                    {Digit 4 4}




                }
            }
        }
    }

assuming that the input file and channel contained the text

    120+5

A more graphical representation of the tree would be

![](../../../image/expr_ast.png) Regardless, at this point it is the user's
responsibility to work with the tree to reach whatever goal she desires. I.e.
analyze it, transform it, etc. The package
__[pt::ast](../modules/pt/pt_astree.md)__ should be of help here, providing
commands to walk such ASTs structures in various ways.

One important thing to note is that the parsers used here return a data
structure representing the structure of the input per the grammar underlying the
parser. There are *no* callbacks during the parsing process, i.e. no *parsing
actions*, as most other parsers will have.

Going back to the last snippet of code, the execution of the parser for some
input, note how the parser instance follows the specified *[Parser
API](../modules/pt/pt_parser_api.md)*.

# <a name='section11'></a>Internals

This section is intended for users of the application which wish to modify or
extend it. Users only interested in the generation of parsers can ignore it.

The main functionality of the application is encapsulated in the package
__[pt::pgen](../modules/pt/pt_pgen.md)__. Please read it for more information.


# <a name='section12'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *pt* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='keywords'></a>KEYWORDS

[EBNF](../../../index.md#ebnf), [LL(k)](../../../index.md#ll_k_),
[PEG](../../../index.md#peg), [TDPL](../../../index.md#tdpl), [context-free
languages](../../../index.md#context_free_languages),
[expression](../../../index.md#expression),
[grammar](../../../index.md#grammar), [matching](../../../index.md#matching),

[parser](../../../index.md#parser), [parsing
expression](../../../index.md#parsing_expression), [parsing expression
grammar](../../../index.md#parsing_expression_grammar), [push down
automaton](../../../index.md#push_down_automaton), [recursive
descent](../../../index.md#recursive_descent), [state](../../../index.md#state),
[top-down parsing languages](../../../index.md#top_down_parsing_languages),
[transducer](../../../index.md#transducer)



# <a name='category'></a>CATEGORY

Parsing and Grammars

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2009 Andreas Kupries <[email protected].sourceforge.net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|



|

|





|
|

|
|
|
|
|

|

|



|

|
|
|
|


|
|


|

|



|



|



|
>



|
|



|



|
|



|

|
|
|
>
|
|



|




|
|

|


|
|
>


|
|
|




|
|
|
|
|
|

|
|
|


|
|
|
|



|

|


|





|

|

|
|
|
|

|
|
|
|





|

|



|

|

|


|
|

|

|
|

|


|

|


|
|
|



|



|



|



|



|




|
|


|
>

|

|


|
|

|

|
|

|


|

|



|

|
|

|



|

|

|



|
|
|

|

|


|
|

|

|
|

|


|

|


|

|
|
|

|

|
|

|

|
|



|

|

|
|

|

|


|
|

|

|
|

|


|

|


|
|
|



|



|



|



|



|


|



|



|



|



|



|



|



|



|

|


|
|

|


|
|

|


|
|

|


|
|

|

|
|
|

|

|
|
|

|


|
|

|


|

|

|
|

|


|
>



|
|
|

|

|


|
|

|

|
|

|


|

|


|
|
|
|

|


|
|
|
|

|

|
|



|
|
|

|

|


|
|

|

|
|

|


|

|


|
|
|
|

|


|
|
|
|

|

|
|




|
|
|
>

|
|
<
>
|

|

|


|
|

|

|
|

|


|

|


<
>
|
|
>



|
|
|
|

|



|
|
|

|


|
|
|



|



|



|



|



|



|







|
|

|
|
|
|
|
|
|
|
|


|

|


|





|

|
|



|



|
|
|
|
|
|
|
<
<
>
>
|
|
|
|
>
>
>
>
|
<
<
<
<


|



|
|
|
|
|



|
|



|




|


|
>




|
|
|

|
|

|
|
|
|



|
|
|
|
|
>
|
|
<
|
|
|
|
>
>







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595

596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619

620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719


720
721
722
723
724
725
726
727
728
729
730




731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785

786
787
788
789
790
791
792
793
794
795
796
797
798
799
[//000000001]: # (pt \- Parser Tools)
[//000000002]: # (Generated from file 'pt\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2009 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (pt\(n\) 1 tcllib "Parser Tools")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

pt \- Parser Tools Application

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

  - [Command Line](#section2)

  - [PEG Specification Language](#section3)

  - [JSON Grammar Exchange](#section4)

  - [C Parser Embedded In Tcl](#section5)

  - [C Parser](#section6)

  - [Snit Parser](#section7)

  - [TclOO Parser](#section8)

  - [Grammar Container](#section9)

  - [Example](#section10)

  - [Internals](#section11)

  - [Bugs, Ideas, Feedback](#section12)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

package require Tcl 8\.5  

[__pt__ __generate__ *resultformat* ?*options\.\.\.*? *resultfile* *inputformat* *inputfile*](#1)  

# <a name='description'></a>DESCRIPTION

Are you lost ? Do you have trouble understanding this document ? In that case
please read the overview provided by the *[Introduction to Parser
Tools](\.\./modules/pt/pt\_introduction\.md)*\. This document is the entrypoint
to the whole system the current package is a part of\.

This document describes __pt__, the main application of the module, a
*[parser generator](\.\./\.\./\.\./index\.md\#parser\_generator)*\. Its intended
audience are people who wish to create a parser for some language of theirs\.
Should you wish to modify the application instead, please see the section about
the application's [Internals](#section11) for the basic references\.

It resides in the User Application Layer of Parser Tools\.

![](\.\./\.\./\.\./image/arch\_user\_app\.png)

# <a name='section2'></a>Command Line

  - <a name='1'></a>__pt__ __generate__ *resultformat* ?*options\.\.\.*? *resultfile* *inputformat* *inputfile*

    This sub\-command of the application reads the parsing expression grammar
    stored in the *inputfile* in the format *inputformat*, converts it to
    the *resultformat* under the direction of the \(format\-specific\) set of
    options specified by the user and stores the result in the *resultfile*\.

    The *inputfile* has to exist, while the *resultfile* may be created,
    overwriting any pre\-existing content of the file\. Any missing directory in
    the path to the *resultfile* will be created as well\.

    The exact form of the result for, and the set of options supported by the
    known result\-formats, are explained in the upcoming sections of this
    document, with the list below providing an index mapping between format name
    and its associated section\. In alphabetical order:

      * __c__

        A *resultformat*\. See section [C Parser](#section6)\.

      * __container__

        A *resultformat*\. See section [Grammar Container](#section9)\.

      * __critcl__

        A *resultformat*\. See section [C Parser Embedded In
        Tcl](#section5)\.

      * __json__

        A *input*\- and *resultformat*\. See section [JSON Grammar
        Exchange](#section4)\.

      * __oo__

        A *resultformat*\. See section [TclOO Parser](#section8)\.

      * __peg__

        A *input*\- and *resultformat*\. See section [PEG Specification
        Language](#section3)\.

      * __snit__

        A *resultformat*\. See section [Snit Parser](#section7)\.

Of the seven possible results four are parsers outright \(__c__,
__critcl__, __oo__, and __snit__\), one \(__container__\) provides
code which can be used in conjunction with a generic parser \(also known as a
grammar interpreter\), and the last two \(__json__ and __peg__\) are doing
double\-duty as input formats, allowing the transformation of grammars for
exchange, reformatting, and the like\.

The created parsers fall into three categories:

![](\.\./\.\./\.\./image/gen\_options\.png)

  - __Specialized parsers implemented in C__

    The fastest parsers are created when using the result formats __c__ and
    __critcl__\. The first returns the raw C code for the parser, while the
    latter wraps it into a Tcl package using *CriTcl*\.

    This makes the latter much easier to use than the former\. On the other hand,
    the former can be adapted to the users' requirements through a multitude of
    options, allowing for things like usage of the parser outside of a Tcl
    environment, something the __critcl__ format doesn't support\. As such
    the __c__ format is meant for more advanced users, or users with special
    needs\.

    A disadvantage of all the parsers in this section is the need to run them
    through a C compiler to make them actually executable\. This is not something
    everyone has the necessary tools for\. The parsers in the next section are
    for people under such restrictions\.

  - __Specialized parsers implemented in Tcl__

    As the parsers in this section are implemented in Tcl they are quite a bit
    slower than anything from the previous section\. On the other hand this
    allows them to be used in pure\-Tcl environments, or in environments which
    allow only a limited set of binary packages\. In the latter case it will be
    advantageous to lobby for the inclusion of the C\-based runtime support
    \(notes below\) into the environment to reduce the impact of Tcl's on the
    speed of these parsers\.

    The relevant formats are __snit__ and __oo__\. Both place their
    result into a Tcl package containing a __snit::type__, or TclOO
    __[class](\.\./\.\./\.\./index\.md\#class)__ respectively\.

    Of the supporting runtime, which is the package
    __[pt::rde](\.\./modules/pt/pt\_rdengine\.md)__, the user has to know
    nothing but that it does exist and that the parsers are dependent on it\.
    Knowledge of the API exported by the runtime for the parsers' consumption is
    *not* required by the parsers' users\.

  - __Interpreted parsing implemented in Tcl__

    The last category, grammar interpretation\. This means that an interpreter
    for parsing expression grammars takes the description of the grammar to
    parse input for, and uses it guide the parsing process\. This is the slowest
    of the available options, as the interpreter has to continually run through
    the configured grammar, whereas the specialized parsers of the previous
    sections have the relevant knowledge about the grammar baked into them\.

    The only places where using interpretation make sense is where the grammar
    for some input may be changed interactively by the user, as the
    interpretation allows for quick turnaround after each change, whereas the
    previous methods require the generation of a whole new parser, which is not
    as fast\. On the other hand, wherever the grammar to use is fixed, the
    previous methods are much more advantageous as the time to generate the
    parser is minuscule compared to the time the parser code is in use\.

    The relevant result format is __container__\. It \(quickly\) generates
    grammar descriptions \(instead of a full parser\) which match the API expected
    by ParserTools' grammar interpreter\. The latter is provided by the package
    __[pt::peg::interp](\.\./modules/pt/pt\_peg\_interp\.md)__\.

All the parsers generated by __critcl__, __snit__, and __oo__, and
the grammar interpreter share a common API for access to the actual parsing
functionality, making them all plug\-compatible\. It is described in the
*[Parser API](\.\./modules/pt/pt\_parser\_api\.md)* specification document\.

# <a name='section3'></a>PEG Specification Language

__peg__, a language for the specification of parsing expression grammars is
meant to be human readable, and writable as well, yet strict enough to allow its
processing by machine\. Like any computer language\. It was defined to make
writing the specification of a grammar easy, something the other formats found
in the Parser Tools do not lend themselves too\.

For either an introduction to or the formal specification of the language,
please go and read the *[PEG Language
Tutorial](\.\./modules/pt/pt\_peg\_language\.md)*\.

When used as a result\-format this format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-template__ string

    The value of this option is a string into which to put the generated text
    and the values of the other options\. The various locations for user\-data are
    expected to be specified with the placeholders listed below\. The default
    value is "[email protected]@__"\.

      * [email protected]@__

        To be replaced with the value of the option __\-user__\.

      * [email protected]@__

        To be replaced with the the constant __PEG__\.

      * [email protected]@__

        To be replaced with the value of the option __\-file__\.

      * [email protected]@__

        To be replaced with the value of the option __\-name__\.

      * [email protected]@__

        To be replaced with the generated text\.

# <a name='section4'></a>JSON Grammar Exchange

The __json__ format for parsing expression grammars was written as a data
exchange format not bound to Tcl\. It was defined to allow the exchange of
grammars with PackRat/PEG based parser generators for other languages\.

For the formal specification of the JSON grammar exchange format, please go and
read *[The JSON Grammar Exchange
Format](\.\./modules/pt/pt\_json\_language\.md)*\.

When used as a result\-format this format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-indented__ boolean

    If this option is set the system will break the generated JSON across lines
    and indent it according to its inner structure, with each key of a
    dictionary on a separate line\.

    If the option is not set \(the default\), the whole JSON object will be
    written on a single line, with minimum spacing between all elements\.

  - __\-aligned__ boolean

    If this option is set the system will ensure that the values for the keys in
    a dictionary are vertically aligned with each other, for a nice table
    effect\. To make this work this also implies that __\-indented__ is set\.

    If the option is not set \(the default\), the output is formatted as per the
    value of __indented__, without trying to align the values for dictionary
    keys\.

# <a name='section5'></a>C Parser Embedded In Tcl

The __critcl__ format is executable code, a parser for the grammar\. It is a
Tcl package with the actual parser implementation written in C and embedded in
Tcl via the __critcl__ package\.

This result\-format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-class__ string

    The value of this option is the name of the class to generate, without
    leading colons\. The default value is __CLASS__\.

    For a simple value __X__ without colons, like CLASS, the parser command
    will be __X__::__X__\. Whereas for a namespaced value __X::Y__
    the parser command will be __X::Y__\.

  - __\-package__ string

    The value of this option is the name of the package to generate\. The default
    value is __PACKAGE__\.

  - __\-version__ string

    The value of this option is the version of the package to generate\. The
    default value is __1__\.

# <a name='section6'></a>C Parser

The __c__ format is executable code, a parser for the grammar\. The parser
implementation is written in C and can be tweaked to the users' needs through a
multitude of options\.

The __critcl__ format, for example, is implemented as a canned configuration
of these options on top of the generator for __c__\.

This result\-format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-template__ string

    The value of this option is a string into which to put the generated text
    and the other configuration settings\. The various locations for user\-data
    are expected to be specified with the placeholders listed below\. The default
    value is "[email protected]@__"\.

      * [email protected]@__

        To be replaced with the value of the option __\-user__\.

      * [email protected]@__

        To be replaced with the the constant __C/PARAM__\.

      * [email protected]@__

        To be replaced with the value of the option __\-file__\.

      * [email protected]@__

        To be replaced with the value of the option __\-name__\.

      * [email protected]@__

        To be replaced with the generated Tcl code\.

    The following options are special, in that they will occur within the
    generated code, and are replaced there as well\.

      * [email protected]@__

        To be replaced with the value of the option __state\-decl__\.

      * [email protected]@__

        To be replaced with the value of the option __state\-ref__\.

      * [email protected]@__

        To be replaced with the value of the option __string\-varname__\.

      * [email protected]@__

        To be replaced with the value of the option __self\-command__\.

      * [email protected]@__

        To be replaced with the value of the option __fun\-qualifier__\.

      * [email protected]@__

        To be replaced with the value of the option __namespace__\.

      * [email protected]@__

        To be replaced with the value of the option __main__\.

      * [email protected]@__

        To be replaced with the value of the option __prelude__\.

  - __\-state\-decl__ string

    A C string representing the argument declaration to use in the generated
    parsing functions to refer to the parsing state\. In essence type and
    argument name\. The default value is the string __RDE\_PARAM p__\.

  - __\-state\-ref__ string

    A C string representing the argument named used in the generated parsing
    functions to refer to the parsing state\. The default value is the string
    __p__\.

  - __\-self\-command__ string

    A C string representing the reference needed to call the generated parser
    function \(methods \.\.\.\) from another parser fonction, per the chosen
    framework \(template\)\. The default value is the empty string\.

  - __\-fun\-qualifier__ string

    A C string containing the attributes to give to the generated functions
    \(methods \.\.\.\), per the chosen framework \(template\)\. The default value is
    __static__\.

  - __\-namespace__ string

    The name of the C namespace the parser functions \(methods, \.\.\.\) shall reside
    in, or a general prefix to add to the function names\. The default value is
    the empty string\.

  - __\-main__ string

    The name of the main function \(method, \.\.\.\) to be called by the chosen
    framework \(template\) to start parsing input\. The default value is
    __\_\_main__\.

  - __\-string\-varname__ string

    The name of the variable used for the table of strings used by the generated
    parser, i\.e\. error messages, symbol names, etc\. The default value is
    __p\_string__\.

  - __\-prelude__ string

    A snippet of code to be inserted at the head of each generated parsing
    function\. The default value is the empty string\.

  - __\-indent__ integer

    The number of characters to indent each line of the generated code by\. The
    default value is __0__\.

  - __\-comments__ boolean

    A flag controlling the generation of code comments containing the original
    parsing expression a parsing function is for\. The default value is
    __on__\.

# <a name='section7'></a>Snit Parser

The __snit__ format is executable code, a parser for the grammar\. It is a
Tcl package holding a __snit::type__, i\.e\. a class, whose instances are
parsers for the input grammar\.

This result\-format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-class__ string

    The value of this option is the name of the class to generate, without
    leading colons\. Note, it serves double\-duty as the name of the package to
    generate too, if option __\-package__ is not specified, see below\. The
    default value is __CLASS__, applying if neither option __\-class__
    nor __\-package__ were specified\.

  - __\-package__ string

    The value of this option is the name of the package to generate, without
    leading colons\. Note, it serves double\-duty as the name of the class to
    generate too, if option __\-class__ is not specified, see above\. The
    default value is __PACKAGE__, applying if neither option
    __\-package__ nor __\-class__ were specified\.

  - __\-version__ string

    The value of this option is the version of the package to generate\. The
    default value is __1__\.

# <a name='section8'></a>TclOO Parser

The __oo__ format is executable code, a parser for the grammar\. It is a Tcl
package holding a __[TclOO](\.\./\.\./\.\./index\.md\#tcloo)__ class, whose
instances are parsers for the input grammar\.

This result\-format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-class__ string

    The value of this option is the name of the class to generate, without
    leading colons\. Note, it serves double\-duty as the name of the package to
    generate too, if option __\-package__ is not specified, see below\. The
    default value is __CLASS__, applying if neither option __\-class__
    nor __\-package__ were specified\.

  - __\-package__ string

    The value of this option is the name of the package to generate, without
    leading colons\. Note, it serves double\-duty as the name of the class to
    generate too, if option __\-class__ is not specified, see above\. The
    default value is __PACKAGE__, applying if neither option
    __\-package__ nor __\-class__ were specified\.

  - __\-version__ string

    The value of this option is the version of the package to generate\. The
    default value is __1__\.

# <a name='section9'></a>Grammar Container

The __container__ format is another form of describing parsing expression
grammars\. While data in this format is executable it does not constitute a
parser for the grammar\. It always has to be used in conjunction with the package
__[pt::peg::interp](\.\./modules/pt/pt\_peg\_interp\.md)__, a grammar
interpreter\.

The format represents grammars by a __snit::type__, i\.e\. class, whose
instances are API\-compatible to the instances of the

__[pt::peg::container](\.\./modules/pt/pt\_peg\_container\.md)__ package, and
which are preloaded with the grammar in question\.

This result\-format supports the following options:

  - __\-file__ string

    The value of this option is the name of the file or other entity from which
    the grammar came, for which the command is run\. The default value is
    __unknown__\.

  - __\-name__ string

    The value of this option is the name of the grammar we are processing\. The
    default value is __a\_pe\_grammar__\.

  - __\-user__ string

    The value of this option is the name of the user for which the command is
    run\. The default value is __unknown__\.

  - __\-mode__ __bulk__&#124;__incremental__

    The value of this option controls which methods of

    __[pt::peg::container](\.\./modules/pt/pt\_peg\_container\.md)__
    instances are used to specify the grammar, i\.e\. preload it into the
    container\. There are two legal values, as listed below\. The default is
    __bulk__\.

      * __bulk__

        In this mode the methods __start__, __add__, __modes__, and
        __rules__ are used to specify the grammar in a bulk manner, i\.e\. as
        a set of nonterminal symbols, and two dictionaries mapping from the
        symbols to their semantic modes and parsing expressions\.

        This mode is the default\.

      * __incremental__

        In this mode the methods __start__, __add__, __mode__, and
        __rule__ are used to specify the grammar piecemal, with each
        nonterminal having its own block of defining commands\.

  - __\-template__ string

    The value of this option is a string into which to put the generated code
    and the other configuration settings\. The various locations for user\-data
    are expected to be specified with the placeholders listed below\. The default
    value is "[email protected]@__"\.

      * [email protected]@__

        To be replaced with the value of the option __\-user__\.

      * [email protected]@__

        To be replaced with the the constant __CONTAINER__\.

      * [email protected]@__

        To be replaced with the value of the option __\-file__\.

      * [email protected]@__

        To be replaced with the value of the option __\-name__\.

      * [email protected]@__

        To be replaced with the value of the option __\-mode__\.

      * [email protected]@__

        To be replaced with the generated code\.

# <a name='section10'></a>Example

In this section we are working a complete example, starting with a PEG grammar
and ending with running the parser generated from it over some input, following
the outline shown in the figure below:

![](\.\./\.\./\.\./image/flow\.png) Our grammar, assumed to the stored in the file
"calculator\.peg" is

    PEG calculator \(Expression\)
        Digit      <\- '0'/'1'/'2'/'3'/'4'/'5'/'6'/'7'/'8'/'9'       ;
        Sign       <\- '\-' / '\+'                                     ;
        Number     <\- Sign? Digit\+                                  ;
        Expression <\- Term \(AddOp Term\)\*                            ;
        MulOp      <\- '\*' / '/'                                     ;
        Term       <\- Factor \(MulOp Factor\)\*                        ;
        AddOp      <\- '\+'/'\-'                                       ;
        Factor     <\- '\(' Expression '\)' / Number                   ;
    END;

From this we create a snit\-based parser via

    pt generate snit calculator\.tcl \-class calculator \-name calculator peg calculator\.peg

which leaves us with the parser package and class written to the file
"calculator\.tcl"\. Assuming that this package is then properly installed in a
place where Tcl can find it we can now use this class via a script like

    package require calculator

    lassign $argv input
    set channel \[open $input r\]

    set parser \[calculator\]
    set ast \[$parser parse $channel\]
    $parser destroy
    close $channel

    \.\.\. now process the returned abstract syntax tree \.\.\.

where the abstract syntax tree stored in the variable will look like

    set ast \{Expression 0 4
        \{Factor 0 4
            \{Term 0 2
                \{Number 0 2
                    \{Digit 0 0\}
                    \{Digit 1 1\}
                    \{Digit 2 2\}


                \}
            \}
            \{AddOp 3 3\}
            \{Term 4 4
                \{Number 4 4
                    \{Digit 4 4\}
                \}
            \}
        \}
    \}





assuming that the input file and channel contained the text

    120\+5

A more graphical representation of the tree would be

![](\.\./\.\./\.\./image/expr\_ast\.png) Regardless, at this point it is the user's
responsibility to work with the tree to reach whatever goal she desires\. I\.e\.
analyze it, transform it, etc\. The package
__[pt::ast](\.\./modules/pt/pt\_astree\.md)__ should be of help here,
providing commands to walk such ASTs structures in various ways\.

One important thing to note is that the parsers used here return a data
structure representing the structure of the input per the grammar underlying the
parser\. There are *no* callbacks during the parsing process, i\.e\. no *parsing
actions*, as most other parsers will have\.

Going back to the last snippet of code, the execution of the parser for some
input, note how the parser instance follows the specified *[Parser
API](\.\./modules/pt/pt\_parser\_api\.md)*\.

# <a name='section11'></a>Internals

This section is intended for users of the application which wish to modify or
extend it\. Users only interested in the generation of parsers can ignore it\.

The main functionality of the application is encapsulated in the package
__[pt::pgen](\.\./modules/pt/pt\_pgen\.md)__\. Please read it for more
information\.

# <a name='section12'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *pt* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='keywords'></a>KEYWORDS

[EBNF](\.\./\.\./\.\./index\.md\#ebnf), [LL\(k\)](\.\./\.\./\.\./index\.md\#ll\_k\_),
[PEG](\.\./\.\./\.\./index\.md\#peg), [TDPL](\.\./\.\./\.\./index\.md\#tdpl),
[context\-free languages](\.\./\.\./\.\./index\.md\#context\_free\_languages),
[expression](\.\./\.\./\.\./index\.md\#expression),
[grammar](\.\./\.\./\.\./index\.md\#grammar),
[matching](\.\./\.\./\.\./index\.md\#matching),
[parser](\.\./\.\./\.\./index\.md\#parser), [parsing
expression](\.\./\.\./\.\./index\.md\#parsing\_expression), [parsing expression

grammar](\.\./\.\./\.\./index\.md\#parsing\_expression\_grammar), [push down
automaton](\.\./\.\./\.\./index\.md\#push\_down\_automaton), [recursive
descent](\.\./\.\./\.\./index\.md\#recursive\_descent),
[state](\.\./\.\./\.\./index\.md\#state), [top\-down parsing
languages](\.\./\.\./\.\./index\.md\#top\_down\_parsing\_languages),
[transducer](\.\./\.\./\.\./index\.md\#transducer)

# <a name='category'></a>CATEGORY

Parsing and Grammars

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2009 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/apps/tcldocstrip.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151

152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
[//000000001]: # (tcldocstrip - Textprocessing toolbox)
[//000000002]: # (Generated from file 'tcldocstrip.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (tcldocstrip(n) 1.0 tcllib "Textprocessing toolbox")








# NAME

tcldocstrip - Tcl-based Docstrip Processor

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

      -  [USE CASES](#subsection1)

      -  [COMMAND LINE](#subsection2)

      -  [OPTIONS](#subsection3)

  -  [Bugs, Ideas, Feedback](#section2)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__tcldocstrip__ *output* ?options? *input* ?*guards*?](#1)  
[__tcldocstrip__ ?options? *output* (?options? *input* *guards*)...](#2)  
[__tcldocstrip__ __-guards__ *input*](#3)  

# <a name='description'></a>DESCRIPTION

The application described by this document, __tcldocstrip__, is a relative of
__[docstrip](../modules/docstrip/docstrip.md)__, a simple literate programming
tool for LaTeX.

__tcldocstrip__ is based upon the package
__[docstrip](../modules/docstrip/docstrip.md)__.

## <a name='subsection1'></a>USE CASES

__tcldocstrip__ was written with the following three use cases in mind.

  1. Conversion of a single input file according to the listed guards into the
     stripped output. This handles the most simple case of a set of guards
     specifying a single document found in a single input file.

  1. Stitching, or the assembly of an output from several sets of guards, in a
     specific order, and possibly from different files. This is the second
     common case. One document spread over several inputs, and/or spread over
     different guard sets.

  1. Extraction and listing of all the unique guard expressions and guards used
     within a document to help a person which did not author the document in
     question in familiarizing itself with it.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__tcldocstrip__ *output* ?options? *input* ?*guards*?

    This is the form for use case [1]. It converts the *input* file according to
    the specified *guards* and options. The result is written to the named
    *output* file. Usage of the string __-__ as the name of the output signals
    that the result should be written to __stdout__. The guards are
    document-specific and have to be known to the caller. The *options* will be
    explained later, in section [OPTIONS](#subsection3).

      * path *output* (in)

        This argument specifies where to write the generated document. It can be
        the path to a file or directory, or __-__. The last value causes the
        application to write the generated documented to __stdout__.

        If the *output* does not exist then [file dirname $output] has to exist
        and must be a writable directory.

      * path *inputfile* (in)

        This argument specifies the path to the file to process. It has to
        exist, must be readable, and written in
        *[docstrip](../../../index.md#docstrip)* format.

  - <a name='2'></a>__tcldocstrip__ ?options? *output* (?options? *input* *guards*)...

    This is the form for use case [2]. It differs from the form for use case [1]
    by the possibility of having options before the output file, which apply in
    general, and specifying more than one inputfile, each with its own set of
    input specific options and guards.

    It extracts data from the various *input* files, according to the specified
    *options* and *guards*, and writes the result to the given *output*, in the
    order of their specification on the command line. Options specified before
    the output are global settings, whereas the options specified before each
    input are valid only just for this input file. Unspecified values are taken
    from the global settings, or defaults. As for form [1] using the string
    __-__ as output causes the application to write to stdout. Using the string
    __.__ for an input file signals that the last input file should be used
    again. This enables the assembly of the output from one input file using
    multiple and different sets of guards, without having to specify the full
    name of the file every time.

  - <a name='3'></a>__tcldocstrip__ __-guards__ *input*

    This is the form for use case [3]. It determines the guards, and unique
    guard expressions used within the provided *input* document. The found
    strings are written to stdout, one string per line.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application,
with the exception of the option __-guards__. This option was described already,
in section [COMMAND LINE](#subsection2).

  - __-metaprefix__ string

    This option is inherited from the command __docstrip::extract__ provided by
    the package __[docstrip](../modules/docstrip/docstrip.md)__.

    It specifies the string by which the '%%' prefix of a metacomment line will
    be replaced. Defaults to '%%'. For Tcl code this would typically be '#'.

  - __-onerror__ mode

    This option is inherited from the command __docstrip::extract__ provided by
    the package __[docstrip](../modules/docstrip/docstrip.md)__.

    It controls what will be done when a format error in the *text* being
    processed is detected. The settings are:

      * __ignore__

        Just ignore the error; continue as if nothing happened.

      * __puts__

        Write an error message to __stderr__, then continue processing.

      * __throw__

        Throw an error. __::errorCode__ is set to a list whose first element is
        __DOCSTRIP__, second element is the type of error, and third element is
        the line number where the error is detected. This is the default.


  - __-trimlines__ bool

    This option is inherited from the command __docstrip::extract__ provided by
    the package __[docstrip](../modules/docstrip/docstrip.md)__.

    Controls whether *spaces* at the end of a line should be trimmed away before
    the line is processed. Defaults to __true__.

  - __-preamble__ text

  - __-postamble__ text

  - __-nopreamble__

  - __-nopostamble__

    The -no*amble options deactivate file pre- and postambles altogether,
    whereas the -*amble options specify the *user* part of the file pre- and
    postambles. This part can be empty, in that case only the standard parts are
    shown. This is the default.

    Preambles, when active, are written before the actual content of a generated
    file. In the same manner postambles are, when active, written after the
    actual content of a generated file.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *docstrip* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

[docstrip](../modules/docstrip/docstrip.md)

# <a name='keywords'></a>KEYWORDS

[.dtx](../../../index.md#_dtx), [LaTeX](../../../index.md#latex),
[conversion](../../../index.md#conversion),
[docstrip](../../../index.md#docstrip),
[documentation](../../../index.md#documentation), [literate
programming](../../../index.md#literate_programming),
[markup](../../../index.md#markup), [source](../../../index.md#source)

# <a name='category'></a>CATEGORY

Documentation tools

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2005 Andreas Kupries <[email protected].sourceforge.net>
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|




|
|



|
|
|


|



|


|
|


|
|
|



|





|
|
|
|
|
|

|

|
|
|

|
|

|

|

|

|

|


|

|
|
|
|
|
|
|
|
|
|
|

|

|
|
|




|
|

|

|
|


|

|

|
|


|



|



|



|
|
|
>

|

|
|

|
|

|

|

|

|

|
|
|
|


|
|




|
|
|

|
|

|
|
|
|

|

|



|
|
|
|
|
|







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
[//000000001]: # (tcldocstrip \- Textprocessing toolbox)
[//000000002]: # (Generated from file 'tcldocstrip\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (tcldocstrip\(n\) 1\.0 tcllib "Textprocessing toolbox")

<hr> [ <a href="../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../toc.md">Table Of Contents</a> &#124; <a
href="../../../index.md">Keyword Index</a> &#124; <a
href="../../../toc0.md">Categories</a> &#124; <a
href="../../../toc1.md">Modules</a> &#124; <a
href="../../../toc2.md">Applications</a> ] <hr>

# NAME

tcldocstrip \- Tcl\-based Docstrip Processor

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

      - [USE CASES](#subsection1)

      - [COMMAND LINE](#subsection2)

      - [OPTIONS](#subsection3)

  - [Bugs, Ideas, Feedback](#section2)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

[__tcldocstrip__ *output* ?options? *input* ?*guards*?](#1)  
[__tcldocstrip__ ?options? *output* \(?options? *input* *guards*\)\.\.\.](#2)  
[__tcldocstrip__ __\-guards__ *input*](#3)  

# <a name='description'></a>DESCRIPTION

The application described by this document, __tcldocstrip__, is a relative
of __[docstrip](\.\./modules/docstrip/docstrip\.md)__, a simple literate
programming tool for LaTeX\.

__tcldocstrip__ is based upon the package
__[docstrip](\.\./modules/docstrip/docstrip\.md)__\.

## <a name='subsection1'></a>USE CASES

__tcldocstrip__ was written with the following three use cases in mind\.

  1. Conversion of a single input file according to the listed guards into the
     stripped output\. This handles the most simple case of a set of guards
     specifying a single document found in a single input file\.

  1. Stitching, or the assembly of an output from several sets of guards, in a
     specific order, and possibly from different files\. This is the second
     common case\. One document spread over several inputs, and/or spread over
     different guard sets\.

  1. Extraction and listing of all the unique guard expressions and guards used
     within a document to help a person which did not author the document in
     question in familiarizing itself with it\.

## <a name='subsection2'></a>COMMAND LINE

  - <a name='1'></a>__tcldocstrip__ *output* ?options? *input* ?*guards*?

    This is the form for use case \[1\]\. It converts the *input* file according
    to the specified *guards* and options\. The result is written to the named
    *output* file\. Usage of the string __\-__ as the name of the output
    signals that the result should be written to __stdout__\. The guards are
    document\-specific and have to be known to the caller\. The *options* will
    be explained later, in section [OPTIONS](#subsection3)\.

      * path *output* \(in\)

        This argument specifies where to write the generated document\. It can be
        the path to a file or directory, or __\-__\. The last value causes the
        application to write the generated documented to __stdout__\.

        If the *output* does not exist then \[file dirname $output\] has to
        exist and must be a writable directory\.

      * path *inputfile* \(in\)

        This argument specifies the path to the file to process\. It has to
        exist, must be readable, and written in
        *[docstrip](\.\./\.\./\.\./index\.md\#docstrip)* format\.

  - <a name='2'></a>__tcldocstrip__ ?options? *output* \(?options? *input* *guards*\)\.\.\.

    This is the form for use case \[2\]\. It differs from the form for use case \[1\]
    by the possibility of having options before the output file, which apply in
    general, and specifying more than one inputfile, each with its own set of
    input specific options and guards\.

    It extracts data from the various *input* files, according to the
    specified *options* and *guards*, and writes the result to the given
    *output*, in the order of their specification on the command line\. Options
    specified before the output are global settings, whereas the options
    specified before each input are valid only just for this input file\.
    Unspecified values are taken from the global settings, or defaults\. As for
    form \[1\] using the string __\-__ as output causes the application to
    write to stdout\. Using the string __\.__ for an input file signals that
    the last input file should be used again\. This enables the assembly of the
    output from one input file using multiple and different sets of guards,
    without having to specify the full name of the file every time\.

  - <a name='3'></a>__tcldocstrip__ __\-guards__ *input*

    This is the form for use case \[3\]\. It determines the guards, and unique
    guard expressions used within the provided *input* document\. The found
    strings are written to stdout, one string per line\.

## <a name='subsection3'></a>OPTIONS

This section describes all the options available to the user of the application,
with the exception of the option __\-guards__\. This option was described
already, in section [COMMAND LINE](#subsection2)\.

  - __\-metaprefix__ string

    This option is inherited from the command __docstrip::extract__ provided
    by the package __[docstrip](\.\./modules/docstrip/docstrip\.md)__\.

    It specifies the string by which the '%%' prefix of a metacomment line will
    be replaced\. Defaults to '%%'\. For Tcl code this would typically be '\#'\.

  - __\-onerror__ mode

    This option is inherited from the command __docstrip::extract__ provided
    by the package __[docstrip](\.\./modules/docstrip/docstrip\.md)__\.

    It controls what will be done when a format error in the *text* being
    processed is detected\. The settings are:

      * __ignore__

        Just ignore the error; continue as if nothing happened\.

      * __puts__

        Write an error message to __stderr__, then continue processing\.

      * __throw__

        Throw an error\. __::errorCode__ is set to a list whose first element
        is __DOCSTRIP__, second element is the type of error, and third
        element is the line number where the error is detected\. This is the
        default\.

  - __\-trimlines__ bool

    This option is inherited from the command __docstrip::extract__ provided
    by the package __[docstrip](\.\./modules/docstrip/docstrip\.md)__\.

    Controls whether *spaces* at the end of a line should be trimmed away
    before the line is processed\. Defaults to __true__\.

  - __\-preamble__ text

  - __\-postamble__ text

  - __\-nopreamble__

  - __\-nopostamble__

    The \-no\*amble options deactivate file pre\- and postambles altogether,
    whereas the \-\*amble options specify the *user* part of the file pre\- and
    postambles\. This part can be empty, in that case only the standard parts are
    shown\. This is the default\.

    Preambles, when active, are written before the actual content of a generated
    file\. In the same manner postambles are, when active, written after the
    actual content of a generated file\.

# <a name='section2'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *docstrip* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

[docstrip](\.\./modules/docstrip/docstrip\.md)

# <a name='keywords'></a>KEYWORDS

[\.dtx](\.\./\.\./\.\./index\.md\#\_dtx), [LaTeX](\.\./\.\./\.\./index\.md\#latex),
[conversion](\.\./\.\./\.\./index\.md\#conversion),
[docstrip](\.\./\.\./\.\./index\.md\#docstrip),
[documentation](\.\./\.\./\.\./index\.md\#documentation), [literate
programming](\.\./\.\./\.\./index\.md\#literate\_programming),
[markup](\.\./\.\./\.\./index\.md\#markup), [source](\.\./\.\./\.\./index\.md\#source)

# <a name='category'></a>CATEGORY

Documentation tools

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2005 Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/modules/aes/aes.md.

1
2
3


4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
[//000000001]: # (aes - Advanced Encryption Standard (AES))
[//000000002]: # (Generated from file 'aes.man' by tcllib/doctools with format 'markdown')


[//000000003]: # (aes(n) 1.2.1 tcllib "Advanced Encryption Standard (AES)")








# NAME

aes - Implementation of the AES block cipher

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

  -  [COMMANDS](#section2)

  -  [PROGRAMMING INTERFACE](#section3)

  -  [MODES OF OPERATION](#section4)

  -  [EXAMPLES](#section5)

  -  [REFERENCES](#section6)

  -  [AUTHORS](#section7)

  -  [Bugs, Ideas, Feedback](#section8)

  -  [See Also](#see-also)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

package require Tcl 8.5  
package require aes ?1.2.1?  

[__::aes::aes__ ?*-mode [ecb|cbc]*? ?*-dir [encrypt|decrypt]*? *-key keydata* ?*-iv vector*? ?*-hex*? ?*-out channel*? ?*-chunksize size*? [ *-in channel* | ?__--__? *data* ]](#1)  
[__::aes::Init__ *mode* *keydata* *iv*](#2)  
[__::aes::Encrypt__ *Key* *data*](#3)  
[__::aes::Decrypt__ *Key* *data*](#4)  
[__::aes::Reset__ *Key* *iv*](#5)  
[__::aes::Final__ *Key*](#6)  

# <a name='description'></a>DESCRIPTION

This is an implementation in Tcl of the Advanced Encryption Standard (AES) as
published by the U.S. National Institute of Standards and Technology [1]. AES is
a 128-bit block cipher with a variable key size of 128, 192 or 256 bits. This
implementation supports ECB and CBC modes.

# <a name='section2'></a>COMMANDS

  - <a name='1'></a>__::aes::aes__ ?*-mode [ecb|cbc]*? ?*-dir [encrypt|decrypt]*? *-key keydata* ?*-iv vector*? ?*-hex*? ?*-out channel*? ?*-chunksize size*? [ *-in channel* | ?__--__? *data* ]

    Perform the __aes__ algorithm on either the data provided by the argument or
    on the data read from the *-in* channel. If an *-out* channel is given then
    the result will be written to this channel.

    The *-key* option must be given. This parameter takes a binary string of
    either 16, 24 or 32 bytes in length and is used to generate the key
    schedule.

    The *-mode* and *-dir* options are optional and default to cbc mode and
    encrypt respectively. The initialization vector *-iv* takes a 16 byte binary
    argument which defaults to all zeros. See [MODES OF OPERATION](#section4)
    for more about available modes and their uses.

    AES is a 128-bit block cipher. This means that the data must be provided in
    units that are a multiple of 16 bytes.

# <a name='section3'></a>PROGRAMMING INTERFACE

Internal state is maintained in an opaque structure that is returned from the
__Init__ function. In ECB mode the state is not affected by the input but for
CBC mode some input dependent state is maintained and may be reset by calling
the __Reset__ function with a new initialization vector value.

  - <a name='2'></a>__::aes::Init__ *mode* *keydata* *iv*

    Construct a new AES key schedule using the specified key data and the given
    initialization vector. The initialization vector is not used with ECB mode
    but is important for CBC mode. See [MODES OF OPERATION](#section4) for
    details about cipher modes.

  - <a name='3'></a>__::aes::Encrypt__ *Key* *data*

    Use a prepared key acquired by calling __Init__ to encrypt the provided
    data. The data argument should be a binary array that is a multiple of the
    AES block size of 16 bytes. The result is a binary array the same size as
    the input of encrypted data.

  - <a name='4'></a>__::aes::Decrypt__ *Key* *data*

    Decipher data using the key. Note that the same key may be used to encrypt
    and decrypt data provided that the initialization vector is reset
    appropriately for CBC mode.

  - <a name='5'></a>__::aes::Reset__ *Key* *iv*

    Reset the initialization vector. This permits the programmer to re-use a key
    and avoid the cost of re-generating the key schedule where the same key data
    is being used multiple times.

  - <a name='6'></a>__::aes::Final__ *Key*

    This should be called to clean up resources associated with *Key*. Once this
    function has been called the key may not be used again.

# <a name='section4'></a>MODES OF OPERATION

  - Electronic Code Book (ECB)

    ECB is the basic mode of all block ciphers. Each block is encrypted
    independently and so identical plain text will produce identical output when
    encrypted with the same key. Any encryption errors will only affect a single
    block however this is vulnerable to known plaintext attacks.

  - Cipher Block Chaining (CBC)

    CBC mode uses the output of the last block encryption to affect the current
    block. An initialization vector of the same size as the cipher block size is
    used to handle the first block. The initialization vector should be chosen
    randomly and transmitted as the first block of the output. Errors in
    encryption affect the current block and the next block after which the
    cipher will correct itself. CBC is the most commonly used mode in software
    encryption. This is the default mode of operation for this module.

# <a name='section5'></a>EXAMPLES

    % set nil_block [string repeat \\0 16]
    % aes::aes -hex -mode cbc -dir encrypt -key $nil_block $nil_block
    66e94bd4ef8a2c3b884cfa59ca342b2e

    set Key [aes::Init cbc $sixteen_bytes_key_data $sixteen_byte_iv]
    append ciphertext [aes::Encrypt $Key $plaintext]
    append ciphertext [aes::Encrypt $Key $additional_plaintext]
    aes::Final $Key

# <a name='section6'></a>REFERENCES

  1. "Advanced Encryption Standard", Federal Information Processing Standards
     Publication 197, 2001
     ([http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf](http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf))

# <a name='section7'></a>AUTHORS

Thorsten Schloermann, Pat Thoyts

# <a name='section8'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *aes* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='see-also'></a>SEE ALSO

[blowfish(n)](../blowfish/blowfish.md), [des(n)](../des/des.md),
[md5(n)](../md5/md5.md), [sha1(n)](../sha1/sha1.md)

# <a name='keywords'></a>KEYWORDS

[aes](../../../../index.md#aes), [block
cipher](../../../../index.md#block_cipher), [data
integrity](../../../../index.md#data_integrity),
[encryption](../../../../index.md#encryption),
[security](../../../../index.md#security)

# <a name='category'></a>CATEGORY

Hashes, checksums, and encryption

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2005, Pat Thoyts <[email protected]sourceforge.net>  
Copyright &copy; 2012-2014, Andreas Kupries <andreas[email protected].net>
|
|
>
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|

|

|

|



|
|

|








|
|
|
|



|

|
|
|

|

|

|
|
|
|

|
|




|
|
|




|
|
|




|
|
|



|

|



|
|
|



|
|



|

|

|
|

|


|
|
|

|
|



|
|


|
|
|






|








|
|
|

|
|

|
|
|
|

|

|
|



|
|
|
|
|







|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
[//000000001]: # (aes \- Advanced Encryption Standard \(AES\))
[//000000002]: # (Generated from file 'aes\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright &copy; 2005, Pat Thoyts <[email protected]\.sourceforge\.net>  
Copyright &copy; 2012\-2014, Andreas Kupries <andreas\[email protected]\.sourceforge\.net>)
[//000000004]: # (aes\(n\) 1\.2\.1 tcllib "Advanced Encryption Standard \(AES\)")

<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../../toc.md">Table Of Contents</a> &#124; <a
href="../../../../index.md">Keyword Index</a> &#124; <a
href="../../../../toc0.md">Categories</a> &#124; <a
href="../../../../toc1.md">Modules</a> &#124; <a
href="../../../../toc2.md">Applications</a> ] <hr>

# NAME

aes \- Implementation of the AES block cipher

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

  - [COMMANDS](#section2)

  - [PROGRAMMING INTERFACE](#section3)

  - [MODES OF OPERATION](#section4)

  - [EXAMPLES](#section5)

  - [REFERENCES](#section6)

  - [AUTHORS](#section7)

  - [Bugs, Ideas, Feedback](#section8)

  - [See Also](#seealso)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

package require Tcl 8\.5  
package require aes ?1\.2\.1?  

[__::aes::aes__ ?*\-mode \[ecb&#124;cbc\]*? ?*\-dir \[encrypt&#124;decrypt\]*? *\-key keydata* ?*\-iv vector*? ?*\-hex*? ?*\-out channel*? ?*\-chunksize size*? \[ *\-in channel* &#124; ?__\-\-__? *data* \]](#1)  
[__::aes::Init__ *mode* *keydata* *iv*](#2)  
[__::aes::Encrypt__ *Key* *data*](#3)  
[__::aes::Decrypt__ *Key* *data*](#4)  
[__::aes::Reset__ *Key* *iv*](#5)  
[__::aes::Final__ *Key*](#6)  

# <a name='description'></a>DESCRIPTION

This is an implementation in Tcl of the Advanced Encryption Standard \(AES\) as
published by the U\.S\. National Institute of Standards and Technology \[1\]\. AES is
a 128\-bit block cipher with a variable key size of 128, 192 or 256 bits\. This
implementation supports ECB and CBC modes\.

# <a name='section2'></a>COMMANDS

  - <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* \]

    Perform the __aes__ algorithm on either the data provided by the
    argument or on the data read from the *\-in* channel\. If an *\-out*
    channel is given then the result will be written to this channel\.

    The *\-key* option must be given\. This parameter takes a binary string of
    either 16, 24 or 32 bytes in length and is used to generate the key
    schedule\.

    The *\-mode* and *\-dir* options are optional and default to cbc mode and
    encrypt respectively\. The initialization vector *\-iv* takes a 16 byte
    binary argument which defaults to all zeros\. See [MODES OF
    OPERATION](#section4) for more about available modes and their uses\.

    AES is a 128\-bit block cipher\. This means that the data must be provided in
    units that are a multiple of 16 bytes\.

# <a name='section3'></a>PROGRAMMING INTERFACE

Internal state is maintained in an opaque structure that is returned from the
__Init__ function\. In ECB mode the state is not affected by the input but
for CBC mode some input dependent state is maintained and may be reset by
calling the __Reset__ function with a new initialization vector value\.

  - <a name='2'></a>__::aes::Init__ *mode* *keydata* *iv*

    Construct a new AES key schedule using the specified key data and the given
    initialization vector\. The initialization vector is not used with ECB mode
    but is important for CBC mode\. See [MODES OF OPERATION](#section4) for
    details about cipher modes\.

  - <a name='3'></a>__::aes::Encrypt__ *Key* *data*

    Use a prepared key acquired by calling __Init__ to encrypt the provided
    data\. The data argument should be a binary array that is a multiple of the
    AES block size of 16 bytes\. The result is a binary array the same size as
    the input of encrypted data\.

  - <a name='4'></a>__::aes::Decrypt__ *Key* *data*

    Decipher data using the key\. Note that the same key may be used to encrypt
    and decrypt data provided that the initialization vector is reset
    appropriately for CBC mode\.

  - <a name='5'></a>__::aes::Reset__ *Key* *iv*

    Reset the initialization vector\. This permits the programmer to re\-use a key
    and avoid the cost of re\-generating the key schedule where the same key data
    is being used multiple times\.

  - <a name='6'></a>__::aes::Final__ *Key*

    This should be called to clean up resources associated with *Key*\. Once
    this function has been called the key may not be used again\.

# <a name='section4'></a>MODES OF OPERATION

  - Electronic Code Book \(ECB\)

    ECB is the basic mode of all block ciphers\. Each block is encrypted
    independently and so identical plain text will produce identical output when
    encrypted with the same key\. Any encryption errors will only affect a single
    block however this is vulnerable to known plaintext attacks\.

  - Cipher Block Chaining \(CBC\)

    CBC mode uses the output of the last block encryption to affect the current
    block\. An initialization vector of the same size as the cipher block size is
    used to handle the first block\. The initialization vector should be chosen
    randomly and transmitted as the first block of the output\. Errors in
    encryption affect the current block and the next block after which the
    cipher will correct itself\. CBC is the most commonly used mode in software
    encryption\. This is the default mode of operation for this module\.

# <a name='section5'></a>EXAMPLES

    % set nil\_block \[string repeat \\\\0 16\]
    % aes::aes \-hex \-mode cbc \-dir encrypt \-key $nil\_block $nil\_block
    66e94bd4ef8a2c3b884cfa59ca342b2e

    set Key \[aes::Init cbc $sixteen\_bytes\_key\_data $sixteen\_byte\_iv\]
    append ciphertext \[aes::Encrypt $Key $plaintext\]
    append ciphertext \[aes::Encrypt $Key $additional\_plaintext\]
    aes::Final $Key

# <a name='section6'></a>REFERENCES

  1. "Advanced Encryption Standard", Federal Information Processing Standards
     Publication 197, 2001
     \([http://csrc\.nist\.gov/publications/fips/fips197/fips\-197\.pdf](http://csrc\.nist\.gov/publications/fips/fips197/fips\-197\.pdf)\)

# <a name='section7'></a>AUTHORS

Thorsten Schloermann, Pat Thoyts

# <a name='section8'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *aes* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# <a name='seealso'></a>SEE ALSO

[blowfish\(n\)](\.\./blowfish/blowfish\.md), [des\(n\)](\.\./des/des\.md),
[md5\(n\)](\.\./md5/md5\.md), [sha1\(n\)](\.\./sha1/sha1\.md)

# <a name='keywords'></a>KEYWORDS

[aes](\.\./\.\./\.\./\.\./index\.md\#aes), [block
cipher](\.\./\.\./\.\./\.\./index\.md\#block\_cipher), [data
integrity](\.\./\.\./\.\./\.\./index\.md\#data\_integrity),
[encryption](\.\./\.\./\.\./\.\./index\.md\#encryption),
[security](\.\./\.\./\.\./\.\./index\.md\#security)

# <a name='category'></a>CATEGORY

Hashes, checksums, and encryption

# <a name='copyright'></a>COPYRIGHT

Copyright &copy; 2005, Pat Thoyts <[email protected]\.sourceforge\.net>  
Copyright &copy; 2012\-2014, Andreas Kupries <andreas\[email protected]\.sourceforge\.net>

Changes to embedded/md/tcllib/files/modules/amazon-s3/S3.md.

1
2
3

4







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282

283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508

509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620

621
622
623
624
625
626
627
628
629

630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666

667
668
669
670
671
672
673
674
675
676
677
678
679
680
681

682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706

707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172




1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207

1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253

1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276

1277
1278
1279
1280
1281
1282
1283
1284
1285

1286
1287
1288
1289
1290
1291
1292
1293
1294

1295

1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314

1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374

1375
1376
1377
1378
1379

1380
1381
1382
1383
1384
1385
1386
1387

1388
1389
1390
1391
1392
1393

1394
1395
1396
1397
1398
1399
1400
1401

1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456

1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
[//000000001]: # (S3 - Amazon S3 Web Service Utilities)
[//000000002]: # (Generated from file 'S3.man' by tcllib/doctools with format 'markdown')

[//000000003]: # (S3(n) 1.0.3 tcllib "Amazon S3 Web Service Utilities")








# NAME

S3 - Amazon S3 Web Service Interface

# <a name='toc'></a>Table Of Contents

  -  [Table Of Contents](#toc)

  -  [Synopsis](#synopsis)

  -  [Description](#section1)

  -  [ERROR REPORTING](#section2)

  -  [COMMANDS](#section3)

  -  [LOW LEVEL COMMANDS](#section4)

  -  [HIGH LEVEL COMMANDS](#section5)

  -  [LIMITATIONS](#section6)

  -  [USAGE SUGGESTIONS](#section7)

  -  [FUTURE DEVELOPMENTS](#section8)

  -  [TLS Security Considerations](#section9)

  -  [Bugs, Ideas, Feedback](#section10)

  -  [Keywords](#keywords)

  -  [Category](#category)

  -  [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

package require Tcl 8.5  
package require S3 ?1.0.3?  
package require sha1 1.0  
package require md5 2.0  
package require base64 2.3  
package require xsxp 1.0  

[__S3::Configure__ ?__-reset__ *boolean*? ?__-retries__ *integer*? ?__-accesskeyid__ *idstring*? ?__-secretaccesskey__ *idstring*? ?__-service-access-point__ *FQDN*? ?__-use-tls__ *boolean*? ?__-default-compare__ *always|never|exists|missing|newer|date|checksum|different*? ?__-default-separator__ *string*? ?__-default-acl__ *private|public-read|public-read-write|authenticated-read|keep|calc*? ?__-default-bucket__ *bucketname*?](#1)  
[__S3::SuggestBucket__ ?*name*?](#2)  
[__S3::REST__ *dict*](#3)  
[__S3::ListAllMyBuckets__ ?__-blocking__ *boolean*? ?__-parse-xml__ *xmlstring*? ?__-result-type__ *REST|xml|pxml|dict|names|owner*?](#4)  
[__S3::PutBucket__ ?__-bucket__ *bucketname*? ?__-blocking__ *boolean*? ?__-acl__ *{}|private|public-read|public-read-write|authenticated-read*?](#5)  
[__S3::DeleteBucket__ ?__-bucket__ *bucketname*? ?__-blocking__ *boolean*?](#6)  
[__S3::GetBucket__ ?__-bucket__ *bucketname*? ?__-blocking__ *boolean*? ?__-parse-xml__ *xmlstring*? ?__-max-count__ *integer*? ?__-prefix__ *prefixstring*? ?__-delimiter__ *delimiterstring*? ?__-result-type__ *REST|xml|pxml|names|dict*?](#7)  
[__S3::Put__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-file__ *filename*? ?__-content__ *contentstring*? ?__-acl__ *private|public-read|public-read-write|authenticated-read|calc|keep*? ?__-content-type__ *contenttypestring*? ?__-x-amz-meta-*__ *metadatatext*? ?__-compare__ *comparemode*?](#8)  
[__S3::Get__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-compare__ *comparemode*? ?__-file__ *filename*? ?__-content__ *contentvarname*? ?__-timestamp__ *aws|now*? ?__-headers__ *headervarname*?](#9)  
[__S3::Head__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-dict__ *dictvarname*? ?__-headers__ *headersvarname*? ?__-status__ *statusvarname*?](#10)  
[__S3::GetAcl__ ?__-blocking__ *boolean*? ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-result-type__ *REST|xml|pxml*?](#11)  
[__S3::PutAcl__ ?__-blocking__ *boolean*? ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-acl__ *new-acl*?](#12)  
[__S3::Delete__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-status__ *statusvar*?](#13)  
[__S3::Push__ ?__-bucket__ *bucketname*? __-directory__ *directoryname* ?__-prefix__ *prefixstring*? ?__-compare__ *comparemode*? ?__-x-amz-meta-*__ *metastring*? ?__-acl__ *aclcode*? ?__-delete__ *boolean*? ?__-error__ *throw|break|continue*? ?__-progress__ *scriptprefix*?](#14)  
[__S3::Pull__ ?__-bucket__ *bucketname*? __-directory__ *directoryname* ?__-prefix__ *prefixstring*? ?__-blocking__ *boolean*? ?__-compare__ *comparemode*? ?__-delete__ *boolean*? ?__-timestamp__ *aws|now*? ?__-error__ *throw|break|continue*? ?__-progress__ *scriptprefix*?](#15)  
[__S3::Toss__ ?__-bucket__ *bucketname*? __-prefix__ *prefixstring* ?__-blocking__ *boolean*? ?__-error__ *throw|break|continue*? ?__-progress__ *scriptprefix*?](#16)  

# <a name='description'></a>DESCRIPTION

This package provides access to Amazon's Simple Storage Solution web service.

As a quick summary, Amazon Simple Storage Solution provides a for-fee web
service allowing the storage of arbitrary data as "resources" within "buckets"
online. See [http://www.amazonaws.com/](http://www.amazonaws.com/) for details
on that system. Access to the service is via HTTP (SOAP or REST). Much of this
documentation will not make sense if you're not familiar with the terms and
functionality of the Amazon S3 service.

This package provides services for reading and writing the data items via the
REST interface. It also provides some higher-level operations. Other packages in
the same distribution provide for even more functionality.

Copyright 2006 Darren New. All Rights Reserved. NO WARRANTIES OF ANY TYPE ARE
PROVIDED. COPYING OR USE INDEMNIFIES THE AUTHOR IN ALL WAYS. This software is
licensed under essentially the same terms as Tcl. See LICENSE.txt for the terms.

# <a name='section2'></a>ERROR REPORTING

The error reporting from this package makes use of $errorCode to provide more
details on what happened than simply throwing an error. Any error caught by the
S3 package (and we try to catch them all) will return with an $errorCode being a
list having at least three elements. In all cases, the first element will be
"S3". The second element will take on one of six values, with that element
defining the value of the third and subsequent elements. S3::REST does not throw
an error, but rather returns a dictionary with the keys "error", "errorInfo",
and "errorCode" set. This allows for reliable background use. The possible
second elements are these:

  - usage

    The usage of the package is incorrect. For example, a command has been
    invoked which requires the library to be configured before the library has
    been configured, or an invalid combination of options has been specified.
    The third element of $errorCode supplies the name of the parameter that was
    wrong. The fourth usually provides the arguments that were actually supplied
    to the throwing proc, unless the usage error isn't confined to a single
    proc.

  - local

    Something happened on the local system which threw an error. For example, a
    request to upload or download a file was made and the file permissions
    denied that sort of access. The third element of $errorCode is the original
    $errorCode.

  - socket

    Something happened with the socket. It closed prematurely, or some other
    condition of failure-to-communicate-with-Amazon was detected. The third
    element of $errorCode is the original $errorCode, or sometimes the message
    from fcopy, or ...?

  - remote

    The Amazon web service returned an error code outside the 2xx range in the
    HTTP header. In other words, everything went as documented, except this
    particular case was documented not to work. The third element is the
    dictionary returned from __::S3::REST__. Note that S3::REST itself never
    throws this error, but just returns the dictionary. Most of the higher-level
    commands throw for convenience, unless an argument indicates they should
    not. If something is documented as "not throwing an S3 remote error", it
    means a status return is set rather than throwing an error if Amazon returns
    a non-2XX HTTP result code.

  - notyet

    The user obeyed the documentation, but the author has not yet gotten around
    to implementing this feature. (Right now, only TLS support and sophisticated
    permissions fall into this category, as well as the S3::Acl command.)

  - xml

    The service has returned invalid XML, or XML whose schema is unexpected. For
    the high-level commands that accept service XML as input for parsing, this
    may also be thrown.

# <a name='section3'></a>COMMANDS

This package provides several separate levels of complexity.

  - The lowest level simply takes arguments to be sent to the service, sends
    them, retrieves the result, and provides it to the caller. *Note:* This
    layer allows both synchronous and event-driven processing. It depends on the
    MD5 and SHA1 and base64 packages from Tcllib (available at
    [http://core.tcl.tk/tcllib/](http://core.tcl.tk/tcllib/)). Note that
    __S3::Configure__ is required for __S3::REST__ to work due to the
    authentication portion, so we put that in the "lowest level."

  - The next layer parses the results of calls, allowing for functionality such
    as uploading only changed files, synchronizing directories, and so on. This
    layer depends on the __TclXML__ package as well as the included
    __[xsxp](xsxp.md)__ package. These packages are package required when these
    more-sophisticated routines are called, so nothing breaks if they are not
    correctly installed.

  - Also included is a separate program that uses the library. It provides code
    to parse $argv0 and $argv from the command line, allowing invocation as a
    tclkit, etc. (Not yet implmented.)

  - Another separate program provides a GUI interface allowing drag-and-drop and
    other such functionality. (Not yet implemented.)

  - Also built on this package is the OddJob program. It is a separate program
    designed to allow distribution of computational work units over Amazon's
    Elastic Compute Cloud web service.

The goal is to have at least the bottom-most layers implemented in pure Tcl
using only that which comes from widely-available sources, such as Tcllib.

# <a name='section4'></a>LOW LEVEL COMMANDS

These commands do not require any packages not listed above. They talk directly
to the service, or they are utility or configuration routines. Note that the
"xsxp" package was written to support this package, so it should be available
wherever you got this package.

  - <a name='1'></a>__S3::Configure__ ?__-reset__ *boolean*? ?__-retries__ *integer*? ?__-accesskeyid__ *idstring*? ?__-secretaccesskey__ *idstring*? ?__-service-access-point__ *FQDN*? ?__-use-tls__ *boolean*? ?__-default-compare__ *always|never|exists|missing|newer|date|checksum|different*? ?__-default-separator__ *string*? ?__-default-acl__ *private|public-read|public-read-write|authenticated-read|keep|calc*? ?__-default-bucket__ *bucketname*?

    There is one command for configuration, and that is __S3::Configure__. If
    called with no arguments, it returns a dictionary of key/value pairs listing
    all current settings. If called with one argument, it returns the value of
    that single argument. If called with two or more arguments, it must be
    called with pairs of arguments, and it applies the changes in order. There
    is only one set of configuration information per interpreter.

    The following options are accepted:

      * __-reset__ *boolean*

        By default, false. If true, any previous changes and any changes on the
        same call before the reset option will be returned to default values.

      * __-retries__ *integer*

        Default value is 3. If Amazon returns a 500 error, a retry after an
        exponential backoff delay will be tried this many times before finally
        throwing the 500 error. This applies to each call to __S3::REST__ from
        the higher-level commands, but not to __S3::REST__ itself. That is,
        __S3::REST__ will always return httpstatus 500 if that's what it
        receives. Functions like __S3::Put__ will retry the PUT call, and will
        also retry the GET and HEAD calls used to do content comparison.
        Changing this to 0 will prevent retries and their associated delays. In
        addition, socket errors (i.e., errors whose errorCode starts with "S3
        socket") will be similarly retried after backoffs.

      * __-accesskeyid__ *idstring*

      * __-secretaccesskey__ *idstring*

        Each defaults to an empty string. These must be set before any calls are
        made. This is your S3 ID. Once you sign up for an account, go to
        [http://www.amazonaws.com/](http://www.amazonaws.com/), sign in, go to
        the "Your Web Services Account" button, pick "AWS Access Identifiers",
        and your access key ID and secret access keys will be available. All
        __S3::REST__ calls are authenticated. Blame Amazon for the poor choice
        of names.

      * __-service-access-point__ *FQDN*

        Defaults to "s3.amazonaws.com". This is the fully-qualified domain name
        of the server to contact for __S3::REST__ calls. You should probably
        never need to touch this, unless someone else implements a compatible
        service, or you wish to test something by pointing the library at your
        own service.

      * __-slop-seconds__ *integer*

        When comparing dates between Amazon and the local machine, two dates
        within this many seconds of each other are considered the same. Useful
        for clock drift correction, processing overhead time, and so on.

      * __-use-tls__ *boolean*

        Defaults to false. This is not yet implemented. If true, __S3::REST__
        will negotiate a TLS connection to Amazon. If false, unencrypted
        connections are used.

      * __-bucket-prefix__ *string*

        Defaults to "TclS3". This string is used by __S3::SuggestBucketName__ if
        that command is passed an empty string as an argument. It is used to
        distinguish different applications using the Amazon service. Your
        application should always set this to keep from interfering with the
        buckets of other users of Amazon S3 or with other buckets of the same
        user.

      * __-default-compare__ *always|never|exists|missing|newer|date|checksum|different*

        Defaults to "always." If no -compare is specified on __S3::Put__,
        __S3::Get__, or __S3::Delete__, this comparison is used. See those
        commands for a description of the meaning.

      * __-default-separator__ *string*

        Defaults to "/". This is currently unused. It might make sense to use
        this for __S3::Push__ and __S3::Pull__, but allowing resources to have
        slashes in their names that aren't marking directories would be
        problematic. Hence, this currently does nothing.

      * __-default-acl__ *private|public-read|public-read-write|authenticated-read|keep|calc*

        Defaults to an empty string. If no -acl argument is provided to
        __S3::Put__ or __S3::Push__, this string is used (given as the x-amz-acl
        header if not keep or calc). If this is also empty, no x-amz-acl header
        is generated. This is *not* used by __S3::REST__.

      * __-default-bucket__ *bucketname*

        If no bucket is given to __S3::GetBucket__, __S3::PutBucket__,
        __S3::Get__, __S3::Put__, __S3::Head__, __S3::Acl__, __S3::Delete__,
        __S3::Push__, __S3::Pull__, or __S3::Toss__, and if this configuration
        variable is not an empty string (and not simply "/"), then this value

        will be used for the bucket. This is useful if one program does a large
        amount of resource manipulation within a single bucket.

  - <a name='2'></a>__S3::SuggestBucket__ ?*name*?

    The __S3::SuggestBucket__ command accepts an optional string as a prefix and
    returns a valid bucket containing the *name* argument and the Access Key ID.
    This makes the name unique to the owner and to the application (assuming the
    application picks a good *name* argument). If no name is provided, the name
    from __S3::Configure__ *-bucket-prefix* is used. If that too is empty (which
    is not the default), an error is thrown.

  - <a name='3'></a>__S3::REST__ *dict*

    The __S3::REST__ command takes as an argument a dictionary and returns a
    dictionary. The return dictionary has the same keys as the input dictionary,
    and includes additional keys as the result. The presence or absence of keys
    in the input dictionary can control the behavior of the routine. It never
    throws an error directly, but includes keys "error", "errorInfo", and
    "errorCode" if necessary. Some keys are required, some optional. The routine
    can run either in blocking or non-blocking mode, based on the presense of
    __resultvar__ in the input dictionary. This requires the *-accesskeyid* and
    *-secretaccesskey* to be configured via __S3::Configure__ before being
    called.

    The possible input keys are these:

      * __verb__ *GET|PUT|DELETE|HEAD*

        This required item indicates the verb to be used.

      * __resource__ *string*

        This required item indicates the resource to be accessed. A leading / is
        added if not there already. It will be URL-encoded for you if necessary.
        Do not supply a resource name that is already URL-encoded.

      * ?__rtype__ *torrent|acl*?

        This indicates a torrent or acl resource is being manipulated. Do not
        include this in the __resource__ key, or the "?" separator will get
        URL-encoded.

      * ?__parameters__ *dict*?

        This optional dictionary provides parameters added to the URL for the
        transaction. The keys must be in the correct case (which is confusing in
        the Amazon documentation) and the values must be valid. This can be an
        empty dictionary or omitted entirely if no parameters are desired. No
        other error checking on parameters is performed.

      * ?__headers__ *dict*?

        This optional dictionary provides headers to be added to the HTTP
        request. The keys must be in *lower case* for the authentication to
        work. The values must not contain embedded newlines or carriage returns.
        This is primarily useful for adding x-amz-* headers. Since
        authentication is calculated by __S3::REST__, do not add that header
        here. Since content-type gets its own key, also do not add that header
        here.

      * ?__inbody__ *contentstring*?

        This optional item, if provided, gives the content that will be sent. It
        is sent with a tranfer encoding of binary, and only the low bytes are
        used, so use [encoding convertto utf-8] if the string is a utf-8 string.
        This is written all in one blast, so if you are using non-blocking mode
        and the __inbody__ is especially large, you may wind up blocking on the
        write socket.

      * ?__infile__ *filename*?

        This optional item, if provided, and if __inbody__ is not provided,
        names the file from which the body of the HTTP message will be
        constructed. The file is opened for reading and sent progressively by
        [fcopy], so it should not block in non-blocking mode even if the file is
        very large. The file is transfered in binary mode, so the bytes on your
        disk will match the bytes in your resource. Due to HTTP restrictions, it
        must be possible to use [file size] on this file to determine the size
        at the start of the transaction.

      * ?__S3chan__ *channel*?

        This optional item, if provided, indicates the already-open socket over
        which the transaction should be conducted. If not provided, a connection
        is made to the service access point specified via __S3::Configure__,
        which is normally s3.amazonaws.com. If this is provided, the channel is
        not closed at the end of the transaction.

      * ?__outchan__ *channel*?

        This optional item, if provided, indicates the already-open channel to
        which the body returned from S3 should be written. That is, to retrieve
        a large resource, open a file, set the translation mode, and pass the
        channel as the value of the key outchan. Output will be written to the
        channel in pieces so memory does not fill up unnecessarily. The channel
        is not closed at the end of the transaction.

      * ?__resultvar__ *varname*?

        This optional item, if provided, indicates that __S3::REST__ should run
        in non-blocking mode. The *varname* should be fully qualified with
        respect to namespaces and cannot be local to a proc. If provided, the
        result of the __S3::REST__ call is assigned to this variable once
        everything has completed; use trace or vwait to know when this has
        happened. If this key is not provided, the result is simply returned
        from the call to __S3::REST__ and no calls to the eventloop are invoked
        from within this call.

      * ?__throwsocket__ *throw|return*?

        This optional item, if provided, indicates that __S3::REST__ should
        throw an error if throwmode is throw and a socket error is encountered.
        It indicates that __S3::REST__ should return the error code in the
        returned dictionary if a socket error is encountered and this is set to
        return. If __throwsocket__ is set to *return* or if the call is not
        blocking, then a socket error (i.e., an error whose error code starts
        with "S3 socket" will be returned in the dictionary as __error__,
        __errorInfo__, and __errorCode__. If a foreground call is made (i.e.,
        __resultvar__ is not provided), and this option is not provided or is
        set to *throw*, then __[error](../../../../index.md#error)__ will be
        invoked instead.

    Once the call to __S3::REST__ completes, a new dict is returned, either in
    the *resultvar* or as the result of execution. This dict is a copy of the
    original dict with the results added as new keys. The possible new keys are
    these:

      * __error__ *errorstring*

      * __errorInfo__ *errorstring*

      * __errorCode__ *errorstring*

        If an error is caught, these three keys will be set in the result. Note
        that __S3::REST__ does *not* consider a non-2XX HTTP return code as an
        error. The __errorCode__ value will be formatted according to the [ERROR
        REPORTING](#section2) description. If these are present, other keys
        described here might not be.

      * __httpstatus__ *threedigits*

        The three-digit code from the HTTP transaction. 2XX for good, 5XX for
        server error, etc.

      * __httpmessage__ *text*

        The textual result after the status code. "OK" or "Forbidden" or etc.

      * __outbody__ *contentstring*

        If *outchan* was not specified, this key will hold a reference to the
        (unencoded) contents of the body returned. If Amazon returned an error
        (a la the httpstatus not a 2XX value), the error message will be in
        __outbody__ or written to __outchan__ as appropriate.

      * __outheaders__ *dict*

        This contains a dictionary of headers returned by Amazon. The keys are
        always lower case. It's mainly useful for finding the x-amz-meta-*
        headers, if any, although things like last-modified and content-type are
        also useful. The keys of this dictionary are always lower case. Both
        keys and values are trimmed of extraneous whitespace.

# <a name='section5'></a>HIGH LEVEL COMMANDS

The routines in this section all make use of one or more calls to __S3::REST__
to do their work, then parse and manage the data in a convenient way. All these
commands throw errors as described in [ERROR REPORTING](#section2) unless
otherwise noted.

In all these commands, all arguments are presented as name/value pairs, in any
order. All the argument names start with a hyphen.

There are a few options that are common to many of the commands, and those
common options are documented here.

  - __-blocking__ *boolean*

    If provided and specified as false, then any calls to __S3:REST__ will be
    non-blocking, and internally these routines will call [vwait] to get the
    results. In other words, these routines will return the same value, but
    they'll have event loops running while waiting for Amazon.

  - __-parse-xml__ *xmlstring*

    If provided, the routine skips actually communicating with Amazon, and
    instead behaves as if the XML string provided was returned as the body of
    the call. Since several of these routines allow the return of data in
    various formats, this argument can be used to parse existing XML to extract
    the bits of information that are needed. It's also helpful for testing.

  - __-bucket__ *bucketname*

    Almost every high-level command needs to know what bucket the resources are
    in. This option specifies that. (Only the command to list available buckets
    does not require this parameter.) This does not need to be URL-encoded, even
    if it contains special or non-ASCII characters. May or may not contain
    leading or trailing spaces - commands normalize the bucket. If this is not
    supplied, the value is taken from __S3::Configure -default-bucket__ if that
    string isn't empty. Note that spaces and slashes are always trimmed from
    both ends and the rest must leave a valid bucket.

  - __-resource__ *resourcename*

    This specifies the resource of interest within the bucket. It may or may not
    start with a slash - both cases are handled. This does not need to be
    URL-encoded, even if it contains special or non-ASCII characters.

  - __-compare__ *always|never|exists|missing|newer|date|checksum|different*

    When commands copy resources to files or files to resources, the caller may
    specify that the copy should be skipped if the contents are the same. This
    argument specifies the conditions under which the files should be copied. If
    it is not passed, the result of __S3::Configure -default-compare__ is used,
    which in turn defaults to "always." The meanings of the various values are
    these:

      * *always*

        Always copy the data. This is the default.

      * *never*

        Never copy the data. This is essentially a no-op, except in __S3::Push__
        and __S3::Pull__ where the -delete flag might make a difference.


      * *exists*

        Copy the data only if the destination already exists.

      * *missing*

        Copy the data only if the destination does not already exist.

      * *newer*

        Copy the data if the destination is missing, or if the date on the
        source is newer than the date on the destination by at least
        __S3::Configure -slop-seconds__ seconds. If the source is Amazon, the
        date is taken from the Last-Modified header. If the source is local, it
        is taken as the mtime of the file. If the source data is specified in a
        string rather than a file, it is taken as right now, via [clock
        seconds].

      * *date*

        Like *newer*, except copy if the date is newer *or* older.

      * *checksum*

        Calculate the MD5 checksum on the local file or string, ask Amazon for
        the eTag of the resource, and copy the data if they're different. Copy
        the data also if the destination is missing. Note that this can be slow
        with large local files unless the C version of the MD5 support is
        available.

      * *different*

        Copy the data if the destination does not exist. If the destination
        exists and an actual file name was specified (rather than a content
        string), and the date on the file differs from the date on the resource,
        copy the data. If the data is provided as a content string, the "date"
        is treated as "right now", so it will likely always differ unless
        slop-seconds is large. If the dates are the same, the MD5 checksums are
        compared, and the data is copied if the checksums differ.

    Note that "newer" and "date" don't care about the contents, and "checksum"
    doesn't care about the dates, but "different" checks both.

  - <a name='4'></a>__S3::ListAllMyBuckets__ ?__-blocking__ *boolean*? ?__-parse-xml__ *xmlstring*? ?__-result-type__ *REST|xml|pxml|dict|names|owner*?

    This routine performs a GET on the Amazon S3 service, which is defined to
    return a list of buckets owned by the account identified by the
    authorization header. (Blame Amazon for the dumb names.)

      * __-blocking__ *boolean*

        See above for standard definition.

      * __-parse-xml__ *xmlstring*

        See above for standard definition.

      * __-result-type__ *REST*

        The dictionary returned by __S3::REST__ is the return value of
        __S3::ListAllMyBuckets__. In this case, a non-2XX httpstatus will not
        throw an error. You may not combine this with *-parse-xml*.

      * __-result-type__ *xml*

        The raw XML of the body is returned as the result (with no encoding
        applied).

      * __-result-type__ *pxml*

        The XML of the body as parsed by __xsxp::parse__ is returned.

      * __-result-type__ *dict*

        A dictionary of interesting portions of the XML is returned. The
        dictionary contains the following keys:

          + Owner/ID

            The Amazon AWS ID (in hex) of the owner of the bucket.

          + Owner/DisplayName

            The Amazon AWS ID's Display Name.

          + Bucket/Name

            A list of names, one for each bucket.

          + Bucket/CreationDate

            A list of dates, one for each bucket, in the same order as
            Bucket/Name, in ISO format (as returned by Amazon).

      * __-result-type__ *names*

        A list of bucket names is returned with all other information stripped
        out. This is the default result type for this command.

      * __-result-type__ *owner*

        A list containing two elements is returned. The first element is the
        owner's ID, and the second is the owner's display name.

  - <a name='5'></a>__S3::PutBucket__ ?__-bucket__ *bucketname*? ?__-blocking__ *boolean*? ?__-acl__ *{}|private|public-read|public-read-write|authenticated-read*?

    This command creates a bucket if it does not already exist. Bucket names are
    globally unique, so you may get a "Forbidden" error from Amazon even if you
    cannot see the bucket in __S3::ListAllMyBuckets__. See __S3::SuggestBucket__
    for ways to minimize this risk. The x-amz-acl header comes from the __-acl__
    option, or from __S3::Configure -default-acl__ if not specified.


  - <a name='6'></a>__S3::DeleteBucket__ ?__-bucket__ *bucketname*? ?__-blocking__ *boolean*?

    This command deletes a bucket if it is empty and you have such permission.
    Note that Amazon's list of buckets is a global resource, requiring far-flung
    synchronization. If you delete a bucket, it may be quite a few minutes (or
    hours) before you can recreate it, yielding "Conflict" errors until then.

  - <a name='7'></a>__S3::GetBucket__ ?__-bucket__ *bucketname*? ?__-blocking__ *boolean*? ?__-parse-xml__ *xmlstring*? ?__-max-count__ *integer*? ?__-prefix__ *prefixstring*? ?__-delimiter__ *delimiterstring*? ?__-result-type__ *REST|xml|pxml|names|dict*?


    This lists the contents of a bucket. That is, it returns a directory listing
    of resources within a bucket, rather than transfering any user data.

      * __-bucket__ *bucketname*

        The standard bucket argument.

      * __-blocking__ *boolean*

        The standard blocking argument.

      * __-parse-xml__ *xmlstring*

        The standard parse-xml argument.

      * __-max-count__ *integer*

        If supplied, this is the most number of records to be returned. If not
        supplied, the code will iterate until all records have been found. Not
        compatible with -parse-xml. Note that if this is supplied, only one call
        to __S3::REST__ will be made. Otherwise, enough calls will be made to
        exhaust the listing, buffering results in memory, so take care if you
        may have huge buckets.

      * __-prefix__ *prefixstring*

        If present, restricts listing to resources with a particular prefix. One
        leading / is stripped if present.

      * __-delimiter__ *delimiterstring*

        If present, specifies a delimiter for the listing. The presence of this
        will summarize multiple resources into one entry, as if S3 supported
        directories. See the Amazon documentation for details.

      * __-result-type__ *REST|xml|pxml|names|dict*


        This indicates the format of the return result of the command.

          + REST

            If *-max-count* is specified, the dictionary returned from
            __S3::REST__ is returned. If *-max-count* is not specified, a list
            of all the dictionaries returned from the one or more calls to
            __S3::REST__ is returned.

          + xml

            If *-max-count* is specified, the body returned from __S3::REST__ is
            returned. If *-max-count* is not specified, a list of all the bodies
            returned from the one or more calls to __S3::REST__ is returned.


          + pxml

            If *-max-count* is specified, the body returned from __S3::REST__ is
            passed throught __xsxp::parse__ and then returned. If *-max-count*
            is not specified, a list of all the bodies returned from the one or
            more calls to __S3::REST__ are each passed through __xsxp::parse__
            and then returned.

          + names

            Returns a list of all names found in either the Contents/Key fields
            or the CommonPrefixes/Prefix fields. If no *-delimiter* is specified
            and no *-max-count* is specified, this returns a list of all
            resources with the specified *-prefix*.

          + dict

            Returns a dictionary. (Returns only one dictionary even if
            *-max-count* wasn't specified.) The keys of the dictionary are as
            follows:

              - Name

                The name of the bucket (from the final call to __S3::REST__).


              - Prefix

                From the final call to __S3::REST__.

              - Marker

                From the final call to __S3::REST__.

              - MaxKeys

                From the final call to __S3::REST__.

              - IsTruncated

                From the final call to __S3::REST__, so always false if
                *-max-count* is not specified.

              - NextMarker

                Always provided if IsTruncated is true, and calculated of Amazon
                does not provide it. May be empty if IsTruncated is false.

              - Key

                A list of names of resources in the bucket matching the
                *-prefix* and *-delimiter* restrictions.

              - LastModified

                A list of times of resources in the bucket, in the same order as
                Key, in the format returned by Amazon. (I.e., it is not parsed
                into a seconds-from-epoch.)

              - ETag

                A list of entity tags (a.k.a. MD5 checksums) in the same order
                as Key.

              - Size

                A list of sizes in bytes of the resources, in the same order as
                Key.

              - Owner/ID

                A list of owners of the resources in the bucket, in the same
                order as Key.

              - Owner/DisplayName

                A list of owners of the resources in the bucket, in the same
                order as Key. These are the display names.

              - CommonPrefixes/Prefix

                A list of prefixes common to multiple entities. This is present
                only if *-delimiter* was supplied.

  - <a name='8'></a>__S3::Put__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-file__ *filename*? ?__-content__ *contentstring*? ?__-acl__ *private|public-read|public-read-write|authenticated-read|calc|keep*? ?__-content-type__ *contenttypestring*? ?__-x-amz-meta-*__ *metadatatext*? ?__-compare__ *comparemode*?

    This command sends data to a resource on Amazon's servers for storage, using
    the HTTP PUT command. It returns 0 if the __-compare__ mode prevented the
    transfer, 1 if the transfer worked, or throws an error if the transfer was
    attempted but failed. Server 5XX errors and S3 socket errors are retried
    according to __S3:Configure -retries__ settings before throwing an error;
    other errors throw immediately.

      * __-bucket__

        This specifies the bucket into which the resource will be written.
        Leading and/or trailing slashes are removed for you, as are spaces.

      * __-resource__

        This is the full name of the resource within the bucket. A single
        leading slash is removed, but not a trailing slash. Spaces are not
        trimmed.

      * __-blocking__

        The standard blocking flag.

      * __-file__

        If this is specified, the *filename* must exist, must be readable, and
        must not be a special or directory file. [file size] must apply to it
        and must not change for the lifetime of the call. The default
        content-type is calculated based on the name and/or contents of the
        file. Specifying this is an error if __-content__ is also specified, but
        at least one of __-file__ or __-content__ must be specified. (The file
        is allowed to not exist or not be readable if __-compare__ *never* is
        specified.)

      * __-content__

        If this is specified, the *contentstring* is sent as the body of the
        resource. The content-type defaults to "application/octet-string". Only
        the low bytes are sent, so non-ASCII should use the appropriate encoding
        (such as [encoding convertto utf-8]) before passing it to this routine,
        if necessary. Specifying this is an error if __-file__ is also
        specified, but at least one of __-file__ or __-content__ must be
        specified.

      * __-acl__

        This defaults to __S3::Configure -default-acl__ if not specified. It
        sets the x-amz-acl header on the PUT operation. If the value provided is
        *calc*, the x-amz-acl header is calculated based on the I/O permissions
        of the file to be uploaded; it is an error to specify *calc* and
        __-content__. If the value provided is *keep*, the acl of the resource
        is read before the PUT (or the default is used if the resource does not
        exist), then set back to what it was after the PUT (if it existed). An
        error will occur if the resource is successfully written but the kept
        ACL cannot be then applied. This should never happen. *Note:* *calc* is
        not currently fully implemented.

      * __-x-amz-meta-*__

        If any header starts with "-x-amz-meta-", its contents are added to the
        PUT command to be stored as metadata with the resource. Again, no
        encoding is performed, and the metadata should not contain characters
        like newlines, carriage returns, and so on. It is best to stick with
        simple ASCII strings, or to fix the library in several places.

      * __-content-type__

        This overrides the content-type calculated by __-file__ or sets the
        content-type for __-content__.

      * __-compare__

        This is the standard compare mode argument. __S3::Put__ returns 1 if the
        data was copied or 0 if the data was skipped due to the comparison mode
        so indicating it should be skipped.

  - <a name='9'></a>__S3::Get__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-compare__ *comparemode*? ?__-file__ *filename*? ?__-content__ *contentvarname*? ?__-timestamp__ *aws|now*? ?__-headers__ *headervarname*?

    This command retrieves data from a resource on Amazon's S3 servers, using
    the HTTP GET command. It returns 0 if the __-compare__ mode prevented the
    transfer, 1 if the transfer worked, or throws an error if the transfer was
    attempted but failed. Server 5XX errors and S3 socket errors are are retried
    according to __S3:Configure__ settings before throwing an error; other
    errors throw immediately. Note that this is always authenticated as the user
    configured in via __S3::Configure -accesskeyid__. Use the Tcllib http for
    unauthenticated GETs.

      * __-bucket__

        This specifies the bucket from which the resource will be read. Leading
        and/or trailing slashes are removed for you, as are spaces.

      * __-resource__

        This is the full name of the resource within the bucket. A single
        leading slash is removed, but not a trailing slash. Spaces are not
        trimmed.

      * __-blocking__

        The standard blocking flag.

      * __-file__

        If this is specified, the body of the resource will be read into this
        file, incrementally without pulling it entirely into memory first. The
        parent directory must already exist. If the file already exists, it must
        be writable. If an error is thrown part-way through the process and the
        file already existed, it may be clobbered. If an error is thrown
        part-way through the process and the file did not already exist, any
        partial bits will be deleted. Specifying this is an error if
        __-content__ is also specified, but at least one of __-file__ or
        __-content__ must be specified.

      * __-timestamp__

        This is only valid in conjunction with __-file__. It may be specified as
        *now* or *aws*. The default is *now*. If *now*, the file's modification
        date is left up to the system. If *aws*, the file's mtime is set to
        match the Last-Modified header on the resource, synchronizing the two
        appropriately for __-compare__ *date* or __-compare__ *newer*.

      * __-content__

        If this is specified, the *contentvarname* is a variable in the caller's
        scope (not necessarily global) that receives the value of the body of
        the resource. No encoding is done, so if the resource (for example)
        represents a UTF-8 byte sequence, use [encoding convertfrom utf-8] to
        get a valid UTF-8 string. If this is specified, the __-compare__ is
        ignored unless it is *never*, in which case no assignment to
        *contentvarname* is performed. Specifying this is an error if __-file__
        is also specified, but at least one of __-file__ or __-content__ must be
        specified.

      * __-compare__

        This is the standard compare mode argument. __S3::Get__ returns 1 if the
        data was copied or 0 if the data was skipped due to the comparison mode
        so indicating it should be skipped.

      * __-headers__

        If this is specified, the headers resulting from the fetch are stored in
        the provided variable, as a dictionary. This will include content-type
        and x-amz-meta-* headers, as well as the usual HTTP headers, the
        x-amz-id debugging headers, and so on. If no file is fetched (due to
        __-compare__ or other errors), no assignment to this variable is
        performed.

  - <a name='10'></a>__S3::Head__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-dict__ *dictvarname*? ?__-headers__ *headersvarname*? ?__-status__ *statusvarname*?

    This command requests HEAD from the resource. It returns whether a 2XX code
    was returned as a result of the request, never throwing an S3 remote error.
    That is, if this returns 1, the resource exists and is accessible. If this
    returns 0, something went wrong, and the __-status__ result can be consulted
    for details.

      * __-bucket__

        This specifies the bucket from which the resource will be read. Leading
        and/or trailing slashes are removed for you, as are spaces.

      * __-resource__

        This is the full name of the resource within the bucket. A single
        leading slash is removed, but not a trailing slash. Spaces are not
        trimmed.

      * __-blocking__

        The standard blocking flag.

      * __-dict__

        If specified, the resulting dictionary from the __S3::REST__ call is
        assigned to the indicated (not necessarily global) variable in the
        caller's scope.

      * __-headers__

        If specified, the dictionary of headers from the result are assigned to
        the indicated (not necessarily global) variable in the caller's scope.

      * __-status__

        If specified, the indicated (not necessarily global) variable in the
        caller's scope is assigned a 2-element list. The first element is the
        3-digit HTTP status code, while the second element is the HTTP message
        (such as "OK" or "Forbidden").

  - <a name='11'></a>__S3::GetAcl__ ?__-blocking__ *boolean*? ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-result-type__ *REST|xml|pxml*?

    This command gets the ACL of the indicated resource or throws an error if it
    is unavailable.

      * __-blocking__ *boolean*

        See above for standard definition.

      * __-bucket__

        This specifies the bucket from which the resource will be read. Leading
        and/or trailing slashes are removed for you, as are spaces.

      * __-resource__

        This is the full name of the resource within the bucket. A single
        leading slash is removed, but not a trailing slash. Spaces are not
        trimmed.

      * __-parse-xml__ *xml*

        The XML from a previous GetACL can be passed in to be parsed into
        dictionary form. In this case, -result-type must be pxml or dict.

      * __-result-type__ *REST*

        The dictionary returned by __S3::REST__ is the return value of
        __S3::GetAcl__. In this case, a non-2XX httpstatus will not throw an
        error.

      * __-result-type__ *xml*

        The raw XML of the body is returned as the result (with no encoding
        applied).

      * __-result-type__ *pxml*

        The XML of the body as parsed by __xsxp::parse__ is returned.

      * __-result-type__ *dict*

        This fetches the ACL, parses it, and returns a dictionary of two
        elements.

        The first element has the key "owner" whose value is the canonical ID of
        the owner of the resource.

        The second element has the key "acl" whose value is a dictionary. Each
        key in the dictionary is one of Amazon's permissions, namely "READ",
        "WRITE", "READ_ACP", "WRITE_ACP", or "FULL_CONTROL". Each value of each
        key is a list of canonical IDs or group URLs that have that permission.
        Elements are not in the list in any particular order, and not all keys
        are necessarily present. Display names are not returned, as they are not
        especially useful; use pxml to obtain them if necessary.

  - <a name='12'></a>__S3::PutAcl__ ?__-blocking__ *boolean*? ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-acl__ *new-acl*?

    This sets the ACL on the indicated resource. It returns the XML written to
    the ACL, or throws an error if anything went wrong.

      * __-blocking__ *boolean*

        See above for standard definition.

      * __-bucket__

        This specifies the bucket from which the resource will be read. Leading
        and/or trailing slashes are removed for you, as are spaces.

      * __-resource__

        This is the full name of the resource within the bucket. A single
        leading slash is removed, but not a trailing slash. Spaces are not
        trimmed.

      * __-owner__

        If this is provided, it is assumed to match the owner of the resource.
        Otherwise, a GET may need to be issued against the resource to find the
        owner. If you already have the owner (such as from a call to
        __S3::GetAcl__, you can pass the value of the "owner" key as the value
        of this option, and it will be used in the construction of the XML.

      * __-acl__

        If this option is specified, it provides the ACL the caller wishes to
        write to the resource. If this is not supplied or is empty, the value is
        taken from __S3::Configure -default-acl__. The ACL is written with a PUT
        to the ?acl resource.

        If the value passed to this option starts with "<", it is taken to be a
        body to be PUT to the ACL resource.

        If the value matches one of the standard Amazon x-amz-acl headers (i.e.,
        a canned access policy), that header is translated to XML and then
        applied. The canned access policies are private, public-read,
        public-read-write, and authenticated-read (in lower case).

        Otherwise, the value is assumed to be a dictionary formatted as the
        "acl" sub-entry within the dict returns by __S3::GetAcl -result-type
        dict__. The proper XML is generated and applied to the resource. Note
        that a value containing "//" is assumed to be a group, a value
        containing "@" is assumed to be an AmazonCustomerByEmail, and otherwise
        the value is assumed to be a canonical Amazon ID.

        Note that you cannot change the owner, so calling GetAcl on a resource
        owned by one user and applying it via PutAcl on a resource owned by
        another user may not do exactly what you expect.

  - <a name='13'></a>__S3::Delete__ ?__-bucket__ *bucketname*? __-resource__ *resourcename* ?__-blocking__ *boolean*? ?__-status__ *statusvar*?

    This command deletes the specified resource from the specified bucket. It
    returns 1 if the resource was deleted successfully, 0 otherwise. It returns
    0 rather than throwing an S3 remote error.

      * __-bucket__

        This specifies the bucket from which the resource will be deleted.
        Leading and/or trailing slashes are removed for you, as are spaces.

      * __-resource__

        This is the full name of the resource within the bucket. A single
        leading slash is removed, but not a trailing slash. Spaces are not
        trimmed.

      * __-blocking__

        The standard blocking flag.

      * __-status__

        If specified, the indicated (not necessarily global) variable in the
        caller's scope is set to a two-element list. The first element is the
        3-digit HTTP status code. The second element is the HTTP message (such
        as "OK" or "Forbidden"). Note that Amazon's DELETE result is 204 on
        success, that being the code indicating no content in the returned body.

  - <a name='14'></a>__S3::Push__ ?__-bucket__ *bucketname*? __-directory__ *directoryname* ?__-prefix__ *prefixstring*? ?__-compare__ *comparemode*? ?__-x-amz-meta-*__ *metastring*? ?__-acl__ *aclcode*? ?__-delete__ *boolean*? ?__-error__ *throw|break|continue*? ?__-progress__ *scriptprefix*?

    This synchronises a local directory with a remote bucket by pushing the
    differences using __S3::Put__. Note that if something has changed in the
    bucket but not locally, those changes could be lost. Thus, this is not a
    general two-way synchronization primitive. (See __S3::Sync__ for that.) Note
    too that resource names are case sensitive, so changing the case of a file
    on a Windows machine may lead to otherwise-unnecessary transfers. Note that
    only regular files are considered, so devices, pipes, symlinks, and
    directories are not copied.

      * __-bucket__

        This names the bucket into which data will be pushed.

      * __-directory__

        This names the local directory from which files will be taken. It must
        exist, be readable via [glob] and so on. If only some of the files
        therein are readable, __S3::Push__ will PUT those files that are
        readable and return in its results the list of files that could not be
        opened.

      * __-prefix__

        This names the prefix that will be added to all resources. That is, it
        is the remote equivalent of __-directory__. If it is not specified, the
        root of the bucket will be treated as the remote directory. An example
        may clarify.

            S3::Push -bucket test -directory /tmp/xyz -prefix hello/world

        In this example, /tmp/xyz/pdq.html will be stored as
        http://s3.amazonaws.com/test/hello/world/pdq.html in Amazon's servers.
        Also, /tmp/xyz/abc/def/Hello will be stored as
        http://s3.amazonaws.com/test/hello/world/abc/def/Hello in Amazon's
        servers. Without the __-prefix__ option, /tmp/xyz/pdq.html would be
        stored as http://s3.amazonaws.com/test/pdq.html.

      * __-blocking__

        This is the standard blocking option.

      * __-compare__

        If present, this is passed to each invocation of __S3::Put__. Naturally,
        __S3::Configure -default-compare__ is used if this is not specified.

      * __-x-amz-meta-*__

        If present, this is passed to each invocation of __S3::Put__. All copied
        files will have the same metadata.

      * __-acl__

        If present, this is passed to each invocation of __S3::Put__.

      * __-delete__

        This defaults to false. If true, resources in the destination that are
        not in the source directory are deleted with __S3::Delete__. Since only
        regular files are considered, the existance of a symlink, pipe, device,
        or directory in the local source will *not* prevent the deletion of a
        remote resource with a corresponding name.

      * __-error__

        This controls the behavior of __S3::Push__ in the event that __S3::Put__
        throws an error. Note that errors encountered on the local file system
        or in reading the list of resources in the remote bucket always throw
        errors. This option allows control over "partial" errors, when some
        files were copied and some were not. __S3::Delete__ is always finished
        up, with errors simply recorded in the return result.

          + throw

            The error is rethrown with the same errorCode.





          + break

            Processing stops without throwing an error, the error is recorded in
            the return value, and the command returns with a normal return. The
            calls to __S3::Delete__ are not started.

          + continue

            This is the default. Processing continues without throwing,
            recording the error in the return result, and resuming with the next
            file in the local directory to be copied.

      * __-progress__

        If this is specified and the indicated script prefix is not empty, the
        indicated script prefix will be invoked several times in the caller's
        context with additional arguments at various points in the processing.
        This allows progress reporting without backgrounding. The provided
        prefix will be invoked with additional arguments, with the first
        additional argument indicating what part of the process is being
        reported on. The prefix is initially invoked with *args* as the first
        additional argument and a dictionary representing the normalized
        arguments to the __S3::Push__ call as the second additional argument.
        Then the prefix is invoked with *local* as the first additional argument
        and a list of suffixes of the files to be considered as the second
        argument. Then the prefix is invoked with *remote* as the first
        additional argument and a list of suffixes existing in the remote bucket
        as the second additional argument. Then, for each file in the local
        list, the prefix will be invoked with *start* as the first additional
        argument and the common suffix as the second additional argument. When
        __S3::Put__ returns for that file, the prefix will be invoked with
        *copy* as the first additional argument, the common suffix as the second
        additional argument, and a third argument that will be "copied" (if
        __S3::Put__ sent the resource), "skipped" (if __S3::Put__ decided not to

        based on __-compare__), or the errorCode that __S3::Put__ threw due to
        unexpected errors (in which case the third argument is a list that
        starts with "S3"). When all files have been transfered, the prefix may
        be invoked zero or more times with *delete* as the first additional
        argument and the suffix of the resource being deleted as the second
        additional argument, with a third argument being either an empty string
        (if the delete worked) or the errorCode from __S3::Delete__ if it
        failed. Finally, the prefix will be invoked with *finished* as the first
        additional argument and the return value as the second additional
        argument.

    The return result from this command is a dictionary. They keys are the
    suffixes (i.e., the common portion of the path after the __-directory__ and
    __-prefix__), while the values are either "copied", "skipped" (if
    __-compare__ indicated not to copy the file), or the errorCode thrown by
    __S3::Put__, as appropriate. If __-delete__ was true, there may also be
    entries for suffixes with the value "deleted" or "notdeleted", indicating
    whether the attempted __S3::Delete__ worked or not, respectively. There is
    one additional pair in the return result, whose key is the empty string and
    whose value is a nested dictionary. The keys of this nested dictionary
    include "filescopied" (the number of files successfully copied),
    "bytescopied" (the number of data bytes in the files copied, excluding
    headers, metadata, etc), "compareskipped" (the number of files not copied
    due to __-compare__ mode), "errorskipped" (the number of files not copied
    due to thrown errors), "filesdeleted" (the number of resources deleted due
    to not having corresponding files locally, or 0 if __-delete__ is false),
    and "filesnotdeleted" (the number of resources whose deletion was attempted
    but failed).

    Note that this is currently implemented somewhat inefficiently. It fetches
    the bucket listing (including timestamps and eTags), then calls __S3::Put__,
    which uses HEAD to find the timestamps and eTags again. Correcting this with
    no API change is planned for a future upgrade.

  - <a name='15'></a>__S3::Pull__ ?__-bucket__ *bucketname*? __-directory__ *directoryname* ?__-prefix__ *prefixstring*? ?__-blocking__ *boolean*? ?__-compare__ *comparemode*? ?__-delete__ *boolean*? ?__-timestamp__ *aws|now*? ?__-error__ *throw|break|continue*? ?__-progress__ *scriptprefix*?

    This synchronises a remote bucket with a local directory by pulling the
    differences using __S3::Get__ If something has been changed locally but not
    in the bucket, those difference may be lost. This is not a general two-way
    synchronization mechanism. (See __S3::Sync__ for that.) This creates
    directories if needed; new directories are created with default permissions.
    Note that resource names are case sensitive, so changing the case of a file
    on a Windows machine may lead to otherwise-unnecessary transfers. Also, try
    not to store data in resources that end with a slash, or which are prefixes
    of resources that otherwise would start with a slash; i.e., don't use this
    if you store data in resources whose names have to be directories locally.


    Note that this is currently implemented somewhat inefficiently. It fetches
    the bucket listing (including timestamps and eTags), then calls __S3::Get__,
    which uses HEAD to find the timestamps and eTags again. Correcting this with
    no API change is planned for a future upgrade.

      * __-bucket__

        This names the bucket from which data will be pulled.

      * __-directory__

        This names the local directory into which files will be written It must
        exist, be readable via [glob], writable for file creation, and so on. If
        only some of the files therein are writable, __S3::Pull__ will GET those
        files that are writable and return in its results the list of files that
        could not be opened.

      * __-prefix__

        The prefix of resources that will be considered for retrieval. See
        __S3::Push__ for more details, examples, etc. (Of course, __S3::Pull__
        reads rather than writes, but the prefix is treated similarly.)


      * __-blocking__

        This is the standard blocking option.

      * __-compare__

        This is passed to each invocation of __S3::Get__ if provided. Naturally,
        __S3::Configure -default-compare__ is used if this is not provided.


      * __-timestamp__

        This is passed to each invocation of __S3::Get__ if provided.

      * __-delete__

        If this is specified and true, files that exist in the __-directory__
        that are not in the __-prefix__ will be deleted after all resources have

        been copied. In addition, empty directories (other than the top-level

        __-directory__) will be deleted, as Amazon S3 has no concept of an empty
        directory.

      * __-error__

        See __S3::Push__ for a description of this option.

      * __-progress__

        See __S3::Push__ for a description of this option. It differs slightly
        in that local directories may be included with a trailing slash to
        indicate they are directories.

    The return value from this command is a dictionary. It is identical in form
    and meaning to the description of the return result of __S3::Push__. It
    differs only in that directories may be included, with a trailing slash in
    their name, if they are empty and get deleted.

  - <a name='16'></a>__S3::Toss__ ?__-bucket__ *bucketname*? __-prefix__ *prefixstring* ?__-blocking__ *boolean*? ?__-error__ *throw|break|continue*? ?__-progress__ *scriptprefix*?


    This deletes some or all resources within a bucket. It would be considered a
    "recursive delete" had Amazon implemented actual directories.

      * __-bucket__

        The bucket from which resources will be deleted.

      * ____-blocking____

        The standard blocking option.

      * ____-prefix____

        The prefix for resources to be deleted. Any resource that starts with
        this string will be deleted. This is required. To delete everything in
        the bucket, pass an empty string for the prefix.

      * ____-error____

        If this is "throw", __S3::Toss__ rethrows any errors it encounters. If
        this is "break", __S3::Toss__ returns with a normal return after the
        first error, recording that error in the return result. If this is
        "continue", which is the default, __S3::Toss__ continues on and lists
        all errors in the return result.

      * ____-progress____

        If this is specified and not an empty string, the script prefix will be
        invoked several times in the context of the caller with additional
        arguments appended. Initially, it will be invoked with the first
        additional argument being *args* and the second being the processed list
        of arguments to __S3::Toss__. Then it is invoked with *remote* as the
        first additional argument and the list of suffixes in the bucket to be
        deleted as the second additional argument. Then it is invoked with the
        first additional argument being *delete* and the second additional
        argument being the suffix deleted and the third additional argument
        being "deleted" or "notdeleted" depending on whether __S3::Delete__
        threw an error. Finally, the script prefix is invoked with a first
        additional argument of "finished" and a second additional argument of
        the return value.

    The return value is a dictionary. The keys are the suffixes of files that
    __S3::Toss__ attempted to delete, and whose values are either the string
    "deleted" or "notdeleted". There is also one additional pair, whose key is
    the empty string and whose value is an embedded dictionary. The keys of this
    embedded dictionary include "filesdeleted" and "filesnotdeleted", each of
    which has integer values.

# <a name='section6'></a>LIMITATIONS

  - The pure-Tcl MD5 checking is slow. If you are processing files in the
    megabyte range, consider ensuring binary support is available.

  - The commands __S3::Pull__ and __S3::Push__ fetch a directory listing which
    includes timestamps and MD5 hashes, then invoke __S3::Get__ and __S3::Put__.
    If a complex __-compare__ mode is specified, __S3::Get__ and __S3::Put__
    will invoke a HEAD operation for each file to fetch timestamps and MD5
    hashes of each resource again. It is expected that a future release of this
    package will solve this without any API changes.


  - The commands __S3::Pull__ and __S3::Push__ fetch a directory listing without
    using __-max-count__. The entire directory is pulled into memory at once.
    For very large buckets, this could be a performance problem. The author, at
    this time, does not plan to change this behavior. Welcome to Open Source.


  - __S3::Sync__ is neither designed nor implemented yet. The intention would be
    to keep changes synchronised, so changes could be made to both the bucket
    and the local directory and be merged by __S3::Sync__.

  - Nor is __-compare__ *calc* fully implemented. This is primarily due to
    Windows not providing a convenient method for distinguishing between local
    files that are "public-read" or "public-read-write". Assistance figuring out

    TWAPI for this would be appreciated. The U**X semantics are difficult to map
    directly as well. See the source for details. Note that there are not tests
    for calc, since it isn't done yet.

  - The HTTP processing is implemented within the library, rather than using a
    "real" HTTP package. Hence, multi-line headers are not (yet) handled

    correctly. Do not include carriage returns or linefeeds in x-amz-meta-*
    headers, content-type values, and so on. The author does not at this time
    expect to improve this.

  - Internally, __S3::Push__ and __S3::Pull__ and __S3::Toss__ are all very
    similar and should be refactored.

  - The idea of using __-compare__ *never* __-delete__ *true* to delete files

    that have been deleted from one place but not the other yet not copying
    changed files is untested.

# <a name='section7'></a>USAGE SUGGESTIONS

To fetch a "directory" out of a bucket, make changes, and store it back:

    file mkdir ./tempfiles
    S3::Pull -bucket sample -prefix of/interest -directory ./tempfiles \
      -timestamp aws
    do_my_process ./tempfiles other arguments
    S3::Push -bucket sample -prefix of/interest -directory ./tempfiles \
      -compare newer -delete true

To delete files locally that were deleted off of S3 but not otherwise update
files:

    S3::Pull -bucket sample -prefix of/interest -directory ./myfiles \
      -compare never -delete true

# <a name='section8'></a>FUTURE DEVELOPMENTS

The author intends to work on several additional projects related to this
package, in addition to finishing the unfinished features.

First, a command-line program allowing browsing of buckets and transfer of files
from shell scripts and command prompts is useful.

Second, a GUI-based program allowing visual manipulation of bucket and resource
trees not unlike Windows Explorer would be useful.

Third, a command-line (and perhaps a GUI-based) program called "OddJob" that
will use S3 to synchronize computation amongst multiple servers running OddJob.
An S3 bucket will be set up with a number of scripts to run, and the OddJob
program can be invoked on multiple machines to run scripts on all the machines,
each moving on to the next unstarted task as it finishes each. This is still
being designed, and it is intended primarily to be run on Amazon's Elastic
Compute Cloud.

# <a name='section9'></a>TLS Security Considerations

This package uses the __[TLS](../../../../index.md#tls)__ package to handle the
security for __https__ urls and other socket connections.

Policy decisions like the set of protocols to support and what ciphers to use
are not the responsibility of __[TLS](../../../../index.md#tls)__, nor of this
package itself however. Such decisions are the responsibility of whichever
application is using the package, and are likely influenced by the set of
servers the application will talk to as well.

For example, in light of the recent [POODLE
attack](http://googleonlinesecurity.blogspot.co.uk/2014/10/this-poodle-bites-exploiting-ssl-30.html)
discovered by Google many servers will disable support for the SSLv3 protocol.
To handle this change the applications using __[TLS](../../../../index.md#tls)__
must be patched, and not this package, nor __[TLS](../../../../index.md#tls)__

itself. Such a patch may be as simple as generally activating __tls1__ support,
as shown in the example below.

    package require tls
    tls::init -tls1 1 ;# forcibly activate support for the TLS1 protocol

    ... your own application code ...

# <a name='section10'></a>Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems. Please report such in the category *amazon-s3* of the [Tcllib
Trackers](http://core.tcl.tk/tcllib/reportlist). Please also report any ideas
for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of
__diff -u__.

Note further that *attachments* are strongly preferred over inlined patches.
Attachments can be made by going to the __Edit__ form of the ticket immediately
after its creation, and then using the left-most button in the secondary
navigation bar.

# <a name='keywords'></a>KEYWORDS

[amazon](../../../../index.md#amazon), [cloud](../../../../index.md#cloud),
[s3](../../../../index.md#s3)

# <a name='category'></a>CATEGORY

Networking

# <a name='copyright'></a>COPYRIGHT

2006,2008 Darren New. All Rights Reserved. See LICENSE.TXT for terms.
|
|
>
|
>
>
>
>
>
>
>



|



|

|

|

|

|

|

|

|

|

|

|

|

|

|

|



|
|
|
|
|
|

|


|
|
|
|
|
|
|
|
|
|
|
|
|



|

|

|
|
|
|


|
|

|
|
|




|
|
|
|
|

|




|

|

|

|



|

|
|



|
|

|




|
|
|
|

|

|




|
|



|
|
|



|


|
|
|
|

|


|

|
|
|

|

|

|
|

|

|

|
|



|
|

|

|

|
|
|
|
|
|



|

|
|

|

|

|
|
|
|
|
|
|
|

|

|

|
|
|
|
|
|
|

|

|
|


|

|


|
|

|

|
|
|

|

|
|
|
|
|
|

|

|
|
|

|

|
|
|
|

|

|
|
|
|

|


|
|
|
>
|
|



|
|
|
|
|
|




|
|
|

|
|
|
|
|



|

|



|
|
|

|

|

|




|
|
|
|




|
|
|

|
|



|

|
|
|
|





|
|
|
|
|
|



|
|

|
|



|
|

|
|
|



|
|
|


|
|
|

|


|


|
|
|
|
|
|
|

|
|
|
|







|
|
|
|
|



|
|



|




|
|
|



|
|
|
|
|



|
|
|
|


|


|

|

|
|
|
|

|



|

|

|

|
|
|
|
|
|
|
|

|

|
|
|

|


|
|
|
|
|



|



|
|
>



|



|





|
|
|
|
|



|




|
|

|



|
|
|
|

|
|


|

|



|

|

|

|

|

|


|
|

|

|
|

|

|

|

|




|



|



|




|

|


|

|

|
|

|

|

|
|
|
>

|

|
|
|
|

<
>

|
|

|

|

|

|

|

|

|

|
|
|
|
|
|

|

|
|

|

|

|

<
>

|



|
|
|
|



|
|
|
>



|
|
|
|
|




|
|
|



|
|




|
>



|



|



|




|




|




|




|
|



|
|




|




|




|



|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>




|
|



|

|

|



|
|


|

|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
<

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|

|


|
|
|
|
|
|
|
|
|
>

|
|
|
|

|

|

|


|
|
|
|

|

|
|
|
>

|

|

|

|
|
>

|

|

|

|
<
>
|
>
|
<

|

|

|

|
|
|

|
|

|

<
>

|
|

|

|

|

|

|

|
|
|

|

|
|
|
|
|

|



|
|
|
|
|
|
|
|
|
|
|

|

|
|

|



|
|

|
|
|
|
|
|
>

|
|
|
|
>

|
|
|

|

<
>
|
|
|


<
>
|
|
|

|
|

<
>
|
|





|
|
|
|
|
|




|
|




|

|
|

|
|

|
|


|

|



|
|


|
|
|
|


|
|
|
|
>
|
|


|

|




|
|
|

|
|

|
|
|
|



|
|







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639

640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676

677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234

1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313

1314
1315
1316
1317

1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333

1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408

1409
1410
1411
1412
1413
1414

1415
1416
1417
1418
1419
1420
1421
1422

1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
[//000000001]: # (S3 \- Amazon S3 Web Service Utilities)
[//000000002]: # (Generated from file 'S3\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (2006,2008 Darren New\. All Rights Reserved\. See LICENSE\.TXT for terms\.)
[//000000004]: # (S3\(n\) 1\.0\.3 tcllib "Amazon S3 Web Service Utilities")

<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
href="../../../toc.md">Table Of Contents</a> &#124; <a
href="../../../../index.md">Keyword Index</a> &#124; <a
href="../../../../toc0.md">Categories</a> &#124; <a
href="../../../../toc1.md">Modules</a> &#124; <a
href="../../../../toc2.md">Applications</a> ] <hr>

# NAME

S3 \- Amazon S3 Web Service Interface

# <a name='toc'></a>Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

  - [ERROR REPORTING](#section2)

  - [COMMANDS](#section3)

  - [LOW LEVEL COMMANDS](#section4)

  - [HIGH LEVEL COMMANDS](#section5)

  - [LIMITATIONS](#section6)

  - [USAGE SUGGESTIONS](#section7)

  - [FUTURE DEVELOPMENTS](#section8)

  - [TLS Security Considerations](#section9)

  - [Bugs, Ideas, Feedback](#section10)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# <a name='synopsis'></a>SYNOPSIS

package require Tcl 8\.5  
package require S3 ?1\.0\.3?  
package require sha1 1\.0  
package require md5 2\.0  
package require base64 2\.3  
package require xsxp 1\.0  

[__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)  
[__S3::SuggestBucket__ ?*name*?](#2)  
[__S3::REST__ *dict*](#3)  
[__S3::ListAllMyBuckets__ ?__\-blocking__ *boolean*? ?__\-parse\-xml__ *xmlstring*? ?__\-result\-type__ *REST&#124;xml&#124;pxml&#124;dict&#124;names&#124;owner*?](#4)  
[__S3::PutBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*? ?__\-acl__ *\{\}&#124;private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read*?](#5)  
[__S3::DeleteBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*?](#6)  
[__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)  
[__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)  
[__S3::Get__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-compare__ *comparemode*? ?__\-file__ *filename*? ?__\-content__ *contentvarname*? ?__\-timestamp__ *aws&#124;now*? ?__\-headers__ *headervarname*?](#9)  
[__S3::Head__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-dict__ *dictvarname*? ?__\-headers__ *headersvarname*? ?__\-status__ *statusvarname*?](#10)  
[__S3::GetAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-result\-type__ *REST&#124;xml&#124;pxml*?](#11)  
[__S3::PutAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-acl__ *new\-acl*?](#12)  
[__S3::Delete__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-status__ *statusvar*?](#13)  
[__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)  
[__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)  
[__S3::Toss__ ?__\-bucket__ *bucketname*? __\-prefix__ *prefixstring* ?__\-blocking__ *boolean*? ?__\-error__ *throw&#124;break&#124;continue*? ?__\-progress__ *scriptprefix*?](#16)  

# <a name='description'></a>DESCRIPTION

This package provides access to Amazon's Simple Storage Solution web service\.

As a quick summary, Amazon Simple Storage Solution provides a for\-fee web
service allowing the storage of arbitrary data as "resources" within "buckets"
online\. See [http://www\.amazonaws\.com/](http://www\.amazonaws\.com/) for
details on that system\. Access to the service is via HTTP \(SOAP or REST\)\. Much
of this documentation will not make sense if you're not familiar with the terms
and functionality of the Amazon S3 service\.

This package provides services for reading and writing the data items via the
REST interface\. It also provides some higher\-level operations\. Other packages in
the same distribution provide for even more functionality\.

Copyright 2006 Darren New\. All Rights Reserved\. NO WARRANTIES OF ANY TYPE ARE
PROVIDED\. COPYING OR USE INDEMNIFIES THE AUTHOR IN ALL WAYS\. This software is
licensed under essentially the same terms as Tcl\. See LICENSE\.txt for the terms\.

# <a name='section2'></a>ERROR REPORTING

The error reporting from this package makes use of $errorCode to provide more
details on what happened than simply throwing an error\. Any error caught by the
S3 package \(and we try to catch them all\) will return with an $errorCode being a
list having at least three elements\. In all cases, the first element will be
"S3"\. The second element will take on one of six values, with that element
defining the value of the third and subsequent elements\. S3::REST does not throw
an error, but rather returns a dictionary with the keys "error", "errorInfo",
and "errorCode" set\. This allows for reliable background use\. The possible
second elements are these:

  - usage

    The usage of the package is incorrect\. For example, a command has been
    invoked which requires the library to be configured before the library has
    been configured, or an invalid combination of options has been specified\.
    The third element of $errorCode supplies the name of the parameter that was
    wrong\. The fourth usually provides the arguments that were actually supplied
    to the throwing proc, unless the usage error isn't confined to a single
    proc\.

  - local

    Something happened on the local system which threw an error\. For example, a
    request to upload or download a file was made and the file permissions
    denied that sort of access\. The third element of $errorCode is the original
    $errorCode\.

  - socket

    Something happened with the socket\. It closed prematurely, or some other
    condition of failure\-to\-communicate\-with\-Amazon was detected\. The third
    element of $errorCode is the original $errorCode, or sometimes the message
    from fcopy, or \.\.\.?

  - remote

    The Amazon web service returned an error code outside the 2xx range in the
    HTTP header\. In other words, everything went as documented, except this
    particular case was documented not to work\. The third element is the
    dictionary returned from __::S3::REST__\. Note that S3::REST itself never
    throws this error, but just returns the dictionary\. Most of the higher\-level
    commands throw for convenience, unless an argument indicates they should
    not\. If something is documented as "not throwing an S3 remote error", it
    means a status return is set rather than throwing an error if Amazon returns
    a non\-2XX HTTP result code\.

  - notyet

    The user obeyed the documentation, but the author has not yet gotten around
    to implementing this feature\. \(Right now, only TLS support and sophisticated
    permissions fall into this category, as well as the S3::Acl command\.\)

  - xml

    The service has returned invalid XML, or XML whose schema is unexpected\. For
    the high\-level commands that accept service XML as input for parsing, this
    may also be thrown\.

# <a name='section3'></a>COMMANDS

This package provides several separate levels of complexity\.

  - The lowest level simply takes arguments to be sent to the service, sends
    them, retrieves the result, and provides it to the caller\. *Note:* This
    layer allows both synchronous and event\-driven processing\. It depends on the
    MD5 and SHA1 and base64 packages from Tcllib \(available at
    [http://core\.tcl\.tk/tcllib/](http://core\.tcl\.tk/tcllib/)\)\. Note that
    __S3::Configure__ is required for __S3::REST__ to work due to the
    authentication portion, so we put that in the "lowest level\."

  - The next layer parses the results of calls, allowing for functionality such
    as uploading only changed files, synchronizing directories, and so on\. This
    layer depends on the __TclXML__ package as well as the included
    __[xsxp](xsxp\.md)__ package\. These packages are package required
    when these more\-sophisticated routines are called, so nothing breaks if they
    are not correctly installed\.

  - Also included is a separate program that uses the library\. It provides code
    to parse $argv0 and $argv from the command line, allowing invocation as a
    tclkit, etc\. \(Not yet implmented\.\)

  - Another separate program provides a GUI interface allowing drag\-and\-drop and
    other such functionality\. \(Not yet implemented\.\)

  - Also built on this package is the OddJob program\. It is a separate program
    designed to allow distribution of computational work units over Amazon's
    Elastic Compute Cloud web service\.

The goal is to have at least the bottom\-most layers implemented in pure Tcl
using only that which comes from widely\-available sources, such as Tcllib\.

# <a name='section4'></a>LOW LEVEL COMMANDS

These commands do not require any packages not listed above\. They talk directly
to the service, or they are utility or configuration routines\. Note that the
"xsxp" package was written to support this package, so it should be available
wherever you got this package\.

  - <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*?

    There is one command for configuration, and that is __S3::Configure__\.
    If called with no arguments, it returns a dictionary of key/value pairs
    listing all current settings\. If called with one argument, it returns the
    value of that single argument\. If called with two or more arguments, it must
    be called with pairs of arguments, and it applies the changes in order\.
    There is only one set of configuration information per interpreter\.

    The following options are accepted:

      * __\-reset__ *boolean*

        By default, false\. If true, any previous changes and any changes on the
        same call before the reset option will be returned to default values\.

      * __\-retries__ *integer*

        Default value is 3\. If Amazon returns a 500 error, a retry after an
        exponential backoff delay will be tried this many times before finally
        throwing the 500 error\. This applies to each call to __S3::REST__
        from the higher\-level commands, but not to __S3::REST__ itself\. That
        is, __S3::REST__ will always return httpstatus 500 if that's what it
        receives\. Functions like __S3::Put__ will retry the PUT call, and
        will also retry the GET and HEAD calls used to do content comparison\.
        Changing this to 0 will prevent retries and their associated delays\. In
        addition, socket errors \(i\.e\., errors whose errorCode starts with "S3
        socket"\) will be similarly retried after backoffs\.

      * __\-accesskeyid__ *idstring*

      * __\-secretaccesskey__ *idstring*

        Each defaults to an empty string\. These must be set before any calls are
        made\. This is your S3 ID\. Once you sign up for an account, go to
        [http://www\.amazonaws\.com/](http://www\.amazonaws\.com/), sign in, go
        to the "Your Web Services Account" button, pick "AWS Access
        Identifiers", and your access key ID and secret access keys will be
        available\. All __S3::REST__ calls are authenticated\. Blame Amazon
        for the poor choice of names\.

      * __\-service\-access\-point__ *FQDN*

        Defaults to "s3\.amazonaws\.com"\. This is the fully\-qualified domain name
        of the server to contact for __S3::REST__ calls\. You should probably
        never need to touch this, unless someone else implements a compatible
        service, or you wish to test something by pointing the library at your
        own service\.

      * __\-slop\-seconds__ *integer*

        When comparing dates between Amazon and the local machine, two dates
        within this many seconds of each other are considered the same\. Useful
        for clock drift correction, processing overhead time, and so on\.

      * __\-use\-tls__ *boolean*

        Defaults to false\. This is not yet implemented\. If true,
        __S3::REST__ will negotiate a TLS connection to Amazon\. If false,
        unencrypted connections are used\.

      * __\-bucket\-prefix__ *string*

        Defaults to "TclS3"\. This string is used by
        __S3::SuggestBucketName__ if that command is passed an empty string
        as an argument\. It is used to distinguish different applications using
        the Amazon service\. Your application should always set this to keep from
        interfering with the buckets of other users of Amazon S3 or with other
        buckets of the same user\.

      * __\-default\-compare__ *always&#124;never&#124;exists&#124;missing&#124;newer&#124;date&#124;checksum&#124;different*

        Defaults to "always\." If no \-compare is specified on __S3::Put__,
        __S3::Get__, or __S3::Delete__, this comparison is used\. See
        those commands for a description of the meaning\.

      * __\-default\-separator__ *string*

        Defaults to "/"\. This is currently unused\. It might make sense to use
        this for __S3::Push__ and __S3::Pull__, but allowing resources
        to have slashes in their names that aren't marking directories would be
        problematic\. Hence, this currently does nothing\.

      * __\-default\-acl__ *private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read&#124;keep&#124;calc*

        Defaults to an empty string\. If no \-acl argument is provided to
        __S3::Put__ or __S3::Push__, this string is used \(given as the
        x\-amz\-acl header if not keep or calc\)\. If this is also empty, no
        x\-amz\-acl header is generated\. This is *not* used by __S3::REST__\.

      * __\-default\-bucket__ *bucketname*

        If no bucket is given to __S3::GetBucket__, __S3::PutBucket__,
        __S3::Get__, __S3::Put__, __S3::Head__, __S3::Acl__,
        __S3::Delete__, __S3::Push__, __S3::Pull__, or
        __S3::Toss__, and if this configuration variable is not an empty
        string \(and not simply "/"\), then this value will be used for the
        bucket\. This is useful if one program does a large amount of resource
        manipulation within a single bucket\.

  - <a name='2'></a>__S3::SuggestBucket__ ?*name*?

    The __S3::SuggestBucket__ command accepts an optional string as a prefix
    and returns a valid bucket containing the *name* argument and the Access
    Key ID\. This makes the name unique to the owner and to the application
    \(assuming the application picks a good *name* argument\)\. If no name is
    provided, the name from __S3::Configure__ *\-bucket\-prefix* is used\. If
    that too is empty \(which is not the default\), an error is thrown\.

  - <a name='3'></a>__S3::REST__ *dict*

    The __S3::REST__ command takes as an argument a dictionary and returns a
    dictionary\. The return dictionary has the same keys as the input dictionary,
    and includes additional keys as the result\. The presence or absence of keys
    in the input dictionary can control the behavior of the routine\. It never
    throws an error directly, but includes keys "error", "errorInfo", and
    "errorCode" if necessary\. Some keys are required, some optional\. The routine
    can run either in blocking or non\-blocking mode, based on the presense of
    __resultvar__ in the input dictionary\. This requires the
    *\-accesskeyid* and *\-secretaccesskey* to be configured via
    __S3::Configure__ before being called\.

    The possible input keys are these:

      * __verb__ *GET&#124;PUT&#124;DELETE&#124;HEAD*

        This required item indicates the verb to be used\.

      * __resource__ *string*

        This required item indicates the resource to be accessed\. A leading / is
        added if not there already\. It will be URL\-encoded for you if necessary\.
        Do not supply a resource name that is already URL\-encoded\.

      * ?__rtype__ *torrent&#124;acl*?

        This indicates a torrent or acl resource is being manipulated\. Do not
        include this in the __resource__ key, or the "?" separator will get
        URL\-encoded\.

      * ?__parameters__ *dict*?

        This optional dictionary provides parameters added to the URL for the
        transaction\. The keys must be in the correct case \(which is confusing in
        the Amazon documentation\) and the values must be valid\. This can be an
        empty dictionary or omitted entirely if no parameters are desired\. No
        other error checking on parameters is performed\.

      * ?__headers__ *dict*?

        This optional dictionary provides headers to be added to the HTTP
        request\. The keys must be in *lower case* for the authentication to
        work\. The values must not contain embedded newlines or carriage returns\.
        This is primarily useful for adding x\-amz\-\* headers\. Since
        authentication is calculated by __S3::REST__, do not add that header
        here\. Since content\-type gets its own key, also do not add that header
        here\.

      * ?__inbody__ *contentstring*?

        This optional item, if provided, gives the content that will be sent\. It
        is sent with a tranfer encoding of binary, and only the low bytes are
        used, so use \[encoding convertto utf\-8\] if the string is a utf\-8 string\.
        This is written all in one blast, so if you are using non\-blocking mode
        and the __inbody__ is especially large, you may wind up blocking on
        the write socket\.

      * ?__infile__ *filename*?

        This optional item, if provided, and if __inbody__ is not provided,
        names the file from which the body of the HTTP message will be
        constructed\. The file is opened for reading and sent progressively by
        \[fcopy\], so it should not block in non\-blocking mode even if the file is
        very large\. The file is transfered in binary mode, so the bytes on your
        disk will match the bytes in your resource\. Due to HTTP restrictions, it
        must be possible to use \[file size\] on this file to determine the size
        at the start of the transaction\.

      * ?__S3chan__ *channel*?

        This optional item, if provided, indicates the already\-open socket over
        which the transaction should be conducted\. If not provided, a connection
        is made to the service access point specified via __S3::Configure__,
        which is normally s3\.amazonaws\.com\. If this is provided, the channel is
        not closed at the end of the transaction\.

      * ?__outchan__ *channel*?

        This optional item, if provided, indicates the already\-open channel to
        which the body returned from S3 should be written\. That is, to retrieve
        a large resource, open a file, set the translation mode, and pass the
        channel as the value of the key outchan\. Output will be written to the
        channel in pieces so memory does not fill up unnecessarily\. The channel
        is not closed at the end of the transaction\.

      * ?__resultvar__ *varname*?

        This optional item, if provided, indicates that __S3::REST__ should
        run in non\-blocking mode\. The *varname* should be fully qualified with
        respect to namespaces and cannot be local to a proc\. If provided, the
        result of the __S3::REST__ call is assigned to this variable once
        everything has completed; use trace or vwait to know when this has
        happened\. If this key is not provided, the result is simply returned
        from the call to __S3::REST__ and no calls to the eventloop are
        invoked from within this call\.

      * ?__throwsocket__ *throw&#124;return*?

        This optional item, if provided, indicates that __S3::REST__ should
        throw an error if throwmode is throw and a socket error is encountered\.
        It indicates that __S3::REST__ should return the error code in the
        returned dictionary if a socket error is encountered and this is set to
        return\. If __throwsocket__ is set to *return* or if the call is
        not blocking, then a socket error \(i\.e\., an error whose error code
        starts with "S3 socket" will be returned in the dictionary as
        __error__, __errorInfo__, and __errorCode__\. If a foreground
        call is made \(i\.e\., __resultvar__ is not provided\), and this option
        is not provided or is set to *throw*, then
        __[error](\.\./\.\./\.\./\.\./index\.md\#error)__ will be invoked instead\.

    Once the call to __S3::REST__ completes, a new dict is returned, either
    in the *resultvar* or as the result of execution\. This dict is a copy of
    the original dict with the results added as new keys\. The possible new keys
    are these:

      * __error__ *errorstring*

      * __errorInfo__ *errorstring*

      * __errorCode__ *errorstring*

        If an error is caught, these three keys will be set in the result\. Note
        that __S3::REST__ does *not* consider a non\-2XX HTTP return code
        as an error\. The __errorCode__ value will be formatted according to
        the [ERROR REPORTING](#section2) description\. If these are present,
        other keys described here might not be\.

      * __httpstatus__ *threedigits*

        The three\-digit code from the HTTP transaction\. 2XX for good, 5XX for
        server error, etc\.

      * __httpmessage__ *text*

        The textual result after the status code\. "OK" or "Forbidden" or etc\.

      * __outbody__ *contentstring*

        If *outchan* was not specified, this key will hold a reference to the
        \(unencoded\) contents of the body returned\. If Amazon returned an error
        \(a la the httpstatus not a 2XX value\), the error message will be in
        __outbody__ or written to __outchan__ as appropriate\.

      * __outheaders__ *dict*

        This contains a dictionary of headers returned by Amazon\. The keys are
        always lower case\. It's mainly useful for finding the x\-amz\-meta\-\*
        headers, if any, although things like last\-modified and content\-type are
        also useful\. The keys of this dictionary are always lower case\. Both
        keys and values are trimmed of extraneous whitespace\.

# <a name='section5'></a>HIGH LEVEL COMMANDS

The routines in this section all make use of one or more calls to
__S3::REST__ to do their work, then parse and manage the data in a
convenient way\. All these commands throw errors as described in [ERROR
REPORTING](#section2) unless otherwise noted\.

In all these commands, all arguments are presented as name/value pairs, in any
order\. All the argument names start with a hyphen\.

There are a few options that are common to many of the commands, and those
common options are documented here\.

  - __\-blocking__ *boolean*

    If provided and specified as false, then any calls to __S3:REST__ will
    be non\-blocking, and internally these routines will call \[vwait\] to get the
    results\. In other words, these routines will return the same value, but
    they'll have event loops running while waiting for Amazon\.

  - __\-parse\-xml__ *xmlstring*

    If provided, the routine skips actually communicating with Amazon, and
    instead behaves as if the XML string provided was returned as the body of
    the call\. Since several of these routines allow the return of data in
    various formats, this argument can be used to parse existing XML to extract
    the bits of information that are needed\. It's also helpful for testing\.

  - __\-bucket__ *bucketname*

    Almost every high\-level command needs to know what bucket the resources are
    in\. This option specifies that\. \(Only the command to list available buckets
    does not require this parameter\.\) This does not need to be URL\-encoded, even
    if it contains special or non\-ASCII characters\. May or may not contain
    leading or trailing spaces \- commands normalize the bucket\. If this is not
    supplied, the value is taken from __S3::Configure \-default\-bucket__ if
    that string isn't empty\. Note that spaces and slashes are always trimmed
    from both ends and the rest must leave a valid bucket\.

  - __\-resource__ *resourcename*

    This specifies the resource of interest within the bucket\. It may or may not
    start with a slash \- both cases are handled\. This does not need to be
    URL\-encoded, even if it contains special or non\-ASCII characters\.

  - __\-compare__ *always&#124;never&#124;exists&#124;missing&#124;newer&#124;date&#124;checksum&#124;different*

    When commands copy resources to files or files to resources, the caller may
    specify that the copy should be skipped if the contents are the same\. This
    argument specifies the conditions under which the files should be copied\. If
    it is not passed, the result of __S3::Configure \-default\-compare__ is
    used, which in turn defaults to "always\." The meanings of the various values
    are these:

      * *always*

        Always copy the data\. This is the default\.

      * *never*

        Never copy the data\. This is essentially a no\-op, except in
        __S3::Push__ and __S3::Pull__ where the \-delete flag might make
        a difference\.

      * *exists*

        Copy the data only if the destination already exists\.

      * *missing*

        Copy the data only if the destination does not already exist\.

      * *newer*

        Copy the data if the destination is missing, or if the date on the
        source is newer than the date on the destination by at least
        __S3::Configure \-slop\-seconds__ seconds\. If the source is Amazon,
        the date is taken from the Last\-Modified header\. If the source is local,
        it is taken as the mtime of the file\. If the source data is specified in
        a string rather than a file, it is taken as right now, via \[clock
        seconds\]\.

      * *date*

        Like *newer*, except copy if the date is newer *or* older\.

      * *checksum*

        Calculate the MD5 checksum on the local file or string, ask Amazon for
        the eTag of the resource, and copy the data if they're different\. Copy
        the data also if the destination is missing\. Note that this can be slow
        with large local files unless the C version of the MD5 support is
        available\.

      * *different*

        Copy the data if the destination does not exist\. If the destination
        exists and an actual file name was specified \(rather than a content
        string\), and the date on the file differs from the date on the resource,
        copy the data\. If the data is provided as a content string, the "date"
        is treated as "right now", so it will likely always differ unless
        slop\-seconds is large\. If the dates are the same, the MD5 checksums are
        compared, and the data is copied if the checksums differ\.

    Note that "newer" and "date" don't care about the contents, and "checksum"
    doesn't care about the dates, but "different" checks both\.

  - <a name='4'></a>__S3::ListAllMyBuckets__ ?__\-blocking__ *boolean*? ?__\-parse\-xml__ *xmlstring*? ?__\-result\-type__ *REST&#124;xml&#124;pxml&#124;dict&#124;names&#124;owner*?

    This routine performs a GET on the Amazon S3 service, which is defined to
    return a list of buckets owned by the account identified by the
    authorization header\. \(Blame Amazon for the dumb names\.\)

      * __\-blocking__ *boolean*

        See above for standard definition\.

      * __\-parse\-xml__ *xmlstring*

        See above for standard definition\.

      * __\-result\-type__ *REST*

        The dictionary returned by __S3::REST__ is the return value of
        __S3::ListAllMyBuckets__\. In this case, a non\-2XX httpstatus will
        not throw an error\. You may not combine this with *\-parse\-xml*\.

      * __\-result\-type__ *xml*

        The raw XML of the body is returned as the result \(with no encoding
        applied\)\.

      * __\-result\-type__ *pxml*

        The XML of the body as parsed by __xsxp::parse__ is returned\.

      * __\-result\-type__ *dict*

        A dictionary of interesting portions of the XML is returned\. The
        dictionary contains the following keys:

          + Owner/ID

            The Amazon AWS ID \(in hex\) of the owner of the bucket\.

          + Owner/DisplayName

            The Amazon AWS ID's Display Name\.

          + Bucket/Name

            A list of names, one for each bucket\.

          + Bucket/CreationDate

            A list of dates, one for each bucket, in the same order as
            Bucket/Name, in ISO format \(as returned by Amazon\)\.

      * __\-result\-type__ *names*

        A list of bucket names is returned with all other information stripped
        out\. This is the default result type for this command\.

      * __\-result\-type__ *owner*

        A list containing two elements is returned\. The first element is the
        owner's ID, and the second is the owner's display name\.

  - <a name='5'></a>__S3::PutBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*? ?__\-acl__ *\{\}&#124;private&#124;public\-read&#124;public\-read\-write&#124;authenticated\-read*?

    This command creates a bucket if it does not already exist\. Bucket names are
    globally unique, so you may get a "Forbidden" error from Amazon even if you
    cannot see the bucket in __S3::ListAllMyBuckets__\. See
    __S3::SuggestBucket__ for ways to minimize this risk\. The x\-amz\-acl
    header comes from the __\-acl__ option, or from __S3::Configure
    \-default\-acl__ if not specified\.

  - <a name='6'></a>__S3::DeleteBucket__ ?__\-bucket__ *bucketname*? ?__\-blocking__ *boolean*?

    This command deletes a bucket if it is empty and you have such permission\.
    Note that Amazon's list of buckets is a global resource, requiring far\-flung
    synchronization\. If you delete a bucket, it may be quite a few minutes \(or
    hours\) before you can recreate it, yielding "Conflict" errors until then\.


  - <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*?

    This lists the contents of a bucket\. That is, it returns a directory listing
    of resources within a bucket, rather than transfering any user data\.

      * __\-bucket__ *bucketname*

        The standard bucket argument\.

      * __\-blocking__ *boolean*

        The standard blocking argument\.

      * __\-parse\-xml__ *xmlstring*

        The standard parse\-xml argument\.

      * __\-max\-count__ *integer*

        If supplied, this is the most number of records to be returned\. If not
        supplied, the code will iterate until all records have been found\. Not
        compatible with \-parse\-xml\. Note that if this is supplied, only one call
        to __S3::REST__ will be made\. Otherwise, enough calls will be made
        to exhaust the listing, buffering results in memory, so take care if you
        may have huge buckets\.

      * __\-prefix__ *prefixstring*

        If present, restricts listing to resources with a particular prefix\. One
        leading / is stripped if present\.

      * __\-delimiter__ *delimiterstring*

        If present, specifies a delimiter for the listing\. The presence of this
        will summarize multiple resources into one entry, as if S3 supported
        directories\. See the Amazon documentation for details\.


      * __\-result\-type__ *REST&#124;xml&#124;pxml&#124;names&#124;dict*

        This indicates the format of the return result of the command\.

          + REST

            If *\-max\-count* is specified, the dictionary returned from
            __S3::REST__ is returned\. If *\-max\-count* is not specified, a
            list of all the dictionaries returned from the one or more calls to
            __S3::REST__ is returned\.

          + xml

            If *\-max\-count* is specified, the body returned from
            __S3::REST__ is returned\. If *\-max\-count* is not specified, a
            list of all the bodies returned from the one or more calls to
            __S3::REST__ is returned\.

          + pxml

            If *\-max\-count* is specified, the body returned from
            __S3::REST__ is passed throught __xsxp::parse__ and then
            returned\. If *\-max\-count* is not specified, a list of all the
            bodies returned from the one or more calls to __S3::REST__ are
            each passed through __xsxp::parse__ and then returned\.

          + names

            Returns a list of all names found in either the Contents/Key fields
            or the CommonPrefixes/Prefix fields\. If no *\-delimiter* is
            specified and no *\-max\-count* is specified, this returns a list of
            all resources with the specified *\-prefix*\.

          + dict

            Returns a dictionary\. \(Returns only one dictionary even if
            *\-max\-count* wasn't specified\.\) The keys of the dictionary are as
            follows:

              - Name

                The name of the bucket \(from the final call to
                __S3::REST__\)\.

              - Prefix

                From the final call to __S3::REST__\.

              - Marker

                From the final call to __S3::REST__\.

              - MaxKeys

                From the final call to __S3::REST__\.

              - IsTruncated

                From the final call to __S3::REST__, so always false if
                *\-max\-count* is not specified\.

              - NextMarker

                Always provided if IsTruncated is true, and calculated of Amazon
                does not provide it\. May be empty if IsTruncated is false\.

              - Key

                A list of names of resources in the bucket matching the
                *\-prefix* and *\-delimiter* restrictions\.

              - LastModified

                A list of times of resources in the bucket, in the same order as
                Key, in the format returned by Amazon\. \(I\.e\., it is not parsed
                into a seconds\-from\-epoch\.\)

              - ETag

                A list of entity tags \(a\.k\.a\. MD5 checksums\) in the same order
                as Key\.

              - Size

                A list of sizes in bytes of the resources, in the same order as
                Key\.

              - Owner/ID

                A list of owners of the resources in the bucket, in the same
                order as Key\.

              - Owner/DisplayName

                A list of owners of the resources in the bucket, in the same
                order as Key\. These are the display names\.

              - CommonPrefixes/Prefix

                A list of prefixes common to multiple entities\. This is present
                only if *\-delimiter* was supplied\.

  - <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*?

    This command sends data to a resource on Amazon's servers for storage, using
    the HTTP PUT command\. It returns 0 if the __\-compare__ mode prevented
    the transfer, 1 if the transfer worked, or throws an error if the transfer
    was attempted but failed\. Server 5XX errors and S3 socket errors are retried
    according to __S3:Configure \-retries__ settings before throwing an
    error; other errors throw immediately\.

      * __\-bucket__

        This specifies the bucket into which the resource will be written\.
        Leading and/or trailing slashes are removed for you, as are spaces\.

      * __\-resource__

        This is the full name of the resource within the bucket\. A single
        leading slash is removed, but not a trailing slash\. Spaces are not
        trimmed\.

      * __\-blocking__

        The standard blocking flag\.

      * __\-file__

        If this is specified, the *filename* must exist, must be readable, and
        must not be a special or directory file\. \[file size\] must apply to it
        and must not change for the lifetime of the call\. The default
        content\-type is calculated based on the name and/or contents of the
        file\. Specifying this is an error if __\-content__ is also specified,
        but at least one of __\-file__ or __\-content__ must be specified\.
        \(The file is allowed to not exist or not be readable if __\-compare__
        *never* is specified\.\)

      * __\-content__

        If this is specified, the *contentstring* is sent as the body of the
        resource\. The content\-type defaults to "application/octet\-string"\. Only
        the low bytes are sent, so non\-ASCII should use the appropriate encoding
        \(such as \[encoding convertto utf\-8\]\) before passing it to this routine,
        if necessary\. Specifying this is an error if __\-file__ is also
        specified, but at least one of __\-file__ or __\-content__ must be
        specified\.

      * __\-acl__

        This defaults to __S3::Configure \-default\-acl__ if not specified\. It
        sets the x\-amz\-acl header on the PUT operation\. If the value provided is
        *calc*, the x\-amz\-acl header is calculated based on the I/O
        permissions of the file to be uploaded; it is an error to specify
        *calc* and __\-content__\. If the value provided is *keep*, the
        acl of the resource is read before the PUT \(or the default is used if
        the resource does not exist\), then set back to what it was after the PUT
        \(if it existed\)\. An error will occur if the resource is successfully
        written but the kept ACL cannot be then applied\. This should never
        happen\. *Note:* *calc* is not currently fully implemented\.

      * __\-x\-amz\-meta\-\*__

        If any header starts with "\-x\-amz\-meta\-", its contents are added to the
        PUT command to be stored as metadata with the resource\. Again, no
        encoding is performed, and the metadata should not contain characters
        like newlines, carriage returns, and so on\. It is best to stick with
        simple ASCII strings, or to fix the library in several places\.

      * __\-content\-type__

        This overrides the content\-type calculated by __\-file__ or sets the
        content\-type for __\-content__\.

      * __\-compare__

        This is the standard compare mode argument\. __S3::Put__ returns 1 if
        the data was copied or 0 if the data was skipped due to the comparison
        mode so indicating it should be skipped\.

  - <a name='9'></a>__S3::Get__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-compare__ *comparemode*? ?__\-file__ *filename*? ?__\-content__ *contentvarname*? ?__\-timestamp__ *aws&#124;now*? ?__\-headers__ *headervarname*?

    This command retrieves data from a resource on Amazon's S3 servers, using
    the HTTP GET command\. It returns 0 if the __\-compare__ mode prevented
    the transfer, 1 if the transfer worked, or throws an error if the transfer
    was attempted but failed\. Server 5XX errors and S3 socket errors are are
    retried according to __S3:Configure__ settings before throwing an error;
    other errors throw immediately\. Note that this is always authenticated as
    the user configured in via __S3::Configure \-accesskeyid__\. Use the
    Tcllib http for unauthenticated GETs\.

      * __\-bucket__

        This specifies the bucket from which the resource will be read\. Leading
        and/or trailing slashes are removed for you, as are spaces\.

      * __\-resource__

        This is the full name of the resource within the bucket\. A single
        leading slash is removed, but not a trailing slash\. Spaces are not
        trimmed\.

      * __\-blocking__

        The standard blocking flag\.

      * __\-file__

        If this is specified, the body of the resource will be read into this
        file, incrementally without pulling it entirely into memory first\. The
        parent directory must already exist\. If the file already exists, it must
        be writable\. If an error is thrown part\-way through the process and the
        file already existed, it may be clobbered\. If an error is thrown
        part\-way through the process and the file did not already exist, any
        partial bits will be deleted\. Specifying this is an error if
        __\-content__ is also specified, but at least one of __\-file__ or
        __\-content__ must be specified\.

      * __\-timestamp__

        This is only valid in conjunction with __\-file__\. It may be
        specified as *now* or *aws*\. The default is *now*\. If *now*, the
        file's modification date is left up to the system\. If *aws*, the
        file's mtime is set to match the Last\-Modified header on the resource,
        synchronizing the two appropriately for __\-compare__ *date* or
        __\-compare__ *newer*\.

      * __\-content__

        If this is specified, the *contentvarname* is a variable in the
        caller's scope \(not necessarily global\) that receives the value of the
        body of the resource\. No encoding is done, so if the resource \(for
        example\) represents a UTF\-8 byte sequence, use \[encoding convertfrom
        utf\-8\] to get a valid UTF\-8 string\. If this is specified, the
        __\-compare__ is ignored unless it is *never*, in which case no
        assignment to *contentvarname* is performed\. Specifying this is an
        error if __\-file__ is also specified, but at least one of
        __\-file__ or __\-content__ must be specified\.

      * __\-compare__

        This is the standard compare mode argument\. __S3::Get__ returns 1 if
        the data was copied or 0 if the data was skipped due to the comparison
        mode so indicating it should be skipped\.

      * __\-headers__

        If this is specified, the headers resulting from the fetch are stored in
        the provided variable, as a dictionary\. This will include content\-type
        and x\-amz\-meta\-\* headers, as well as the usual HTTP headers, the
        x\-amz\-id debugging headers, and so on\. If no file is fetched \(due to
        __\-compare__ or other errors\), no assignment to this variable is
        performed\.

  - <a name='10'></a>__S3::Head__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-dict__ *dictvarname*? ?__\-headers__ *headersvarname*? ?__\-status__ *statusvarname*?

    This command requests HEAD from the resource\. It returns whether a 2XX code
    was returned as a result of the request, never throwing an S3 remote error\.
    That is, if this returns 1, the resource exists and is accessible\. If this
    returns 0, something went wrong, and the __\-status__ result can be
    consulted for details\.

      * __\-bucket__

        This specifies the bucket from which the resource will be read\. Leading
        and/or trailing slashes are removed for you, as are spaces\.

      * __\-resource__

        This is the full name of the resource within the bucket\. A single
        leading slash is removed, but not a trailing slash\. Spaces are not
        trimmed\.

      * __\-blocking__

        The standard blocking flag\.

      * __\-dict__

        If specified, the resulting dictionary from the __S3::REST__ call is
        assigned to the indicated \(not necessarily global\) variable in the
        caller's scope\.

      * __\-headers__

        If specified, the dictionary of headers from the result are assigned to
        the indicated \(not necessarily global\) variable in the caller's scope\.

      * __\-status__

        If specified, the indicated \(not necessarily global\) variable in the
        caller's scope is assigned a 2\-element list\. The first element is the
        3\-digit HTTP status code, while the second element is the HTTP message
        \(such as "OK" or "Forbidden"\)\.

  - <a name='11'></a>__S3::GetAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-result\-type__ *REST&#124;xml&#124;pxml*?

    This command gets the ACL of the indicated resource or throws an error if it
    is unavailable\.

      * __\-blocking__ *boolean*

        See above for standard definition\.

      * __\-bucket__

        This specifies the bucket from which the resource will be read\. Leading
        and/or trailing slashes are removed for you, as are spaces\.

      * __\-resource__

        This is the full name of the resource within the bucket\. A single
        leading slash is removed, but not a trailing slash\. Spaces are not
        trimmed\.

      * __\-parse\-xml__ *xml*

        The XML from a previous GetACL can be passed in to be parsed into
        dictionary form\. In this case, \-result\-type must be pxml or dict\.

      * __\-result\-type__ *REST*

        The dictionary returned by __S3::REST__ is the return value of
        __S3::GetAcl__\. In this case, a non\-2XX httpstatus will not throw an
        error\.

      * __\-result\-type__ *xml*

        The raw XML of the body is returned as the result \(with no encoding
        applied\)\.

      * __\-result\-type__ *pxml*

        The XML of the body as parsed by __xsxp::parse__ is returned\.

      * __\-result\-type__ *dict*

        This fetches the ACL, parses it, and returns a dictionary of two
        elements\.

        The first element has the key "owner" whose value is the canonical ID of
        the owner of the resource\.

        The second element has the key "acl" whose value is a dictionary\. Each
        key in the dictionary is one of Amazon's permissions, namely "READ",
        "WRITE", "READ\_ACP", "WRITE\_ACP", or "FULL\_CONTROL"\. Each value of each
        key is a list of canonical IDs or group URLs that have that permission\.
        Elements are not in the list in any particular order, and not all keys
        are necessarily present\. Display names are not returned, as they are not
        especially useful; use pxml to obtain them if necessary\.

  - <a name='12'></a>__S3::PutAcl__ ?__\-blocking__ *boolean*? ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-acl__ *new\-acl*?

    This sets the ACL on the indicated resource\. It returns the XML written to
    the ACL, or throws an error if anything went wrong\.

      * __\-blocking__ *boolean*

        See above for standard definition\.

      * __\-bucket__

        This specifies the bucket from which the resource will be read\. Leading
        and/or trailing slashes are removed for you, as are spaces\.

      * __\-resource__

        This is the full name of the resource within the bucket\. A single
        leading slash is removed, but not a trailing slash\. Spaces are not
        trimmed\.

      * __\-owner__

        If this is provided, it is assumed to match the owner of the resource\.
        Otherwise, a GET may need to be issued against the resource to find the
        owner\. If you already have the owner \(such as from a call to
        __S3::GetAcl__, you can pass the value of the "owner" key as the
        value of this option, and it will be used in the construction of the
        XML\.

      * __\-acl__

        If this option is specified, it provides the ACL the caller wishes to
        write to the resource\. If this is not supplied or is empty, the value is
        taken from __S3::Configure \-default\-acl__\. The ACL is written with a
        PUT to the ?acl resource\.

        If the value passed to this option starts with "<", it is taken to be a
        body to be PUT to the ACL resource\.

        If the value matches one of the standard Amazon x\-amz\-acl headers \(i\.e\.,
        a canned access policy\), that header is translated to XML and then
        applied\. The canned access policies are private, public\-read,
        public\-read\-write, and authenticated\-read \(in lower case\)\.

        Otherwise, the value is assumed to be a dictionary formatted as the
        "acl" sub\-entry within the dict returns by __S3::GetAcl \-result\-type
        dict__\. The proper XML is generated and applied to the resource\. Note
        that a value containing "//" is assumed to be a group, a value
        containing "@" is assumed to be an AmazonCustomerByEmail, and otherwise
        the value is assumed to be a canonical Amazon ID\.

        Note that you cannot change the owner, so calling GetAcl on a resource
        owned by one user and applying it via PutAcl on a resource owned by
        another user may not do exactly what you expect\.

  - <a name='13'></a>__S3::Delete__ ?__\-bucket__ *bucketname*? __\-resource__ *resourcename* ?__\-blocking__ *boolean*? ?__\-status__ *statusvar*?

    This command deletes the specified resource from the specified bucket\. It
    returns 1 if the resource was deleted successfully, 0 otherwise\. It returns
    0 rather than throwing an S3 remote error\.

      * __\-bucket__

        This specifies the bucket from which the resource will be deleted\.
        Leading and/or trailing slashes are removed for you, as are spaces\.

      * __\-resource__

        This is the full name of the resource within the bucket\. A single
        leading slash is removed, but not a trailing slash\. Spaces are not
        trimmed\.

      * __\-blocking__

        The standard blocking flag\.

      * __\-status__

        If specified, the indicated \(not necessarily global\) variable in the
        caller's scope is set to a two\-element list\. The first element is the
        3\-digit HTTP status code\. The second element is the HTTP message \(such
        as "OK" or "Forbidden"\)\. Note that Amazon's DELETE result is 204 on
        success, that being the code indicating no content in the returned body\.

  - <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*?

    This synchronises a local directory with a remote bucket by pushing the
    differences using __S3::Put__\. Note that if something has changed in the
    bucket but not locally, those changes could be lost\. Thus, this is not a
    general two\-way synchronization primitive\. \(See __S3::Sync__ for that\.\)
    Note too that resource names are case sensitive, so changing the case of a
    file on a Windows machine may lead to otherwise\-unnecessary transfers\. Note
    that only regular files are considered, so devices, pipes, symlinks, and
    directories are not copied\.

      * __\-bucket__

        This names the bucket into which data will be pushed\.

      * __\-directory__

        This names the local directory from which files will be taken\. It must
        exist, be readable via \[glob\] and so on\. If only some of the files
        therein are readable, __