diff --git a/apps/pt b/apps/pt index 7389604ed6..3337054eb3 100755 --- a/apps/pt +++ b/apps/pt @@ -97,12 +97,24 @@ proc ::pt::app::Topics {} { proc ::pt::app::generateHelp {} { return { - @ generate PFORMAT ?-option value...? PFILE INFORMAT GFILE + @ generate PFORMAT ?-option value...? PFILE GFORMAT GFILE Generate data in format PFORMAT and write it to PFILE. Read the grammar to be processed from GFILE (assuming the format GFORMAT). Use any options to configure the generator. The are dependent on PFORMAT. + + Available GFORMATs are: + + json, peg, serial + + Available PFORMATs are: + + c, container, critcl, json, nx, oo, oo-sa, + param, peg, snit, snit-sa, tea + + The -sa formats inline the required runtime package into the + result. } } proc ::pt::app::generate {args} { diff --git a/embedded/index.md b/embedded/index.md index bbb361887c..d30b945ffa 100644 --- a/embedded/index.md +++ b/embedded/index.md @@ -20,7 +20,7 @@ Packages - [Table Of Contents](md/toc.md) The download links are on the referenced pages. * [Trunk Head](head.md) - * [Current Release](../../../technote/cd3a11c3065120d491009e64a19f7676176045cd) __1.20 (Dec 1, 2019)__ + * [Current Release](../../../technote/7a047636411e9c9d8e1410ddee0fb02d1458a7c0) __1.21 (May 7, 2022)__ * [Past Releases](../../../wiki?name=Past+Releases) * [Development Snapshots](../../../wiki?name=Development+Snapshots) * [@ SourceForge](https://sourceforge.net/projects/tcllib/files/) diff --git a/embedded/md/index.md b/embedded/md/index.md index c7d3e2ac99..494dc35e25 100644 --- a/embedded/md/index.md +++ b/embedded/md/index.md @@ -130,6 +130,8 @@ |channel transformation|[tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) · [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) · [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) · [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) · [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) · [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) · [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) · [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) · [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) · [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) · [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) · [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)| |character input|[term::receive](tcllib/files/modules/term/receive\.md) · [term::receive::bind](tcllib/files/modules/term/term\_bind\.md)| |character output|[term::ansi::send](tcllib/files/modules/term/ansi\_send\.md) · [term::send](tcllib/files/modules/term/term\_send\.md)| +|character type|[textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md)| +|character width|[textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md)| |chat|[irc](tcllib/files/modules/irc/irc\.md) · [multiplexer](tcllib/files/modules/multiplexer/multiplexer\.md) · [picoirc](tcllib/files/modules/irc/picoirc\.md)| |checkbox|[html](tcllib/files/modules/html/html\.md) · [javascript](tcllib/files/modules/javascript/javascript\.md)| |checkbutton|[html](tcllib/files/modules/html/html\.md)| @@ -271,6 +273,7 @@ |DOM|[treeql](tcllib/files/modules/treeql/treeql\.md)| |dom|[xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md)| |domain name service|[dns](tcllib/files/modules/dns/tcllib\_dns\.md)| +|double\-wide character|[textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md)| |\.dtx|[docstrip](tcllib/files/modules/docstrip/docstrip\.md) · [docstrip\_util](tcllib/files/modules/docstrip/docstrip\_util\.md) · [tcldocstrip](tcllib/files/apps/tcldocstrip\.md)| @@ -542,7 +545,7 @@ |math|[math](tcllib/files/modules/math/math\.md) · [math::bigfloat](tcllib/files/modules/math/bigfloat\.md) · [math::bignum](tcllib/files/modules/math/bignum\.md) · [math::calculus](tcllib/files/modules/math/calculus\.md) · [math::complexnumbers](tcllib/files/modules/math/qcomplex\.md) · [math::constants](tcllib/files/modules/math/constants\.md) · [math::decimal](tcllib/files/modules/math/decimal\.md) · [math::fuzzy](tcllib/files/modules/math/fuzzy\.md) · [math::geometry](tcllib/files/modules/math/math\_geometry\.md) · [math::interpolate](tcllib/files/modules/math/interpolate\.md) · [math::linearalgebra](tcllib/files/modules/math/linalg\.md) · [math::optimize](tcllib/files/modules/math/optimize\.md) · [math::PCA](tcllib/files/modules/math/pca\.md) · [math::polynomials](tcllib/files/modules/math/polynomials\.md) · [math::rationalfunctions](tcllib/files/modules/math/rational\_funcs\.md) · [math::special](tcllib/files/modules/math/special\.md) · [math::trig](tcllib/files/modules/math/trig\.md) · [simulation::annealing](tcllib/files/modules/simulation/annealing\.md) · [simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md) · [simulation::random](tcllib/files/modules/simulation/simulation\_random\.md)| |mathematics|[math::figurate](tcllib/files/modules/math/figurate\.md) · [math::fourier](tcllib/files/modules/math/fourier\.md) · [math::probopt](tcllib/files/modules/math/probopt\.md) · [math::quasirandom](tcllib/files/modules/math/quasirandom\.md) · [math::statistics](tcllib/files/modules/math/statistics\.md)| |matrices|[math::linearalgebra](tcllib/files/modules/math/linalg\.md)| -|matrix|[csv](tcllib/files/modules/csv/csv\.md) · [math::linearalgebra](tcllib/files/modules/math/linalg\.md) · [report](tcllib/files/modules/report/report\.md) · [struct::matrix](tcllib/files/modules/struct/matrix\.md) · [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) · [struct::queue](tcllib/files/modules/struct/queue\.md) · [struct::stack](tcllib/files/modules/struct/stack\.md)| +|matrix|[csv](tcllib/files/modules/csv/csv\.md) · [math::linearalgebra](tcllib/files/modules/math/linalg\.md) · [report](tcllib/files/modules/report/report\.md) · [struct::matrix](tcllib/files/modules/struct/matrix\.md) · [struct::queue](tcllib/files/modules/struct/queue\.md) · [struct::stack](tcllib/files/modules/struct/stack\.md)| |max cut|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)| |maximum|[math::optimize](tcllib/files/modules/math/optimize\.md)| |maximum flow|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)| @@ -673,7 +676,7 @@ |post\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)| |practcl|[practcl](tcllib/files/modules/practcl/practcl\.md)| |pre\-order|[struct::tree](tcllib/files/modules/struct/struct\_tree\.md)| -|prefix|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) · [textutil::trim](tcllib/files/modules/textutil/trim\.md)| +|prefix|[textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) · [textutil::trim](tcllib/files/modules/textutil/trim\.md) · [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md)| |prime|[math::numtheory](tcllib/files/modules/math/numtheory\.md)| |prioqueue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) · [struct::queue](tcllib/files/modules/struct/queue\.md)| |priority queue|[struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md)| @@ -726,7 +729,7 @@ |reference|[doctools::idx](tcllib/files/modules/doctools2idx/idx\_container\.md) · [doctools::idx::export](tcllib/files/modules/doctools2idx/idx\_export\.md) · [doctools::idx::import](tcllib/files/modules/doctools2idx/idx\_import\.md) · [doctools::toc](tcllib/files/modules/doctools2toc/toc\_container\.md) · [doctools::toc::export](tcllib/files/modules/doctools2toc/toc\_export\.md) · [doctools::toc::import](tcllib/files/modules/doctools2toc/toc\_import\.md)| |reflected channel|[tcl::chan::cat](tcllib/files/modules/virtchannel\_base/cat\.md) · [tcl::chan::core](tcllib/files/modules/virtchannel\_core/core\.md) · [tcl::chan::events](tcllib/files/modules/virtchannel\_core/events\.md) · [tcl::chan::facade](tcllib/files/modules/virtchannel\_base/facade\.md) · [tcl::chan::fifo](tcllib/files/modules/virtchannel\_base/tcllib\_fifo\.md) · [tcl::chan::fifo2](tcllib/files/modules/virtchannel\_base/tcllib\_fifo2\.md) · [tcl::chan::halfpipe](tcllib/files/modules/virtchannel\_base/halfpipe\.md) · [tcl::chan::memchan](tcllib/files/modules/virtchannel\_base/tcllib\_memchan\.md) · [tcl::chan::null](tcllib/files/modules/virtchannel\_base/tcllib\_null\.md) · [tcl::chan::nullzero](tcllib/files/modules/virtchannel\_base/nullzero\.md) · [tcl::chan::random](tcllib/files/modules/virtchannel\_base/tcllib\_random\.md) · [tcl::chan::std](tcllib/files/modules/virtchannel\_base/std\.md) · [tcl::chan::string](tcllib/files/modules/virtchannel\_base/tcllib\_string\.md) · [tcl::chan::textwindow](tcllib/files/modules/virtchannel\_base/textwindow\.md) · [tcl::chan::variable](tcllib/files/modules/virtchannel\_base/tcllib\_variable\.md) · [tcl::chan::zero](tcllib/files/modules/virtchannel\_base/tcllib\_zero\.md) · [tcl::randomseed](tcllib/files/modules/virtchannel\_base/randseed\.md) · [tcl::transform::adler32](tcllib/files/modules/virtchannel\_transform/adler32\.md) · [tcl::transform::base64](tcllib/files/modules/virtchannel\_transform/vt\_base64\.md) · [tcl::transform::core](tcllib/files/modules/virtchannel\_core/transformcore\.md) · [tcl::transform::counter](tcllib/files/modules/virtchannel\_transform/vt\_counter\.md) · [tcl::transform::crc32](tcllib/files/modules/virtchannel\_transform/vt\_crc32\.md) · [tcl::transform::hex](tcllib/files/modules/virtchannel\_transform/hex\.md) · [tcl::transform::identity](tcllib/files/modules/virtchannel\_transform/identity\.md) · [tcl::transform::limitsize](tcllib/files/modules/virtchannel\_transform/limitsize\.md) · [tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md) · [tcl::transform::otp](tcllib/files/modules/virtchannel\_transform/vt\_otp\.md) · [tcl::transform::rot](tcllib/files/modules/virtchannel\_transform/rot\.md) · [tcl::transform::spacer](tcllib/files/modules/virtchannel\_transform/spacer\.md) · [tcl::transform::zlib](tcllib/files/modules/virtchannel\_transform/tcllib\_zlib\.md)| |regex|[string::token](tcllib/files/modules/string/token\.md)| -|regular expression|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) · [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) · [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) · [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) · [textutil](tcllib/files/modules/textutil/textutil\.md) · [textutil::split](tcllib/files/modules/textutil/textutil\_split\.md) · [textutil::trim](tcllib/files/modules/textutil/trim\.md)| +|regular expression|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) · [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) · [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) · [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md) · [textutil](tcllib/files/modules/textutil/textutil\.md) · [textutil::split](tcllib/files/modules/textutil/textutil\_split\.md) · [textutil::trim](tcllib/files/modules/textutil/trim\.md) · [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md)| |regular grammar|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) · [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) · [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) · [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md)| |regular languages|[grammar::fa](tcllib/files/modules/grammar\_fa/fa\.md) · [grammar::fa::dacceptor](tcllib/files/modules/grammar\_fa/dacceptor\.md) · [grammar::fa::dexec](tcllib/files/modules/grammar\_fa/dexec\.md) · [grammar::fa::op](tcllib/files/modules/grammar\_fa/faop\.md)| |remote communication|[comm](tcllib/files/modules/comm/comm\.md) · [comm\_wire](tcllib/files/modules/comm/comm\_wire\.md)| @@ -850,7 +853,7 @@ |stochastic modelling|[simulation::montecarlo](tcllib/files/modules/simulation/montecarlo\.md)| |stream cipher|[rc4](tcllib/files/modules/rc4/rc4\.md)| |stream copy|[tcl::transform::observe](tcllib/files/modules/virtchannel\_transform/observe\.md)| -|string|[string::token](tcllib/files/modules/string/token\.md) · [string::token::shell](tcllib/files/modules/string/token\_shell\.md) · [textutil](tcllib/files/modules/textutil/textutil\.md) · [textutil::adjust](tcllib/files/modules/textutil/adjust\.md) · [textutil::expander](tcllib/files/modules/textutil/expander\.md) · [textutil::repeat](tcllib/files/modules/textutil/repeat\.md) · [textutil::split](tcllib/files/modules/textutil/textutil\_split\.md) · [textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) · [textutil::tabify](tcllib/files/modules/textutil/tabify\.md) · [textutil::trim](tcllib/files/modules/textutil/trim\.md)| +|string|[string::token](tcllib/files/modules/string/token\.md) · [string::token::shell](tcllib/files/modules/string/token\_shell\.md) · [textutil](tcllib/files/modules/textutil/textutil\.md) · [textutil::adjust](tcllib/files/modules/textutil/adjust\.md) · [textutil::expander](tcllib/files/modules/textutil/expander\.md) · [textutil::repeat](tcllib/files/modules/textutil/repeat\.md) · [textutil::split](tcllib/files/modules/textutil/textutil\_split\.md) · [textutil::string](tcllib/files/modules/textutil/textutil\_string\.md) · [textutil::tabify](tcllib/files/modules/textutil/tabify\.md) · [textutil::trim](tcllib/files/modules/textutil/trim\.md) · [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md)| |stringprep|[stringprep](tcllib/files/modules/stringprep/stringprep\.md) · [stringprep::data](tcllib/files/modules/stringprep/stringprep\_data\.md) · [unicode::data](tcllib/files/modules/stringprep/unicode\_data\.md)| |strongly connected component|[struct::graph::op](tcllib/files/modules/struct/graphops\.md)| |struct|[struct::pool](tcllib/files/modules/struct/pool\.md) · [struct::record](tcllib/files/modules/struct/record\.md)| diff --git a/embedded/md/tcllib/files/modules/comm/comm.md b/embedded/md/tcllib/files/modules/comm/comm.md index 306927a78b..2f0a71d21e 100644 --- a/embedded/md/tcllib/files/modules/comm/comm.md +++ b/embedded/md/tcllib/files/modules/comm/comm.md @@ -4,7 +4,7 @@ [//000000003]: # (Copyright © 1995\-1998 The Open Group\. All Rights Reserved\.) [//000000004]: # (Copyright © 2003\-2004 ActiveState Corporation\.) [//000000005]: # (Copyright © 2006\-2009 Andreas Kupries ) -[//000000006]: # (comm\(n\) 4\.7 tcllib "Remote communication") +[//000000006]: # (comm\(n\) 4\.7\.1 tcllib "Remote communication")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS package require Tcl 8\.5 -package require comm ?4\.7? +package require comm ?4\.7\.1? [__::comm::comm send__ ?\-async? ?\-command *callback*? *id* *cmd* ?*arg arg \.\.\.*?](#1) [__::comm::comm self__](#2) diff --git a/embedded/md/tcllib/files/modules/map/map_geocode_nominatim.md b/embedded/md/tcllib/files/modules/map/map_geocode_nominatim.md index b6ce4d7254..40c53f4296 100644 --- a/embedded/md/tcllib/files/modules/map/map_geocode_nominatim.md +++ b/embedded/md/tcllib/files/modules/map/map_geocode_nominatim.md @@ -1,7 +1,7 @@ [//000000001]: # (map::geocode::nominatim \- Mapping utilities) [//000000002]: # (Generated from file 'map\_geocode\_nominatim\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (map::geocode::nominatim\(n\) 0\.1 tcllib "Mapping utilities") +[//000000003]: # (map::geocode::nominatim\(n\) 0\.2 tcllib "Mapping utilities")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.5 +package require Tcl 8\.6 package require http package require json package require uri package require snit -package require map::geocode::nominatim ?0\.1? +package require map::geocode::nominatim ?0\.2? [__::map::geocode::nominatim__ *requestor* ?__\-baseurl__ *url*? ?__\-callback__ *callback*? ?__\-error__ *error callback*?](#1) [__$cmdprefix__ *result*](#2) diff --git a/embedded/md/tcllib/files/modules/map/map_slippy.md b/embedded/md/tcllib/files/modules/map/map_slippy.md index 4e4f828724..753b62b168 100644 --- a/embedded/md/tcllib/files/modules/map/map_slippy.md +++ b/embedded/md/tcllib/files/modules/map/map_slippy.md @@ -1,7 +1,7 @@ [//000000001]: # (map::slippy \- Mapping utilities) [//000000002]: # (Generated from file 'map\_slippy\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (map::slippy\(n\) 0\.5 tcllib "Mapping utilities") +[//000000003]: # (map::slippy\(n\) 0\.8 tcllib "Mapping utilities")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.4 -package require Tk 8\.4 -package require map::slippy ?0\.5? - -[__::map::slippy__ __length__ *level*](#1) -[__::map::slippy__ __tiles__ *level*](#2) -[__::map::slippy__ __tile size__](#3) -[__::map::slippy__ __tile valid__ *tile* *levels* ?*msgvar*?](#4) -[__::map::slippy__ __geo 2tile__ *geo*](#5) -[__::map::slippy__ __geo 2tile\.float__ *geo*](#6) -[__::map::slippy__ __geo 2point__ *geo*](#7) -[__::map::slippy__ __tile 2geo__ *tile*](#8) -[__::map::slippy__ __tile 2point__ *tile*](#9) -[__::map::slippy__ __point 2geo__ *point*](#10) -[__::map::slippy__ __point 2tile__ *point*](#11) -[__::map::slippy__ __fit geobox__ *canvdim* *geobox* *zmin* *zmax*](#12) +package require Tcl 8\.6 +package require map::slippy ?0\.8? + +[__::map__ __slippy geo box 2point__ *zoom* *geobox*](#1) +[__::map__ __slippy geo box center__ *geobox*](#2) +[__::map__ __slippy geo box corners__ *geobox*](#3) +[__::map__ __slippy geo box diameter__ *geobox*](#4) +[__::map__ __slippy geo box dimensions__ *geobox*](#5) +[__::map__ __slippy geo box fit__ *geobox* *canvdim* *zmax* ?*zmin*?](#6) +[__::map__ __slippy geo box inside__ *geobox* *geo*](#7) +[__::map__ __slippy geo box limit__ *geobox*](#8) +[__::map__ __slippy geo box opposites__ *geobox*](#9) +[__::map__ __slippy geo box perimeter__ *geobox*](#10) +[__::map__ __slippy geo box valid__ *geobox*](#11) +[__::map__ __slippy geo box valid\-list__ *geoboxes*](#12) +[__::map__ __slippy geo distance__ *geo1* *geo2*](#13) +[__::map__ __slippy geo distance\*__ *closed* *geo*\.\.\.](#14) +[__::map__ __slippy geo distance\-list__ *closed* *geo\-list*](#15) +[__::map__ __slippy geo limit__ *geo*](#16) +[__::map__ __slippy geo bbox__ *geo*\.\.\.](#17) +[__::map__ __slippy geo bbox\-list__ *geo\-list*](#18) +[__::map__ __slippy geo center__ *geo*\.\.\.](#19) +[__::map__ __slippy geo center\-list__ *geo\-list*](#20) +[__::map__ __slippy geo diameter__ *geo*\.\.\.](#21) +[__::map__ __slippy geo diameter\-list__ *geo\-list*](#22) +[__::map__ __slippy geo 2point__ *zoom* *geo*](#23) +[__::map__ __slippy geo 2point\*__ *zoom* *geo*\.\.\.](#24) +[__::map__ __slippy geo 2point\-list__ *zoom* *geo\-list*](#25) +[__::map__ __slippy geo valid__ *geo*](#26) +[__::map__ __slippy geo valid\-list__ *geos*](#27) +[__::map__ __slippy length__ *level*](#28) +[__::map__ __slippy limit2__ *x*](#29) +[__::map__ __slippy limit3__ *x*](#30) +[__::map__ __slippy limit6__ *x*](#31) +[__::map__ __slippy point box 2geo__ *zoom* *pointbox*](#32) +[__::map__ __slippy point box center__ *pointbox*](#33) +[__::map__ __slippy point box corners__ *pointbox*](#34) +[__::map__ __slippy point box diameter__ *pointbox*](#35) +[__::map__ __slippy point box dimensions__ *pointbox*](#36) +[__::map__ __slippy point box inside__ *pointbox* *point*](#37) +[__::map__ __slippy point box opposites__ *pointbox*](#38) +[__::map__ __slippy point box perimeter__ *pointbox*](#39) +[__::map__ __slippy point distance__ *point1* *point2*](#40) +[__::map__ __slippy point distance\*__ *closed* *point*\.\.\.](#41) +[__::map__ __slippy point distance\-list__ *closed* *point\-list*](#42) +[__::map__ __slippy point bbox__ *point*\.\.\.](#43) +[__::map__ __slippy point bbox\-list__ *point\-list*](#44) +[__::map__ __slippy point center__ *point*\.\.\.](#45) +[__::map__ __slippy point center\-list__ *point\-list*](#46) +[__::map__ __slippy point diameter__ *point*\.\.\.](#47) +[__::map__ __slippy point diameter\-list__ *point\-list*](#48) +[__::map__ __slippy point 2geo__ *zoom* *point*](#49) +[__::map__ __slippy point 2geo\*__ *zoom* *point*\.\.\.](#50) +[__::map__ __slippy point 2geo\-list__ *zoom* *point\-list*](#51) +[__::map__ __slippy point simplify radial__ *threshold* *point\-list*](#52) +[__::map__ __slippy point simplify rdp__ *point\-list*](#53) +[__::map__ __slippy pretty\-distance__ *x*](#54) +[__::map__ __slippy tiles__ *level*](#55) +[__::map__ __slippy tile size__](#56) +[__::map__ __slippy tile valid__ *zoom* *row* *column* *levels* ?*msgvar*?](#57) +[__::map__ __slippy valid latitude__ *x*](#58) +[__::map__ __slippy valid longitude__ *x*](#59) # DESCRIPTION This package provides a number of methods doing things needed by all types of slippy\-based map packages\. -# API +*BEWARE*, *Attention* Version *0\.8* is *NOT backward compatible* with +version 0\.7 and earlier\. The entire API was *heavily revised and changed*\. + +*Note:* For the representation of locations in the various coordinate systems +used by the commands of this package please read section [Coordinate +systems](#section2)\. The command descriptions will not repeat them, and +assume that they are understood already\. + +# Coordinate systems + +The commands of this package operate in two distinct coordinate systems, +geographical locations, and points\. The former represents coordinates for +locations on Earth, while the latter is for use on Tk *canvas* widgets\. + +## Geographic + +Geographical locations \(short: *geo*\) are represented by a pair of +*Latitude* and *[Longitude](\.\./\.\./\.\./\.\./index\.md\#longitude)* values, +each of which is measured in degrees, as they are essentially angles\. + +The __Zero__ longitude is the *Greenwich meridian*, with positive values +going *east*, and negative values going *west*, for a total range of \+/\- 180 +degrees\. Note that \+180 and \-180 longitude are the same *meridian*, opposite +to Greenwich\. + +The __zero__ latitude is the *Equator*, with positive values going +*north* and negative values going *south*\. While the true range is \+/\- 90 +degrees the projection used by the package requires us to cap the range at +roughly \+/\- __85\.05112877983284__ degrees\. This means that the North and +South poles are not representable and not part of any map\. + +A geographical location is represented by a list containing two values, the +latitude, and longitude of the location, in this order\. + +A geographical bounding box is represented by a list containing four values, the +minimal latitude and longitude of the box, and the maximal latitude and +longitude of the box, in this order\. + +Geographical locations and boxes can be converted to points and their boxes by +means of an additional parameter, the *[zoom](\.\./\.\./\.\./\.\./index\.md\#zoom)* +level\. This parameter indicates the size of the map in the canvas the +coordinates are to be projected into\. + +## Points + +Points \(short: *[point](\.\./\.\./\.\./\.\./index\.md\#point)*\) are represented by a +pair of *x* and *y* values, each of which is measured in pixels\. They +reference a location in a Tk *canvas* widget\. As a map can be shown at +different degrees of magnification, the exact pixel coordinates for a +geographical location depend on this *[zoom](\.\./\.\./\.\./\.\./index\.md\#zoom)* +level\. + +For the following explanation to make sense it should be noted that a map shown +in a Tk *canvas* widget is split into equal\-sized quadratic *tiles*\. + +Point coordinates are tile coordinates scaled by the size of these tiles\. This +package uses tiles of size __256__, which is the standard size used by many +online servers providing map tiles of some kind or other\. + +A point is represented by a list containing the x\- and y\-coordinates of the +lcoation, in this in this order\. + +A point bounding box is represented by a list containing four values, the +minimal x and y of the box, and the maximal x and y of the box, in this order\. + +Point locations and boxes can be converted to geographical locations and their +boxes by means of an additional parameter, the +*[zoom](\.\./\.\./\.\./\.\./index\.md\#zoom)* level\. This parameter indicates the +size of the map in the canvas the coordinates are projected from\. + +Tile coordinates appear only in one place of the API, in the signature of +command __map slippy tile valid__\. Everything else uses Point coordinates\. + +Using tile coordinates in the following however makes the structure of the map +at the various *[zoom](\.\./\.\./\.\./\.\./index\.md\#zoom)* levels \(maginification +factors\) easier to explain\. + +Generally the integer part of the tile coordinates represent the row and column +number of a tile of the map, wheras the fractional parts signal how far inside +that tile the location in question is, with pure integer coordinates \(no +fractional part\) representing the upper left corner of a tile\. + +The zero point of the map is at the upper left corner, regardless of zoom level, +with larger coordinates going right \(east\) and down \(south\), and smaller +coordinates going left \(west\) and up \(north\)\. Again regardless of zoom level\. + +Negative coordinates are not allowed\. + +At zoom level __0__ the entire map is represented by a single tile, putting +the geographic zero at 1/2, 1/2 in terms of tile coordinates, and the range of +tile coordinates as \[0\.\.\.1\]\. + +When going from zoom level __N__ to the next deeper \(magnified\) level +\(__N__\+1\) each tile of level __N__ is split into its four quadrants, +which then are the tiles of level __N__\+1\. + +This means that at zoom level __N__ the map is sliced \(horizontally and +vertically\) into __2^N__ rows and columns, for a total of __4^N__ tiles, +with the tile coordinates ranging from __0__ to __2^N\+1__\. + +# API + + - __::map__ __slippy geo box 2point__ *zoom* *geobox* + + The command converts the geographical box *geobox* to a point box in the + canvas, for the specified *zoom* level, and returns that box\. + + - __::map__ __slippy geo box center__ *geobox* + + The command returns the center of the geographical box *geobox*\. + + - __::map__ __slippy geo box corners__ *geobox* + + This command returns a list containing the four corner locations implied by + the geographical box *geobox*\. The four points are top\-left, bottom\-left, + top\-right, and bottom\-right, in that order\. + + - __::map__ __slippy geo box diameter__ *geobox* + + The command returns the diameter of the geographical box *geobox*, in + meters\. + + - __::map__ __slippy geo box dimensions__ *geobox* + + The command returns the dimensions of the geographical box *geobox*, width + and height, in this order\. + + - __::map__ __slippy geo box fit__ *geobox* *canvdim* *zmax* ?*zmin*? + + This command calculates the zoom level such that the *geobox* will fit + into a viewport given by *canvdim* \(a 2\-element list containing the width + and height of said viewport\) and returns it\. + + The zoom level will be made to fit within the range *zmin*\.\.\.*zmax*\. + When *zmin* is not specified it will default to __0__\. + + - __::map__ __slippy geo box inside__ *geobox* *geo* + + The command tests if the geographical location *geo* is contained in the + geographical box *geobox* or not\. It returns __true__ if so, and + __false__ else\. + + - __::map__ __slippy geo box limit__ *geobox* + + This command limits the geographical box to at most 6 decimals and returns + the result\. + + For geographical coordinates 6 decimals is roughly equivalent to a grid of + 11\.1 cm\. + + - __::map__ __slippy geo box opposites__ *geobox* + + This command returns a list containing the two principal corner locations + implied by the geographical box *geobox*\. The two points are top\-left, and + bottom\-right, in that order\. + + - __::map__ __slippy geo box perimeter__ *geobox* + + The command returns the perimeter of the geographical box *geobox*, in + meters\. + + - __::map__ __slippy geo box valid__ *geobox* + + This commands tests if the specified geographical box contains only valid + latitudes and longitudes\. It returns __true__ if the box is valid, and + __false__ else\. + + - __::map__ __slippy geo box valid\-list__ *geoboxes* + + This commands tests if the list of geographical boxes contains only valid + latitudes and longitudes\. It returns __true__ if all the boxes are + valid, and __false__ else\. + + - __::map__ __slippy geo distance__ *geo1* *geo2* + + This command computes the great\-circle distance between the two geographical + locations in meters and returns that value\. + + The code is based on + [https://wiki\.tcl\-lang\.org/page/geodesy](https://wiki\.tcl\-lang\.org/page/geodesy) + take on the [haversine + formula](https://en\.wikipedia\.org/wiki/Haversine\_formula)\. + + - __::map__ __slippy geo distance\*__ *closed* *geo*\.\.\. + + An extension of __map slippy geo distance__ this command computes the + cumulative distance along the path specified by the ordered set of + geographical locations in meters, and returns it\. + + If the path is marked as *closed* \(i\.e\. a polygon/loop\) the result + contains the distance between last and first element of the path as well, + making the result the length of the perimeter of the area described by the + locations\. + + - __::map__ __slippy geo distance\-list__ *closed* *geo\-list* - - __::map::slippy__ __length__ *level* + As a variant of __map slippy geo distance\*__ this command takes the path + to compute the length of as a single list of geographical locations, instead + of a varying number of arguments\. - This method returns the width/height of a slippy\-based map at the specified + - __::map__ __slippy geo limit__ *geo* + + This command limits the geographical location to at most 6 decimals and + returns the result\. + + For geographical coordinates 6 decimals is roughly equivalent to a grid of + 11\.1 cm\. + + - __::map__ __slippy geo bbox__ *geo*\.\.\. + + - __::map__ __slippy geo bbox\-list__ *geo\-list* + + These two commands compute the bounding box for the specified set of + geographical locations and return a geographical box\. + + When no geographical locations are specified the box is "__0 0 0 0__"\. + + The locations are specified as either a varying number of arguments, or as a + single list\. + + - __::map__ __slippy geo center__ *geo*\.\.\. + + - __::map__ __slippy geo center\-list__ *geo\-list* + + These two commands compute the center of the bounding box for the specified + set of geographical locations\. + + When no geographical locations are specified the center is "__0 0__"\. + + The locations are specified as either a varying number of arguments, or as a + single list\. + + - __::map__ __slippy geo diameter__ *geo*\.\.\. + + - __::map__ __slippy geo diameter\-list__ *geo\-list* + + These two commands compute the diameter for the specified set of + geographical locations, in meters\. The diameter is the maximum of the + pair\-wise distances between all locations\. + + When less than two geographical locations are specified the diameter is + "__0__"\. + + The locations are specified as either a varying number of arguments, or as a + single list\. + + - __::map__ __slippy geo 2point__ *zoom* *geo* + + This command converts the geographical location *geo* to a point in the + canvas, for the specified *zoom* level, and returns that point\. + + - __::map__ __slippy geo 2point\*__ *zoom* *geo*\.\.\. + + - __::map__ __slippy geo 2point\-list__ *zoom* *geo\-list* + + These two commands are extensions of __map slippy geo 2point__ which + take a series of geographical locations as either a varying number of + arguments or a single list, convert them all to points as per the specified + *zoom* level and return a list of the results\. + + - __::map__ __slippy geo valid__ *geo* + + This commands tests if the specified geographical location contains only + valid latitudes and longitudes\. It returns __true__ if the location is + valid, and __false__ else\. + + - __::map__ __slippy geo valid\-list__ *geos* + + This commands tests if the list of geographical locations contains only + valid latitudes and longitudes\. It returns __true__ if all the locations + are valid, and __false__ else\. + + - __::map__ __slippy length__ *level* + + This command returns the width/height of a slippy\-based map at the specified zoom *level*, in pixels\. This is, in essence, the result of expr { [tiles $level] * [tile size] } - - __::map::slippy__ __tiles__ *level* + - __::map__ __slippy limit2__ *x* - This method returns the width/height of a slippy\-based map at the specified - zoom *level*, in *tiles*\. + - __::map__ __slippy limit3__ *x* - - __::map::slippy__ __tile size__ + - __::map__ __slippy limit6__ *x* - This method returns the width/height of a tile in a slippy\-based map, in - pixels\. + This command limits the value to at most 2, 3, or 6 decimals and returns the + result\. - - __::map::slippy__ __tile valid__ *tile* *levels* ?*msgvar*? + For geographical coordinates 6 decimals is roughly equivalent to a grid of + 11\.1 cm\. - This method checks whether *tile* described a valid tile in a slippy\-based - map containing that many zoom *levels*\. The result is a boolean value, - __true__ if the tile is valid, and __false__ otherwise\. For the - latter a message is left in the variable named by *msgvar*, should it be - specified\. + - __::map__ __slippy point box 2geo__ *zoom* *pointbox* - A tile identifier as stored in *tile* is a list containing zoom level, - tile row, and tile column, in this order\. The command essentially checks - this, i\.e\. the syntax, that the zoom level is between 0 and "*levels*\-1", - and that the row/col information is within the boundaries for the zoom - level, i\.e\. 0 \.\.\. "\[tiles $zoom\]\-1"\. + The command converts the point box *pointbox* to a geographical box in the + canvas, as per the specified *zoom* level, and returns that box\. - - __::map::slippy__ __geo 2tile__ *geo* + - __::map__ __slippy point box center__ *pointbox* - Converts a geographical location at a zoom level \(*geo*, a list containing - zoom level, latitude, and longitude, in this order\) to a tile identifier - \(list containing zoom level, row, and column\) at that level\. The tile - identifier uses pure integer numbers for the tile coordinates, for all - geographic coordinates mapping to that tile\. + The command returns the center of the *pointbox*\. - - __::map::slippy__ __geo 2tile\.float__ *geo* + - __::map__ __slippy point box corners__ *pointbox* - Converts a geographical location at a zoom level \(*geo*, a list containing - zoom level, latitude, and longitude, in this order\) to a tile identifier - \(list containing zoom level, row, and column\) at that level\. The tile - identifier uses floating point numbers for the tile coordinates, - representing not only the tile the geographic coordinates map to, but also - the fractional location inside of that tile\. + This command returns a list containing the four corner locations implied by + the point box *pointbox*\. The four points are top\-left, bottom\-left, + top\-right, and bottom\-right, in that order\. - - __::map::slippy__ __geo 2point__ *geo* + - __::map__ __slippy point box diameter__ *pointbox* - Converts a geographical location at a zoom level \(*geo*, a list containing - zoom level, latitude, and longitude, in this order\) to a pixel position - \(list containing zoom level, y, and x\) at that level\. + The command returns the diameter of the *pointbox*, in pixels\. - - __::map::slippy__ __tile 2geo__ *tile* + - __::map__ __slippy point box dimensions__ *pointbox* - Converts a tile identifier at a zoom level \(*tile*, list containing zoom - level, row, and column\) to a geographical location \(list containing zoom - level, latitude, and longitude, in this order\) at that level\. + The command returns the dimensions of the *pointbox*, width and height, in + this order\. - - __::map::slippy__ __tile 2point__ *tile* + - __::map__ __slippy point box inside__ *pointbox* *point* - Converts a tile identifier at a zoom level \(*tile*, a list containing zoom - level, row, and column, in this order\) to a pixel position \(list containing - zoom level, y, and x\) at that level\. + The command tests if the *point* is contained in the *pointbox* or not\. + It returns __true__ if so, and __false__ else\. - - __::map::slippy__ __point 2geo__ *point* + - __::map__ __slippy point box opposites__ *pointbox* - Converts a pixel position at a zoom level \(*point*, list containing zoom - level, y, and x\) to a geographical location \(list containing zoom level, - latitude, and longitude, in this order\) at that level\. + This command returns a list containing the two principal corner locations + implied by the point box *pointbox*\. The two points are top\-left, and + bottom\-right, in that order\. - - __::map::slippy__ __point 2tile__ *point* + - __::map__ __slippy point box perimeter__ *pointbox* - Converts a pixel position at a zoom level \(*point*, a list containing zoom - level, y, and x, in this order\) to a tile identifier \(list containing zoom - level, row, and column\) at that level\. + The command returns the perimeter of the *pointbox*, in pixels\. - - __::map::slippy__ __fit geobox__ *canvdim* *geobox* *zmin* *zmax* + - __::map__ __slippy point distance__ *point1* *point2* - Calculates the zoom level \(whithin the bounds *zmin* and *zmax*\) such - that *geobox* \(a 4\-element list containing the latitudes and longitudes - lat0, lat1, lon0 and lon1 of a geo box, in this order\) fits into a viewport - given by *canvdim*, a 2\-element list containing the width and height of - the viewport, in this order\. + This command computes the euclidena distance between the two points in + pixels and returns that value\. -# Coordinate systems + - __::map__ __slippy point distance\*__ *closed* *point*\.\.\. -The commands of this package operate on three distinct coordinate systems, which -are explained below\. + An extension of __map slippy point distance__ this command computes the + cumulative distance along the path specified by the ordered set of points, + and returns it\. -## Geographic + If the path is marked as *closed* \(i\.e\. a polygon/loop\) the result + contains the distance between last and first element of the path as well, + making the result the length of the perimeter of the area described by the + locations\. -*Geographic*al coordinates are represented by *Latitude* and -*[Longitude](\.\./\.\./\.\./\.\./index\.md\#longitude)*, each of which is measured -in degrees, as they are essentially angles\. + - __::map__ __slippy point distance\-list__ *closed* *point\-list* -__Zero__ longitude is the *Greenwich meridian*, with positive values going -*east*, and negative values going *west*, for a total range of \+/\- 180 -degrees\. Note that \+180 and \-180 longitude are the same *meridian*, opposite -to greenwich\. + As a variant of __map slippy point distance\*__ this command takes the + path to compute the length of as a single list of points, instead of a + varying number of arguments\. -__zero__ latitude the *Equator*, with positive values going *north* and -negative values going *south*\. While the true range is \+/\- 90 degrees the -projection used by the package requires us to cap the range at \+/\- -85\.05112877983284 degrees\. This means that north and south pole are not -representable and not part of any map\. + - __::map__ __slippy point bbox__ *point*\.\.\. -## Tiles + - __::map__ __slippy point bbox\-list__ *point\-list* -While [Geographic](#subsection1)al coordinates of the previous section are -independent of zoom level the *tile coordinates* are not\. + These two commands compute the bounding box for the specified set of points + and return a point box\. -Generally the integer part of tile coordinates represent the row and column -number of the tile in question, wheras the fractional parts signal how far -inside the tile the location in question is, with pure integer coordinates \(no -fractional part\) representing the upper left corner of the tile\. + When no points are specified the box is "__0 0 0 0__"\. -The zero point of the map is at the upper left corner, regardless of zoom level, -with larger coordinates going right \(east\) and down \(south\), and smaller -coordinates going left \(west\) and up \(north\)\. Again regardless of zxoom level\. + The locations are specified as either a varying number of arguments, or as a + single list\. + + - __::map__ __slippy point center__ *point*\.\.\. + + - __::map__ __slippy point center\-list__ *point\-list* + + These two commands compute the center of the bounding box for the specified + set of points\. + + When no points are specified the center is "__0 0__"\. + + The locations are specified as either a varying number of arguments, or as a + single list\. + + - __::map__ __slippy point diameter__ *point*\.\.\. + + - __::map__ __slippy point diameter\-list__ *point\-list* + + These two commands compute the diameter for the specified set of points, in + pixels\. The diameter is the maximum of the pair\-wise distances between all + locations\. + + When less than two points are specified the diameter is "__0__"\. + + The locations are specified as either a varying number of arguments, or as a + single list\. + + - __::map__ __slippy point 2geo__ *zoom* *point* + + This command converts the *point* in the canvas, for the specified + *zoom* level, to a geograhical location, and returns that location\. + + - __::map__ __slippy point 2geo\*__ *zoom* *point*\.\.\. + + - __::map__ __slippy point 2geo\-list__ *zoom* *point\-list* + + These two commands are extensions of __map slippy point 2geo__ which + take a series of points as either a varying number of arguments or a single + list, convert them all to geographical locations as per the specified + *zoom* level and return a list of the results\. + + - __::map__ __slippy point simplify radial__ *threshold* *point\-list* + + This command takes a path of points \(as a single list\), simplifies the path + using the *Radial Distance* algorithm and returns the simplified path as + list of points\. + + In essence the algorithm keeps only the first of adjacent points nearer to + that first point than the threshold, and drops the others\. + + - __::map__ __slippy point simplify rdp__ *point\-list* + + This command takes a patch of points \(as a single list\), simplifies it using + the *non\-parametric* *Ramer\-Douglas\-Peucker* algorithm and returns the + simplified path as list of points\. + + - __::map__ __slippy pretty\-distance__ *x* + + This methods formats the distance *x* \(in meters\) for display and returns + the resulting string \(including the chosen unit\)\. + + Sub\-kilometer distances are limited to 2 decimals, i\.e\. centimeters, whereas + Kilometers are limited to 3 decimals, i\.e\. meters\. + + - __::map__ __slippy tiles__ *level* + + This command returns the width/height of a slippy\-based map at the specified + zoom *level*, in *tiles*\. + + - __::map__ __slippy tile size__ + + This command returns the width/height of a tile in a slippy\-based map, in + pixels\. -Negative tile coordinates are not allowed\. + - __::map__ __slippy tile valid__ *zoom* *row* *column* *levels* ?*msgvar*? -At zoom level 0 the whole map is represented by a single, putting the geographic -zero at 1/2, 1/2 of tile coordinates, and the range of tile coordinates as -\[0\.\.\.1\]\. + This command checks if the tile described by *zoom*, *row*, and + *column* is valid for a slippy\-based map having that many zoom *levels*, + or not\. The result is a boolean value, __true__ if the tile is valid, + and __false__ otherwise\. In the latter case a message is left in the + variable named by *msgvar*, should it be specified\. -To go from a zoom level N to the next deeper level N\+1 each tile of level N is -split into its four quadrants, which then are the tiles of level N\+1\. + - __::map__ __slippy valid latitude__ *x* -This means that at zoom level N the map is sliced \(horizontally and vertically\) -into 2^N stripes, for a total of 4^N tiles, with tile coordinates ranging from 0 -to 2^N\+1\. + This commands tests if the argument *x* is a valid latitude value, and + returns the boolean result of that test\. I\.e\. __true__ if the value is + valid, and __false__ else\. -## Pixels/Points + - __::map__ __slippy valid longitude__ *x* -*pixel coordinates*, also called *point coordinates* are in essence [tile -coordinates](#subsection2) scaled by the size of the image representing a -tile\. This tile size currently has a fixed value, __256__\. + This commands tests if the argument *x* is a valid longitude value, and + returns the boolean result of that test\. I\.e\. __true__ if the value is + valid, and __false__ else\. # References diff --git a/embedded/md/tcllib/files/modules/map/map_slippy_cache.md b/embedded/md/tcllib/files/modules/map/map_slippy_cache.md index a2089f9c01..7d2ba3e846 100644 --- a/embedded/md/tcllib/files/modules/map/map_slippy_cache.md +++ b/embedded/md/tcllib/files/modules/map/map_slippy_cache.md @@ -1,7 +1,7 @@ [//000000001]: # (map::slippy::cache \- Mapping utilities) [//000000002]: # (Generated from file 'map\_slippy\_cache\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (map::slippy::cache\(n\) 0\.2 tcllib "Mapping utilities") +[//000000003]: # (map::slippy::cache\(n\) 0\.4 tcllib "Mapping utilities")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.4 -package require Tk 8\.4 -package require img::png +package require Tcl 8\.6 +package require Tk 8\.6 package require map::slippy -package require map::slippy::cache ?0\.2? +package require map::slippy::cache ?0\.4? [__::map::slippy::cache__ *cacheName* *cachedir* *provider*](#1) [*cacheName* __valid__ *tile* ?*msgvar*?](#2) @@ -48,6 +47,10 @@ package require map::slippy::cache ?0\.2? This package provides a class for managing a cache of tiles for slippy\-based maps in the local filesystem\. +*BEWARE*, *Attention* Version *0\.4* is *NOT backward compatible* with +version 0\.3 and earlier\. This is due to switching this package's internals to +the use of version 0\.8 of __[map::slippy](map\_slippy\.md)__\. + # API - __::map::slippy::cache__ *cacheName* *cachedir* *provider* diff --git a/embedded/md/tcllib/files/modules/map/map_slippy_fetcher.md b/embedded/md/tcllib/files/modules/map/map_slippy_fetcher.md index 7ea29737a8..84a181df49 100644 --- a/embedded/md/tcllib/files/modules/map/map_slippy_fetcher.md +++ b/embedded/md/tcllib/files/modules/map/map_slippy_fetcher.md @@ -1,7 +1,7 @@ [//000000001]: # (map::slippy::fetcher \- Mapping utilities) [//000000002]: # (Generated from file 'map\_slippy\_fetcher\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (map::slippy::fetcher\(n\) 0\.4 tcllib "Mapping utilities") +[//000000003]: # (map::slippy::fetcher\(n\) 0\.6 tcllib "Mapping utilities")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.4 -package require Tk 8\.4 -package require img::png +package require Tcl 8\.6 +package require Tk 8\.6 package require map::slippy -package require map::slippy::fetcher ?0\.4? +package require map::slippy::fetcher ?0\.6? [__::map::slippy::fetcher__ *fetcherName* *levels* *url*](#1) [*fetcherName* __levels__](#2) @@ -49,6 +48,10 @@ package require map::slippy::fetcher ?0\.4? This package provides a class for accessing http servers providing tiles for slippy\-based maps\. +*BEWARE*, *Attention* Version *0\.6* is *NOT backward compatible* with +version 0\.5 and earlier\. This is due to switching this package's internals to +the use of version 0\.8 of __[map::slippy](map\_slippy\.md)__\. + # API - __::map::slippy::fetcher__ *fetcherName* *levels* *url* diff --git a/embedded/md/tcllib/files/modules/math/bigfloat.md b/embedded/md/tcllib/files/modules/math/bigfloat.md index 251ff8b3e4..70206de15f 100644 --- a/embedded/md/tcllib/files/modules/math/bigfloat.md +++ b/embedded/md/tcllib/files/modules/math/bigfloat.md @@ -2,7 +2,7 @@ [//000000001]: # (math::bigfloat \- Tcl Math Library) [//000000002]: # (Generated from file 'bigfloat\.man' by tcllib/doctools with format 'markdown') [//000000003]: # (Copyright © 2004\-2008, by Stephane Arnold ) -[//000000004]: # (math::bigfloat\(n\) 2\.0\.3 tcllib "Tcl Math Library") +[//000000004]: # (math::bigfloat\(n\) 2\.0\.4 tcllib "Tcl Math Library")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS package require Tcl 8\.5 -package require math::bigfloat ?2\.0\.3? +package require math::bigfloat ?2\.0\.4? [__fromstr__ *number* ?*trailingZeros*?](#1) [__tostr__ ?__\-nosci__? *number*](#2) diff --git a/embedded/md/tcllib/files/modules/math/calculus.md b/embedded/md/tcllib/files/modules/math/calculus.md index 18ba890fff..935bd3367d 100644 --- a/embedded/md/tcllib/files/modules/math/calculus.md +++ b/embedded/md/tcllib/files/modules/math/calculus.md @@ -58,6 +58,10 @@ package require math::calculus 0\.8\.2 [__::math::calculus::newtonRaphson__ *func* *deriv* *initval*](#14) [__::math::calculus::newtonRaphsonParameters__ *maxiter* *tolerance*](#15) [__::math::calculus::regula\_falsi__ *f* *xb* *xe* *eps*](#16) +[__::math::calculus::root\_bisection__ *f* *xb* *xe* *eps*](#17) +[__::math::calculus::root\_secant__ *f* *xb* *xe* *eps*](#18) +[__::math::calculus::root\_brent__ *f* *xb* *xe* *eps*](#19) +[__::math::calculus::root\_chandrupatla__ *f* *xb* *xe* *eps*](#20) # DESCRIPTION @@ -383,6 +387,113 @@ This package defines the following public procedures: Relative allowed error \(defaults to 1\.0e\-4\) + - __::math::calculus::root\_bisection__ *f* *xb* *xe* *eps* + + Return an estimate of the zero or one of the zeros of the function contained + in the interval \[xb,xe\]\. The error in this estimate is of the order of + eps\*abs\(xe\-xb\), the actual error may be slightly larger\. + + The method used is the so\-called *bisection*\. For properties: see the + *regula falsi* procedure\. + + * command *f* + + Name of the command that evaluates the function for which the zero is to + be returned + + * float *xb* + + Start of the interval in which the zero is supposed to lie + + * float *xe* + + End of the interval + + * float *eps* + + Relative allowed error \(defaults to 1\.0e\-7\) + + - __::math::calculus::root\_secant__ *f* *xb* *xe* *eps* + + Return an estimate of the zero or one of the zeros of the function contained + in the interval \[xb,xe\]\. The error in this estimate is of the order of + eps\*abs\(xe\-xb\), the actual error may be slightly larger\. + + The method used is the so\-called *secant* method\. For properties: see the + *regula falsi* procedure\. Note that this method is not guaranteed to + produce a zero, but it is fast\. + + * command *f* + + Name of the command that evaluates the function for which the zero is to + be returned + + * float *xb* + + Start of the interval in which the zero is supposed to lie + + * float *xe* + + End of the interval + + * float *eps* + + Relative allowed error \(defaults to 1\.0e\-7\) + + - __::math::calculus::root\_brent__ *f* *xb* *xe* *eps* + + Return an estimate of the zero or one of the zeros of the function contained + in the interval \[xb,xe\]\. The error in this estimate is of the order of + eps\*abs\(xe\-xb\), the actual error may be slightly larger\. + + The method used is the so\-called *Brent* method\. For properties: see the + *regula falsi* procedure\. + + * command *f* + + Name of the command that evaluates the function for which the zero is to + be returned + + * float *xb* + + Start of the interval in which the zero is supposed to lie + + * float *xe* + + End of the interval + + * float *eps* + + Relative allowed error \(defaults to 1\.0e\-7\) + + - __::math::calculus::root\_chandrupatla__ *f* *xb* *xe* *eps* + + Return an estimate of the zero or one of the zeros of the function contained + in the interval \[xb,xe\]\. The error in this estimate is of the order of + eps\*abs\(xe\-xb\), the actual error may be slightly larger\. + + The method used is the so\-called *Chandrupatla* method\. It is a variant of + the Brent method and is reputed to be faster\. See + [https://www\.embeddedrelated\.com/showarticle/855\.php](https://www\.embeddedrelated\.com/showarticle/855\.php) + for a discussion\. + + * command *f* + + Name of the command that evaluates the function for which the zero is to + be returned + + * float *xb* + + Start of the interval in which the zero is supposed to lie + + * float *xe* + + End of the interval + + * float *eps* + + Relative allowed error \(defaults to 1\.0e\-7\) + *Notes:* Several of the above procedures take the *names* of procedures as arguments\. @@ -420,6 +531,12 @@ Enhancements for the second\-order boundary value problem: - Other schematisation of the first\-order term \(now central differences are used, but upstream differences might be useful too\)\. + - The various root finding methods differ in robustness, ease of use and + convergence rates\. While the Newton\-Raphson method is quite fast \(quadratic + convergence\), it is not guaranteed to produce an answer\. The methods that + bracket the root, require two starting points, but except for the secant + method are guaranteed to deliver a good estimate\. + # EXAMPLES Let us take a few simple examples: diff --git a/embedded/md/tcllib/files/modules/mime/mime.md b/embedded/md/tcllib/files/modules/mime/mime.md index c8fa78db83..4e649393bd 100644 --- a/embedded/md/tcllib/files/modules/mime/mime.md +++ b/embedded/md/tcllib/files/modules/mime/mime.md @@ -2,7 +2,7 @@ [//000000001]: # (mime \- Mime) [//000000002]: # (Generated from file 'mime\.man' by tcllib/doctools with format 'markdown') [//000000003]: # (Copyright © 1999\-2000 Marshall T\. Rose) -[//000000004]: # (mime\(n\) 1\.6\.3 tcllib "Mime") +[//000000004]: # (mime\(n\) 1\.7\.1 tcllib "Mime")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS package require Tcl 8\.5 -package require mime ?1\.6\.3? +package require mime ?1\.7\.1? [__::mime::initialize__ ?__\-canonical__ *type/subtype* ?__\-param__ \{*key value*\}\.\.\.? ?__\-encoding__ *value*? ?__\-header__ \{*key value*\}\.\.\.?? \(__\-file__ *name* | __\-string__ *value* | __\-parts__ \{*token1* \.\.\. *tokenN*\}\)](#1) [__::mime::finalize__ *token* ?__\-subordinates__ __all__ | __dynamic__ | __none__?](#2) diff --git a/embedded/md/tcllib/files/modules/rc4/rc4.md b/embedded/md/tcllib/files/modules/rc4/rc4.md index b6357a4baf..20d66b7532 100644 --- a/embedded/md/tcllib/files/modules/rc4/rc4.md +++ b/embedded/md/tcllib/files/modules/rc4/rc4.md @@ -106,7 +106,7 @@ restrictions this cipher is sometimes known as ARCFOUR\. % set keydata [binary format H* 0123456789abcdef] % rc4::rc4 -hex -key $keydata HelloWorld 3cf1ae8b7f1c670b612f - % rc4::rc4 -hex -key $keydata [binary format H* 3cf1ae8b7f1c670b612f] + % rc4::rc4 -key $keydata [binary format H* 3cf1ae8b7f1c670b612f] HelloWorld set Key [rc4::RC4Init "key data"] diff --git a/embedded/md/tcllib/files/modules/report/report.md b/embedded/md/tcllib/files/modules/report/report.md index 6a8cbefb31..3e3e6b770d 100644 --- a/embedded/md/tcllib/files/modules/report/report.md +++ b/embedded/md/tcllib/files/modules/report/report.md @@ -1,8 +1,8 @@ [//000000001]: # (report \- Matrix reports) [//000000002]: # (Generated from file 'report\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (Copyright © 2002\-2014 Andreas Kupries ) -[//000000004]: # (report\(n\) 0\.3\.2 tcllib "Matrix reports") +[//000000003]: # (Copyright © 2002\-2014,2022 Andreas Kupries ) +[//000000004]: # (report\(n\) 0\.4 tcllib "Matrix reports")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.2 -package require report ?0\.3\.2? +package require Tcl 8\.5 +package require report ?0\.4? [__::report::report__ *reportName* *columns* ?__style__ *style arg\.\.\.*?](#1) [__reportName__ *option* ?*arg arg \.\.\.*?](#2) @@ -455,4 +455,4 @@ Data structures # COPYRIGHT -Copyright © 2002\-2014 Andreas Kupries +Copyright © 2002\-2014,2022 Andreas Kupries diff --git a/embedded/md/tcllib/files/modules/simulation/montecarlo.md b/embedded/md/tcllib/files/modules/simulation/montecarlo.md index 9e072d9279..24d6e9da08 100644 --- a/embedded/md/tcllib/files/modules/simulation/montecarlo.md +++ b/embedded/md/tcllib/files/modules/simulation/montecarlo.md @@ -110,7 +110,8 @@ The package defines the following auxiliary procedures: - __::simulation::montecarlo::getOption__ *keyword* - Get the value of an option given as part of the *singeExperiment* command\. + Get the value of an option given as part of the *singleExperiment* + command\. * string *keyword* diff --git a/embedded/md/tcllib/files/modules/struct/matrix.md b/embedded/md/tcllib/files/modules/struct/matrix.md index d60e4bc16b..2a7cba2a96 100644 --- a/embedded/md/tcllib/files/modules/struct/matrix.md +++ b/embedded/md/tcllib/files/modules/struct/matrix.md @@ -1,8 +1,8 @@ [//000000001]: # (struct::matrix \- Tcl Data Structures) [//000000002]: # (Generated from file 'matrix\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (Copyright © 2002\-2013,2019 Andreas Kupries ) -[//000000004]: # (struct::matrix\(n\) 2\.0\.4 tcllib "Tcl Data Structures") +[//000000003]: # (Copyright © 2002\-2013,2019,2022 Andreas Kupries ) +[//000000004]: # (struct::matrix\(n\) 2\.1 tcllib "Tcl Data Structures")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.2 -package require struct::matrix ?2\.0\.4? +package require Tcl 8\.5 +package require struct::matrix ?2\.1? [__::struct::matrix__ ?*matrixName*? ?__=__|__:=__|__as__|__deserialize__ *source*?](#1) [__matrixName__ *option* ?*arg arg \.\.\.*?](#2) @@ -214,6 +214,12 @@ The following commands are possible for matrix objects: *Note:* The command recognizes ANSI color control sequences and excludes them from the width of a line, as they are logically of zero width\. + *Note:* The command properly recognizes and accounts for Asian double\-wide + characters\. + + *In other words*, the returned length is the number of terminal columns + taken by the string, and not the number of characters\. + - *matrixName* __delete column__ *column* Deletes the specified column from the matrix and shifts all columns with @@ -533,4 +539,4 @@ Data structures # COPYRIGHT -Copyright © 2002\-2013,2019 Andreas Kupries +Copyright © 2002\-2013,2019,2022 Andreas Kupries diff --git a/embedded/md/tcllib/files/modules/struct/matrix1.md b/embedded/md/tcllib/files/modules/struct/matrix1.md deleted file mode 100644 index 8f5afeee87..0000000000 --- a/embedded/md/tcllib/files/modules/struct/matrix1.md +++ /dev/null @@ -1,417 +0,0 @@ - -[//000000001]: # (struct::matrix\_v1 \- Tcl Data Structures) -[//000000002]: # (Generated from file 'matrix1\.man' by tcllib/doctools with format 'markdown') -[//000000003]: # (Copyright © 2002,2019 Andreas Kupries ) -[//000000004]: # (struct::matrix\_v1\(n\) 1\.2\.2 tcllib "Tcl Data Structures") - -
[ Main Table Of Contents | Table Of Contents | Keyword Index | Categories | Modules | Applications ]
- -# NAME - -struct::matrix\_v1 \- Create and manipulate matrix objects - -# Table Of Contents - - - [Table Of Contents](#toc) - - - [Synopsis](#synopsis) - - - [Description](#section1) - - - [EXAMPLES](#section2) - - - [Bugs, Ideas, Feedback](#section3) - - - [Keywords](#keywords) - - - [Category](#category) - - - [Copyright](#copyright) - -# SYNOPSIS - -package require Tcl 8\.2 -package require struct::matrix ?1\.2\.2? - -[__matrixName__ *option* ?*arg arg \.\.\.*?](#1) -[*matrixName* __add column__ ?*values*?](#2) -[*matrixName* __add row__ ?*values*?](#3) -[*matrixName* __add columns__ *n*](#4) -[*matrixName* __add rows__ *n*](#5) -[*matrixName* __cells__](#6) -[*matrixName* __cellsize__ *column row*](#7) -[*matrixName* __columns__](#8) -[*matrixName* __columnwidth__ *column*](#9) -[*matrixName* __delete column__ *column*](#10) -[*matrixName* __delete row__ *row*](#11) -[*matrixName* __destroy__](#12) -[*matrixName* __format 2string__ ?*report*?](#13) -[*matrixName* __format 2chan__ ??*report*? *channel*?](#14) -[*matrixName* __get cell__ *column row*](#15) -[*matrixName* __get column__ *column*](#16) -[*matrixName* __get rect__ *column\_tl row\_tl column\_br row\_br*](#17) -[*matrixName* __get row__ *row*](#18) -[*matrixName* __insert column__ *column* ?*values*?](#19) -[*matrixName* __insert row__ *row* ?*values*?](#20) -[*matrixName* __link__ ?\-transpose? *arrayvar*](#21) -[*matrixName* __links__](#22) -[*matrixName* __rowheight__ *row*](#23) -[*matrixName* __rows__](#24) -[*matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __all__ *pattern*](#25) -[*matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __column__ *column pattern*](#26) -[*matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __row__ *row pattern*](#27) -[*matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __rect__ *column\_tl row\_tl column\_br row\_br pattern*](#28) -[*matrixName* __set cell__ *column row value*](#29) -[*matrixName* __set column__ *column values*](#30) -[*matrixName* __set rect__ *column row values*](#31) -[*matrixName* __set row__ *row values*](#32) -[*matrixName* __sort columns__ ?__\-increasing__|__\-decreasing__? *row*](#33) -[*matrixName* __sort rows__ ?__\-increasing__|__\-decreasing__? *column*](#34) -[*matrixName* __swap columns__ *column\_a column\_b*](#35) -[*matrixName* __swap rows__ *row\_a row\_b*](#36) -[*matrixName* __unlink__ *arrayvar*](#37) - -# DESCRIPTION - -The __::struct::matrix__ command creates a new matrix object with an -associated global Tcl command whose name is *matrixName*\. This command may be -used to invoke various operations on the matrix\. It has the following general -form: - - - __matrixName__ *option* ?*arg arg \.\.\.*? - - *Option* and the *arg*s determine the exact behavior of the command\. - -A matrix is a rectangular collection of cells, i\.e\. organized in rows and -columns\. Each cell contains exactly one value of arbitrary form\. The cells in -the matrix are addressed by pairs of integer numbers, with the first \(left\) -number in the pair specifying the column and the second \(right\) number -specifying the row the cell is in\. These indices are counted from 0 upward\. The -special non\-numeric index __end__ refers to the last row or column in the -matrix, depending on the context\. Indices of the form __end__\-__number__ -are counted from the end of the row or column, like they are for standard Tcl -lists\. Trying to access non\-existing cells causes an error\. - -The matrices here are created empty, i\.e\. they have neither rows nor columns\. -The user then has to add rows and columns as needed by his application\. A -specialty of this structure is the ability to export an array\-view onto its -contents\. Such can be used by tkTable, for example, to link the matrix into the -display\. - -The following commands are possible for matrix objects: - - - *matrixName* __add column__ ?*values*? - - Extends the matrix by one column and then acts like __setcolumn__ \(see - below\) on this new column if there were *values* supplied\. Without - *values* the new cells will be set to the empty string\. The new column is - appended immediately behind the last existing column\. - - - *matrixName* __add row__ ?*values*? - - Extends the matrix by one row and then acts like __setrow__ \(see below\) - on this new row if there were *values* supplied\. Without *values* the - new cells will be set to the empty string\. The new row is appended - immediately behind the last existing row\. - - - *matrixName* __add columns__ *n* - - Extends the matrix by *n* columns\. The new cells will be set to the empty - string\. The new columns are appended immediately behind the last existing - column\. A value of *n* equal to or smaller than 0 is not allowed\. - - - *matrixName* __add rows__ *n* - - Extends the matrix by *n* rows\. The new cells will be set to the empty - string\. The new rows are appended immediately behind the last existing row\. - A value of *n* equal to or smaller than 0 is not allowed\. - - - *matrixName* __cells__ - - Returns the number of cells currently managed by the matrix\. This is the - product of __rows__ and __columns__\. - - - *matrixName* __cellsize__ *column row* - - Returns the length of the string representation of the value currently - contained in the addressed cell\. - - - *matrixName* __columns__ - - Returns the number of columns currently managed by the matrix\. - - - *matrixName* __columnwidth__ *column* - - Returns the length of the longest string representation of all the values - currently contained in the cells of the addressed column if these are all - spanning only one line\. For cell values spanning multiple lines the length - of their longest line goes into the computation\. - - - *matrixName* __delete column__ *column* - - Deletes the specified column from the matrix and shifts all columns with - higher indices one index down\. - - - *matrixName* __delete row__ *row* - - Deletes the specified row from the matrix and shifts all row with higher - indices one index down\. - - - *matrixName* __destroy__ - - Destroys the matrix, including its storage space and associated command\. - - - *matrixName* __format 2string__ ?*report*? - - Formats the matrix using the specified report object and returns the string - containing the result of this operation\. The report has to support the - __printmatrix__ method\. If no *report* is specified the system will - use an internal report definition to format the matrix\. - - - *matrixName* __format 2chan__ ??*report*? *channel*? - - Formats the matrix using the specified report object and writes the string - containing the result of this operation into the channel\. The report has to - support the __printmatrix2channel__ method\. If no *report* is - specified the system will use an internal report definition to format the - matrix\. If no *channel* is specified the system will use __stdout__\. - - - *matrixName* __get cell__ *column row* - - Returns the value currently contained in the cell identified by row and - column index\. - - - *matrixName* __get column__ *column* - - Returns a list containing the values from all cells in the column identified - by the index\. The contents of the cell in row 0 are stored as the first - element of this list\. - - - *matrixName* __get rect__ *column\_tl row\_tl column\_br row\_br* - - Returns a list of lists of cell values\. The values stored in the result come - from the sub\-matrix whose top\-left and bottom\-right cells are specified by - *column\_tl, row\_tl* and *column\_br, row\_br* resp\. Note that the - following equations have to be true: "*column\_tl* <= *column\_br*" and - "*row\_tl* <= *row\_br*"\. The result is organized as follows: The outer - list is the list of rows, its elements are lists representing a single row\. - The row with the smallest index is the first element of the outer list\. The - elements of the row lists represent the selected cell values\. The cell with - the smallest index is the first element in each row list\. - - - *matrixName* __get row__ *row* - - Returns a list containing the values from all cells in the row identified by - the index\. The contents of the cell in column 0 are stored as the first - element of this list\. - - - *matrixName* __insert column__ *column* ?*values*? - - Extends the matrix by one column and then acts like __setcolumn__ \(see - below\) on this new column if there were *values* supplied\. Without - *values* the new cells will be set to the empty string\. The new column is - inserted just before the column specified by the given index\. This means, if - *column* is less than or equal to zero, then the new column is inserted at - the beginning of the matrix, before the first column\. If *column* has the - value __end__, or if it is greater than or equal to the number of - columns in the matrix, then the new column is appended to the matrix, behind - the last column\. The old column at the chosen index and all columns with - higher indices are shifted one index upward\. - - - *matrixName* __insert row__ *row* ?*values*? - - Extends the matrix by one row and then acts like __setrow__ \(see below\) - on this new row if there were *values* supplied\. Without *values* the - new cells will be set to the empty string\. The new row is inserted just - before the row specified by the given index\. This means, if *row* is less - than or equal to zero, then the new row is inserted at the beginning of the - matrix, before the first row\. If *row* has the value __end__, or if it - is greater than or equal to the number of rows in the matrix, then the new - row is appended to the matrix, behind the last row\. The old row at that - index and all rows with higher indices are shifted one index upward\. - - - *matrixName* __link__ ?\-transpose? *arrayvar* - - Links the matrix to the specified array variable\. This means that the - contents of all cells in the matrix is stored in the array too, with all - changes to the matrix propagated there too\. The contents of the cell - *\(column,row\)* is stored in the array using the key *column,row*\. If the - option __\-transpose__ is specified the key *row,column* will be used - instead\. It is possible to link the matrix to more than one array\. Note that - the link is bidirectional, i\.e\. changes to the array are mirrored in the - matrix too\. - - - *matrixName* __links__ - - Returns a list containing the names of all array variables the matrix was - linked to through a call to method __link__\. - - - *matrixName* __rowheight__ *row* - - Returns the height of the specified row in lines\. This is the highest number - of lines spanned by a cell over all cells in the row\. - - - *matrixName* __rows__ - - Returns the number of rows currently managed by the matrix\. - - - *matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __all__ *pattern* - - Searches the whole matrix for cells matching the *pattern* and returns a - list with all matches\. Each item in the aforementioned list is a list itself - and contains the column and row index of the matching cell, in this order\. - The results are ordered by column first and row second, both times in - ascending order\. This means that matches to the left and the top of the - matrix come before matches to the right and down\. - - The type of the pattern \(string, glob, regular expression\) is determined by - the option after the __search__ keyword\. If no option is given it - defaults to __\-exact__\. - - If the option __\-nocase__ is specified the search will be - case\-insensitive\. - - - *matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __column__ *column pattern* - - Like __search all__, but the search is restricted to the specified - column\. - - - *matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __row__ *row pattern* - - Like __search all__, but the search is restricted to the specified row\. - - - *matrixName* __search__ ?\-nocase? ?\-exact|\-glob|\-regexp? __rect__ *column\_tl row\_tl column\_br row\_br pattern* - - Like __search all__, but the search is restricted to the specified - rectangular area of the matrix\. - - - *matrixName* __set cell__ *column row value* - - Sets the value in the cell identified by row and column index to the data in - the third argument\. - - - *matrixName* __set column__ *column values* - - Sets the values in the cells identified by the column index to the elements - of the list provided as the third argument\. Each element of the list is - assigned to one cell, with the first element going into the cell in row 0 - and then upward\. If there are less values in the list than there are rows - the remaining rows are set to the empty string\. If there are more values in - the list than there are rows the superfluous elements are ignored\. The - matrix is not extended by this operation\. - - - *matrixName* __set rect__ *column row values* - - Takes a list of lists of cell values and writes them into the submatrix - whose top\-left cell is specified by the two indices\. If the sublists of the - outerlist are not of equal length the shorter sublists will be filled with - empty strings to the length of the longest sublist\. If the submatrix - specified by the top\-left cell and the number of rows and columns in the - *values* extends beyond the matrix we are modifying the over\-extending - parts of the values are ignored, i\.e\. essentially cut off\. This subcommand - expects its input in the format as returned by __getrect__\. - - - *matrixName* __set row__ *row values* - - Sets the values in the cells identified by the row index to the elements of - the list provided as the third argument\. Each element of the list is - assigned to one cell, with the first element going into the cell in column 0 - and then upward\. If there are less values in the list than there are columns - the remaining columns are set to the empty string\. If there are more values - in the list than there are columns the superfluous elements are ignored\. The - matrix is not extended by this operation\. - - - *matrixName* __sort columns__ ?__\-increasing__|__\-decreasing__? *row* - - Sorts the columns in the matrix using the data in the specified *row* as - the key to sort by\. The options __\-increasing__ and __\-decreasing__ - have the same meaning as for __lsort__\. If no option is specified - __\-increasing__ is assumed\. - - - *matrixName* __sort rows__ ?__\-increasing__|__\-decreasing__? *column* - - Sorts the rows in the matrix using the data in the specified *column* as - the key to sort by\. The options __\-increasing__ and __\-decreasing__ - have the same meaning as for __lsort__\. If no option is specified - __\-increasing__ is assumed\. - - - *matrixName* __swap columns__ *column\_a column\_b* - - Swaps the contents of the two specified columns\. - - - *matrixName* __swap rows__ *row\_a row\_b* - - Swaps the contents of the two specified rows\. - - - *matrixName* __unlink__ *arrayvar* - - Removes the link between the matrix and the specified arrayvariable, if - there is one\. - -# EXAMPLES - -The examples below assume a 5x5 matrix M with the first row containing the -values 1 to 5, with 1 in the top\-left cell\. Each other row contains the contents -of the row above it, rotated by one cell to the right\. - - % M getrect 0 0 4 4 - {{1 2 3 4 5} {5 1 2 3 4} {4 5 1 2 3} {3 4 5 1 2} {2 3 4 5 1}} - - % M setrect 1 1 {{0 0 0} {0 0 0} {0 0 0}} - % M getrect 0 0 4 4 - {{1 2 3 4 5} {5 0 0 0 4} {4 0 0 0 3} {3 0 0 0 2} {2 3 4 5 1}} - -Assuming that the style definitions in the example section of the manpage for -the package __[report](\.\./report/report\.md)__ are loaded into the -interpreter now an example which formats a matrix into a tabular report\. The -code filling the matrix with data is not shown\. contains useful data\. - - % ::struct::matrix m - % # ... fill m with data, assume 5 columns - % ::report::report r 5 style captionedtable 1 - % m format 2string r - +---+-------------------+-------+-------+--------+ - |000|VERSIONS: |2:8.4a3|1:8.4a3|1:8.4a3%| - +---+-------------------+-------+-------+--------+ - |001|CATCH return ok |7 |13 |53.85 | - |002|CATCH return error |68 |91 |74.73 | - |003|CATCH no catch used|7 |14 |50.00 | - |004|IF if true numeric |12 |33 |36.36 | - |005|IF elseif |15 |47 |31.91 | - | |true numeric | | | | - +---+-------------------+-------+-------+--------+ - % - % # alternate way of doing the above - % r printmatrix m - -# Bugs, Ideas, Feedback - -This document, and the package it describes, will undoubtedly contain bugs and -other problems\. Please report such in the category *struct :: matrix* 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\. - -# KEYWORDS - -[matrix](\.\./\.\./\.\./\.\./index\.md\#matrix) - -# CATEGORY - -Data structures - -# COPYRIGHT - -Copyright © 2002,2019 Andreas Kupries diff --git a/embedded/md/tcllib/files/modules/textutil/wcswidth.md b/embedded/md/tcllib/files/modules/textutil/wcswidth.md new file mode 100644 index 0000000000..dace413abb --- /dev/null +++ b/embedded/md/tcllib/files/modules/textutil/wcswidth.md @@ -0,0 +1,106 @@ + +[//000000001]: # (textutil::wcswidth \- Text and string utilities, macro processing) +[//000000002]: # (Generated from file 'wcswidth\.man' by tcllib/doctools with format 'markdown') +[//000000003]: # (textutil::wcswidth\(n\) 35\.2 tcllib "Text and string utilities, macro processing") + +
[ Main Table Of Contents | Table Of Contents | Keyword Index | Categories | Modules | Applications ]
+ +# NAME + +textutil::wcswidth \- Procedures to compute terminal width of strings + +# Table Of Contents + + - [Table Of Contents](#toc) + + - [Synopsis](#synopsis) + + - [Description](#section1) + + - [Bugs, Ideas, Feedback](#section2) + + - [See Also](#seealso) + + - [Keywords](#keywords) + + - [Category](#category) + +# SYNOPSIS + +package require Tcl 8\.5 +package require textutil::wcswidth ?35\.2? + +[__::textutil::wcswidth__ *string*](#1) +[__::textutil::wcswidth\_char__ *char*](#2) +[__::textutil::wcswidth\_type__ *char*](#3) + +# DESCRIPTION + +The package __textutil::wcswidth__ provides commands that determine +character type and width when used in terminals, and the length of strings when +printed in a terminal\. + +The data underlying the functionality of this package is provided by the Unicode +database file +[http://www\.unicode\.org/Public/UCD/latest/ucd/EastAsianWidth\.txt](http://www\.unicode\.org/Public/UCD/latest/ucd/EastAsianWidth\.txt)\. + +The complete set of procedures is described below\. + + - __::textutil::wcswidth__ *string* + + Returns the number of character cells taken by the string when printed to + the terminal\. This takes double\-wide characters from the various Asian and + other scripts into account\. + + - __::textutil::wcswidth\_char__ *char* + + Returns the number of character cells taken by the character when printed to + the terminal\. + + *Beware*: The character *char* is specified as Unicode codepoint\. + + - __::textutil::wcswidth\_type__ *char* + + Returns the character type of the specified character\. This a single + character in the set of __A__, __F__, __H__, __N__, + __Na__, and __W__, as specified per + [http://www\.unicode\.org/Public/UCD/latest/ucd/EastAsianWidth\.txt](http://www\.unicode\.org/Public/UCD/latest/ucd/EastAsianWidth\.txt) + + *Beware*: The character *char* is specified as Unicode codepoint\. + +# Bugs, Ideas, Feedback + +This document, and the package it describes, will undoubtedly contain bugs and +other problems\. Please report such in the category *textutil* 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\. + +# SEE ALSO + +regexp\(n\), split\(n\), string\(n\) + +# KEYWORDS + +[character type](\.\./\.\./\.\./\.\./index\.md\#character\_type), [character +width](\.\./\.\./\.\./\.\./index\.md\#character\_width), [double\-wide +character](\.\./\.\./\.\./\.\./index\.md\#double\_wide\_character), +[prefix](\.\./\.\./\.\./\.\./index\.md\#prefix), [regular +expression](\.\./\.\./\.\./\.\./index\.md\#regular\_expression), +[string](\.\./\.\./\.\./\.\./index\.md\#string) + +# CATEGORY + +Text processing diff --git a/embedded/md/tcllib/files/modules/valtype/iban.md b/embedded/md/tcllib/files/modules/valtype/iban.md index 2f3c47797d..07610ff741 100644 --- a/embedded/md/tcllib/files/modules/valtype/iban.md +++ b/embedded/md/tcllib/files/modules/valtype/iban.md @@ -2,7 +2,7 @@ [//000000001]: # (valtype::iban \- Validation types) [//000000002]: # (Generated from file 'vtype\.inc' by tcllib/doctools with format 'markdown') [//000000003]: # (Copyright © 2011 Andreas Kupries ) -[//000000004]: # (valtype::iban\(n\) 1\.7 tcllib "Validation types") +[//000000004]: # (valtype::iban\(n\) 1\.8 tcllib "Validation types")
[ Main Table Of Contents | Table Of Contents | [ Main Table Of Contents | Table Of Contents | SYNOPSIS -package require Tcl 8\.4 +package require Tcl 8\.6 package require http 2\.7 package require logger package require sha1 package require base64 -package require websocket ?1\.4\.2? +package require websocket ?1\.5? [__::websocket::open__ *url* *handler* ?*options*?](#1) [__::websocket::send__ *sock* *type* ?*msg*? ?*final*?](#2) @@ -140,6 +140,10 @@ following arguments will be appended: Incoming ping message + * __pong__ + + Response to incoming ping message + * __connect__ Notification of successful connection to server @@ -152,11 +156,19 @@ following arguments will be appended: Pending closure of connection + * __timeout__ + + Notification of connection timeout + + * __error__ + + Notification of error condition + - *msg* Will contain the data of the message, whenever this is relevant, i\.e\. when - the *type* is __text__, __binary__ or __ping__ and whenever - there is data available\. + the *type* is __text__, __binary__, __ping__ or __pong__ + and whenever there is data available\. # API @@ -201,7 +213,8 @@ following arguments will be appended: This option specifies a list of application protocols to handshake with the server\. This protocols might help the server triggering application - specific features\. + specific features\. The http::geturl option \-protocol is used internally + by the websocket library and cannot be used\. * \-timeout @@ -418,15 +431,15 @@ following arguments will be appended: # Examples -The following example opens a websocket connection to the echo service, waits -400ms to ensure that the connection is really established and sends a single -textual message which should be echoed back by the echo service\. A real example -would probably use the __connect__ callback to know when connection to the -remote server has been establish and would only send data at that time\. +The following example script is a client that opens a websocket connection to an +echo service, waits 400ms to ensure that the connection is really established +and sends a single textual message which should be echoed back by the echo +service\. A real example would probably use the __connect__ callback to know +when connection to the remote server has been establish and would only send data +at that time\. Finally the script closes the connection\. package require websocket ::websocket::loglevel debug - proc handler { sock type msg } { switch -glob -nocase -- $type { co* { @@ -441,17 +454,19 @@ remote server has been establish and would only send data at that time\. } } - proc test { sock } { puts "[::websocket::conninfo $sock type] from [::websocket::conninfo $sock sockname] to [::websocket::conninfo $sock peername]" ::websocket::send $sock text "Testing, testing..." + after 2000 ::websocket::close $sock } - - set sock [::websocket::open ws://echo.websocket.org/ handler] + set sock [::websocket::open ws://ws.ifelse.io/ handler] after 400 test $sock vwait forever +Example code for a websocket server is provided in the Tcllib directory +"examples/websocket"\. + # TLS Security Considerations This package uses the __[TLS](\.\./\.\./\.\./\.\./index\.md\#tls)__ package to diff --git a/embedded/md/tcllib/files/modules/zip/mkzip.md b/embedded/md/tcllib/files/modules/zip/mkzip.md index bc1596a418..c1e7f5a579 100644 --- a/embedded/md/tcllib/files/modules/zip/mkzip.md +++ b/embedded/md/tcllib/files/modules/zip/mkzip.md @@ -2,7 +2,7 @@ [//000000001]: # (zipfile::mkzip \- Zip archive creation) [//000000002]: # (Generated from file 'mkzip\.man' by tcllib/doctools with format 'markdown') [//000000003]: # (Copyright © 2009 Pat Thoyts) -[//000000004]: # (zipfile::mkzip\(n\) 1\.2\.1 tcllib "Zip archive creation") +[//000000004]: # (zipfile::mkzip\(n\) 1\.2\.2 tcllib "Zip archive creation")
[ Main Table Of Contents | Table Of Contents | SYNOPSIS package require Tcl 8\.6 -package require zipfile::mkzip ?1\.2\.1? +package require zipfile::mkzip ?1\.2\.2? -[__::zipfile::mkzip::mkzip__ *zipfile* ?__\-zipkit__? ?__\-runtime__ *prefix*? ?__\-comment__ *string*? ?__\-directory__ *rootpath*? ?__\-exclude__ *exclude*? ?__\-\-__? ?*path*\.\.\.?](#1) +[__::zipfile::mkzip::mkzip__ *zipfile* ?__\-zipkit__? ?__\-runtime__ *prefix*? ?__\-comment__ *string*? ?__\-directory__ *rootpath*? ?__\-prepend\-base\-directory__ *bool*? ?__\-exclude__ *exclude*? ?__\-\-__? ?*path*\.\.\.?](#1) # DESCRIPTION @@ -46,7 +46,7 @@ This package utilizes the zlib functions in Tcl 8\.6 to build zip archives\. # API - - __::zipfile::mkzip::mkzip__ *zipfile* ?__\-zipkit__? ?__\-runtime__ *prefix*? ?__\-comment__ *string*? ?__\-directory__ *rootpath*? ?__\-exclude__ *exclude*? ?__\-\-__? ?*path*\.\.\.? + - __::zipfile::mkzip::mkzip__ *zipfile* ?__\-zipkit__? ?__\-runtime__ *prefix*? ?__\-comment__ *string*? ?__\-directory__ *rootpath*? ?__\-prepend\-base\-directory__ *bool*? ?__\-exclude__ *exclude*? ?__\-\-__? ?*path*\.\.\.? From [http://wiki\.tcl\.tk/15158](http://wiki\.tcl\.tk/15158) @@ -99,6 +99,15 @@ This package utilizes the zlib functions in Tcl 8\.6 to build zip archives\. This option specifies the directory to place into the generated archive\. If specified any argument *path*s are *ignored*\. + * __\-prepend\-base\-directory__ bool + + When this option is set the tail of the __\-directory__ path is + prepended to all paths added to the archive\. + + The option is ignored when option __\-directory__ is not specified\. + + By default this option is __false__\. + * __\-exclude__ list This option specifies a list of glob patterns\. All paths matching at diff --git a/embedded/md/tcllib/toc.md b/embedded/md/tcllib/toc.md index b8635d13f3..4b8dcc32d3 100644 --- a/embedded/md/tcllib/toc.md +++ b/embedded/md/tcllib/toc.md @@ -647,8 +647,6 @@ - [struct::matrix](tcllib/files/modules/struct/matrix\.md) Create and manipulate matrix objects - - [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) Create and manipulate matrix objects - - [struct::pool](tcllib/files/modules/struct/pool\.md) Create and manipulate pool objects \(of discrete items\) - [struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) Create and manipulate prioqueue objects @@ -803,6 +801,8 @@ - [textutil::trim](tcllib/files/modules/textutil/trim\.md) Procedures to trim strings + - [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md) Procedures to compute terminal width of strings + - [throw](tcllib/files/modules/try/tcllib\_throw\.md) throw \- Throw an error exception with a message - [tie](tcllib/files/modules/tie/tie\_std\.md) Array persistence, standard data sources diff --git a/embedded/md/toc.md b/embedded/md/toc.md index bec449094d..00c5a8eeaf 100644 --- a/embedded/md/toc.md +++ b/embedded/md/toc.md @@ -123,8 +123,6 @@ + [struct::matrix](tcllib/files/modules/struct/matrix\.md) Create and manipulate matrix objects - + [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) Create and manipulate matrix objects - + [struct::pool](tcllib/files/modules/struct/pool\.md) Create and manipulate pool objects \(of discrete items\) + [struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) Create and manipulate prioqueue objects @@ -825,6 +823,8 @@ + [textutil::trim](tcllib/files/modules/textutil/trim\.md) Procedures to trim strings + + [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md) Procedures to compute terminal width of strings + + [uuencode](tcllib/files/modules/base64/uuencode\.md) UU\-encode/decode binary data + [xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md) eXtremely Simple Xml Parser @@ -1817,8 +1817,6 @@ - [struct::matrix](tcllib/files/modules/struct/matrix\.md) Create and manipulate matrix objects - - [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) Create and manipulate matrix objects - - [struct::pool](tcllib/files/modules/struct/pool\.md) Create and manipulate pool objects \(of discrete items\) - [struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) Create and manipulate prioqueue objects @@ -1897,6 +1895,8 @@ - [textutil::trim](tcllib/files/modules/textutil/trim\.md) Procedures to trim strings + - [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md) Procedures to compute terminal width of strings + + [tie]() - [tie](tcllib/files/modules/tie/tie\.md) Array persistence diff --git a/embedded/md/toc0.md b/embedded/md/toc0.md index a6a8639c25..be3ff26d68 100644 --- a/embedded/md/toc0.md +++ b/embedded/md/toc0.md @@ -123,8 +123,6 @@ + [struct::matrix](tcllib/files/modules/struct/matrix\.md) Create and manipulate matrix objects - + [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) Create and manipulate matrix objects - + [struct::pool](tcllib/files/modules/struct/pool\.md) Create and manipulate pool objects \(of discrete items\) + [struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) Create and manipulate prioqueue objects @@ -825,6 +823,8 @@ + [textutil::trim](tcllib/files/modules/textutil/trim\.md) Procedures to trim strings + + [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md) Procedures to compute terminal width of strings + + [uuencode](tcllib/files/modules/base64/uuencode\.md) UU\-encode/decode binary data + [xsxp](tcllib/files/modules/amazon\-s3/xsxp\.md) eXtremely Simple Xml Parser diff --git a/embedded/md/toc1.md b/embedded/md/toc1.md index 66567331d3..c89682326f 100644 --- a/embedded/md/toc1.md +++ b/embedded/md/toc1.md @@ -859,8 +859,6 @@ + [struct::matrix](tcllib/files/modules/struct/matrix\.md) Create and manipulate matrix objects - + [struct::matrix\_v1](tcllib/files/modules/struct/matrix1\.md) Create and manipulate matrix objects - + [struct::pool](tcllib/files/modules/struct/pool\.md) Create and manipulate pool objects \(of discrete items\) + [struct::prioqueue](tcllib/files/modules/struct/prioqueue\.md) Create and manipulate prioqueue objects @@ -939,6 +937,8 @@ + [textutil::trim](tcllib/files/modules/textutil/trim\.md) Procedures to trim strings + + [textutil::wcswidth](tcllib/files/modules/textutil/wcswidth\.md) Procedures to compute terminal width of strings + * [tie]() + [tie](tcllib/files/modules/tie/tie\.md) Array persistence diff --git a/examples/websocket/oo_server_example.tcl b/examples/websocket/oo_server_example.tcl new file mode 100755 index 0000000000..47f0d105cd --- /dev/null +++ b/examples/websocket/oo_server_example.tcl @@ -0,0 +1,74 @@ +#!/bin/env tclsh +# Example websocket server from anonymous user at +# https://core.tcl-lang.org/tcllib/tktview?name=0dd2a66f08 + +package require websocket + +::websocket::loglevel debug + + +oo::class create WebSocketServer { + variable srvSock port + + constructor {port} { + set srvSock [socket -server [list [namespace current]::my HandleConnect] $port] + + ::websocket::server $srvSock + ::websocket::live $srvSock / [list [namespace current]::my WsLiveCB] + } + + method port {} { + return $port + } + + method HandleConnect {client_socket IP_address port} { + fileevent $client_socket readable [list [namespace current]::my HandleRead $client_socket] + } + + method HandleRead {client_socket} { + chan configure $client_socket -translation crlf + set hdrs {} + + gets $client_socket line + + while {[gets $client_socket header_line]>=0 && $header_line ne ""} { + + if {[regexp -expanded {^( [^\s:]+ ) \s* : \s* (.+)} $header_line -> header_name header_value]} { + lappend hdrs $header_name $header_value + } else { + break + } + } + + if {[::websocket::test $srvSock $client_socket / $hdrs]} { + ::websocket::upgrade $client_socket + } + } + + method WsLiveCB {client_socket type_of_event data_received} { + my on_$type_of_event $client_socket $data_received + } + + method on_connect {client_socket data_received} {} + method on_disconnect {client_socket data_received} {} + method on_error {client_socket data_received} {} + method on_close {client_socket data_received} {} + method on_timeout {client_socket data_received} {} + method on_binary {client_socket data_received} {} + method on_text {client_socket data_received} {} + method on_pong {client_socket data_received} {} + + forward send ::websocket::send + +} + +oo::class create ServerExample { + superclass WebSocketServer + + method on_text {client_socket data_received} { + my send $client_socket text "The server received '$data_received'" + } +} + +ServerExample new 8080 +vwait forever diff --git a/examples/websocket/server_example.tcl b/examples/websocket/server_example.tcl new file mode 100755 index 0000000000..fe79ade4f1 --- /dev/null +++ b/examples/websocket/server_example.tcl @@ -0,0 +1,89 @@ +#!/bin/env tclsh +# Example websocket server from anonymous user at +# https://core.tcl-lang.org/tcllib/tktview?name=0dd2a66f08 + +package require websocket + +::websocket::loglevel debug +set srvSock [socket -server handleConnect 8080] + +# 1. declare the (tcp) server-socket as a websocket server +::websocket::server $srvSock +# 2. register callback +::websocket::live $srvSock / wsLiveCB + +# the usual tcl-tcp stuff (I don't (want to) use an http server package) + +proc handleConnect {client_socket IP_address port} { + puts "handleConnect" + puts "=============" + puts "IP_address: $IP_address" + puts "port: $port\n" + fileevent $client_socket readable [list handleRead $client_socket] +} + + + +proc handleRead {client_socket} { + global srvSock + chan configure $client_socket -translation crlf + set hdrs {} + + gets $client_socket line + + puts "HTTP HEADERS" + puts "============" + puts $line + + while {[gets $client_socket header_line]>=0 && $header_line ne ""} { + + puts $header_line + if {[regexp -expanded {^( [^\s:]+ ) \s* : \s* (.+)} $header_line -> header_name header_value]} { + lappend hdrs $header_name $header_value + } else { + break + } + } + + puts "\n" + + + # Now have the HTTP GET headers + # 3. let's check valid + + if {[::websocket::test $srvSock $client_socket / $hdrs]} { + puts "Incoming websocket connection received" + # 4. upgrade the socket + ::websocket::upgrade $client_socket + # from now the wsLiveCB will be called (not anymore handleRead). + } else { + close $client_socket + } +} + +proc wsLiveCB {client_socket type_of_event data_received} { + puts " + inside wsLiveCB handler + ======================= + client_socket: $client_socket + type_of_event: $type_of_event + data_received: $data_received\n" + + switch $type_of_event { + connect { } + disconnect { } + text { + ::websocket::send $client_socket text "The server received '$data_received'" + } + binary {} + error {} + close { } + timeout { } + ping {} + pong {} + } + +} + + +vwait forever diff --git a/examples/websocket/websocket_test.html b/examples/websocket/websocket_test.html new file mode 100644 index 0000000000..6c18ade60e --- /dev/null +++ b/examples/websocket/websocket_test.html @@ -0,0 +1,30 @@ + + + + Websocket test + + + +

+    
+
+
diff --git a/idoc/man/files/modules/comm/comm.n b/idoc/man/files/modules/comm/comm.n
index b7bd8c61c6..985851ab8a 100644
--- a/idoc/man/files/modules/comm/comm.n
+++ b/idoc/man/files/modules/comm/comm.n
@@ -4,7 +4,7 @@
 '\" Copyright (c) 2003-2004 ActiveState Corporation\&.
 '\" Copyright (c) 2006-2009 Andreas Kupries 
 '\"
-.TH "comm" n 4\&.7 tcllib "Remote communication"
+.TH "comm" n 4\&.7\&.1 tcllib "Remote communication"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -278,7 +278,7 @@ comm \- A remote communication facility for Tcl (8\&.5 and later)
 .SH SYNOPSIS
 package require \fBTcl  8\&.5\fR
 .sp
-package require \fBcomm  ?4\&.7?\fR
+package require \fBcomm  ?4\&.7\&.1?\fR
 .sp
 \fB::comm::comm send\fR ?-async? ?-command \fIcallback\fR? \fIid\fR \fIcmd\fR ?\fIarg arg \&.\&.\&.\fR?
 .sp
diff --git a/idoc/man/files/modules/map/map_geocode_nominatim.n b/idoc/man/files/modules/map/map_geocode_nominatim.n
index 4cd5c8a863..9f3a0d1e80 100644
--- a/idoc/man/files/modules/map/map_geocode_nominatim.n
+++ b/idoc/man/files/modules/map/map_geocode_nominatim.n
@@ -1,7 +1,7 @@
 '\"
 '\" Generated from file 'map_geocode_nominatim\&.man' by tcllib/doctools with format 'nroff'
 '\"
-.TH "map::geocode::nominatim" n 0\&.1 tcllib "Mapping utilities"
+.TH "map::geocode::nominatim" n 0\&.2 tcllib "Mapping utilities"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -273,7 +273,7 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 map::geocode::nominatim \- Resolving geographical names with a Nominatim service
 .SH SYNOPSIS
-package require \fBTcl  8\&.5\fR
+package require \fBTcl  8\&.6\fR
 .sp
 package require \fBhttp \fR
 .sp
@@ -283,7 +283,7 @@ package require \fBuri \fR
 .sp
 package require \fBsnit \fR
 .sp
-package require \fBmap::geocode::nominatim  ?0\&.1?\fR
+package require \fBmap::geocode::nominatim  ?0\&.2?\fR
 .sp
 \fB::map::geocode::nominatim\fR \fIrequestor\fR ?\fB-baseurl\fR \fIurl\fR? ?\fB-callback\fR \fIcallback\fR? ?\fB-error\fR \fIerror callback\fR?
 .sp
diff --git a/idoc/man/files/modules/map/map_slippy.n b/idoc/man/files/modules/map/map_slippy.n
index 574b5e6a3c..9aaca9f365 100644
--- a/idoc/man/files/modules/map/map_slippy.n
+++ b/idoc/man/files/modules/map/map_slippy.n
@@ -1,7 +1,7 @@
 '\"
 '\" Generated from file 'map_slippy\&.man' by tcllib/doctools with format 'nroff'
 '\"
-.TH "map::slippy" n 0\&.5 tcllib "Mapping utilities"
+.TH "map::slippy" n 0\&.8 tcllib "Mapping utilities"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -273,177 +273,484 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 map::slippy \- Common code for slippy based map packages
 .SH SYNOPSIS
-package require \fBTcl  8\&.4\fR
+package require \fBTcl  8\&.6\fR
 .sp
-package require \fBTk  8\&.4\fR
+package require \fBmap::slippy  ?0\&.8?\fR
 .sp
-package require \fBmap::slippy  ?0\&.5?\fR
+\fB::map\fR \fBslippy geo box 2point\fR \fIzoom\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBlength\fR \fIlevel\fR
+\fB::map\fR \fBslippy geo box center\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBtiles\fR \fIlevel\fR
+\fB::map\fR \fBslippy geo box corners\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBtile size\fR
+\fB::map\fR \fBslippy geo box diameter\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBtile valid\fR \fItile\fR \fIlevels\fR ?\fImsgvar\fR?
+\fB::map\fR \fBslippy geo box dimensions\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBgeo 2tile\fR \fIgeo\fR
+\fB::map\fR \fBslippy geo box fit\fR \fIgeobox\fR \fIcanvdim\fR \fIzmax\fR ?\fIzmin\fR?
 .sp
-\fB::map::slippy\fR \fBgeo 2tile\&.float\fR \fIgeo\fR
+\fB::map\fR \fBslippy geo box inside\fR \fIgeobox\fR \fIgeo\fR
 .sp
-\fB::map::slippy\fR \fBgeo 2point\fR \fIgeo\fR
+\fB::map\fR \fBslippy geo box limit\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBtile 2geo\fR \fItile\fR
+\fB::map\fR \fBslippy geo box opposites\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBtile 2point\fR \fItile\fR
+\fB::map\fR \fBslippy geo box perimeter\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBpoint 2geo\fR \fIpoint\fR
+\fB::map\fR \fBslippy geo box valid\fR \fIgeobox\fR
 .sp
-\fB::map::slippy\fR \fBpoint 2tile\fR \fIpoint\fR
+\fB::map\fR \fBslippy geo box valid-list\fR \fIgeoboxes\fR
 .sp
-\fB::map::slippy\fR \fBfit geobox\fR \fIcanvdim\fR \fIgeobox\fR \fIzmin\fR \fIzmax\fR
+\fB::map\fR \fBslippy geo distance\fR \fIgeo1\fR \fIgeo2\fR
+.sp
+\fB::map\fR \fBslippy geo distance*\fR \fIclosed\fR \fIgeo\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy geo distance-list\fR \fIclosed\fR \fIgeo-list\fR
+.sp
+\fB::map\fR \fBslippy geo limit\fR \fIgeo\fR
+.sp
+\fB::map\fR \fBslippy geo bbox\fR \fIgeo\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy geo bbox-list\fR \fIgeo-list\fR
+.sp
+\fB::map\fR \fBslippy geo center\fR \fIgeo\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy geo center-list\fR \fIgeo-list\fR
+.sp
+\fB::map\fR \fBslippy geo diameter\fR \fIgeo\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy geo diameter-list\fR \fIgeo-list\fR
+.sp
+\fB::map\fR \fBslippy geo 2point\fR \fIzoom\fR \fIgeo\fR
+.sp
+\fB::map\fR \fBslippy geo 2point*\fR \fIzoom\fR \fIgeo\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy geo 2point-list\fR \fIzoom\fR \fIgeo-list\fR
+.sp
+\fB::map\fR \fBslippy geo valid\fR \fIgeo\fR
+.sp
+\fB::map\fR \fBslippy geo valid-list\fR \fIgeos\fR
+.sp
+\fB::map\fR \fBslippy length\fR \fIlevel\fR
+.sp
+\fB::map\fR \fBslippy limit2\fR \fIx\fR
+.sp
+\fB::map\fR \fBslippy limit3\fR \fIx\fR
+.sp
+\fB::map\fR \fBslippy limit6\fR \fIx\fR
+.sp
+\fB::map\fR \fBslippy point box 2geo\fR \fIzoom\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point box center\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point box corners\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point box diameter\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point box dimensions\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point box inside\fR \fIpointbox\fR \fIpoint\fR
+.sp
+\fB::map\fR \fBslippy point box opposites\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point box perimeter\fR \fIpointbox\fR
+.sp
+\fB::map\fR \fBslippy point distance\fR \fIpoint1\fR \fIpoint2\fR
+.sp
+\fB::map\fR \fBslippy point distance*\fR \fIclosed\fR \fIpoint\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy point distance-list\fR \fIclosed\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy point bbox\fR \fIpoint\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy point bbox-list\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy point center\fR \fIpoint\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy point center-list\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy point diameter\fR \fIpoint\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy point diameter-list\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy point 2geo\fR \fIzoom\fR \fIpoint\fR
+.sp
+\fB::map\fR \fBslippy point 2geo*\fR \fIzoom\fR \fIpoint\fR\&.\&.\&.
+.sp
+\fB::map\fR \fBslippy point 2geo-list\fR \fIzoom\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy point simplify radial\fR \fIthreshold\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy point simplify rdp\fR \fIpoint-list\fR
+.sp
+\fB::map\fR \fBslippy pretty-distance\fR \fIx\fR
+.sp
+\fB::map\fR \fBslippy tiles\fR \fIlevel\fR
+.sp
+\fB::map\fR \fBslippy tile size\fR
+.sp
+\fB::map\fR \fBslippy tile valid\fR \fIzoom\fR \fIrow\fR \fIcolumn\fR \fIlevels\fR ?\fImsgvar\fR?
+.sp
+\fB::map\fR \fBslippy valid latitude\fR \fIx\fR
+.sp
+\fB::map\fR \fBslippy valid longitude\fR \fIx\fR
 .sp
 .BE
 .SH DESCRIPTION
-This package provides a number of methods doing things needed by all
-types of slippy-based map packages\&.
-.SH API
-.TP
-\fB::map::slippy\fR \fBlength\fR \fIlevel\fR
-This method returns the width/height of a slippy-based map at the
-specified zoom \fIlevel\fR, in pixels\&. This is, in essence, the result
-of
-.CS
-
-
-	expr { [tiles $level] * [tile size] }
-
-.CE
-.TP
-\fB::map::slippy\fR \fBtiles\fR \fIlevel\fR
-This method returns the width/height of a slippy-based map at the
-specified zoom \fIlevel\fR, in \fItiles\fR\&.
-.TP
-\fB::map::slippy\fR \fBtile size\fR
-This method returns the width/height of a tile in a slippy-based map,
-in pixels\&.
-.TP
-\fB::map::slippy\fR \fBtile valid\fR \fItile\fR \fIlevels\fR ?\fImsgvar\fR?
-This method checks whether \fItile\fR described a valid tile in a
-slippy-based map containing that many zoom \fIlevels\fR\&. The result is
-a boolean value, \fBtrue\fR if the tile is valid, and \fBfalse\fR
-otherwise\&. For the latter a message is left in the variable named by
-\fImsgvar\fR, should it be specified\&.
-.sp
-A tile identifier as stored in \fItile\fR is a list containing zoom
-level, tile row, and tile column, in this order\&. The command
-essentially checks this, i\&.e\&. the syntax, that the zoom level is
-between 0 and "\fIlevels\fR-1", and that the row/col information is
-within the boundaries for the zoom level, i\&.e\&. 0 \&.\&.\&.
-"[tiles $zoom]-1"\&.
-.TP
-\fB::map::slippy\fR \fBgeo 2tile\fR \fIgeo\fR
-Converts a geographical location at a zoom level (\fIgeo\fR, a list
-containing zoom level, latitude, and longitude, in this order) to a
-tile identifier (list containing zoom level, row, and column) at that
-level\&. The tile identifier uses pure integer numbers for the tile
-coordinates, for all geographic coordinates mapping to that tile\&.
-.TP
-\fB::map::slippy\fR \fBgeo 2tile\&.float\fR \fIgeo\fR
-Converts a geographical location at a zoom level (\fIgeo\fR, a list
-containing zoom level, latitude, and longitude, in this order) to a
-tile identifier (list containing zoom level, row, and column) at that
-level\&. The tile identifier uses floating point numbers for the tile
-coordinates, representing not only the tile the geographic coordinates
-map to, but also the fractional location inside of that tile\&.
-.TP
-\fB::map::slippy\fR \fBgeo 2point\fR \fIgeo\fR
-Converts a geographical location at a zoom level (\fIgeo\fR, a list
-containing zoom level, latitude, and longitude, in this order) to a
-pixel position (list containing zoom level, y, and x) at that level\&.
-.TP
-\fB::map::slippy\fR \fBtile 2geo\fR \fItile\fR
-Converts a tile identifier at a zoom level (\fItile\fR, list
-containing zoom level, row, and column) to a geographical location
-(list containing zoom level, latitude, and longitude, in this order)
-at that level\&.
-.TP
-\fB::map::slippy\fR \fBtile 2point\fR \fItile\fR
-Converts a tile identifier at a zoom level (\fItile\fR, a list
-containing zoom level, row, and column, in this order) to a pixel
-position (list containing zoom level, y, and x) at that level\&.
-.TP
-\fB::map::slippy\fR \fBpoint 2geo\fR \fIpoint\fR
-Converts a pixel position at a zoom level (\fIpoint\fR, list
-containing zoom level, y, and x) to a geographical location (list
-containing zoom level, latitude, and longitude, in this order) at that
-level\&.
-.TP
-\fB::map::slippy\fR \fBpoint 2tile\fR \fIpoint\fR
-Converts a pixel position at a zoom level (\fIpoint\fR, a list
-containing zoom level, y, and x, in this order) to a tile identifier
-(list containing zoom level, row, and column) at that level\&.
-.TP
-\fB::map::slippy\fR \fBfit geobox\fR \fIcanvdim\fR \fIgeobox\fR \fIzmin\fR \fIzmax\fR
-Calculates the zoom level (whithin the bounds \fIzmin\fR and
-\fIzmax\fR) such that \fIgeobox\fR (a 4-element list containing the
-latitudes and longitudes lat0, lat1, lon0 and lon1 of a geo box,
-in this order) fits into a viewport given by \fIcanvdim\fR, a
-2-element list containing the width and height of the viewport, in
-this order\&.
+This package provides a number of methods doing things needed by all types of slippy-based map
+packages\&.
+.PP
+\fIBEWARE\fR, \fIAttention\fR Version \fI0\&.8\fR is \fINOT backward compatible\fR
+with version 0\&.7 and earlier\&.  The entire API was \fIheavily revised and changed\fR\&.
 .PP
+\fINote:\fR For the representation of locations in the various coordinate systems used by
+the commands of this package please read section \fBCoordinate systems\fR\&. The command
+descriptions will not repeat them, and assume that they are understood already\&.
 .SH "COORDINATE SYSTEMS"
-The commands of this package operate on three distinct coordinate
-systems, which are explained below\&.
+The commands of this package operate in two distinct coordinate systems, geographical locations, and
+points\&. The former represents coordinates for locations on Earth, while the latter is for use on Tk
+\fIcanvas\fR widgets\&.
 .SS GEOGRAPHIC
-\fIGeographic\fRal coordinates are represented by \fILatitude\fR and
-\fILongitude\fR, each of which is measured in degrees, as they are
-essentially angles\&.
+Geographical locations (short: \fIgeo\fR) are represented by a pair of \fILatitude\fR and
+\fILongitude\fR values, each of which is measured in degrees, as they are essentially angles\&.
+.PP
+The \fBZero\fR longitude is the \fIGreenwich meridian\fR, with positive values going
+\fIeast\fR, and negative values going \fIwest\fR, for a total range of +/- 180 degrees\&. Note that
++180 and -180 longitude are the same \fImeridian\fR, opposite to Greenwich\&.
+.PP
+The \fBzero\fR latitude is the \fIEquator\fR, with positive values going \fInorth\fR and
+negative values going \fIsouth\fR\&. While the true range is +/- 90 degrees the projection used by
+the package requires us to cap the range at roughly +/- \fB85\&.05112877983284\fR degrees\&. This
+means that the North and South poles are not representable and not part of any map\&.
 .PP
-\fBZero\fR longitude is the \fIGreenwich meridian\fR, with
-positive values going \fIeast\fR, and negative values going
-\fIwest\fR, for a total range of +/- 180 degrees\&. Note that +180 and
--180 longitude are the same \fImeridian\fR, opposite to greenwich\&.
+A geographical location is represented by a list containing two values, the latitude, and
+longitude of the location, in this order\&.
 .PP
-\fBzero\fR latitude the \fIEquator\fR, with positive values
-going \fInorth\fR and negative values going \fIsouth\fR\&. While the
-true range is +/- 90 degrees the projection used by the package
-requires us to cap the range at +/- 85\&.05112877983284 degrees\&. This
-means that north and south pole are not representable and not part of
-any map\&.
-.SS TILES
-While \fBGeographic\fRal coordinates of the previous section are
-independent of zoom level the \fItile coordinates\fR are not\&.
+A geographical bounding box is represented by a list containing four values, the minimal
+latitude and longitude of the box, and the maximal latitude and longitude of the box, in this order\&.
 .PP
-Generally the integer part of tile coordinates represent the
-row and column number of the tile in question, wheras the fractional
-parts signal how far inside the tile the location in question is, with
-pure integer coordinates (no fractional part) representing the upper
-left corner of the tile\&.
+Geographical locations and boxes can be converted to points and their boxes by means of an
+additional parameter, the \fIzoom\fR level\&. This parameter indicates the size of the map in the
+canvas the coordinates are to be projected into\&.
+.SS POINTS
+Points (short: \fIpoint\fR) are represented by a pair of \fIx\fR and \fIy\fR values, each of
+which is measured in pixels\&. They reference a location in a Tk \fIcanvas\fR widget\&.
+As a map can be shown at different degrees of magnification, the exact pixel coordinates for a
+geographical location depend on this \fIzoom\fR level\&.
 .PP
-The zero point of the map is at the upper left corner,
-regardless of zoom level, with larger coordinates going right (east)
-and down (south), and smaller coordinates going left (west) and up
-(north)\&. Again regardless of zxoom level\&.
+For the following explanation to make sense it should be noted that a map shown in a Tk
+\fIcanvas\fR widget is split into equal-sized quadratic \fItiles\fR\&.
 .PP
-Negative tile coordinates are not allowed\&.
+Point coordinates are tile coordinates scaled by the size of these tiles\&. This package uses
+tiles of size \fB256\fR, which is the standard size used by many online servers providing map
+tiles of some kind or other\&.
 .PP
-At zoom level 0 the whole map is represented by a single,
-putting the geographic zero at 1/2, 1/2 of tile coordinates, and the
-range of tile coordinates as [0\&.\&.\&.1]\&.
+A point is represented by a list containing the x- and y-coordinates of the lcoation, in this
+in this order\&.
 .PP
-To go from a zoom level N to the next deeper level N+1 each
-tile of level N is split into its four quadrants, which then are the
-tiles of level N+1\&.
+A point bounding box is represented by a list containing four values, the minimal x and y of
+the box, and the maximal x and y of the box, in this order\&.
+.PP
+Point locations and boxes can be converted to geographical locations and their boxes by means
+of an additional parameter, the \fIzoom\fR level\&. This parameter indicates the size of the map in
+the canvas the coordinates are projected from\&.
+.PP
+Tile coordinates appear only in one place of the API, in the signature of command
+\fBmap slippy tile valid\fR\&. Everything else uses Point coordinates\&.
+.PP
+Using tile coordinates in the following however makes the structure of the map at the various
+\fIzoom\fR levels (maginification factors) easier to explain\&.
+.PP
+Generally the integer part of the tile coordinates represent the row and column number of a
+tile of the map, wheras the fractional parts signal how far inside that tile the location in
+question is, with pure integer coordinates (no fractional part) representing the upper left corner
+of a tile\&.
+.PP
+The zero point of the map is at the upper left corner, regardless of zoom level, with larger
+coordinates going right (east) and down (south), and smaller coordinates going left (west) and up
+(north)\&. Again regardless of zoom level\&.
+.PP
+Negative coordinates are not allowed\&.
+.PP
+At zoom level \fB0\fR the entire map is represented by a single tile, putting the
+geographic zero at 1/2, 1/2 in terms of tile coordinates, and the range of tile coordinates as
+[0\&.\&.\&.1]\&.
+.PP
+When going from zoom level \fBN\fR to the next deeper (magnified) level (\fBN\fR+1) each tile
+of level \fBN\fR is split into its four quadrants, which then are the tiles of level \fBN\fR+1\&.
+.PP
+This means that at zoom level \fBN\fR the map is sliced (horizontally and vertically) into
+\fB2^N\fR rows and columns, for a total of \fB4^N\fR tiles, with the tile coordinates ranging from
+\fB0\fR to \fB2^N+1\fR\&.
+.SH API
+.TP
+\fB::map\fR \fBslippy geo box 2point\fR \fIzoom\fR \fIgeobox\fR
+The command converts the geographical box \fIgeobox\fR to a point box in the canvas, for the
+specified \fIzoom\fR level, and returns that box\&.
+.TP
+\fB::map\fR \fBslippy geo box center\fR \fIgeobox\fR
+The command returns the center of the geographical box \fIgeobox\fR\&.
+.TP
+\fB::map\fR \fBslippy geo box corners\fR \fIgeobox\fR
+This command returns a list containing the four corner locations implied by the geographical box
+\fIgeobox\fR\&. The four points are top-left, bottom-left, top-right, and bottom-right, in that order\&.
+.TP
+\fB::map\fR \fBslippy geo box diameter\fR \fIgeobox\fR
+The command returns the diameter of the geographical box \fIgeobox\fR, in meters\&.
+.TP
+\fB::map\fR \fBslippy geo box dimensions\fR \fIgeobox\fR
+The command returns the dimensions of the geographical box \fIgeobox\fR, width and height, in this
+order\&.
+.TP
+\fB::map\fR \fBslippy geo box fit\fR \fIgeobox\fR \fIcanvdim\fR \fIzmax\fR ?\fIzmin\fR?
+This command calculates the zoom level such that the \fIgeobox\fR will fit into a viewport given by
+\fIcanvdim\fR (a 2-element list containing the width and height of said viewport) and returns it\&.
+.sp
+The zoom level will be made to fit within the range \fIzmin\fR\&.\&.\&.\fIzmax\fR\&.
+When \fIzmin\fR is not specified it will default to \fB0\fR\&.
+.TP
+\fB::map\fR \fBslippy geo box inside\fR \fIgeobox\fR \fIgeo\fR
+The command tests if the geographical location \fIgeo\fR is contained in the geographical
+box \fIgeobox\fR or not\&. It returns \fBtrue\fR if so, and \fBfalse\fR else\&.
+.TP
+\fB::map\fR \fBslippy geo box limit\fR \fIgeobox\fR
+This command limits the geographical box to at most 6 decimals and returns the result\&.
+.sp
+For geographical coordinates 6 decimals is roughly equivalent to a grid of 11\&.1 cm\&.
+.TP
+\fB::map\fR \fBslippy geo box opposites\fR \fIgeobox\fR
+This command returns a list containing the two principal corner locations implied by the
+geographical box \fIgeobox\fR\&. The two points are top-left, and bottom-right, in that order\&.
+.TP
+\fB::map\fR \fBslippy geo box perimeter\fR \fIgeobox\fR
+The command returns the perimeter of the geographical box \fIgeobox\fR, in meters\&.
+.TP
+\fB::map\fR \fBslippy geo box valid\fR \fIgeobox\fR
+This commands tests if the specified geographical box contains only valid latitudes
+and longitudes\&. It returns \fBtrue\fR if the box is valid, and \fBfalse\fR else\&.
+.TP
+\fB::map\fR \fBslippy geo box valid-list\fR \fIgeoboxes\fR
+This commands tests if the list of geographical boxes contains only valid latitudes
+and longitudes\&. It returns \fBtrue\fR if all the boxes are valid, and \fBfalse\fR
+else\&.
+.TP
+\fB::map\fR \fBslippy geo distance\fR \fIgeo1\fR \fIgeo2\fR
+This command computes the great-circle distance between the two geographical locations in meters and
+returns that value\&.
+.sp
+The code is based on
+\fIhttps://wiki\&.tcl-lang\&.org/page/geodesy\fR take on the
+\fIhaversine formula\fR [https://en\&.wikipedia\&.org/wiki/Haversine_formula]\&.
+.TP
+\fB::map\fR \fBslippy geo distance*\fR \fIclosed\fR \fIgeo\fR\&.\&.\&.
+An extension of \fBmap slippy geo distance\fR this command computes the cumulative distance along
+the path specified by the ordered set of geographical locations in meters, and returns it\&.
+.sp
+If the path is marked as \fIclosed\fR (i\&.e\&. a polygon/loop) the result contains the distance
+between last and first element of the path as well, making the result the length of the perimeter of
+the area described by the locations\&.
+.TP
+\fB::map\fR \fBslippy geo distance-list\fR \fIclosed\fR \fIgeo-list\fR
+As a variant of \fBmap slippy geo distance*\fR this command takes the path to compute the length
+of as a single list of geographical locations, instead of a varying number of arguments\&.
+.TP
+\fB::map\fR \fBslippy geo limit\fR \fIgeo\fR
+This command limits the geographical location to at most 6 decimals and returns the result\&.
+.sp
+For geographical coordinates 6 decimals is roughly equivalent to a grid of 11\&.1 cm\&.
+.TP
+\fB::map\fR \fBslippy geo bbox\fR \fIgeo\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy geo bbox-list\fR \fIgeo-list\fR
+These two commands compute the bounding box for the specified set of geographical locations and
+return a geographical box\&.
+.sp
+When no geographical locations are specified the box is "\fB0 0 0 0\fR"\&.
+.sp
+The locations are specified as either a varying number of arguments, or as a single list\&.
+.TP
+\fB::map\fR \fBslippy geo center\fR \fIgeo\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy geo center-list\fR \fIgeo-list\fR
+These two commands compute the center of the bounding box for the specified set of geographical
+locations\&.
+.sp
+When no geographical locations are specified the center is "\fB0 0\fR"\&.
+.sp
+The locations are specified as either a varying number of arguments, or as a single list\&.
+.TP
+\fB::map\fR \fBslippy geo diameter\fR \fIgeo\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy geo diameter-list\fR \fIgeo-list\fR
+These two commands compute the diameter for the specified set of geographical locations, in meters\&.
+The diameter is the maximum of the pair-wise distances between all locations\&.
+.sp
+When less than two geographical locations are specified the diameter is "\fB0\fR"\&.
+.sp
+The locations are specified as either a varying number of arguments, or as a single list\&.
+.TP
+\fB::map\fR \fBslippy geo 2point\fR \fIzoom\fR \fIgeo\fR
+This command converts the geographical location \fIgeo\fR to a point in the canvas, for the
+specified \fIzoom\fR level, and returns that point\&.
+.TP
+\fB::map\fR \fBslippy geo 2point*\fR \fIzoom\fR \fIgeo\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy geo 2point-list\fR \fIzoom\fR \fIgeo-list\fR
+These two commands are extensions of \fBmap slippy geo 2point\fR which take a series of
+geographical locations as either a varying number of arguments or a single list, convert them all to
+points as per the specified \fIzoom\fR level and return a list of the results\&.
+.TP
+\fB::map\fR \fBslippy geo valid\fR \fIgeo\fR
+This commands tests if the specified geographical location contains only valid latitudes and
+longitudes\&. It returns \fBtrue\fR if the location is valid, and \fBfalse\fR else\&.
+.TP
+\fB::map\fR \fBslippy geo valid-list\fR \fIgeos\fR
+This commands tests if the list of geographical locations contains only valid latitudes and
+longitudes\&. It returns \fBtrue\fR if all the locations are valid, and \fBfalse\fR else\&.
+.TP
+\fB::map\fR \fBslippy length\fR \fIlevel\fR
+This command returns the width/height of a slippy-based map at the specified zoom \fIlevel\fR, in
+pixels\&. This is, in essence, the result of
+.CS
+
+
+expr { [tiles $level] * [tile size] }
+
+.CE
+.TP
+\fB::map\fR \fBslippy limit2\fR \fIx\fR
+.TP
+\fB::map\fR \fBslippy limit3\fR \fIx\fR
+.TP
+\fB::map\fR \fBslippy limit6\fR \fIx\fR
+This command limits the value to at most 2, 3, or 6 decimals and returns the result\&.
+.sp
+For geographical coordinates 6 decimals is roughly equivalent to a grid of 11\&.1 cm\&.
+.TP
+\fB::map\fR \fBslippy point box 2geo\fR \fIzoom\fR \fIpointbox\fR
+The command converts the point box \fIpointbox\fR to a geographical box in the canvas, as per the
+specified \fIzoom\fR level, and returns that box\&.
+.TP
+\fB::map\fR \fBslippy point box center\fR \fIpointbox\fR
+The command returns the center of the \fIpointbox\fR\&.
+.TP
+\fB::map\fR \fBslippy point box corners\fR \fIpointbox\fR
+This command returns a list containing the four corner locations implied by the point box
+\fIpointbox\fR\&. The four points are top-left, bottom-left, top-right, and bottom-right, in that
+order\&.
+.TP
+\fB::map\fR \fBslippy point box diameter\fR \fIpointbox\fR
+The command returns the diameter of the \fIpointbox\fR, in pixels\&.
+.TP
+\fB::map\fR \fBslippy point box dimensions\fR \fIpointbox\fR
+The command returns the dimensions of the \fIpointbox\fR, width and height, in this order\&.
+.TP
+\fB::map\fR \fBslippy point box inside\fR \fIpointbox\fR \fIpoint\fR
+The command tests if the \fIpoint\fR is contained in the \fIpointbox\fR or not\&.
+It returns \fBtrue\fR if so, and \fBfalse\fR else\&.
+.TP
+\fB::map\fR \fBslippy point box opposites\fR \fIpointbox\fR
+This command returns a list containing the two principal corner locations implied by the point box
+\fIpointbox\fR\&. The two points are top-left, and bottom-right, in that order\&.
+.TP
+\fB::map\fR \fBslippy point box perimeter\fR \fIpointbox\fR
+The command returns the perimeter of the \fIpointbox\fR, in pixels\&.
+.TP
+\fB::map\fR \fBslippy point distance\fR \fIpoint1\fR \fIpoint2\fR
+This command computes the euclidena distance between the two points in pixels and returns that
+value\&.
+.TP
+\fB::map\fR \fBslippy point distance*\fR \fIclosed\fR \fIpoint\fR\&.\&.\&.
+An extension of \fBmap slippy point distance\fR this command computes the cumulative distance
+along the path specified by the ordered set of points, and returns it\&.
+.sp
+If the path is marked as \fIclosed\fR (i\&.e\&. a polygon/loop) the result contains the distance
+between last and first element of the path as well, making the result the length of the perimeter of
+the area described by the locations\&.
+.TP
+\fB::map\fR \fBslippy point distance-list\fR \fIclosed\fR \fIpoint-list\fR
+As a variant of \fBmap slippy point distance*\fR this command takes the path to compute the length
+of as a single list of points, instead of a varying number of arguments\&.
+.TP
+\fB::map\fR \fBslippy point bbox\fR \fIpoint\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy point bbox-list\fR \fIpoint-list\fR
+These two commands compute the bounding box for the specified set of points and return a point box\&.
+.sp
+When no points are specified the box is "\fB0 0 0 0\fR"\&.
+.sp
+The locations are specified as either a varying number of arguments, or as a single list\&.
+.TP
+\fB::map\fR \fBslippy point center\fR \fIpoint\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy point center-list\fR \fIpoint-list\fR
+These two commands compute the center of the bounding box for the specified set of points\&.
+.sp
+When no points are specified the center is "\fB0 0\fR"\&.
+.sp
+The locations are specified as either a varying number of arguments, or as a single list\&.
+.TP
+\fB::map\fR \fBslippy point diameter\fR \fIpoint\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy point diameter-list\fR \fIpoint-list\fR
+These two commands compute the diameter for the specified set of points, in pixels\&.
+The diameter is the maximum of the pair-wise distances between all locations\&.
+.sp
+When less than two points are specified the diameter is "\fB0\fR"\&.
+.sp
+The locations are specified as either a varying number of arguments, or as a single list\&.
+.TP
+\fB::map\fR \fBslippy point 2geo\fR \fIzoom\fR \fIpoint\fR
+This command converts the \fIpoint\fR in the canvas, for the specified \fIzoom\fR level, to a
+geograhical location, and returns that location\&.
+.TP
+\fB::map\fR \fBslippy point 2geo*\fR \fIzoom\fR \fIpoint\fR\&.\&.\&.
+.TP
+\fB::map\fR \fBslippy point 2geo-list\fR \fIzoom\fR \fIpoint-list\fR
+These two commands are extensions of \fBmap slippy point 2geo\fR which take a series of points as
+either a varying number of arguments or a single list, convert them all to geographical locations as
+per the specified \fIzoom\fR level and return a list of the results\&.
+.TP
+\fB::map\fR \fBslippy point simplify radial\fR \fIthreshold\fR \fIpoint-list\fR
+This command takes a path of points (as a single list), simplifies the path using the
+\fIRadial Distance\fR algorithm and returns the simplified path as list of points\&.
+.sp
+In essence the algorithm keeps only the first of adjacent points nearer to that first point
+than the threshold, and drops the others\&.
+.TP
+\fB::map\fR \fBslippy point simplify rdp\fR \fIpoint-list\fR
+This command takes a patch of points (as a single list), simplifies it using the
+\fInon-parametric\fR \fIRamer-Douglas-Peucker\fR algorithm and returns the simplified path as
+list of points\&.
+.TP
+\fB::map\fR \fBslippy pretty-distance\fR \fIx\fR
+This methods formats the distance \fIx\fR (in meters) for display and returns the resulting string
+(including the chosen unit)\&.
+.sp
+Sub-kilometer distances are limited to 2 decimals, i\&.e\&. centimeters, whereas Kilometers are
+limited to 3 decimals, i\&.e\&. meters\&.
+.TP
+\fB::map\fR \fBslippy tiles\fR \fIlevel\fR
+This command returns the width/height of a slippy-based map at the specified zoom \fIlevel\fR, in
+\fItiles\fR\&.
+.TP
+\fB::map\fR \fBslippy tile size\fR
+This command returns the width/height of a tile in a slippy-based map, in pixels\&.
+.TP
+\fB::map\fR \fBslippy tile valid\fR \fIzoom\fR \fIrow\fR \fIcolumn\fR \fIlevels\fR ?\fImsgvar\fR?
+This command checks if the tile described by \fIzoom\fR, \fIrow\fR, and \fIcolumn\fR is valid for a
+slippy-based map having that many zoom \fIlevels\fR, or not\&.
+The result is a boolean value, \fBtrue\fR if the tile is valid, and \fBfalse\fR otherwise\&.
+In the latter case a message is left in the variable named by \fImsgvar\fR, should it be specified\&.
+.TP
+\fB::map\fR \fBslippy valid latitude\fR \fIx\fR
+This commands tests if the argument \fIx\fR is a valid latitude value, and returns the boolean
+result of that test\&. I\&.e\&. \fBtrue\fR if the value is valid, and \fBfalse\fR else\&.
+.TP
+\fB::map\fR \fBslippy valid longitude\fR \fIx\fR
+This commands tests if the argument \fIx\fR is a valid longitude value, and returns the boolean
+result of that test\&. I\&.e\&. \fBtrue\fR if the value is valid, and \fBfalse\fR else\&.
 .PP
-This means that at zoom level N the map is sliced (horizontally
-and vertically) into 2^N stripes, for a total of 4^N tiles, with tile
-coordinates ranging from 0 to 2^N+1\&.
-.SS PIXELS/POINTS
-\fIpixel coordinates\fR, also called \fIpoint coordinates\fR are
-in essence \fBtile coordinates\fR scaled by the size of
-the image representing a tile\&. This tile size currently has a fixed
-value, \fB256\fR\&.
 .SH REFERENCES
 .IP [1]
 \fIhttp://wiki\&.openstreetmap\&.org/wiki/Main_Page\fR
diff --git a/idoc/man/files/modules/map/map_slippy_cache.n b/idoc/man/files/modules/map/map_slippy_cache.n
index 6036b757e4..7f47057fe6 100644
--- a/idoc/man/files/modules/map/map_slippy_cache.n
+++ b/idoc/man/files/modules/map/map_slippy_cache.n
@@ -1,7 +1,7 @@
 '\"
 '\" Generated from file 'map_slippy_cache\&.man' by tcllib/doctools with format 'nroff'
 '\"
-.TH "map::slippy::cache" n 0\&.2 tcllib "Mapping utilities"
+.TH "map::slippy::cache" n 0\&.4 tcllib "Mapping utilities"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -273,15 +273,13 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 map::slippy::cache \- Management of a tile cache in the local filesystem
 .SH SYNOPSIS
-package require \fBTcl  8\&.4\fR
+package require \fBTcl  8\&.6\fR
 .sp
-package require \fBTk  8\&.4\fR
-.sp
-package require \fBimg::png \fR
+package require \fBTk  8\&.6\fR
 .sp
 package require \fBmap::slippy \fR
 .sp
-package require \fBmap::slippy::cache  ?0\&.2?\fR
+package require \fBmap::slippy::cache  ?0\&.4?\fR
 .sp
 \fB::map::slippy::cache\fR \fIcacheName\fR \fIcachedir\fR \fIprovider\fR
 .sp
@@ -293,8 +291,12 @@ package require \fBmap::slippy::cache  ?0\&.2?\fR
 .sp
 .BE
 .SH DESCRIPTION
-This package provides a class for managing a cache of tiles for
-slippy-based maps in the local filesystem\&.
+This package provides a class for managing a cache of tiles for slippy-based maps in the local
+filesystem\&.
+.PP
+\fIBEWARE\fR, \fIAttention\fR Version \fI0\&.4\fR is \fINOT backward compatible\fR
+with version 0\&.3 and earlier\&. This is due to switching this package's internals to the use of
+version 0\&.8 of \fBmap::slippy\fR\&.
 .SH API
 .TP
 \fB::map::slippy::cache\fR \fIcacheName\fR \fIcachedir\fR \fIprovider\fR
diff --git a/idoc/man/files/modules/map/map_slippy_fetcher.n b/idoc/man/files/modules/map/map_slippy_fetcher.n
index 24255b12fa..e7355db029 100644
--- a/idoc/man/files/modules/map/map_slippy_fetcher.n
+++ b/idoc/man/files/modules/map/map_slippy_fetcher.n
@@ -1,7 +1,7 @@
 '\"
 '\" Generated from file 'map_slippy_fetcher\&.man' by tcllib/doctools with format 'nroff'
 '\"
-.TH "map::slippy::fetcher" n 0\&.4 tcllib "Mapping utilities"
+.TH "map::slippy::fetcher" n 0\&.6 tcllib "Mapping utilities"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -273,15 +273,13 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 map::slippy::fetcher \- Accessing a server providing tiles for slippy-based maps
 .SH SYNOPSIS
-package require \fBTcl  8\&.4\fR
+package require \fBTcl  8\&.6\fR
 .sp
-package require \fBTk  8\&.4\fR
-.sp
-package require \fBimg::png \fR
+package require \fBTk  8\&.6\fR
 .sp
 package require \fBmap::slippy \fR
 .sp
-package require \fBmap::slippy::fetcher  ?0\&.4?\fR
+package require \fBmap::slippy::fetcher  ?0\&.6?\fR
 .sp
 \fB::map::slippy::fetcher\fR \fIfetcherName\fR \fIlevels\fR \fIurl\fR
 .sp
@@ -295,8 +293,11 @@ package require \fBmap::slippy::fetcher  ?0\&.4?\fR
 .sp
 .BE
 .SH DESCRIPTION
-This package provides a class for accessing http servers providing
-tiles for slippy-based maps\&.
+This package provides a class for accessing http servers providing tiles for slippy-based maps\&.
+.PP
+\fIBEWARE\fR, \fIAttention\fR Version \fI0\&.6\fR is \fINOT backward compatible\fR
+with version 0\&.5 and earlier\&. This is due to switching this package's internals to the use of
+version 0\&.8 of \fBmap::slippy\fR\&.
 .SH API
 .TP
 \fB::map::slippy::fetcher\fR \fIfetcherName\fR \fIlevels\fR \fIurl\fR
diff --git a/idoc/man/files/modules/math/bigfloat.n b/idoc/man/files/modules/math/bigfloat.n
index 495eff308f..b69a6900ea 100644
--- a/idoc/man/files/modules/math/bigfloat.n
+++ b/idoc/man/files/modules/math/bigfloat.n
@@ -2,7 +2,7 @@
 '\" Generated from file 'bigfloat\&.man' by tcllib/doctools with format 'nroff'
 '\" Copyright (c) 2004-2008, by Stephane Arnold 
 '\"
-.TH "math::bigfloat" n 2\&.0\&.3 tcllib "Tcl Math Library"
+.TH "math::bigfloat" n 2\&.0\&.4 tcllib "Tcl Math Library"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -276,7 +276,7 @@ math::bigfloat \- Arbitrary precision floating-point numbers
 .SH SYNOPSIS
 package require \fBTcl  8\&.5\fR
 .sp
-package require \fBmath::bigfloat  ?2\&.0\&.3?\fR
+package require \fBmath::bigfloat  ?2\&.0\&.4?\fR
 .sp
 \fBfromstr\fR \fInumber\fR ?\fItrailingZeros\fR?
 .sp
diff --git a/idoc/man/files/modules/math/calculus.n b/idoc/man/files/modules/math/calculus.n
index 0c829ad9e5..16e1fd0e15 100644
--- a/idoc/man/files/modules/math/calculus.n
+++ b/idoc/man/files/modules/math/calculus.n
@@ -310,6 +310,14 @@ package require \fBmath::calculus  0\&.8\&.2\fR
 .sp
 \fB::math::calculus::regula_falsi\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
 .sp
+\fB::math::calculus::root_bisection\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+.sp
+\fB::math::calculus::root_secant\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+.sp
+\fB::math::calculus::root_brent\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+.sp
+\fB::math::calculus::root_chandrupatla\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+.sp
 .BE
 .SH DESCRIPTION
 .PP
@@ -638,6 +646,100 @@ End of the interval
 float \fIeps\fR
 Relative allowed error (defaults to 1\&.0e-4)
 .RE
+.TP
+\fB::math::calculus::root_bisection\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+Return an estimate of the zero or one of the zeros of the function
+contained in the interval [xb,xe]\&. The error in this estimate is of the
+order of eps*abs(xe-xb), the actual error may be slightly larger\&.
+.sp
+The method used is the so-called \fIbisection\fR\&. For properties: see the \fIregula falsi\fR procedure\&.
+.RS
+.TP
+command \fIf\fR
+Name of the command that evaluates the function for
+which the zero is to be returned
+.TP
+float \fIxb\fR
+Start of the interval in which the zero is supposed
+to lie
+.TP
+float \fIxe\fR
+End of the interval
+.TP
+float \fIeps\fR
+Relative allowed error (defaults to 1\&.0e-7)
+.RE
+.TP
+\fB::math::calculus::root_secant\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+Return an estimate of the zero or one of the zeros of the function
+contained in the interval [xb,xe]\&. The error in this estimate is of the
+order of eps*abs(xe-xb), the actual error may be slightly larger\&.
+.sp
+The method used is the so-called \fIsecant\fR method\&. For properties: see the \fIregula falsi\fR procedure\&.
+Note that this method is not guaranteed to produce a zero, but it is fast\&.
+.RS
+.TP
+command \fIf\fR
+Name of the command that evaluates the function for
+which the zero is to be returned
+.TP
+float \fIxb\fR
+Start of the interval in which the zero is supposed
+to lie
+.TP
+float \fIxe\fR
+End of the interval
+.TP
+float \fIeps\fR
+Relative allowed error (defaults to 1\&.0e-7)
+.RE
+.TP
+\fB::math::calculus::root_brent\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+Return an estimate of the zero or one of the zeros of the function
+contained in the interval [xb,xe]\&. The error in this estimate is of the
+order of eps*abs(xe-xb), the actual error may be slightly larger\&.
+.sp
+The method used is the so-called \fIBrent\fR method\&. For properties: see the \fIregula falsi\fR procedure\&.
+.RS
+.TP
+command \fIf\fR
+Name of the command that evaluates the function for
+which the zero is to be returned
+.TP
+float \fIxb\fR
+Start of the interval in which the zero is supposed
+to lie
+.TP
+float \fIxe\fR
+End of the interval
+.TP
+float \fIeps\fR
+Relative allowed error (defaults to 1\&.0e-7)
+.RE
+.TP
+\fB::math::calculus::root_chandrupatla\fR \fIf\fR \fIxb\fR \fIxe\fR \fIeps\fR
+Return an estimate of the zero or one of the zeros of the function
+contained in the interval [xb,xe]\&. The error in this estimate is of the
+order of eps*abs(xe-xb), the actual error may be slightly larger\&.
+.sp
+The method used is the so-called \fIChandrupatla\fR method\&. It is a variant of the Brent method and
+is reputed to be faster\&. See \fIhttps://www\&.embeddedrelated\&.com/showarticle/855\&.php\fR for a discussion\&.
+.RS
+.TP
+command \fIf\fR
+Name of the command that evaluates the function for
+which the zero is to be returned
+.TP
+float \fIxb\fR
+Start of the interval in which the zero is supposed
+to lie
+.TP
+float \fIxe\fR
+End of the interval
+.TP
+float \fIeps\fR
+Relative allowed error (defaults to 1\&.0e-7)
+.RE
 .PP
 .PP
 \fINotes:\fR
@@ -681,6 +783,11 @@ Other types of boundary conditions (zero gradient, zero flux)
 .IP \(bu
 Other schematisation of the first-order term (now central
 differences are used, but upstream differences might be useful too)\&.
+.IP \(bu
+The various root finding methods differ in robustness, ease of use and convergence rates\&. While the Newton-Raphson
+method is quite fast (quadratic convergence), it is not guaranteed to produce an answer\&. The methods
+that bracket the root, require two starting points, but except for the secant method are guaranteed to
+deliver a good estimate\&.
 .PP
 .SH EXAMPLES
 Let us take a few simple examples:
diff --git a/idoc/man/files/modules/mime/mime.n b/idoc/man/files/modules/mime/mime.n
index 7f30e1753f..66ae553cac 100644
--- a/idoc/man/files/modules/mime/mime.n
+++ b/idoc/man/files/modules/mime/mime.n
@@ -2,7 +2,7 @@
 '\" Generated from file 'mime\&.man' by tcllib/doctools with format 'nroff'
 '\" Copyright (c) 1999-2000 Marshall T\&. Rose
 '\"
-.TH "mime" n 1\&.6\&.3 tcllib "Mime"
+.TH "mime" n 1\&.7\&.1 tcllib "Mime"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -276,7 +276,7 @@ mime \- Manipulation of MIME body parts
 .SH SYNOPSIS
 package require \fBTcl  8\&.5\fR
 .sp
-package require \fBmime  ?1\&.6\&.3?\fR
+package require \fBmime  ?1\&.7\&.1?\fR
 .sp
 \fB::mime::initialize\fR ?\fB-canonical\fR \fItype/subtype\fR ?\fB-param\fR {\fIkey value\fR}\&.\&.\&.? ?\fB-encoding\fR \fIvalue\fR? ?\fB-header\fR {\fIkey value\fR}\&.\&.\&.?? (\fB-file\fR \fIname\fR | \fB-string\fR \fIvalue\fR | \fB-parts\fR {\fItoken1\fR \&.\&.\&. \fItokenN\fR})
 .sp
diff --git a/idoc/man/files/modules/rc4/rc4.n b/idoc/man/files/modules/rc4/rc4.n
index 8ea4cf118e..3037af059a 100644
--- a/idoc/man/files/modules/rc4/rc4.n
+++ b/idoc/man/files/modules/rc4/rc4.n
@@ -341,7 +341,7 @@ This should be called to clean up resources associated with
 % set keydata [binary format H* 0123456789abcdef]
 % rc4::rc4 -hex -key $keydata HelloWorld
 3cf1ae8b7f1c670b612f
-% rc4::rc4 -hex -key $keydata [binary format H* 3cf1ae8b7f1c670b612f]
+% rc4::rc4 -key $keydata [binary format H* 3cf1ae8b7f1c670b612f]
 HelloWorld
 
 .CE
diff --git a/idoc/man/files/modules/report/report.n b/idoc/man/files/modules/report/report.n
index 82b1513ad7..2d1b4172ba 100644
--- a/idoc/man/files/modules/report/report.n
+++ b/idoc/man/files/modules/report/report.n
@@ -1,8 +1,8 @@
 '\"
 '\" Generated from file 'report\&.man' by tcllib/doctools with format 'nroff'
-'\" Copyright (c) 2002-2014 Andreas Kupries 
+'\" Copyright (c) 2002-2014,2022 Andreas Kupries 
 '\"
-.TH "report" n 0\&.3\&.2 tcllib "Matrix reports"
+.TH "report" n 0\&.4 tcllib "Matrix reports"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -274,9 +274,9 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 report \- Create and manipulate report objects
 .SH SYNOPSIS
-package require \fBTcl  8\&.2\fR
+package require \fBTcl  8\&.5\fR
 .sp
-package require \fBreport  ?0\&.3\&.2?\fR
+package require \fBreport  ?0\&.4?\fR
 .sp
 \fB::report::report\fR \fIreportName\fR \fIcolumns\fR ?\fBstyle\fR \fIstyle arg\&.\&.\&.\fR?
 .sp
@@ -702,6 +702,6 @@ matrix, report, table
 Data structures
 .SH COPYRIGHT
 .nf
-Copyright (c) 2002-2014 Andreas Kupries 
+Copyright (c) 2002-2014,2022 Andreas Kupries 
 
 .fi
diff --git a/idoc/man/files/modules/simulation/montecarlo.n b/idoc/man/files/modules/simulation/montecarlo.n
index 3c9ef62446..c3b650fa91 100644
--- a/idoc/man/files/modules/simulation/montecarlo.n
+++ b/idoc/man/files/modules/simulation/montecarlo.n
@@ -362,7 +362,7 @@ a statistical distribution with "fat" tails\&.
 The package defines the following auxiliary procedures:
 .TP
 \fB::simulation::montecarlo::getOption\fR \fIkeyword\fR
-Get the value of an option given as part of the \fIsingeExperiment\fR command\&.
+Get the value of an option given as part of the \fIsingleExperiment\fR command\&.
 .RS
 .TP
 string \fIkeyword\fR
diff --git a/idoc/man/files/modules/struct/matrix.n b/idoc/man/files/modules/struct/matrix.n
index 2e2958b1c4..ef6a7e9aec 100644
--- a/idoc/man/files/modules/struct/matrix.n
+++ b/idoc/man/files/modules/struct/matrix.n
@@ -1,8 +1,8 @@
 '\"
 '\" Generated from file 'matrix\&.man' by tcllib/doctools with format 'nroff'
-'\" Copyright (c) 2002-2013,2019 Andreas Kupries 
+'\" Copyright (c) 2002-2013,2019,2022 Andreas Kupries 
 '\"
-.TH "struct::matrix" n 2\&.0\&.4 tcllib "Tcl Data Structures"
+.TH "struct::matrix" n 2\&.1 tcllib "Tcl Data Structures"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -274,9 +274,9 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 struct::matrix \- Create and manipulate matrix objects
 .SH SYNOPSIS
-package require \fBTcl  8\&.2\fR
+package require \fBTcl  8\&.5\fR
 .sp
-package require \fBstruct::matrix  ?2\&.0\&.4?\fR
+package require \fBstruct::matrix  ?2\&.1?\fR
 .sp
 \fB::struct::matrix\fR ?\fImatrixName\fR? ?\fB=\fR|\fB:=\fR|\fBas\fR|\fBdeserialize\fR \fIsource\fR?
 .sp
@@ -528,6 +528,11 @@ computation\&.
 \fINote:\fR The command recognizes ANSI color control sequences
 and excludes them from the width of a line, as they are logically of
 zero width\&.
+.sp
+\fINote:\fR The command properly recognizes and accounts for Asian double-wide characters\&.
+.sp
+\fIIn other words\fR, the returned length is the number of terminal columns taken by the
+string, and not the number of characters\&.
 .TP
 \fImatrixName\fR \fBdelete column\fR \fIcolumn\fR
 Deletes the specified column from the matrix and shifts all columns
@@ -850,6 +855,6 @@ matrix
 Data structures
 .SH COPYRIGHT
 .nf
-Copyright (c) 2002-2013,2019 Andreas Kupries 
+Copyright (c) 2002-2013,2019,2022 Andreas Kupries 
 
 .fi
diff --git a/idoc/man/files/modules/struct/matrix1.n b/idoc/man/files/modules/struct/matrix1.n
deleted file mode 100644
index 17142b1922..0000000000
--- a/idoc/man/files/modules/struct/matrix1.n
+++ /dev/null
@@ -1,691 +0,0 @@
-'\"
-'\" Generated from file 'matrix1\&.man' by tcllib/doctools with format 'nroff'
-'\" Copyright (c) 2002,2019 Andreas Kupries 
-'\"
-.TH "struct::matrix_v1" n 1\&.2\&.2 tcllib "Tcl Data Structures"
-.\" The -*- nroff -*- definitions below are for supplemental macros used
-.\" in Tcl/Tk manual entries.
-.\"
-.\" .AP type name in/out ?indent?
-.\"	Start paragraph describing an argument to a library procedure.
-.\"	type is type of argument (int, etc.), in/out is either "in", "out",
-.\"	or "in/out" to describe whether procedure reads or modifies arg,
-.\"	and indent is equivalent to second arg of .IP (shouldn't ever be
-.\"	needed;  use .AS below instead)
-.\"
-.\" .AS ?type? ?name?
-.\"	Give maximum sizes of arguments for setting tab stops.  Type and
-.\"	name are examples of largest possible arguments that will be passed
-.\"	to .AP later.  If args are omitted, default tab stops are used.
-.\"
-.\" .BS
-.\"	Start box enclosure.  From here until next .BE, everything will be
-.\"	enclosed in one large box.
-.\"
-.\" .BE
-.\"	End of box enclosure.
-.\"
-.\" .CS
-.\"	Begin code excerpt.
-.\"
-.\" .CE
-.\"	End code excerpt.
-.\"
-.\" .VS ?version? ?br?
-.\"	Begin vertical sidebar, for use in marking newly-changed parts
-.\"	of man pages.  The first argument is ignored and used for recording
-.\"	the version when the .VS was added, so that the sidebars can be
-.\"	found and removed when they reach a certain age.  If another argument
-.\"	is present, then a line break is forced before starting the sidebar.
-.\"
-.\" .VE
-.\"	End of vertical sidebar.
-.\"
-.\" .DS
-.\"	Begin an indented unfilled display.
-.\"
-.\" .DE
-.\"	End of indented unfilled display.
-.\"
-.\" .SO ?manpage?
-.\"	Start of list of standard options for a Tk widget. The manpage
-.\"	argument defines where to look up the standard options; if
-.\"	omitted, defaults to "options". The options follow on successive
-.\"	lines, in three columns separated by tabs.
-.\"
-.\" .SE
-.\"	End of list of standard options for a Tk widget.
-.\"
-.\" .OP cmdName dbName dbClass
-.\"	Start of description of a specific option.  cmdName gives the
-.\"	option's name as specified in the class command, dbName gives
-.\"	the option's name in the option database, and dbClass gives
-.\"	the option's class in the option database.
-.\"
-.\" .UL arg1 arg2
-.\"	Print arg1 underlined, then print arg2 normally.
-.\"
-.\" .QW arg1 ?arg2?
-.\"	Print arg1 in quotes, then arg2 normally (for trailing punctuation).
-.\"
-.\" .PQ arg1 ?arg2?
-.\"	Print an open parenthesis, arg1 in quotes, then arg2 normally
-.\"	(for trailing punctuation) and then a closing parenthesis.
-.\"
-.\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
-.if t .wh -1.3i ^B
-.nr ^l \n(.l
-.ad b
-.\"	# Start an argument description
-.de AP
-.ie !"\\$4"" .TP \\$4
-.el \{\
-.   ie !"\\$2"" .TP \\n()Cu
-.   el          .TP 15
-.\}
-.ta \\n()Au \\n()Bu
-.ie !"\\$3"" \{\
-\&\\$1 \\fI\\$2\\fP (\\$3)
-.\".b
-.\}
-.el \{\
-.br
-.ie !"\\$2"" \{\
-\&\\$1	\\fI\\$2\\fP
-.\}
-.el \{\
-\&\\fI\\$1\\fP
-.\}
-.\}
-..
-.\"	# define tabbing values for .AP
-.de AS
-.nr )A 10n
-.if !"\\$1"" .nr )A \\w'\\$1'u+3n
-.nr )B \\n()Au+15n
-.\"
-.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
-.nr )C \\n()Bu+\\w'(in/out)'u+2n
-..
-.AS Tcl_Interp Tcl_CreateInterp in/out
-.\"	# BS - start boxed text
-.\"	# ^y = starting y location
-.\"	# ^b = 1
-.de BS
-.br
-.mk ^y
-.nr ^b 1u
-.if n .nf
-.if n .ti 0
-.if n \l'\\n(.lu\(ul'
-.if n .fi
-..
-.\"	# BE - end boxed text (draw box now)
-.de BE
-.nf
-.ti 0
-.mk ^t
-.ie n \l'\\n(^lu\(ul'
-.el \{\
-.\"	Draw four-sided box normally, but don't draw top of
-.\"	box if the box started on an earlier page.
-.ie !\\n(^b-1 \{\
-\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
-.\}
-.el \}\
-\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
-.\}
-.\}
-.fi
-.br
-.nr ^b 0
-..
-.\"	# VS - start vertical sidebar
-.\"	# ^Y = starting y location
-.\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
-.de VS
-.if !"\\$2"" .br
-.mk ^Y
-.ie n 'mc \s12\(br\s0
-.el .nr ^v 1u
-..
-.\"	# VE - end of vertical sidebar
-.de VE
-.ie n 'mc
-.el \{\
-.ev 2
-.nf
-.ti 0
-.mk ^t
-\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
-.sp -1
-.fi
-.ev
-.\}
-.nr ^v 0
-..
-.\"	# Special macro to handle page bottom:  finish off current
-.\"	# box/sidebar if in box/sidebar mode, then invoked standard
-.\"	# page bottom macro.
-.de ^B
-.ev 2
-'ti 0
-'nf
-.mk ^t
-.if \\n(^b \{\
-.\"	Draw three-sided box if this is the box's first page,
-.\"	draw two sides but no top otherwise.
-.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
-.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
-.\}
-.if \\n(^v \{\
-.nr ^x \\n(^tu+1v-\\n(^Yu
-\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
-.\}
-.bp
-'fi
-.ev
-.if \\n(^b \{\
-.mk ^y
-.nr ^b 2
-.\}
-.if \\n(^v \{\
-.mk ^Y
-.\}
-..
-.\"	# DS - begin display
-.de DS
-.RS
-.nf
-.sp
-..
-.\"	# DE - end display
-.de DE
-.fi
-.RE
-.sp
-..
-.\"	# SO - start of list of standard options
-.de SO
-'ie '\\$1'' .ds So \\fBoptions\\fR
-'el .ds So \\fB\\$1\\fR
-.SH "STANDARD OPTIONS"
-.LP
-.nf
-.ta 5.5c 11c
-.ft B
-..
-.\"	# SE - end of list of standard options
-.de SE
-.fi
-.ft R
-.LP
-See the \\*(So manual entry for details on the standard options.
-..
-.\"	# OP - start of full description for a single option
-.de OP
-.LP
-.nf
-.ta 4c
-Command-Line Name:	\\fB\\$1\\fR
-Database Name:	\\fB\\$2\\fR
-Database Class:	\\fB\\$3\\fR
-.fi
-.IP
-..
-.\"	# CS - begin code excerpt
-.de CS
-.RS
-.nf
-.ta .25i .5i .75i 1i
-..
-.\"	# CE - end code excerpt
-.de CE
-.fi
-.RE
-..
-.\"	# UL - underline word
-.de UL
-\\$1\l'|0\(ul'\\$2
-..
-.\"	# QW - apply quotation marks to word
-.de QW
-.ie '\\*(lq'"' ``\\$1''\\$2
-.\"" fix emacs highlighting
-.el \\*(lq\\$1\\*(rq\\$2
-..
-.\"	# PQ - apply parens and quotation marks to word
-.de PQ
-.ie '\\*(lq'"' (``\\$1''\\$2)\\$3
-.\"" fix emacs highlighting
-.el (\\*(lq\\$1\\*(rq\\$2)\\$3
-..
-.\"	# QR - quoted range
-.de QR
-.ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
-.\"" fix emacs highlighting
-.el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
-..
-.\"	# MT - "empty" string
-.de MT
-.QW ""
-..
-.BS
-.SH NAME
-struct::matrix_v1 \- Create and manipulate matrix objects
-.SH SYNOPSIS
-package require \fBTcl  8\&.2\fR
-.sp
-package require \fBstruct::matrix  ?1\&.2\&.2?\fR
-.sp
-\fBmatrixName\fR \fIoption\fR ?\fIarg arg \&.\&.\&.\fR?
-.sp
-\fImatrixName\fR \fBadd column\fR ?\fIvalues\fR?
-.sp
-\fImatrixName\fR \fBadd row\fR ?\fIvalues\fR?
-.sp
-\fImatrixName\fR \fBadd columns\fR \fIn\fR
-.sp
-\fImatrixName\fR \fBadd rows\fR \fIn\fR
-.sp
-\fImatrixName\fR \fBcells\fR
-.sp
-\fImatrixName\fR \fBcellsize\fR \fIcolumn row\fR
-.sp
-\fImatrixName\fR \fBcolumns\fR
-.sp
-\fImatrixName\fR \fBcolumnwidth\fR \fIcolumn\fR
-.sp
-\fImatrixName\fR \fBdelete column\fR \fIcolumn\fR
-.sp
-\fImatrixName\fR \fBdelete row\fR \fIrow\fR
-.sp
-\fImatrixName\fR \fBdestroy\fR
-.sp
-\fImatrixName\fR \fBformat 2string\fR ?\fIreport\fR?
-.sp
-\fImatrixName\fR \fBformat 2chan\fR ??\fIreport\fR? \fIchannel\fR?
-.sp
-\fImatrixName\fR \fBget cell\fR \fIcolumn row\fR
-.sp
-\fImatrixName\fR \fBget column\fR \fIcolumn\fR
-.sp
-\fImatrixName\fR \fBget rect\fR \fIcolumn_tl row_tl column_br row_br\fR
-.sp
-\fImatrixName\fR \fBget row\fR \fIrow\fR
-.sp
-\fImatrixName\fR \fBinsert column\fR \fIcolumn\fR ?\fIvalues\fR?
-.sp
-\fImatrixName\fR \fBinsert row\fR \fIrow\fR ?\fIvalues\fR?
-.sp
-\fImatrixName\fR \fBlink\fR ?-transpose? \fIarrayvar\fR
-.sp
-\fImatrixName\fR \fBlinks\fR
-.sp
-\fImatrixName\fR \fBrowheight\fR \fIrow\fR
-.sp
-\fImatrixName\fR \fBrows\fR
-.sp
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBall\fR \fIpattern\fR
-.sp
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBcolumn\fR \fIcolumn pattern\fR
-.sp
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBrow\fR \fIrow pattern\fR
-.sp
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBrect\fR \fIcolumn_tl row_tl column_br row_br pattern\fR
-.sp
-\fImatrixName\fR \fBset cell\fR \fIcolumn row value\fR
-.sp
-\fImatrixName\fR \fBset column\fR \fIcolumn values\fR
-.sp
-\fImatrixName\fR \fBset rect\fR \fIcolumn row values\fR
-.sp
-\fImatrixName\fR \fBset row\fR \fIrow values\fR
-.sp
-\fImatrixName\fR \fBsort columns\fR ?\fB-increasing\fR|\fB-decreasing\fR? \fIrow\fR
-.sp
-\fImatrixName\fR \fBsort rows\fR ?\fB-increasing\fR|\fB-decreasing\fR? \fIcolumn\fR
-.sp
-\fImatrixName\fR \fBswap columns\fR \fIcolumn_a column_b\fR
-.sp
-\fImatrixName\fR \fBswap rows\fR \fIrow_a row_b\fR
-.sp
-\fImatrixName\fR \fBunlink\fR \fIarrayvar\fR
-.sp
-.BE
-.SH DESCRIPTION
-.PP
-The \fB::struct::matrix\fR command creates a new matrix object with an
-associated global Tcl command whose name is \fImatrixName\fR\&.  This
-command may be used to invoke various operations on the matrix\&.  It has
-the following general form:
-.TP
-\fBmatrixName\fR \fIoption\fR ?\fIarg arg \&.\&.\&.\fR?
-\fIOption\fR and the \fIarg\fRs determine the exact behavior of the
-command\&.
-.PP
-.PP
-A matrix is a rectangular collection of cells, i\&.e\&. organized in rows
-and columns\&. Each cell contains exactly one value of arbitrary
-form\&. The cells in the matrix are addressed by pairs of integer
-numbers, with the first (left) number in the pair specifying the
-column and the second (right) number specifying the row the cell is
-in\&. These indices are counted from 0 upward\&. The special non-numeric
-index \fBend\fR refers to the last row or column in the matrix,
-depending on the context\&. Indices of the form
-\fBend\fR-\fBnumber\fR are counted from the end of the row or
-column, like they are for standard Tcl lists\&. Trying to access
-non-existing cells causes an error\&.
-.PP
-The matrices here are created empty, i\&.e\&. they have neither rows nor
-columns\&. The user then has to add rows and columns as needed by his
-application\&. A specialty of this structure is the ability to export an
-array-view onto its contents\&. Such can be used by tkTable, for
-example, to link the matrix into the display\&.
-.PP
-The following commands are possible for matrix objects:
-.TP
-\fImatrixName\fR \fBadd column\fR ?\fIvalues\fR?
-Extends the matrix by one column and then acts like \fBsetcolumn\fR
-(see below) on this new column if there were \fIvalues\fR
-supplied\&. Without \fIvalues\fR the new cells will be set to the empty
-string\&. The new column is appended immediately behind the last
-existing column\&.
-.TP
-\fImatrixName\fR \fBadd row\fR ?\fIvalues\fR?
-Extends the matrix by one row and then acts like \fBsetrow\fR (see
-below) on this new row if there were \fIvalues\fR supplied\&. Without
-\fIvalues\fR the new cells will be set to the empty string\&. The new
-row is appended immediately behind the last existing row\&.
-.TP
-\fImatrixName\fR \fBadd columns\fR \fIn\fR
-Extends the matrix by \fIn\fR columns\&. The new cells will be set to
-the empty string\&. The new columns are appended immediately behind the
-last existing column\&. A value of \fIn\fR equal to or smaller than 0 is
-not allowed\&.
-.TP
-\fImatrixName\fR \fBadd rows\fR \fIn\fR
-Extends the matrix by \fIn\fR rows\&. The new cells will be set to the
-empty string\&. The new rows are appended immediately behind the last
-existing row\&. A value of \fIn\fR equal to or smaller than 0 is not
-allowed\&.
-.TP
-\fImatrixName\fR \fBcells\fR
-Returns the number of cells currently managed by the matrix\&. This is
-the product of \fBrows\fR and \fBcolumns\fR\&.
-.TP
-\fImatrixName\fR \fBcellsize\fR \fIcolumn row\fR
-Returns the length of the string representation of the value currently
-contained in the addressed cell\&.
-.TP
-\fImatrixName\fR \fBcolumns\fR
-Returns the number of columns currently managed by the matrix\&.
-.TP
-\fImatrixName\fR \fBcolumnwidth\fR \fIcolumn\fR
-Returns the length of the longest string representation of all the
-values currently contained in the cells of the addressed column if
-these are all spanning only one line\&. For cell values spanning
-multiple lines the length of their longest line goes into the
-computation\&.
-.TP
-\fImatrixName\fR \fBdelete column\fR \fIcolumn\fR
-Deletes the specified column from the matrix and shifts all columns
-with higher indices one index down\&.
-.TP
-\fImatrixName\fR \fBdelete row\fR \fIrow\fR
-Deletes the specified row from the matrix and shifts all row with
-higher indices one index down\&.
-.TP
-\fImatrixName\fR \fBdestroy\fR
-Destroys the matrix, including its storage space and associated
-command\&.
-.TP
-\fImatrixName\fR \fBformat 2string\fR ?\fIreport\fR?
-Formats the matrix using the specified report object and returns the
-string containing the result of this operation\&. The report has to
-support the \fBprintmatrix\fR method\&. If no \fIreport\fR is
-specified the system will use an internal report definition to format
-the matrix\&.
-.TP
-\fImatrixName\fR \fBformat 2chan\fR ??\fIreport\fR? \fIchannel\fR?
-Formats the matrix using the specified report object and writes the
-string containing the result of this operation into the channel\&. The
-report has to support the \fBprintmatrix2channel\fR method\&.  If no
-\fIreport\fR is specified the system will use an internal report
-definition to format the matrix\&. If no \fIchannel\fR is specified the
-system will use \fBstdout\fR\&.
-.TP
-\fImatrixName\fR \fBget cell\fR \fIcolumn row\fR
-Returns the value currently contained in the cell identified by row
-and column index\&.
-.TP
-\fImatrixName\fR \fBget column\fR \fIcolumn\fR
-Returns a list containing the values from all cells in the column
-identified by the index\&. The contents of the cell in row 0 are stored
-as the first element of this list\&.
-.TP
-\fImatrixName\fR \fBget rect\fR \fIcolumn_tl row_tl column_br row_br\fR
-Returns a list of lists of cell values\&. The values stored in the
-result come from the sub-matrix whose top-left and bottom-right cells
-are specified by \fIcolumn_tl, row_tl\fR and
-\fIcolumn_br, row_br\fR resp\&. Note that the following equations have
-to be true: "\fIcolumn_tl\fR <= \fIcolumn_br\fR" and "\fIrow_tl\fR <=
-\fIrow_br\fR"\&. The result is organized as follows: The outer list is
-the list of rows, its elements are lists representing a single
-row\&. The row with the smallest index is the first element of the outer
-list\&. The elements of the row lists represent the selected cell
-values\&. The cell with the smallest index is the first element in each
-row list\&.
-.TP
-\fImatrixName\fR \fBget row\fR \fIrow\fR
-Returns a list containing the values from all cells in the row
-identified by the index\&. The contents of the cell in column 0 are
-stored as the first element of this list\&.
-.TP
-\fImatrixName\fR \fBinsert column\fR \fIcolumn\fR ?\fIvalues\fR?
-Extends the matrix by one column and then acts like \fBsetcolumn\fR
-(see below) on this new column if there were \fIvalues\fR
-supplied\&. Without \fIvalues\fR the new cells will be set to the empty
-string\&. The new column is inserted just before the column specified by
-the given index\&. This means, if \fIcolumn\fR is less than or equal to
-zero, then the new column is inserted at the beginning of the matrix,
-before the first column\&. If \fIcolumn\fR has the value \fBend\fR,
-or if it is greater than or equal to the number of columns in the
-matrix, then the new column is appended to the matrix, behind the last
-column\&. The old column at the chosen index and all columns with higher
-indices are shifted one index upward\&.
-.TP
-\fImatrixName\fR \fBinsert row\fR \fIrow\fR ?\fIvalues\fR?
-Extends the matrix by one row and then acts like \fBsetrow\fR (see
-below) on this new row if there were \fIvalues\fR supplied\&. Without
-\fIvalues\fR the new cells will be set to the empty string\&. The new
-row is inserted just before the row specified by the given index\&. This
-means, if \fIrow\fR is less than or equal to zero, then the new row is
-inserted at the beginning of the matrix, before the first row\&. If
-\fIrow\fR has the value \fBend\fR, or if it is greater than or
-equal to the number of rows in the matrix, then the new row is
-appended to the matrix, behind the last row\&. The old row at that index
-and all rows with higher indices are shifted one index upward\&.
-.TP
-\fImatrixName\fR \fBlink\fR ?-transpose? \fIarrayvar\fR
-Links the matrix to the specified array variable\&. This means that the
-contents of all cells in the matrix is stored in the array too, with
-all changes to the matrix propagated there too\&. The contents of the
-cell \fI(column,row)\fR is stored in the array using the key
-\fIcolumn,row\fR\&. If the option \fB-transpose\fR is specified the
-key \fIrow,column\fR will be used instead\&. It is possible to link the
-matrix to more than one array\&. Note that the link is bidirectional,
-i\&.e\&. changes to the array are mirrored in the matrix too\&.
-.TP
-\fImatrixName\fR \fBlinks\fR
-Returns a list containing the names of all array variables the matrix
-was linked to through a call to method \fBlink\fR\&.
-.TP
-\fImatrixName\fR \fBrowheight\fR \fIrow\fR
-Returns the height of the specified row in lines\&. This is the highest
-number of lines spanned by a cell over all cells in the row\&.
-.TP
-\fImatrixName\fR \fBrows\fR
-Returns the number of rows currently managed by the matrix\&.
-.TP
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBall\fR \fIpattern\fR
-Searches the whole matrix for cells matching the \fIpattern\fR and
-returns a list with all matches\&. Each item in the aforementioned list
-is a list itself and contains the column and row index of the matching
-cell, in this order\&. The results are ordered by column first and row
-second, both times in ascending order\&. This means that matches to the
-left and the top of the matrix come before matches to the right and
-down\&.
-.sp
-The type of the pattern (string, glob, regular expression) is
-determined by the option after the \fBsearch\fR keyword\&. If no
-option is given it defaults to \fB-exact\fR\&.
-.sp
-If the option \fB-nocase\fR is specified the search will be
-case-insensitive\&.
-.TP
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBcolumn\fR \fIcolumn pattern\fR
-Like \fBsearch all\fR, but the search is restricted to the
-specified column\&.
-.TP
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBrow\fR \fIrow pattern\fR
-Like \fBsearch all\fR, but the search is restricted to the
-specified row\&.
-.TP
-\fImatrixName\fR \fBsearch\fR ?-nocase? ?-exact|-glob|-regexp? \fBrect\fR \fIcolumn_tl row_tl column_br row_br pattern\fR
-Like \fBsearch all\fR, but the search is restricted to the
-specified rectangular area of the matrix\&.
-.TP
-\fImatrixName\fR \fBset cell\fR \fIcolumn row value\fR
-Sets the value in the cell identified by row and column index to the
-data in the third argument\&.
-.TP
-\fImatrixName\fR \fBset column\fR \fIcolumn values\fR
-Sets the values in the cells identified by the column index to the
-elements of the list provided as the third argument\&. Each element of
-the list is assigned to one cell, with the first element going into
-the cell in row 0 and then upward\&. If there are less values in the
-list than there are rows the remaining rows are set to the empty
-string\&. If there are more values in the list than there are rows the
-superfluous elements are ignored\&. The matrix is not extended by this
-operation\&.
-.TP
-\fImatrixName\fR \fBset rect\fR \fIcolumn row values\fR
-Takes a list of lists of cell values and writes them into the
-submatrix whose top-left cell is specified by the two indices\&. If the
-sublists of the outerlist are not of equal length the shorter sublists
-will be filled with empty strings to the length of the longest
-sublist\&. If the submatrix specified by the top-left cell and the
-number of rows and columns in the \fIvalues\fR extends beyond the
-matrix we are modifying the over-extending parts of the values are
-ignored, i\&.e\&. essentially cut off\&. This subcommand expects its input
-in the format as returned by \fBgetrect\fR\&.
-.TP
-\fImatrixName\fR \fBset row\fR \fIrow values\fR
-Sets the values in the cells identified by the row index to the
-elements of the list provided as the third argument\&. Each element of
-the list is assigned to one cell, with the first element going into
-the cell in column 0 and then upward\&. If there are less values in the
-list than there are columns the remaining columns are set to the empty
-string\&. If there are more values in the list than there are columns
-the superfluous elements are ignored\&. The matrix is not extended by
-this operation\&.
-.TP
-\fImatrixName\fR \fBsort columns\fR ?\fB-increasing\fR|\fB-decreasing\fR? \fIrow\fR
-Sorts the columns in the matrix using the data in the specified
-\fIrow\fR as the key to sort by\&. The options \fB-increasing\fR
-and \fB-decreasing\fR have the same meaning as for \fBlsort\fR\&.
-If no option is specified \fB-increasing\fR is assumed\&.
-.TP
-\fImatrixName\fR \fBsort rows\fR ?\fB-increasing\fR|\fB-decreasing\fR? \fIcolumn\fR
-Sorts the rows in the matrix using the data in the specified
-\fIcolumn\fR as the key to sort by\&. The options \fB-increasing\fR
-and \fB-decreasing\fR have the same meaning as for \fBlsort\fR\&.
-If no option is specified \fB-increasing\fR is assumed\&.
-.TP
-\fImatrixName\fR \fBswap columns\fR \fIcolumn_a column_b\fR
-Swaps the contents of the two specified columns\&.
-.TP
-\fImatrixName\fR \fBswap rows\fR \fIrow_a row_b\fR
-Swaps the contents of the two specified rows\&.
-.TP
-\fImatrixName\fR \fBunlink\fR \fIarrayvar\fR
-Removes the link between the matrix and the specified arrayvariable,
-if there is one\&.
-.PP
-.SH EXAMPLES
-.PP
-The examples below assume a 5x5 matrix M with the first row containing
-the values 1 to 5, with 1 in the top-left cell\&. Each other row
-contains the contents of the row above it, rotated by one cell to the
-right\&.
-.PP
-.CS
-
-
- % M getrect 0 0 4 4
- {{1 2 3 4 5} {5 1 2 3 4} {4 5 1 2 3} {3 4 5 1 2} {2 3 4 5 1}}
-
-.CE
-.PP
-.CS
-
-
- % M setrect 1 1 {{0 0 0} {0 0 0} {0 0 0}}
- % M getrect 0 0 4 4
- {{1 2 3 4 5} {5 0 0 0 4} {4 0 0 0 3} {3 0 0 0 2} {2 3 4 5 1}}
-
-.CE
-.PP
-Assuming that the style definitions in the example section of the
-manpage for the package \fBreport\fR are loaded into the
-interpreter now an example which formats a matrix into a tabular
-report\&. The code filling the matrix with data is not shown\&.  contains
-useful data\&.
-.PP
-.CS
-
-
-    % ::struct::matrix m
-    % # \&.\&.\&. fill m with data, assume 5 columns
-    % ::report::report r 5 style captionedtable 1
-    % m format 2string r
-    +---+-------------------+-------+-------+--------+
-    |000|VERSIONS:          |2:8\&.4a3|1:8\&.4a3|1:8\&.4a3%|
-    +---+-------------------+-------+-------+--------+
-    |001|CATCH return ok    |7      |13     |53\&.85   |
-    |002|CATCH return error |68     |91     |74\&.73   |
-    |003|CATCH no catch used|7      |14     |50\&.00   |
-    |004|IF if true numeric |12     |33     |36\&.36   |
-    |005|IF elseif          |15     |47     |31\&.91   |
-    |   |true numeric       |       |       |        |
-    +---+-------------------+-------+-------+--------+
-    %
-    % # alternate way of doing the above
-    % r printmatrix m
-
-.CE
-.SH "BUGS, IDEAS, FEEDBACK"
-This document, and the package it describes, will undoubtedly contain
-bugs and other problems\&.
-Please report such in the category \fIstruct :: matrix\fR of the
-\fITcllib Trackers\fR [http://core\&.tcl\&.tk/tcllib/reportlist]\&.
-Please also report any ideas for enhancements you may have for either
-package and/or documentation\&.
-.PP
-When proposing code changes, please provide \fIunified diffs\fR,
-i\&.e the output of \fBdiff -u\fR\&.
-.PP
-Note further that \fIattachments\fR are strongly preferred over
-inlined patches\&. Attachments can be made by going to the \fBEdit\fR
-form of the ticket immediately after its creation, and then using the
-left-most button in the secondary navigation bar\&.
-.SH KEYWORDS
-matrix
-.SH CATEGORY
-Data structures
-.SH COPYRIGHT
-.nf
-Copyright (c) 2002,2019 Andreas Kupries 
-
-.fi
diff --git a/idoc/man/files/modules/textutil/wcswidth.n b/idoc/man/files/modules/textutil/wcswidth.n
new file mode 100644
index 0000000000..5c5c986f71
--- /dev/null
+++ b/idoc/man/files/modules/textutil/wcswidth.n
@@ -0,0 +1,332 @@
+'\"
+'\" Generated from file 'wcswidth\&.man' by tcllib/doctools with format 'nroff'
+'\"
+.TH "textutil::wcswidth" n 35\&.2 tcllib "Text and string utilities, macro processing"
+.\" The -*- nroff -*- definitions below are for supplemental macros used
+.\" in Tcl/Tk manual entries.
+.\"
+.\" .AP type name in/out ?indent?
+.\"	Start paragraph describing an argument to a library procedure.
+.\"	type is type of argument (int, etc.), in/out is either "in", "out",
+.\"	or "in/out" to describe whether procedure reads or modifies arg,
+.\"	and indent is equivalent to second arg of .IP (shouldn't ever be
+.\"	needed;  use .AS below instead)
+.\"
+.\" .AS ?type? ?name?
+.\"	Give maximum sizes of arguments for setting tab stops.  Type and
+.\"	name are examples of largest possible arguments that will be passed
+.\"	to .AP later.  If args are omitted, default tab stops are used.
+.\"
+.\" .BS
+.\"	Start box enclosure.  From here until next .BE, everything will be
+.\"	enclosed in one large box.
+.\"
+.\" .BE
+.\"	End of box enclosure.
+.\"
+.\" .CS
+.\"	Begin code excerpt.
+.\"
+.\" .CE
+.\"	End code excerpt.
+.\"
+.\" .VS ?version? ?br?
+.\"	Begin vertical sidebar, for use in marking newly-changed parts
+.\"	of man pages.  The first argument is ignored and used for recording
+.\"	the version when the .VS was added, so that the sidebars can be
+.\"	found and removed when they reach a certain age.  If another argument
+.\"	is present, then a line break is forced before starting the sidebar.
+.\"
+.\" .VE
+.\"	End of vertical sidebar.
+.\"
+.\" .DS
+.\"	Begin an indented unfilled display.
+.\"
+.\" .DE
+.\"	End of indented unfilled display.
+.\"
+.\" .SO ?manpage?
+.\"	Start of list of standard options for a Tk widget. The manpage
+.\"	argument defines where to look up the standard options; if
+.\"	omitted, defaults to "options". The options follow on successive
+.\"	lines, in three columns separated by tabs.
+.\"
+.\" .SE
+.\"	End of list of standard options for a Tk widget.
+.\"
+.\" .OP cmdName dbName dbClass
+.\"	Start of description of a specific option.  cmdName gives the
+.\"	option's name as specified in the class command, dbName gives
+.\"	the option's name in the option database, and dbClass gives
+.\"	the option's class in the option database.
+.\"
+.\" .UL arg1 arg2
+.\"	Print arg1 underlined, then print arg2 normally.
+.\"
+.\" .QW arg1 ?arg2?
+.\"	Print arg1 in quotes, then arg2 normally (for trailing punctuation).
+.\"
+.\" .PQ arg1 ?arg2?
+.\"	Print an open parenthesis, arg1 in quotes, then arg2 normally
+.\"	(for trailing punctuation) and then a closing parenthesis.
+.\"
+.\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
+.if t .wh -1.3i ^B
+.nr ^l \n(.l
+.ad b
+.\"	# Start an argument description
+.de AP
+.ie !"\\$4"" .TP \\$4
+.el \{\
+.   ie !"\\$2"" .TP \\n()Cu
+.   el          .TP 15
+.\}
+.ta \\n()Au \\n()Bu
+.ie !"\\$3"" \{\
+\&\\$1 \\fI\\$2\\fP (\\$3)
+.\".b
+.\}
+.el \{\
+.br
+.ie !"\\$2"" \{\
+\&\\$1	\\fI\\$2\\fP
+.\}
+.el \{\
+\&\\fI\\$1\\fP
+.\}
+.\}
+..
+.\"	# define tabbing values for .AP
+.de AS
+.nr )A 10n
+.if !"\\$1"" .nr )A \\w'\\$1'u+3n
+.nr )B \\n()Au+15n
+.\"
+.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
+.nr )C \\n()Bu+\\w'(in/out)'u+2n
+..
+.AS Tcl_Interp Tcl_CreateInterp in/out
+.\"	# BS - start boxed text
+.\"	# ^y = starting y location
+.\"	# ^b = 1
+.de BS
+.br
+.mk ^y
+.nr ^b 1u
+.if n .nf
+.if n .ti 0
+.if n \l'\\n(.lu\(ul'
+.if n .fi
+..
+.\"	# BE - end boxed text (draw box now)
+.de BE
+.nf
+.ti 0
+.mk ^t
+.ie n \l'\\n(^lu\(ul'
+.el \{\
+.\"	Draw four-sided box normally, but don't draw top of
+.\"	box if the box started on an earlier page.
+.ie !\\n(^b-1 \{\
+\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
+.\}
+.el \}\
+\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
+.\}
+.\}
+.fi
+.br
+.nr ^b 0
+..
+.\"	# VS - start vertical sidebar
+.\"	# ^Y = starting y location
+.\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
+.de VS
+.if !"\\$2"" .br
+.mk ^Y
+.ie n 'mc \s12\(br\s0
+.el .nr ^v 1u
+..
+.\"	# VE - end of vertical sidebar
+.de VE
+.ie n 'mc
+.el \{\
+.ev 2
+.nf
+.ti 0
+.mk ^t
+\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
+.sp -1
+.fi
+.ev
+.\}
+.nr ^v 0
+..
+.\"	# Special macro to handle page bottom:  finish off current
+.\"	# box/sidebar if in box/sidebar mode, then invoked standard
+.\"	# page bottom macro.
+.de ^B
+.ev 2
+'ti 0
+'nf
+.mk ^t
+.if \\n(^b \{\
+.\"	Draw three-sided box if this is the box's first page,
+.\"	draw two sides but no top otherwise.
+.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
+.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
+.\}
+.if \\n(^v \{\
+.nr ^x \\n(^tu+1v-\\n(^Yu
+\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
+.\}
+.bp
+'fi
+.ev
+.if \\n(^b \{\
+.mk ^y
+.nr ^b 2
+.\}
+.if \\n(^v \{\
+.mk ^Y
+.\}
+..
+.\"	# DS - begin display
+.de DS
+.RS
+.nf
+.sp
+..
+.\"	# DE - end display
+.de DE
+.fi
+.RE
+.sp
+..
+.\"	# SO - start of list of standard options
+.de SO
+'ie '\\$1'' .ds So \\fBoptions\\fR
+'el .ds So \\fB\\$1\\fR
+.SH "STANDARD OPTIONS"
+.LP
+.nf
+.ta 5.5c 11c
+.ft B
+..
+.\"	# SE - end of list of standard options
+.de SE
+.fi
+.ft R
+.LP
+See the \\*(So manual entry for details on the standard options.
+..
+.\"	# OP - start of full description for a single option
+.de OP
+.LP
+.nf
+.ta 4c
+Command-Line Name:	\\fB\\$1\\fR
+Database Name:	\\fB\\$2\\fR
+Database Class:	\\fB\\$3\\fR
+.fi
+.IP
+..
+.\"	# CS - begin code excerpt
+.de CS
+.RS
+.nf
+.ta .25i .5i .75i 1i
+..
+.\"	# CE - end code excerpt
+.de CE
+.fi
+.RE
+..
+.\"	# UL - underline word
+.de UL
+\\$1\l'|0\(ul'\\$2
+..
+.\"	# QW - apply quotation marks to word
+.de QW
+.ie '\\*(lq'"' ``\\$1''\\$2
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\$2
+..
+.\"	# PQ - apply parens and quotation marks to word
+.de PQ
+.ie '\\*(lq'"' (``\\$1''\\$2)\\$3
+.\"" fix emacs highlighting
+.el (\\*(lq\\$1\\*(rq\\$2)\\$3
+..
+.\"	# QR - quoted range
+.de QR
+.ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
+..
+.\"	# MT - "empty" string
+.de MT
+.QW ""
+..
+.BS
+.SH NAME
+textutil::wcswidth \- Procedures to compute terminal width of strings
+.SH SYNOPSIS
+package require \fBTcl  8\&.5\fR
+.sp
+package require \fBtextutil::wcswidth  ?35\&.2?\fR
+.sp
+\fB::textutil::wcswidth\fR \fIstring\fR
+.sp
+\fB::textutil::wcswidth_char\fR \fIchar\fR
+.sp
+\fB::textutil::wcswidth_type\fR \fIchar\fR
+.sp
+.BE
+.SH DESCRIPTION
+The package \fBtextutil::wcswidth\fR provides commands that determine character type and width
+when used in terminals, and the length of strings when printed in a terminal\&.
+.PP
+The data underlying the functionality of this package is provided by the Unicode database
+file \fIhttp://www\&.unicode\&.org/Public/UCD/latest/ucd/EastAsianWidth\&.txt\fR\&.
+.PP
+The complete set of procedures is described below\&.
+.TP
+\fB::textutil::wcswidth\fR \fIstring\fR
+Returns the number of character cells taken by the string when printed to the terminal\&.
+This takes double-wide characters from the various Asian and other scripts into account\&.
+.TP
+\fB::textutil::wcswidth_char\fR \fIchar\fR
+Returns the number of character cells taken by the character when printed to the terminal\&.
+.sp
+\fIBeware\fR: The character \fIchar\fR is specified as Unicode codepoint\&.
+.TP
+\fB::textutil::wcswidth_type\fR \fIchar\fR
+Returns the character type of the specified character\&.
+This a single character in the set of \fBA\fR, \fBF\fR, \fBH\fR, \fBN\fR, \fBNa\fR, and
+\fBW\fR, as specified per \fIhttp://www\&.unicode\&.org/Public/UCD/latest/ucd/EastAsianWidth\&.txt\fR
+.sp
+\fIBeware\fR: The character \fIchar\fR is specified as Unicode codepoint\&.
+.PP
+.SH "BUGS, IDEAS, FEEDBACK"
+This document, and the package it describes, will undoubtedly contain
+bugs and other problems\&.
+Please report such in the category \fItextutil\fR of the
+\fITcllib Trackers\fR [http://core\&.tcl\&.tk/tcllib/reportlist]\&.
+Please also report any ideas for enhancements you may have for either
+package and/or documentation\&.
+.PP
+When proposing code changes, please provide \fIunified diffs\fR,
+i\&.e the output of \fBdiff -u\fR\&.
+.PP
+Note further that \fIattachments\fR are strongly preferred over
+inlined patches\&. Attachments can be made by going to the \fBEdit\fR
+form of the ticket immediately after its creation, and then using the
+left-most button in the secondary navigation bar\&.
+.SH "SEE ALSO"
+regexp(n), split(n), string(n)
+.SH KEYWORDS
+character type, character width, double-wide character, prefix, regular expression, string
+.SH CATEGORY
+Text processing
diff --git a/idoc/man/files/modules/valtype/iban.n b/idoc/man/files/modules/valtype/iban.n
index 362a730eac..3f1555bd89 100644
--- a/idoc/man/files/modules/valtype/iban.n
+++ b/idoc/man/files/modules/valtype/iban.n
@@ -2,7 +2,7 @@
 '\" Generated from file 'vtype\&.inc' by tcllib/doctools with format 'nroff'
 '\" Copyright (c) 2011 Andreas Kupries 
 '\"
-.TH "valtype::iban" n 1\&.7 tcllib "Validation types"
+.TH "valtype::iban" n 1\&.8 tcllib "Validation types"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -280,7 +280,7 @@ package require \fBsnit  2\fR
 .sp
 package require \fBvaltype::common \fR
 .sp
-package require \fBvaltype::iban  ?1\&.7?\fR
+package require \fBvaltype::iban  ?1\&.8?\fR
 .sp
 \fBvaltype::iban\fR \fBvalidate\fR \fIvalue\fR
 .sp
diff --git a/idoc/man/files/modules/websocket/websocket.n b/idoc/man/files/modules/websocket/websocket.n
index 224ea43bf2..634fb5da11 100644
--- a/idoc/man/files/modules/websocket/websocket.n
+++ b/idoc/man/files/modules/websocket/websocket.n
@@ -1,7 +1,7 @@
 '\"
 '\" Generated from file 'websocket\&.man' by tcllib/doctools with format 'nroff'
 '\"
-.TH "websocket" n 1\&.4\&.2 tcllib "websocket client and server"
+.TH "websocket" n 1\&.5 tcllib "websocket client and server"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -273,7 +273,7 @@ Database Class:	\\fB\\$3\\fR
 .SH NAME
 websocket \- Tcl implementation of the websocket protocol
 .SH SYNOPSIS
-package require \fBTcl  8\&.4\fR
+package require \fBTcl  8\&.6\fR
 .sp
 package require \fBhttp  2\&.7\fR
 .sp
@@ -283,7 +283,7 @@ package require \fBsha1 \fR
 .sp
 package require \fBbase64 \fR
 .sp
-package require \fBwebsocket  ?1\&.4\&.2?\fR
+package require \fBwebsocket  ?1\&.5?\fR
 .sp
 \fB::websocket::open\fR \fIurl\fR \fIhandler\fR ?\fIoptions\fR?
 .sp
@@ -389,6 +389,9 @@ Complete binary message
 \fBping\fR
 Incoming ping message
 .TP
+\fBpong\fR
+Response to incoming ping message
+.TP
 \fBconnect\fR
 Notification of successful connection to server
 .TP
@@ -397,12 +400,18 @@ Disconnection from remote end
 .TP
 \fBclose\fR
 Pending closure of connection
+.TP
+\fBtimeout\fR
+Notification of connection timeout
+.TP
+\fBerror\fR
+Notification of error condition
 .RE
 .TP
 \fImsg\fR
 Will contain the data of the message, whenever this is relevant,
-i\&.e\&. when the \fItype\fR is \fBtext\fR, \fBbinary\fR or
-\fBping\fR and whenever there is data available\&.
+i\&.e\&. when the \fItype\fR is \fBtext\fR, \fBbinary\fR,
+\fBping\fR or \fBpong\fR and whenever there is data available\&.
 .PP
 .SH API
 .TP
@@ -444,7 +453,8 @@ used\&.
 -protocol
 This option specifies a list of application protocols to handshake
 with the server\&.  This protocols might help the server triggering
-application specific features\&.
+application specific features\&.  The http::geturl option -protocol is
+used internally by the websocket library and cannot be used\&.
 .TP
 -timeout
 This option is supported, but will implemented as part of the library
@@ -640,18 +650,19 @@ TLS handshake error
 .PP
 .SH EXAMPLES
 .PP
-The following example opens a websocket connection to the echo
+The following example script is a client that opens a websocket
+connection to an echo
 service, waits 400ms to ensure that the connection is really
 established and sends a single textual message which should be echoed
 back by the echo service\&.  A real example would probably use the
 \fBconnect\fR callback to know when connection to the remote
 server has been establish and would only send data at that time\&.
+Finally the script closes the connection\&.
 .CS
 
 
 package require websocket
 ::websocket::loglevel debug
-
 proc handler { sock type msg } {
     switch -glob -nocase -- $type {
 	co* {
@@ -666,18 +677,18 @@ proc handler { sock type msg } {
     }
 
 }
-
 proc test { sock } {
     puts "[::websocket::conninfo $sock type] from [::websocket::conninfo $sock sockname] to [::websocket::conninfo $sock peername]"
 
     ::websocket::send $sock text "Testing, testing\&.\&.\&."
+    after 2000 ::websocket::close $sock
 }
-
-set sock [::websocket::open ws://echo\&.websocket\&.org/ handler]
+set sock [::websocket::open ws://ws\&.ifelse\&.io/ handler]
 after 400 test $sock
 vwait forever
 
 .CE
+Example code for a websocket server is provided in the Tcllib directory "examples/websocket"\&.
 .SH "TLS SECURITY CONSIDERATIONS"
 .PP
 This package uses the \fBTLS\fR package to handle the
diff --git a/idoc/man/files/modules/zip/mkzip.n b/idoc/man/files/modules/zip/mkzip.n
index b4aad46526..721b39c435 100644
--- a/idoc/man/files/modules/zip/mkzip.n
+++ b/idoc/man/files/modules/zip/mkzip.n
@@ -2,7 +2,7 @@
 '\" Generated from file 'mkzip\&.man' by tcllib/doctools with format 'nroff'
 '\" Copyright (c) 2009 Pat Thoyts
 '\"
-.TH "zipfile::mkzip" n 1\&.2\&.1 tcllib "Zip archive creation"
+.TH "zipfile::mkzip" n 1\&.2\&.2 tcllib "Zip archive creation"
 .\" The -*- nroff -*- definitions below are for supplemental macros used
 .\" in Tcl/Tk manual entries.
 .\"
@@ -276,9 +276,9 @@ zipfile::mkzip \- Build a zip archive
 .SH SYNOPSIS
 package require \fBTcl  8\&.6\fR
 .sp
-package require \fBzipfile::mkzip  ?1\&.2\&.1?\fR
+package require \fBzipfile::mkzip  ?1\&.2\&.2?\fR
 .sp
-\fB::zipfile::mkzip::mkzip\fR \fIzipfile\fR ?\fB-zipkit\fR? ?\fB-runtime\fR \fIprefix\fR? ?\fB-comment\fR \fIstring\fR? ?\fB-directory\fR \fIrootpath\fR? ?\fB-exclude\fR \fIexclude\fR? ?\fB--\fR? ?\fIpath\fR\&.\&.\&.?
+\fB::zipfile::mkzip::mkzip\fR \fIzipfile\fR ?\fB-zipkit\fR? ?\fB-runtime\fR \fIprefix\fR? ?\fB-comment\fR \fIstring\fR? ?\fB-directory\fR \fIrootpath\fR? ?\fB-prepend-base-directory\fR \fIbool\fR? ?\fB-exclude\fR \fIexclude\fR? ?\fB--\fR? ?\fIpath\fR\&.\&.\&.?
 .sp
 .BE
 .SH DESCRIPTION
@@ -287,7 +287,7 @@ This package utilizes the zlib functions in Tcl 8\&.6 to build zip
 archives\&.
 .SH API
 .TP
-\fB::zipfile::mkzip::mkzip\fR \fIzipfile\fR ?\fB-zipkit\fR? ?\fB-runtime\fR \fIprefix\fR? ?\fB-comment\fR \fIstring\fR? ?\fB-directory\fR \fIrootpath\fR? ?\fB-exclude\fR \fIexclude\fR? ?\fB--\fR? ?\fIpath\fR\&.\&.\&.?
+\fB::zipfile::mkzip::mkzip\fR \fIzipfile\fR ?\fB-zipkit\fR? ?\fB-runtime\fR \fIprefix\fR? ?\fB-comment\fR \fIstring\fR? ?\fB-directory\fR \fIrootpath\fR? ?\fB-prepend-base-directory\fR \fIbool\fR? ?\fB-exclude\fR \fIexclude\fR? ?\fB--\fR? ?\fIpath\fR\&.\&.\&.?
 From \fIhttp://wiki\&.tcl\&.tk/15158\fR
 .sp
 This command constructs a zip archive from a directory tree
@@ -344,6 +344,14 @@ archive\&.
 This option specifies the directory to place into the generated
 archive\&. If specified any argument \fIpath\fRs are \fIignored\fR\&.
 .TP
+\fB-prepend-base-directory\fR bool
+When this option is set the tail of the \fB-directory\fR path is
+prepended to all paths added to the archive\&.
+.sp
+The option is ignored when option \fB-directory\fR is not specified\&.
+.sp
+By default this option is \fBfalse\fR\&.
+.TP
 \fB-exclude\fR list
 This option specifies a list of glob patterns\&. All paths matching at
 least one of the patterns are not placed into the generated archive\&.
diff --git a/idoc/man/index.n b/idoc/man/index.n
index 31faa71711..47e54eabb1 100644
--- a/idoc/man/index.n
+++ b/idoc/man/index.n
@@ -2492,6 +2492,18 @@ term::ansi::send
 \fBfiles/modules/term/term_send\&.n\fR
 term::send
 .RE
+character type
+.RS
+.TP
+\fBfiles/modules/textutil/wcswidth\&.n\fR
+textutil::wcswidth
+.RE
+character width
+.RS
+.TP
+\fBfiles/modules/textutil/wcswidth\&.n\fR
+textutil::wcswidth
+.RE
 chat
 .RS
 .TP
@@ -4073,6 +4085,12 @@ domain name service
 \fBfiles/modules/dns/tcllib_dns\&.n\fR
 dns
 .RE
+double-wide character
+.RS
+.TP
+\fBfiles/modules/textutil/wcswidth\&.n\fR
+textutil::wcswidth
+.RE
 e
 .RS
 .TP
@@ -6689,9 +6707,6 @@ report
 \fBfiles/modules/struct/matrix\&.n\fR
 struct::matrix
 .TP
-\fBfiles/modules/struct/matrix1\&.n\fR
-struct::matrix_v1
-.TP
 \fBfiles/modules/struct/queue\&.n\fR
 struct::queue
 .TP
@@ -8227,6 +8242,9 @@ textutil::string
 .TP
 \fBfiles/modules/textutil/trim\&.n\fR
 textutil::trim
+.TP
+\fBfiles/modules/textutil/wcswidth\&.n\fR
+textutil::wcswidth
 .RE
 prime
 .RS
@@ -8908,6 +8926,9 @@ textutil::split
 .TP
 \fBfiles/modules/textutil/trim\&.n\fR
 textutil::trim
+.TP
+\fBfiles/modules/textutil/wcswidth\&.n\fR
+textutil::wcswidth
 .RE
 regular grammar
 .RS
@@ -10138,6 +10159,9 @@ textutil::tabify
 .TP
 \fBfiles/modules/textutil/trim\&.n\fR
 textutil::trim
+.TP
+\fBfiles/modules/textutil/wcswidth\&.n\fR
+textutil::wcswidth
 .RE
 stringprep
 .RS
diff --git a/idoc/man/toc.n b/idoc/man/toc.n
index e056e97b7d..e369193bec 100644
--- a/idoc/man/toc.n
+++ b/idoc/man/toc.n
@@ -1239,9 +1239,6 @@ tcllib
 \fBstruct::matrix\fR
 \fIfiles/modules/struct/matrix\&.n\fR: Create and manipulate matrix objects
 .TP
-\fBstruct::matrix_v1\fR
-\fIfiles/modules/struct/matrix1\&.n\fR: Create and manipulate matrix objects
-.TP
 \fBstruct::pool\fR
 \fIfiles/modules/struct/pool\&.n\fR: Create and manipulate pool objects (of discrete items)
 .TP
@@ -1473,6 +1470,9 @@ tcllib
 \fBtextutil::trim\fR
 \fIfiles/modules/textutil/trim\&.n\fR: Procedures to trim strings
 .TP
+\fBtextutil::wcswidth\fR
+\fIfiles/modules/textutil/wcswidth\&.n\fR: Procedures to compute terminal width of strings
+.TP
 \fBthrow\fR
 \fIfiles/modules/try/tcllib_throw\&.n\fR: throw - Throw an error exception with a message
 .TP
diff --git a/idoc/www/index.html b/idoc/www/index.html
index a33559a8f8..e95468140c 100644
--- a/idoc/www/index.html
+++ b/idoc/www/index.html
@@ -528,6 +528,16 @@ 

Keyword Index

term::ansi::send · term::send + character type + + textutil::wcswidth + + + character width + + textutil::wcswidth + + chat irc · multiplexer · picoirc @@ -1206,6 +1216,11 @@

Keyword Index

dns + double-wide character + + textutil::wcswidth + + .dtx docstrip · docstrip_util · tcldocstrip @@ -1213,172 +1228,172 @@

Keyword Index

Keywords: E - + e math::constants - + EAN valtype::gs1::ean13 · valtype::isbn - + EAN13 valtype::gs1::ean13 · valtype::isbn - + earley grammar::aycock - + EBNF pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + eccentricity struct::graph::op - + edge struct::graph · struct::graph::op - + emacs doctools::changelog · doctools::cvs - + email imap4 · mime · pop3 · smtp - + emptiness struct::set - + empty interpreter interp - + EN doctools::msgcat::idx::en · doctools::msgcat::toc::en - + encoding ascii85 · base64 · uuencode · yencode - + encryption aes · blowfish · des · pki · rc4 · tcl::transform::otp · tcl::transform::rot · tclDES · tclDESjr - + entry mask tepam - + equal struct::list - + equality struct::list - + equivalence class struct::disjointset - + error throw · try - + error function math::special - + European Article Number valtype::gs1::ean13 · valtype::isbn - + event hook · uevent · uevent::onidle - + event management tcl::chan::events - + events coroutine · coroutine::auto - + examples bench_lang_intro · docidx_lang_faq · doctoc_lang_faq · doctools_lang_faq - + exception try - + exchange format huddle · json · json::write - + exclusion struct::set - + execution grammar::fa::dexec - + exif jpeg - + exit coroutine · coroutine::auto - + export doctools::html::cssdefaults · doctools::idx::export · doctools::idx::export::docidx · doctools::idx::export::html · doctools::idx::export::json · doctools::idx::export::nroff · doctools::idx::export::text · doctools::idx::export::wiki · doctools::nroff::man_macros · doctools::toc::export · doctools::toc::export::doctoc · doctools::toc::export::html · doctools::toc::export::json · doctools::toc::export::nroff · doctools::toc::export::text · doctools::toc::export::wiki · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg - + expression grammar::me_intro · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + extended namespace namespacex @@ -1386,212 +1401,212 @@

Keyword Index

Keywords: F - + faq docidx_lang_faq · doctoc_lang_faq · doctools_lang_faq - + fetching information uri - + FFT math::fourier - + fifo tcl::chan::fifo · tcl::chan::fifo2 · tcl::chan::halfpipe - + figurate numbers math::figurate - + file tie · tie · uri - + file recognition fileutil::magic::cfront · fileutil::magic::cgen · fileutil::magic::filetype · fileutil::magic::rt - + file type fileutil::magic::cfront · fileutil::magic::cgen · fileutil::magic::filetype · fileutil::magic::rt - + file utilities fileutil · fileutil::magic::cfront · fileutil::magic::cgen · fileutil::magic::filetype · fileutil::magic::rt · fileutil::multi · fileutil::multi::op - + filesystem map::slippy::cache - + filter generator · struct::list - + filtering math::filters - + final try - + finance valtype::creditcard::amex · valtype::creditcard::discover · valtype::creditcard::mastercard · valtype::creditcard::visa · valtype::iban - + find struct::disjointset - + finite struct::pool - + finite automaton grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op - + FIPS 180-1 sha1 · sha256 - + first permutation struct::list - + Fisher-Yates struct::list - + flatten struct::list - + floating-point math::bigfloat · math::fuzzy - + flow control - + flow network struct::graph::op - + folding struct::list - + foldl generator - + foldr generator - + foreach generator - + form html · ncgi - + format conversion pt::peg::from::json · pt::peg::from::peg · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam - + formatter doctools_plugin_apiref - + formatting bench::in · bench::out::csv · bench::out::text · doctools2idx_introduction · doctools2toc_introduction · doctools::idx · doctools::idx::export · doctools::toc · doctools::toc::export · textutil · textutil::adjust · textutil::string · textutil::tabify - + formatting engine docidx_plugin_apiref · doctoc_plugin_apiref · doctools_plugin_apiref - + fossil textutil::patch - + Fourier transform math::fourier - + FR doctools::msgcat::idx::fr · doctools::msgcat::toc::fr - + frame term::ansi::code::macros - + framework tool - + ftp ftp · ftp::geturl · ftpd · uri - + ftpd ftpd - + ftpserver ftpd - + full outer join struct::list @@ -1599,107 +1614,107 @@

Keyword Index

Keywords: G - + generate event uevent - + generate permutations struct::list - + generation doctools::idx · doctools::idx::export · doctools::toc · doctools::toc::export - + generator generator - + geocoding map::geocode::nominatim - + geodesy map::slippy · mapproj - + geography map::slippy - + get character term::receive - + gets coroutine · coroutine::auto - + git textutil::patch - + global coroutine · coroutine::auto - + golang defer - + gopher uri - + gps gpx · nmea - + gpx gpx - + grammar grammar::aycock · grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op · grammar::me::cpu · grammar::me::cpu::core · grammar::me::cpu::gasm · grammar::me::tcl · grammar::me_intro · grammar::me_vm · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + graph grammar::me::cpu::gasm · struct::graph · struct::graph::op · struct::graph_v1 · struct::queue · struct::stack - + graph walking page_util_flow · page_util_norm_lemon · page_util_norm_peg - + green threads coroutine · coroutine::auto - + grep fileutil - + GUID uuid @@ -1707,87 +1722,87 @@

Keyword Index

Keywords: H - + hashing md4 · md5 · md5crypt · otp · ripemd128 · ripemd160 · sha1 · sha256 - + heartbeat debug::heartbeat - + heuristic struct::graph::op - + hex base32::hex - + hexadecimal tcl::transform::hex - + histogram counter - + hook hook · uevent - + horspool grammar::aycock - + HTML doctools · doctools::html::cssdefaults · doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::export::html · doctools::toc · doctools::toc · doctools::toc::export · doctools::toc::export::html · dtplite · mpexpand · pkg_dtplite - + html html · htmlparse · javascript · ncgi - + http autoproxy · httpd · map::geocode::nominatim · map::slippy::fetcher · uri · websocket - + httpd httpd - + https uri - + httpserver httpd - + huddle huddle · yaml - + human readable bench::in · bench::out::text - + hyphenation textutil · textutil::adjust @@ -1795,222 +1810,222 @@

Keyword Index

Keywords: I - + i18n doctools::msgcat · doctools::msgcat::idx::c · doctools::msgcat::idx::de · doctools::msgcat::idx::en · doctools::msgcat::idx::fr · doctools::msgcat::toc::c · doctools::msgcat::toc::de · doctools::msgcat::toc::en · doctools::msgcat::toc::fr - + IBAN valtype::iban - + ident ident - + identification ident - + identity tcl::transform::identity - + idle uevent::onidle - + image jpeg · png · tiff - + imap imap4 - + IMEI valtype::imei - + import doctools::idx::import · doctools::idx::import::docidx · doctools::idx::import::json · doctools::toc::import · doctools::toc::import::doctoc · doctools::toc::import::json · pt::peg::import::json · pt::peg::import::peg - + in-memory channel tcl::chan::fifo · tcl::chan::fifo2 · tcl::chan::halfpipe · tcl::chan::memchan · tcl::chan::string · tcl::chan::variable - + in-order struct::tree - + inclusion struct::set - + Incr Tcl snit · snitfaq - + indenting textutil · textutil::adjust - + independent set struct::graph::op - + index docidx_intro · docidx_plugin_apiref · doctools2idx_introduction · doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::export::docidx · doctools::idx::export::html · doctools::idx::export::json · doctools::idx::export::nroff · doctools::idx::export::text · doctools::idx::export::wiki · doctools::idx::import · doctools::idx::import::docidx · doctools::idx::import::json - + index formatter docidx_plugin_apiref - + info namespacex - + inner join struct::list - + input mode term::ansi::ctrl::unix - + integer math::roman - + integration math::calculus - + inter-thread communication tcl::chan::fifo2 - + International Article Number valtype::gs1::ean13 · valtype::isbn - + International Bank Account Number valtype::iban - + International Mobile Equipment Identity valtype::imei - + International Standard Book Number valtype::isbn - + internationalization doctools::msgcat · doctools::msgcat::idx::c · doctools::msgcat::idx::de · doctools::msgcat::idx::en · doctools::msgcat::idx::fr · doctools::msgcat::toc::c · doctools::msgcat::toc::de · doctools::msgcat::toc::en · doctools::msgcat::toc::fr - + internet asn · ftp · ftp::geturl · imap4 · ldap · ldapx · mime · pop3d · pop3d::dbox · pop3d::udb · smtp · websocket - + internet address tcllib_ip - + interpolation math::interpolate - + interpreter deleg_method · deleg_proc · interp · wip - + intersection struct::set - + interval math::bigfloat - + ip tcllib_ip - + ipc comm · comm_wire - + ipv4 tcllib_ip - + ipv6 tcllib_ip - + irc irc · picoirc - + isA valtype::common · valtype::creditcard::amex · valtype::creditcard::discover · valtype::creditcard::mastercard · valtype::creditcard::visa · valtype::gs1::ean13 · valtype::iban · valtype::imei · valtype::isbn · valtype::luhn · valtype::luhn5 · valtype::usnpi · valtype::verhoeff - + ISBN valtype::isbn - + isthmus struct::graph::op - + iterator generator @@ -2018,37 +2033,37 @@

Keyword Index

Keywords: J - + javascript javascript · json · json::write - + jfif jpeg - + join struct::list - + jpeg jpeg - + JSON doctools::idx::export::json · doctools::idx::import::json · doctools::toc::export::json · doctools::toc::import::json · pt::peg::export::json · pt::peg::from::json · pt::peg::import::json · pt::peg::to::json - + json doctools::idx · doctools::idx::export · doctools::idx::import · doctools::toc · doctools::toc::export · doctools::toc::import · huddle · json · json::write - + justification textutil::adjust @@ -2056,17 +2071,17 @@

Keyword Index

Keywords: K - + keyword index docidx_intro · doctools2idx_introduction · doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::import - + keywords docidx_plugin_apiref - + knuth soundex @@ -2074,177 +2089,177 @@

Keyword Index

Keywords: L - + l10n doctools::msgcat · doctools::msgcat::idx::c · doctools::msgcat::idx::de · doctools::msgcat::idx::en · doctools::msgcat::idx::fr · doctools::msgcat::toc::c · doctools::msgcat::toc::de · doctools::msgcat::toc::en · doctools::msgcat::toc::fr - + lambda lambda - + LaTeX docstrip · docstrip_util · tcldocstrip - + latex doctools::idx · doctools::idx · doctools::toc · doctools::toc - + latitute map::slippy - + ldap ldap · ldapx · uri - + ldap client ldap · ldapx - + ldif ldapx - + least squares math::linearalgebra - + left outer join struct::list - + lemon page_util_norm_lemon - + level graph struct::graph::op - + lexer doctools::idx::parse · doctools::toc::parse - + lexing string::token · string::token::shell - + limitsize tcl::transform::limitsize - + line math::geometry - + linear algebra math::linearalgebra - + linear equations math::linearalgebra - + linear program math::optimize - + lines term::ansi::ctrl::unix - + list struct::list · struct::queue · wip - + listener term::receive · term::receive::bind - + literate programming docstrip · docstrip_util · tcldocstrip - + LL(k) grammar::me_intro · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + local searching struct::graph::op - + localization doctools::msgcat · doctools::msgcat::idx::c · doctools::msgcat::idx::de · doctools::msgcat::idx::en · doctools::msgcat::idx::fr · doctools::msgcat::toc::c · doctools::msgcat::toc::de · doctools::msgcat::toc::en · doctools::msgcat::toc::fr - + location map::geocode::nominatim · map::slippy · map::slippy::cache · map::slippy::fetcher - + log debug · debug::caller · debug::heartbeat · debug::timestamp · doctools::cvs · log · logger - + log level log · logger - + logger logger · logger::appender · logger::utils - + longest common subsequence struct::list - + longitude map::slippy - + loop struct::graph · struct::graph::op - + luhn valtype::luhn · valtype::luhn5 - + luhn-5 valtype::luhn5 @@ -2252,247 +2267,247 @@

Keyword Index

Keywords: M - + macros doctools::nroff::man_macros - + mail imap4 · mime · pop3 · smtp - + mailto uri - + man_macros doctools::nroff::man_macros - + manpage doctools · doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::import · doctools::toc · doctools::toc::export · doctools::toc::import · doctools_plugin_apiref · dtplite · mpexpand · pkg_dtplite - + map generator · map::geocode::nominatim · map::slippy · map::slippy::cache · map::slippy::fetcher · mapproj · struct::list - + markdown doctools · doctools::idx · doctools::toc - + markup docidx_intro · docidx_lang_cmdref · docidx_lang_faq · docidx_lang_intro · docidx_lang_syntax · docidx_plugin_apiref · doctoc_intro · doctoc_lang_cmdref · doctoc_lang_faq · doctoc_lang_intro · doctoc_lang_syntax · doctoc_plugin_apiref · doctools · doctools2idx_introduction · doctools2toc_introduction · doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::import · doctools::toc · doctools::toc · doctools::toc::export · doctools::toc::import · doctools_intro · doctools_lang_cmdref · doctools_lang_faq · doctools_lang_intro · doctools_lang_syntax · doctools_plugin_apiref · dtplite · mpexpand · pkg_dtplite · tcldocstrip - + MasterCard valtype::creditcard::mastercard - + matching grammar::me_intro · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op · struct::graph::op - + math math · math::bigfloat · math::bignum · math::calculus · math::complexnumbers · math::constants · math::decimal · math::fuzzy · math::geometry · math::interpolate · math::linearalgebra · math::optimize · math::PCA · math::polynomials · math::rationalfunctions · math::special · math::trig · simulation::annealing · simulation::montecarlo · simulation::random - + mathematics math::figurate · math::fourier · math::probopt · math::quasirandom · math::statistics - + matrices math::linearalgebra - + matrix - csv · math::linearalgebra · report · struct::matrix · struct::matrix_v1 · struct::queue · struct::stack + csv · math::linearalgebra · report · struct::matrix · struct::queue · struct::stack - + max cut struct::graph::op - + maximum math::optimize - + maximum flow struct::graph::op - + md4 md4 · ripemd128 · ripemd160 - + md5 md5 · md5crypt - + md5crypt md5crypt - + medicare valtype::usnpi - + mega widget snit · snitfaq - + membership struct::set - + menu term::ansi::code::macros · term::interact::menu - + merge tcl::randomseed · uevent::onidle - + merge find struct::disjointset - + merging bench - + message comm · comm_wire · log - + message catalog doctools::msgcat · doctools::msgcat::idx::c · doctools::msgcat::idx::de · doctools::msgcat::idx::en · doctools::msgcat::idx::fr · doctools::msgcat::toc::c · doctools::msgcat::toc::de · doctools::msgcat::toc::en · doctools::msgcat::toc::fr - + message level log - + message package doctools::msgcat · doctools::msgcat::idx::c · doctools::msgcat::idx::de · doctools::msgcat::idx::en · doctools::msgcat::idx::fr · doctools::msgcat::toc::c · doctools::msgcat::toc::de · doctools::msgcat::toc::en · doctools::msgcat::toc::fr - + message-digest md4 · md5 · md5crypt · otp · ripemd128 · ripemd160 · sha1 · sha256 - + metakit tie · tie - + method deleg_method · interp - + method reference oo::util · oo::util - + mime fileutil::magic::cfront · fileutil::magic::cgen · fileutil::magic::rt · mime · smtp - + minimal spanning tree struct::graph::op - + minimum math::optimize - + minimum cost flow struct::graph::op - + minimum degree spanning tree struct::graph::op - + minimum diameter spanning tree struct::graph::op - + mobile phone valtype::imei - + module docstrip_util - + montecarlo simulation simulation::montecarlo - + move fileutil::multi · fileutil::multi::op - + multi-file fileutil::multi · fileutil::multi::op - + multiplexer multiplexer - + multiprecision math::bigfloat · math::bignum - + my method oo::util · oo::util @@ -2500,122 +2515,122 @@

Keyword Index

Keywords: N - + name service nameserv · nameserv::auto · nameserv::common · nameserv::protocol · nameserv::server · nns · nns_intro · nnsd · nnslog · udpcluster - + namespace unknown namespacex - + namespace utilities namespacex - + narrative debug · debug::caller · debug::heartbeat · debug::timestamp - + National Provider Identifier valtype::usnpi - + neighbour struct::graph · struct::graph::op - + net ftp · ftp::geturl · imap4 · mime · smtp · websocket - + nettool nettool - + network pop3d · pop3d::dbox · pop3d::udb - + news nntp · uri - + next permutation struct::list - + nmea nmea - + nntp nntp - + nntpclient nntp - + no-op control - + node struct::graph · struct::graph::op · struct::tree - + nominatim map::geocode::nominatim - + normalization bench · page_util_norm_lemon · page_util_norm_peg · unicode - + NPI valtype::usnpi - + nroff doctools · doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::export::nroff · doctools::nroff::man_macros · doctools::toc · doctools::toc · doctools::toc::export · doctools::toc::export::nroff · dtplite · mpexpand · pkg_dtplite - + NTLM SASL::NTLM - + NTP ntp_time - + null tcl::chan::null · tcl::chan::nullzero - + number theory math::numtheory @@ -2623,67 +2638,67 @@

Keyword Index

Keywords: O - + oauth oauth - + object snit · snitfaq · stooop · switched - + object oriented snit · snitfaq · stooop · switched - + observer hook · tcl::transform::observe - + odie cron · nettool · processman - + on-idle uevent::onidle - + one time pad tcl::transform::otp - + oo clay - + optimisation math::probopt - + optimization math::optimize · simulation::annealing - + ordered list struct::prioqueue - + otp tcl::transform::otp - + outer join struct::list @@ -2691,292 +2706,292 @@

Keyword Index

Keywords: P - + package csv - + package indexing docstrip_util - + page page_intro · page_pluginmgr · page_util_flow · page_util_norm_lemon · page_util_norm_peg · page_util_peg · page_util_quote - + pager term::interact::pager - + paragraph textutil · textutil::adjust - + PARAM pt::peg::to::param - + parameter entry form tepam · tepam::argument_dialogbox - + parser doctools::idx::parse · doctools::tcl::parse · doctools::toc::parse · grammar::aycock · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op · xsxp - + parser generator page · page_intro · page_pluginmgr · page_util_flow · page_util_norm_lemon · page_util_norm_peg · page_util_peg · page_util_quote - + parsing bench::in · bibtex · doctools2idx_introduction · doctools2toc_introduction · doctools::idx · doctools::idx::import · doctools::toc · doctools::toc::import · grammar::aycock · grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op · grammar::me::cpu · grammar::me::cpu::core · grammar::me::cpu::gasm · grammar::me::tcl · grammar::me_intro · grammar::me_vm · grammar::peg · grammar::peg::interp · htmlparse · huddle · string::token::shell · yaml - + parsing expression grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + parsing expression grammar grammar::me_intro · grammar::peg · grammar::peg::interp · page_util_peg · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + partial application lambda - + partition struct::disjointset - + partitioned set struct::disjointset - + passive transfer::connect - + password otp - + patch docstrip_util · textutil::patch - + patching rcs - + PCA math::PCA - + PEG grammar::me_intro · page_util_norm_peg · page_util_peg · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + performance bench · bench::in · bench::out::csv · bench::out::text · bench_intro · bench_lang_intro · bench_lang_spec · profiler - + permutation struct::list - + persistence tie · tie - + phone valtype::imei - + pi math::constants - + plain text doctools::idx::export::text · doctools::toc::export::text - + plane geometry math::geometry - + plugin docidx_plugin_apiref · doctoc_plugin_apiref · doctools2idx_introduction · doctools2toc_introduction · doctools::html::cssdefaults · doctools::idx · doctools::idx::export · doctools::idx::import · doctools::nroff::man_macros · doctools::toc · doctools::toc::export · doctools::toc::import · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::import::json · pt::peg::import::peg - + plugin management pluginmgr - + plugin search pluginmgr - + png png - + point math::geometry - + polynomial functions math::polynomials - + pool struct::pool · struct::queue - + pop pop3 - + pop3 pop3 · pop3d · pop3d::dbox · pop3d::udb - + post-order struct::tree - + practcl practcl - + pre-order struct::tree - + prefix - textutil::string · textutil::trim + textutil::string · textutil::trim · textutil::wcswidth - + prime math::numtheory - + prioqueue struct::prioqueue · struct::queue - + priority queue struct::prioqueue - + probabilistic calculations math::probopt - + proc lambda - + procedure deleg_proc · tepam · tepam::procedure - + procedure documentation tepam::doc_gen - + processman processman - + producer hook - + profile profiler - + projection mapproj - + prospero uri - + protocol asn · ldap · ldapx · nameserv::protocol · pop3d · pop3d::dbox · pop3d::udb - + proxy autoproxy - + public key cipher pki - + publisher hook - + push down automaton grammar::me_intro · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op @@ -2984,17 +2999,17 @@

Keyword Index

Keywords: Q - + quasi-random math::quasirandom - + queue csv · htmlparse · struct::stack · transfer::copy::queue - + quoting page_util_quote @@ -3002,422 +3017,422 @@

Keyword Index

Keywords: R - + radians math::constants · units - + radiobutton html - + radius struct::graph::op - + random tcl::chan::random · tcl::randomseed - + random numbers simulation::random - + rational functions math::rationalfunctions - + raw term::ansi::ctrl::unix - + rc4 rc4 - + RCS rcs - + RCS patch rcs - + read coroutine · coroutine::auto - + reading bench::in - + receiver term::receive · term::receive::bind · transfer::receiver - + reconnect nameserv::auto - + record struct::queue · struct::record - + recursive descent grammar::me_intro · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + reduce generator · struct::list - + reference doctools::idx · doctools::idx::export · doctools::idx::import · doctools::toc · doctools::toc::export · doctools::toc::import - + reflected channel tcl::chan::cat · tcl::chan::core · tcl::chan::events · tcl::chan::facade · tcl::chan::fifo · tcl::chan::fifo2 · tcl::chan::halfpipe · tcl::chan::memchan · tcl::chan::null · tcl::chan::nullzero · tcl::chan::random · tcl::chan::std · tcl::chan::string · tcl::chan::textwindow · tcl::chan::variable · tcl::chan::zero · tcl::randomseed · tcl::transform::adler32 · tcl::transform::base64 · tcl::transform::core · tcl::transform::counter · tcl::transform::crc32 · tcl::transform::hex · tcl::transform::identity · tcl::transform::limitsize · tcl::transform::observe · tcl::transform::otp · tcl::transform::rot · tcl::transform::spacer · tcl::transform::zlib - + regex string::token - + regular expression - grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op · textutil · textutil::split · textutil::trim + grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op · textutil · textutil::split · textutil::trim · textutil::wcswidth - + regular grammar grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op - + regular languages grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op - + remote communication comm · comm_wire - + remote execution comm · comm_wire - + remove fileutil::multi · fileutil::multi::op - + repeating struct::list - + repetition struct::list · textutil::repeat - + report report - + reshuffle struct::list - + residual graph struct::graph::op - + resolver dns - + resource management try - + restore nameserv::auto - + return throw - + reverse struct::list - + rfc 821 mime · smtp · smtpd - + rfc 822 mime · pop3d::dbox · smtp - + rfc 868 ntp_time - + rfc 959 ftp · ftp::geturl · ftpd - + rfc 977 nntp - + rfc 1034 dns - + rfc 1035 dns - + rfc 1036 nntp - + rfc 1320 md4 · md5 · ripemd128 · ripemd160 - + rfc 1321 md4 · md5 · ripemd128 · ripemd160 - + rfc 1413 ident - + rfc 1630 uri - + rfc 1886 dns - + rfc 1939 pop3 · pop3d - + rfc 2030 ntp_time - + rfc 2045 mime - + rfc 2046 mime - + rfc 2049 mime - + rfc 2104 md4 · md5 · ripemd128 · ripemd160 · sha1 · sha256 - + rfc 2141 uri_urn - + rfc 2251 ldap · ldapx - + rfc 2255 uri - + rfc 2289 otp - + rfc 2396 uri - + rfc 2554 smtp - + RFC 2718 oauth - + rfc 2821 smtp · smtpd - + rfc 2849 ldapx - + rfc 3207 smtp - + rfc 3513 tcllib_ip - + rfc 3986 uri - + rfc 4511 ldap - + RFC 5849 oauth - + rfc 6455 websocket - + rfc 7858 dns - + rfc3501 imap4 - + rfc3548 base32 · base32::hex - + right outer join struct::list - + RIPEMD ripemd128 · ripemd160 - + roman numeral math::roman - + roots math::calculus - + rot tcl::transform::rot - + rot13 tcl::transform::rot - + rounding math::fuzzy - + rows term::ansi::ctrl::unix - + rpc comm · comm_wire - + rsa pki - + running grammar::fa::dexec @@ -3425,367 +3440,367 @@

Keyword Index

Keywords: S - + s3 S3 - + SASL SASL · SASL::NTLM · SASL::SCRAM · SASL::XGoogleToken - + scanl generator - + SCCS rcs - + SCRAM SASL::SCRAM - + secure comm · pop3 · pop3d · transfer::connect · transfer::receiver · transfer::transmitter - + security aes · blowfish · cksum · crc16 · crc32 · des · md4 · md5 · md5crypt · otp · pki · rc4 · ripemd128 · ripemd160 · sha1 · sha256 · sum · tclDES · tclDESjr - + seed tcl::randomseed - + selectionbox javascript - + semantic markup docidx_intro · docidx_lang_cmdref · docidx_lang_faq · docidx_lang_intro · docidx_lang_syntax · docidx_plugin_apiref · doctoc_intro · doctoc_lang_cmdref · doctoc_lang_faq · doctoc_lang_intro · doctoc_lang_syntax · doctoc_plugin_apiref · doctools2idx_introduction · doctools2toc_introduction · doctools_intro · doctools_lang_cmdref · doctools_lang_faq · doctools_lang_intro · doctools_lang_syntax · doctools_plugin_apiref - + send comm - + serialization bee · doctools::idx::export::docidx · doctools::idx::export::html · doctools::idx::export::json · doctools::idx::export::nroff · doctools::idx::export::text · doctools::idx::export::wiki · doctools::idx::structure · doctools::toc::export::doctoc · doctools::toc::export::html · doctools::toc::export::json · doctools::toc::export::nroff · doctools::toc::export::text · doctools::toc::export::wiki · doctools::toc::structure · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::json · pt::peg::from::peg · pt::peg::import::json · pt::peg::import::peg · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · struct::graph · struct::tree - + server map::geocode::nominatim · map::slippy::fetcher · nameserv::common · nameserv::server · nns_intro · nnsd · udpcluster - + service logger - + services ftpd · httpd · smtpd - + set struct::queue · struct::set - + sha1 sha1 - + sha256 sha256 - + shell string::token::shell - + shortest path struct::graph::op - + shuffle struct::list - + simulated annealing simulation::annealing - + simulation simulation::random - + singleton oo::util · oo::util - + size limit tcl::transform::limitsize - + skiplist struct::queue · struct::skiplist - + slippy map::slippy · map::slippy::cache · map::slippy::fetcher - + smtp mime · smtp · smtpd - + smtpd smtpd - + Snit snit - + snit deleg_method · interp - + SNTP ntp_time - + socket comm · comm_wire · smtpd - + soundex soundex - + source docstrip · docstrip_util · tcldocstrip - + spacing tcl::transform::spacer - + spatial interpolation math::interpolate - + special functions math::special - + specification bench_lang_spec - + speed profiler - + split textutil::split - + squared graph struct::graph::op - + ssl comm · imap4 · pop3 · pop3d · transfer::connect · transfer::receiver · transfer::transmitter - + stack struct::queue - + standard io tcl::chan::std - + state grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + state (de)serialization namespacex - + statistical distribution simulation::random - + statistics counter · math · math::changepoint · math::PCA · math::statistics - + stdin tcl::chan::std - + stdout tcl::chan::std - + stochastic modelling simulation::montecarlo - + stream cipher rc4 - + stream copy tcl::transform::observe - + string - string::token · string::token::shell · textutil · textutil::adjust · textutil::expander · textutil::repeat · textutil::split · textutil::string · textutil::tabify · textutil::trim + string::token · string::token::shell · textutil · textutil::adjust · textutil::expander · textutil::repeat · textutil::split · textutil::string · textutil::tabify · textutil::trim · textutil::wcswidth - + stringprep stringprep · stringprep::data · unicode::data - + strongly connected component struct::graph::op - + struct struct::pool · struct::record - + structure control - + structured queries treeql - + style doctools::html::cssdefaults - + subcommand tepam · tepam::procedure - + subgraph struct::graph · struct::graph::op - + subject hook - + submitbutton javascript - + subscriber hook - + subsequence struct::list - + subst doctools::tcl::parse - + sum sum - + swapping struct::list - + symmetric difference struct::set - + synchronous cache::async - + syntax tree grammar::me::util @@ -3793,357 +3808,357 @@

Keyword Index

Keywords: T - + table doctools::toc · doctools::toc::export · doctools::toc::import · html · report - + table of contents doctoc_intro · doctoc_plugin_apiref · doctools2toc_introduction · doctools::toc · doctools::toc · doctools::toc::export · doctools::toc::export::doctoc · doctools::toc::export::html · doctools::toc::export::json · doctools::toc::export::nroff · doctools::toc::export::text · doctools::toc::export::wiki · doctools::toc::import · doctools::toc::import::doctoc · doctools::toc::import::json - + tabstops textutil::tabify - + tallying counter - + tape archive tar - + tar tar - + tcl math::bigfloat · math::bignum · math::decimal · math::PCA - + Tcl module docstrip_util - + Tcl syntax doctools::tcl::parse - + tcler's wiki doctools::idx · doctools::idx::export · doctools::toc · doctools::toc::export - + tcllib csv - + TclOO clay · httpd · oo::util · oo::util · oometa · tool · tool::dict_ensemble - + TCLPARAM pt::peg::to::tclparam - + TDPL grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + temp file fileutil - + template processing textutil::expander - + terminal term · term::ansi::code · term::ansi::code::attr · term::ansi::code::ctrl · term::ansi::code::macros · term::ansi::ctrl::unix · term::ansi::send · term::interact::menu · term::interact::pager · term::receive · term::receive::bind · term::send - + test fileutil - + Testing valtype::common · valtype::creditcard::amex · valtype::creditcard::discover · valtype::creditcard::mastercard · valtype::creditcard::visa · valtype::gs1::ean13 · valtype::iban · valtype::imei · valtype::isbn · valtype::luhn · valtype::luhn5 · valtype::usnpi · valtype::verhoeff - + testing bench · bench::in · bench::out::csv · bench::out::text · bench_intro · bench_lang_intro · bench_lang_spec - + TeX textutil · textutil::adjust - + text bench::in · bench::out::text · doctools::idx · doctools::idx::export · doctools::toc · doctools::toc::export - + text comparison soundex - + text conversion rcs - + text differences rcs - + text display term::interact::menu · term::interact::pager - + text expansion textutil::expander - + text likeness soundex - + text processing bibtex · huddle · page · page_intro · page_pluginmgr · page_util_flow · page_util_norm_lemon · page_util_norm_peg · page_util_peg · page_util_quote · yaml - + text widget tcl::chan::textwindow - + threads coroutine · coroutine::auto - + throw throw - + thumbnail jpeg - + tie tie · tie - + tif tiff - + tiff tiff - + tile map::slippy::cache · map::slippy::fetcher - + time ntp_time - + timestamp png - + timestamps debug::timestamp - + tip 219 tcl::chan::cat · tcl::chan::core · tcl::chan::events · tcl::chan::facade · tcl::chan::fifo · tcl::chan::fifo2 · tcl::chan::halfpipe · tcl::chan::memchan · tcl::chan::null · tcl::chan::nullzero · tcl::chan::random · tcl::chan::std · tcl::chan::string · tcl::chan::textwindow · tcl::chan::variable · tcl::chan::zero · tcl::randomseed · tcl::transform::core - + tip 230 tcl::transform::adler32 · tcl::transform::base64 · tcl::transform::counter · tcl::transform::crc32 · tcl::transform::hex · tcl::transform::identity · tcl::transform::limitsize · tcl::transform::observe · tcl::transform::otp · tcl::transform::rot · tcl::transform::spacer · tcl::transform::zlib - + tip 234 tcl::transform::zlib - + tip 317 tcl::transform::base64 - + Tk tcl::chan::textwindow - + tls comm · imap4 · pop3 · pop3d · smtp · transfer::connect · transfer::receiver · transfer::transmitter - + TMML doctools · doctools::idx · doctools::idx · doctools::toc · doctools::toc · dtplite · mpexpand · pkg_dtplite - + toc doctoc_intro · doctoc_plugin_apiref · doctools::toc · doctools::toc::export::doctoc · doctools::toc::export::html · doctools::toc::export::json · doctools::toc::export::nroff · doctools::toc::export::text · doctools::toc::export::wiki · doctools::toc::import::doctoc · doctools::toc::import::json - + toc formatter doctoc_plugin_apiref - + tokenization string::token · string::token::shell - + TOOL oometa · tool · tool::dict_ensemble - + top-down parsing languages grammar::me_intro · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + torrent bee - + touch fileutil - + TPDL grammar::me_intro - + trace debug · debug::caller · debug::heartbeat · debug::timestamp - + transducer grammar::aycock · grammar::fa · grammar::fa::dacceptor · grammar::fa::dexec · grammar::fa::op · grammar::me_intro · grammar::peg · grammar::peg::interp · pt · pt::ast · pt::cparam::configuration::critcl · pt::cparam::configuration::tea · pt::json_language · pt::param · pt::pe · pt::pe::op · pt::peg · pt::peg::container · pt::peg::container::peg · pt::peg::export · pt::peg::export::container · pt::peg::export::json · pt::peg::export::peg · pt::peg::from::container · pt::peg::from::json · pt::peg::from::peg · pt::peg::import · pt::peg::import::container · pt::peg::import::json · pt::peg::import::peg · pt::peg::interp · pt::peg::to::container · pt::peg::to::cparam · pt::peg::to::json · pt::peg::to::param · pt::peg::to::peg · pt::peg::to::tclparam · pt::peg_language · pt::pegrammar · pt::pgen · pt::rde · pt::tclparam::configuration::nx · pt::tclparam::configuration::snit · pt::tclparam::configuration::tcloo · pt::util · pt_export_api · pt_import_api · pt_introduction · pt_parse_peg · pt_parser_api · pt_peg_op - + transfer transfer::connect · transfer::copy · transfer::copy::queue · transfer::data::destination · transfer::data::source · transfer::receiver · transfer::transmitter - + transformation page_util_peg · tcl::transform::adler32 · tcl::transform::base64 · tcl::transform::counter · tcl::transform::crc32 · tcl::transform::hex · tcl::transform::identity · tcl::transform::limitsize · tcl::transform::observe · tcl::transform::otp · tcl::transform::rot · tcl::transform::spacer · tcl::transform::zlib - + transmitter transfer::transmitter - + travelling salesman struct::graph::op - + traversal fileutil_traverse - + tree grammar::me::cpu::gasm · grammar::me::util · htmlparse · struct::queue · struct::stack · struct::tree · struct::tree_v1 · treeql - + tree query language treeql - + tree walking page_util_flow · page_util_norm_lemon · page_util_norm_peg - + TreeQL treeql - + trigonometry math::trig - + trimming textutil · textutil::trim - + twitter oauth - + type fileutil · fileutil::magic::cfront · fileutil::magic::cgen · fileutil::magic::filetype · fileutil::magic::rt · snit - + Type checking valtype::common · valtype::creditcard::amex · valtype::creditcard::discover · valtype::creditcard::mastercard · valtype::creditcard::visa · valtype::gs1::ean13 · valtype::iban · valtype::imei · valtype::isbn · valtype::luhn · valtype::luhn5 · valtype::usnpi · valtype::verhoeff @@ -4151,92 +4166,92 @@

Keyword Index

Keywords: U - + uevent hook - + unbind uevent - + uncapitalize textutil::string - + undenting textutil::adjust - + unicode stringprep · stringprep::data · unicode · unicode::data - + unified format diff textutil::patch - + union struct::disjointset · struct::set - + unit units - + unknown hooking namespacex - + untie tie · tie - + update coroutine · coroutine::auto - + uri uri · uri_urn - + url doctools::idx · doctools::idx::export · doctools::idx::import · doctools::toc::export · doctools::toc::import · map::geocode::nominatim · map::slippy::fetcher · uri · uri_urn - + urn uri_urn - + US-NPI valtype::usnpi - + utilities namespacex - + uuencode uuencode - + UUID uuid @@ -4244,52 +4259,52 @@

Keyword Index

Keywords: V - + Validation valtype::common · valtype::creditcard::amex · valtype::creditcard::discover · valtype::creditcard::mastercard · valtype::creditcard::visa · valtype::gs1::ean13 · valtype::iban · valtype::imei · valtype::isbn · valtype::luhn · valtype::luhn5 · valtype::usnpi · valtype::verhoeff - + Value checking valtype::common · valtype::creditcard::amex · valtype::creditcard::discover · valtype::creditcard::mastercard · valtype::creditcard::visa · valtype::gs1::ean13 · valtype::iban · valtype::imei · valtype::isbn · valtype::luhn · valtype::luhn5 · valtype::usnpi · valtype::verhoeff - + vectors math::linearalgebra - + verhoeff valtype::verhoeff - + vertex struct::graph · struct::graph::op - + vertex cover struct::graph::op - + virtual channel tcl::chan::cat · tcl::chan::core · tcl::chan::events · tcl::chan::facade · tcl::chan::fifo · tcl::chan::fifo2 · tcl::chan::halfpipe · tcl::chan::memchan · tcl::chan::null · tcl::chan::nullzero · tcl::chan::random · tcl::chan::std · tcl::chan::string · tcl::chan::textwindow · tcl::chan::variable · tcl::chan::zero · tcl::randomseed · tcl::transform::adler32 · tcl::transform::base64 · tcl::transform::core · tcl::transform::counter · tcl::transform::crc32 · tcl::transform::hex · tcl::transform::identity · tcl::transform::limitsize · tcl::transform::observe · tcl::transform::otp · tcl::transform::rot · tcl::transform::spacer · tcl::transform::zlib - + virtual machine grammar::me::cpu · grammar::me::cpu::core · grammar::me::cpu::gasm · grammar::me::tcl · grammar::me_intro · grammar::me_vm · grammar::peg::interp · pt::param - + VISA valtype::creditcard::visa - + vwait coroutine · coroutine::auto · smtpd @@ -4297,37 +4312,37 @@

Keyword Index

Keywords: W - + wais uri - + widget snit · snitfaq - + widget adaptors snit · snitfaq - + wiki doctools::idx · doctools::idx · doctools::idx::export · doctools::idx::export::wiki · doctools::toc · doctools::toc · doctools::toc::export · doctools::toc::export::wiki - + word doctools::tcl::parse · wip - + WWW httpd - + www uri @@ -4335,42 +4350,42 @@

Keyword Index

Keywords: X - + x.208 asn - + x.209 asn - + x.500 ldap - + XGoogleToken SASL::XGoogleToken - + xml xsxp - + xor tcl::transform::otp - + XPath treeql - + XSLT treeql @@ -4378,22 +4393,22 @@

Keyword Index

Keywords: Y - + yaml huddle · yaml - + ydecode yencode - + yEnc yencode - + yencode yencode @@ -4401,22 +4416,22 @@

Keyword Index

Keywords: Z - + zero tcl::chan::nullzero · tcl::chan::zero - + zip zipfile::decode · zipfile::encode · zipfile::mkzip - + zlib tcl::transform::zlib - + zoom map::slippy · map::slippy::cache · map::slippy::fetcher diff --git a/idoc/www/tcllib/files/modules/comm/comm.html b/idoc/www/tcllib/files/modules/comm/comm.html index d364fe02d6..353a3523cf 100644 --- a/idoc/www/tcllib/files/modules/comm/comm.html +++ b/idoc/www/tcllib/files/modules/comm/comm.html @@ -107,7 +107,7 @@ | Applications ]
-

comm(n) 4.7 tcllib "Remote communication"

+

comm(n) 4.7.1 tcllib "Remote communication"

Name

comm - A remote communication facility for Tcl (8.5 and later)

@@ -150,7 +150,7 @@

comm(n) 4.7 tcllib "Remote communication"
  • package require Tcl 8.5
  • -
  • package require comm ?4.7?
  • +
  • package require comm ?4.7.1?
  • ::comm::comm send ?-async? ?-command callback? id cmd ?arg arg ...?
  • diff --git a/idoc/www/tcllib/files/modules/map/map_geocode_nominatim.html b/idoc/www/tcllib/files/modules/map/map_geocode_nominatim.html index e594f0fc24..b7a3f5a8ab 100644 --- a/idoc/www/tcllib/files/modules/map/map_geocode_nominatim.html +++ b/idoc/www/tcllib/files/modules/map/map_geocode_nominatim.html @@ -105,7 +105,7 @@ | Applications ]
    -

    map::geocode::nominatim(n) 0.1 tcllib "Mapping utilities"

    +

    map::geocode::nominatim(n) 0.2 tcllib "Mapping utilities"

    Name

    map::geocode::nominatim - Resolving geographical names with a Nominatim service

    @@ -127,12 +127,12 @@

    map::geocode::nominatim(n) 0.1 tcllib "Mapping u

    Synopsis

      -
    • package require Tcl 8.5
    • +
    • package require Tcl 8.6
    • package require http
    • package require json
    • package require uri
    • package require snit
    • -
    • package require map::geocode::nominatim ?0.1?
    • +
    • package require map::geocode::nominatim ?0.2?
    @@ -129,150 +128,341 @@

    map::slippy(n) 0.5 tcllib "Mapping utilities&quo

    Synopsis

      -
    • package require Tcl 8.4
    • -
    • package require Tk 8.4
    • -
    • package require map::slippy ?0.5?
    • +
    • package require Tcl 8.6
    • +
    • package require map::slippy ?0.8?

    Description

    -

    This package provides a number of methods doing things needed by all -types of slippy-based map packages.

    +

    This package provides a number of methods doing things needed by all types of slippy-based map +packages.

    +

    BEWARE, Attention Version 0.8 is NOT backward compatible +with version 0.7 and earlier. The entire API was heavily revised and changed.

    +

    Note: For the representation of locations in the various coordinate systems used by +the commands of this package please read section Coordinate systems. The command +descriptions will not repeat them, and assume that they are understood already.

    -

    API

    +

    Coordinate systems

    +

    The commands of this package operate in two distinct coordinate systems, geographical locations, and +points. The former represents coordinates for locations on Earth, while the latter is for use on Tk +canvas widgets.

    +

    Geographic

    +

    Geographical locations (short: geo) are represented by a pair of Latitude and +Longitude values, each of which is measured in degrees, as they are essentially angles.

    +

    The Zero longitude is the Greenwich meridian, with positive values going +east, and negative values going west, for a total range of +/- 180 degrees. Note that ++180 and -180 longitude are the same meridian, opposite to Greenwich.

    +

    The zero latitude is the Equator, with positive values going north and +negative values going south. While the true range is +/- 90 degrees the projection used by +the package requires us to cap the range at roughly +/- 85.05112877983284 degrees. This +means that the North and South poles are not representable and not part of any map.

    +

    A geographical location is represented by a list containing two values, the latitude, and +longitude of the location, in this order.

    +

    A geographical bounding box is represented by a list containing four values, the minimal +latitude and longitude of the box, and the maximal latitude and longitude of the box, in this order.

    +

    Geographical locations and boxes can be converted to points and their boxes by means of an +additional parameter, the zoom level. This parameter indicates the size of the map in the +canvas the coordinates are to be projected into.

    +
    +

    Points

    +

    Points (short: point) are represented by a pair of x and y values, each of +which is measured in pixels. They reference a location in a Tk canvas widget. +As a map can be shown at different degrees of magnification, the exact pixel coordinates for a +geographical location depend on this zoom level.

    +

    For the following explanation to make sense it should be noted that a map shown in a Tk +canvas widget is split into equal-sized quadratic tiles.

    +

    Point coordinates are tile coordinates scaled by the size of these tiles. This package uses +tiles of size 256, which is the standard size used by many online servers providing map +tiles of some kind or other.

    +

    A point is represented by a list containing the x- and y-coordinates of the lcoation, in this +in this order.

    +

    A point bounding box is represented by a list containing four values, the minimal x and y of +the box, and the maximal x and y of the box, in this order.

    +

    Point locations and boxes can be converted to geographical locations and their boxes by means +of an additional parameter, the zoom level. This parameter indicates the size of the map in +the canvas the coordinates are projected from.

    +

    Tile coordinates appear only in one place of the API, in the signature of command +map slippy tile valid. Everything else uses Point coordinates.

    +

    Using tile coordinates in the following however makes the structure of the map at the various +zoom levels (maginification factors) easier to explain.

    +

    Generally the integer part of the tile coordinates represent the row and column number of a +tile of the map, wheras the fractional parts signal how far inside that tile the location in +question is, with pure integer coordinates (no fractional part) representing the upper left corner +of a tile.

    +

    The zero point of the map is at the upper left corner, regardless of zoom level, with larger +coordinates going right (east) and down (south), and smaller coordinates going left (west) and up +(north). Again regardless of zoom level.

    +

    Negative coordinates are not allowed.

    +

    At zoom level 0 the entire map is represented by a single tile, putting the +geographic zero at 1/2, 1/2 in terms of tile coordinates, and the range of tile coordinates as +[0...1].

    +

    When going from zoom level N to the next deeper (magnified) level (N+1) each tile +of level N is split into its four quadrants, which then are the tiles of level N+1.

    +

    This means that at zoom level N the map is sliced (horizontally and vertically) into +2^N rows and columns, for a total of 4^N tiles, with the tile coordinates ranging from +0 to 2^N+1.

    +
    +
    +

    API

    -
    ::map::slippy length level
    -

    This method returns the width/height of a slippy-based map at the -specified zoom level, in pixels. This is, in essence, the result -of

    +
    ::map slippy geo box 2point zoom geobox
    +

    The command converts the geographical box geobox to a point box in the canvas, for the +specified zoom level, and returns that box.

    +
    ::map slippy geo box center geobox
    +

    The command returns the center of the geographical box geobox.

    +
    ::map slippy geo box corners geobox
    +

    This command returns a list containing the four corner locations implied by the geographical box +geobox. The four points are top-left, bottom-left, top-right, and bottom-right, in that order.

    +
    ::map slippy geo box diameter geobox
    +

    The command returns the diameter of the geographical box geobox, in meters.

    +
    ::map slippy geo box dimensions geobox
    +

    The command returns the dimensions of the geographical box geobox, width and height, in this +order.

    +
    ::map slippy geo box fit geobox canvdim zmax ?zmin?
    +

    This command calculates the zoom level such that the geobox will fit into a viewport given by +canvdim (a 2-element list containing the width and height of said viewport) and returns it.

    +

    The zoom level will be made to fit within the range zmin...zmax. +When zmin is not specified it will default to 0.

    +
    ::map slippy geo box inside geobox geo
    +

    The command tests if the geographical location geo is contained in the geographical +box geobox or not. It returns true if so, and false else.

    +
    ::map slippy geo box limit geobox
    +

    This command limits the geographical box to at most 6 decimals and returns the result.

    +

    For geographical coordinates 6 decimals is roughly equivalent to a grid of 11.1 cm.

    +
    ::map slippy geo box opposites geobox
    +

    This command returns a list containing the two principal corner locations implied by the +geographical box geobox. The two points are top-left, and bottom-right, in that order.

    +
    ::map slippy geo box perimeter geobox
    +

    The command returns the perimeter of the geographical box geobox, in meters.

    +
    ::map slippy geo box valid geobox
    +

    This commands tests if the specified geographical box contains only valid latitudes +and longitudes. It returns true if the box is valid, and false else.

    +
    ::map slippy geo box valid-list geoboxes
    +

    This commands tests if the list of geographical boxes contains only valid latitudes +and longitudes. It returns true if all the boxes are valid, and false +else.

    +
    ::map slippy geo distance geo1 geo2
    +

    This command computes the great-circle distance between the two geographical locations in meters and +returns that value.

    +

    The code is based on +https://wiki.tcl-lang.org/page/geodesy take on the +haversine formula.

    +
    ::map slippy geo distance* closed geo...
    +

    An extension of map slippy geo distance this command computes the cumulative distance along +the path specified by the ordered set of geographical locations in meters, and returns it.

    +

    If the path is marked as closed (i.e. a polygon/loop) the result contains the distance +between last and first element of the path as well, making the result the length of the perimeter of +the area described by the locations.

    +
    ::map slippy geo distance-list closed geo-list
    +

    As a variant of map slippy geo distance* this command takes the path to compute the length +of as a single list of geographical locations, instead of a varying number of arguments.

    +
    ::map slippy geo limit geo
    +

    This command limits the geographical location to at most 6 decimals and returns the result.

    +

    For geographical coordinates 6 decimals is roughly equivalent to a grid of 11.1 cm.

    +
    ::map slippy geo bbox geo...
    +
    +
    ::map slippy geo bbox-list geo-list
    +

    These two commands compute the bounding box for the specified set of geographical locations and +return a geographical box.

    +

    When no geographical locations are specified the box is "0 0 0 0".

    +

    The locations are specified as either a varying number of arguments, or as a single list.

    +
    ::map slippy geo center geo...
    +
    +
    ::map slippy geo center-list geo-list
    +

    These two commands compute the center of the bounding box for the specified set of geographical +locations.

    +

    When no geographical locations are specified the center is "0 0".

    +

    The locations are specified as either a varying number of arguments, or as a single list.

    +
    ::map slippy geo diameter geo...
    +
    +
    ::map slippy geo diameter-list geo-list
    +

    These two commands compute the diameter for the specified set of geographical locations, in meters. +The diameter is the maximum of the pair-wise distances between all locations.

    +

    When less than two geographical locations are specified the diameter is "0".

    +

    The locations are specified as either a varying number of arguments, or as a single list.

    +
    ::map slippy geo 2point zoom geo
    +

    This command converts the geographical location geo to a point in the canvas, for the +specified zoom level, and returns that point.

    +
    ::map slippy geo 2point* zoom geo...
    +
    +
    ::map slippy geo 2point-list zoom geo-list
    +

    These two commands are extensions of map slippy geo 2point which take a series of +geographical locations as either a varying number of arguments or a single list, convert them all to +points as per the specified zoom level and return a list of the results.

    +
    ::map slippy geo valid geo
    +

    This commands tests if the specified geographical location contains only valid latitudes and +longitudes. It returns true if the location is valid, and false else.

    +
    ::map slippy geo valid-list geos
    +

    This commands tests if the list of geographical locations contains only valid latitudes and +longitudes. It returns true if all the locations are valid, and false else.

    +
    ::map slippy length level
    +

    This command returns the width/height of a slippy-based map at the specified zoom level, in +pixels. This is, in essence, the result of

    -	expr { [tiles $level] * [tile size] }
    +expr { [tiles $level] * [tile size] }
     
    -
    ::map::slippy tiles level
    -

    This method returns the width/height of a slippy-based map at the -specified zoom level, in tiles.

    -
    ::map::slippy tile size
    -

    This method returns the width/height of a tile in a slippy-based map, -in pixels.

    -
    ::map::slippy tile valid tile levels ?msgvar?
    -

    This method checks whether tile described a valid tile in a -slippy-based map containing that many zoom levels. The result is -a boolean value, true if the tile is valid, and false -otherwise. For the latter a message is left in the variable named by -msgvar, should it be specified.

    -

    A tile identifier as stored in tile is a list containing zoom -level, tile row, and tile column, in this order. The command -essentially checks this, i.e. the syntax, that the zoom level is -between 0 and "levels-1", and that the row/col information is -within the boundaries for the zoom level, i.e. 0 ... -"[tiles $zoom]-1".

    -
    ::map::slippy geo 2tile geo
    -

    Converts a geographical location at a zoom level (geo, a list -containing zoom level, latitude, and longitude, in this order) to a -tile identifier (list containing zoom level, row, and column) at that -level. The tile identifier uses pure integer numbers for the tile -coordinates, for all geographic coordinates mapping to that tile.

    -
    ::map::slippy geo 2tile.float geo
    -

    Converts a geographical location at a zoom level (geo, a list -containing zoom level, latitude, and longitude, in this order) to a -tile identifier (list containing zoom level, row, and column) at that -level. The tile identifier uses floating point numbers for the tile -coordinates, representing not only the tile the geographic coordinates -map to, but also the fractional location inside of that tile.

    -
    ::map::slippy geo 2point geo
    -

    Converts a geographical location at a zoom level (geo, a list -containing zoom level, latitude, and longitude, in this order) to a -pixel position (list containing zoom level, y, and x) at that level.

    -
    ::map::slippy tile 2geo tile
    -

    Converts a tile identifier at a zoom level (tile, list -containing zoom level, row, and column) to a geographical location -(list containing zoom level, latitude, and longitude, in this order) -at that level.

    -
    ::map::slippy tile 2point tile
    -

    Converts a tile identifier at a zoom level (tile, a list -containing zoom level, row, and column, in this order) to a pixel -position (list containing zoom level, y, and x) at that level.

    -
    ::map::slippy point 2geo point
    -

    Converts a pixel position at a zoom level (point, list -containing zoom level, y, and x) to a geographical location (list -containing zoom level, latitude, and longitude, in this order) at that -level.

    -
    ::map::slippy point 2tile point
    -

    Converts a pixel position at a zoom level (point, a list -containing zoom level, y, and x, in this order) to a tile identifier -(list containing zoom level, row, and column) at that level.

    -
    ::map::slippy fit geobox canvdim geobox zmin zmax
    -

    Calculates the zoom level (whithin the bounds zmin and -zmax) such that geobox (a 4-element list containing the -latitudes and longitudes lat0, lat1, lon0 and lon1 of a geo box, -in this order) fits into a viewport given by canvdim, a -2-element list containing the width and height of the viewport, in -this order.

    +
    ::map slippy limit2 x
    +
    +
    ::map slippy limit3 x
    +
    +
    ::map slippy limit6 x
    +

    This command limits the value to at most 2, 3, or 6 decimals and returns the result.

    +

    For geographical coordinates 6 decimals is roughly equivalent to a grid of 11.1 cm.

    +
    ::map slippy point box 2geo zoom pointbox
    +

    The command converts the point box pointbox to a geographical box in the canvas, as per the +specified zoom level, and returns that box.

    +
    ::map slippy point box center pointbox
    +

    The command returns the center of the pointbox.

    +
    ::map slippy point box corners pointbox
    +

    This command returns a list containing the four corner locations implied by the point box +pointbox. The four points are top-left, bottom-left, top-right, and bottom-right, in that +order.

    +
    ::map slippy point box diameter pointbox
    +

    The command returns the diameter of the pointbox, in pixels.

    +
    ::map slippy point box dimensions pointbox
    +

    The command returns the dimensions of the pointbox, width and height, in this order.

    +
    ::map slippy point box inside pointbox point
    +

    The command tests if the point is contained in the pointbox or not. +It returns true if so, and false else.

    +
    ::map slippy point box opposites pointbox
    +

    This command returns a list containing the two principal corner locations implied by the point box +pointbox. The two points are top-left, and bottom-right, in that order.

    +
    ::map slippy point box perimeter pointbox
    +

    The command returns the perimeter of the pointbox, in pixels.

    +
    ::map slippy point distance point1 point2
    +

    This command computes the euclidena distance between the two points in pixels and returns that +value.

    +
    ::map slippy point distance* closed point...
    +

    An extension of map slippy point distance this command computes the cumulative distance +along the path specified by the ordered set of points, and returns it.

    +

    If the path is marked as closed (i.e. a polygon/loop) the result contains the distance +between last and first element of the path as well, making the result the length of the perimeter of +the area described by the locations.

    +
    ::map slippy point distance-list closed point-list
    +

    As a variant of map slippy point distance* this command takes the path to compute the length +of as a single list of points, instead of a varying number of arguments.

    +
    ::map slippy point bbox point...
    +
    +
    ::map slippy point bbox-list point-list
    +

    These two commands compute the bounding box for the specified set of points and return a point box.

    +

    When no points are specified the box is "0 0 0 0".

    +

    The locations are specified as either a varying number of arguments, or as a single list.

    +
    ::map slippy point center point...
    +
    +
    ::map slippy point center-list point-list
    +

    These two commands compute the center of the bounding box for the specified set of points.

    +

    When no points are specified the center is "0 0".

    +

    The locations are specified as either a varying number of arguments, or as a single list.

    +
    ::map slippy point diameter point...
    +
    +
    ::map slippy point diameter-list point-list
    +

    These two commands compute the diameter for the specified set of points, in pixels. +The diameter is the maximum of the pair-wise distances between all locations.

    +

    When less than two points are specified the diameter is "0".

    +

    The locations are specified as either a varying number of arguments, or as a single list.

    +
    ::map slippy point 2geo zoom point
    +

    This command converts the point in the canvas, for the specified zoom level, to a +geograhical location, and returns that location.

    +
    ::map slippy point 2geo* zoom point...
    +
    +
    ::map slippy point 2geo-list zoom point-list
    +

    These two commands are extensions of map slippy point 2geo which take a series of points as +either a varying number of arguments or a single list, convert them all to geographical locations as +per the specified zoom level and return a list of the results.

    +
    ::map slippy point simplify radial threshold point-list
    +

    This command takes a path of points (as a single list), simplifies the path using the +Radial Distance algorithm and returns the simplified path as list of points.

    +

    In essence the algorithm keeps only the first of adjacent points nearer to that first point +than the threshold, and drops the others.

    +
    ::map slippy point simplify rdp point-list
    +

    This command takes a patch of points (as a single list), simplifies it using the +non-parametric Ramer-Douglas-Peucker algorithm and returns the simplified path as +list of points.

    +
    ::map slippy pretty-distance x
    +

    This methods formats the distance x (in meters) for display and returns the resulting string +(including the chosen unit).

    +

    Sub-kilometer distances are limited to 2 decimals, i.e. centimeters, whereas Kilometers are +limited to 3 decimals, i.e. meters.

    +
    ::map slippy tiles level
    +

    This command returns the width/height of a slippy-based map at the specified zoom level, in +tiles.

    +
    ::map slippy tile size
    +

    This command returns the width/height of a tile in a slippy-based map, in pixels.

    +
    ::map slippy tile valid zoom row column levels ?msgvar?
    +

    This command checks if the tile described by zoom, row, and column is valid for a +slippy-based map having that many zoom levels, or not. +The result is a boolean value, true if the tile is valid, and false otherwise. +In the latter case a message is left in the variable named by msgvar, should it be specified.

    +
    ::map slippy valid latitude x
    +

    This commands tests if the argument x is a valid latitude value, and returns the boolean +result of that test. I.e. true if the value is valid, and false else.

    +
    ::map slippy valid longitude x
    +

    This commands tests if the argument x is a valid longitude value, and returns the boolean +result of that test. I.e. true if the value is valid, and false else.

    -

    Coordinate systems

    -

    The commands of this package operate on three distinct coordinate -systems, which are explained below.

    -

    Geographic

    -

    Geographical coordinates are represented by Latitude and -Longitude, each of which is measured in degrees, as they are -essentially angles.

    -

    Zero longitude is the Greenwich meridian, with -positive values going east, and negative values going -west, for a total range of +/- 180 degrees. Note that +180 and --180 longitude are the same meridian, opposite to greenwich.

    -

    zero latitude the Equator, with positive values -going north and negative values going south. While the -true range is +/- 90 degrees the projection used by the package -requires us to cap the range at +/- 85.05112877983284 degrees. This -means that north and south pole are not representable and not part of -any map.

    -
    -

    Tiles

    -

    While Geographical coordinates of the previous section are -independent of zoom level the tile coordinates are not.

    -

    Generally the integer part of tile coordinates represent the -row and column number of the tile in question, wheras the fractional -parts signal how far inside the tile the location in question is, with -pure integer coordinates (no fractional part) representing the upper -left corner of the tile.

    -

    The zero point of the map is at the upper left corner, -regardless of zoom level, with larger coordinates going right (east) -and down (south), and smaller coordinates going left (west) and up -(north). Again regardless of zxoom level.

    -

    Negative tile coordinates are not allowed.

    -

    At zoom level 0 the whole map is represented by a single, -putting the geographic zero at 1/2, 1/2 of tile coordinates, and the -range of tile coordinates as [0...1].

    -

    To go from a zoom level N to the next deeper level N+1 each -tile of level N is split into its four quadrants, which then are the -tiles of level N+1.

    -

    This means that at zoom level N the map is sliced (horizontally -and vertically) into 2^N stripes, for a total of 4^N tiles, with tile -coordinates ranging from 0 to 2^N+1.

    -
    -

    Pixels/Points

    -

    pixel coordinates, also called point coordinates are -in essence tile coordinates scaled by the size of -the image representing a tile. This tile size currently has a fixed -value, 256.

    -
    -

    References

    1. http://wiki.openstreetmap.org/wiki/Main_Page

    2. diff --git a/idoc/www/tcllib/files/modules/map/map_slippy_cache.html b/idoc/www/tcllib/files/modules/map/map_slippy_cache.html index 78c26389bb..23dab120cb 100644 --- a/idoc/www/tcllib/files/modules/map/map_slippy_cache.html +++ b/idoc/www/tcllib/files/modules/map/map_slippy_cache.html @@ -105,7 +105,7 @@ | Applications ]
      -

      map::slippy::cache(n) 0.2 tcllib "Mapping utilities"

      +

      map::slippy::cache(n) 0.4 tcllib "Mapping utilities"

      Name

      map::slippy::cache - Management of a tile cache in the local filesystem

      @@ -126,11 +126,10 @@

      map::slippy::cache(n) 0.2 tcllib "Mapping utilit

      Synopsis

        -
      • package require Tcl 8.4
      • -
      • package require Tk 8.4
      • -
      • package require img::png
      • +
      • package require Tcl 8.6
      • +
      • package require Tk 8.6
      • package require map::slippy
      • -
      • package require map::slippy::cache ?0.2?
      • +
      • package require map::slippy::cache ?0.4?

      Description

      -

      This package provides a class for managing a cache of tiles for -slippy-based maps in the local filesystem.

      +

      This package provides a class for managing a cache of tiles for slippy-based maps in the local +filesystem.

      +

      BEWARE, Attention Version 0.4 is NOT backward compatible +with version 0.3 and earlier. This is due to switching this package's internals to the use of +version 0.8 of map::slippy.

      API

      diff --git a/idoc/www/tcllib/files/modules/map/map_slippy_fetcher.html b/idoc/www/tcllib/files/modules/map/map_slippy_fetcher.html index 33068d9c33..7d0903be68 100644 --- a/idoc/www/tcllib/files/modules/map/map_slippy_fetcher.html +++ b/idoc/www/tcllib/files/modules/map/map_slippy_fetcher.html @@ -105,7 +105,7 @@ | Applications ]
      -

      map::slippy::fetcher(n) 0.4 tcllib "Mapping utilities"

      +

      map::slippy::fetcher(n) 0.6 tcllib "Mapping utilities"

      Name

      map::slippy::fetcher - Accessing a server providing tiles for slippy-based maps

      @@ -126,11 +126,10 @@

      map::slippy::fetcher(n) 0.4 tcllib "Mapping util

      Synopsis

        -
      • package require Tcl 8.4
      • -
      • package require Tk 8.4
      • -
      • package require img::png
      • +
      • package require Tcl 8.6
      • +
      • package require Tk 8.6
      • package require map::slippy
      • -
      • package require map::slippy::fetcher ?0.4?
      • +
      • package require map::slippy::fetcher ?0.6?

      Description

      -

      This package provides a class for accessing http servers providing -tiles for slippy-based maps.

      +

      This package provides a class for accessing http servers providing tiles for slippy-based maps.

      +

      BEWARE, Attention Version 0.6 is NOT backward compatible +with version 0.5 and earlier. This is due to switching this package's internals to the use of +version 0.8 of map::slippy.

      API

      diff --git a/idoc/www/tcllib/files/modules/math/bigfloat.html b/idoc/www/tcllib/files/modules/math/bigfloat.html index 2c6362c3f8..8021b76730 100644 --- a/idoc/www/tcllib/files/modules/math/bigfloat.html +++ b/idoc/www/tcllib/files/modules/math/bigfloat.html @@ -107,7 +107,7 @@ | Applications ]
      -

      math::bigfloat(n) 2.0.3 tcllib "Tcl Math Library"

      +

      math::bigfloat(n) 2.0.4 tcllib "Tcl Math Library"

      Name

      math::bigfloat - Arbitrary precision floating-point numbers

      @@ -135,7 +135,7 @@

      math::bigfloat(n) 2.0.3 tcllib "Tcl Math Library
      • package require Tcl 8.5
      • -
      • package require math::bigfloat ?2.0.3?
      • +
      • package require math::bigfloat ?2.0.4?

      @@ -388,6 +392,76 @@

      math::calculus(n) 0.8.2 tcllib "Tcl Math Library
      float eps

      Relative allowed error (defaults to 1.0e-4)

      +
      ::math::calculus::root_bisection f xb xe eps
      +

      Return an estimate of the zero or one of the zeros of the function +contained in the interval [xb,xe]. The error in this estimate is of the +order of eps*abs(xe-xb), the actual error may be slightly larger.

      +

      The method used is the so-called bisection. For properties: see the regula falsi procedure.

      +
      +
      command f
      +

      Name of the command that evaluates the function for +which the zero is to be returned

      +
      float xb
      +

      Start of the interval in which the zero is supposed +to lie

      +
      float xe
      +

      End of the interval

      +
      float eps
      +

      Relative allowed error (defaults to 1.0e-7)

      +
      +
      ::math::calculus::root_secant f xb xe eps
      +

      Return an estimate of the zero or one of the zeros of the function +contained in the interval [xb,xe]. The error in this estimate is of the +order of eps*abs(xe-xb), the actual error may be slightly larger.

      +

      The method used is the so-called secant method. For properties: see the regula falsi procedure. +Note that this method is not guaranteed to produce a zero, but it is fast.

      +
      +
      command f
      +

      Name of the command that evaluates the function for +which the zero is to be returned

      +
      float xb
      +

      Start of the interval in which the zero is supposed +to lie

      +
      float xe
      +

      End of the interval

      +
      float eps
      +

      Relative allowed error (defaults to 1.0e-7)

      +
      +
      ::math::calculus::root_brent f xb xe eps
      +

      Return an estimate of the zero or one of the zeros of the function +contained in the interval [xb,xe]. The error in this estimate is of the +order of eps*abs(xe-xb), the actual error may be slightly larger.

      +

      The method used is the so-called Brent method. For properties: see the regula falsi procedure.

      +
      +
      command f
      +

      Name of the command that evaluates the function for +which the zero is to be returned

      +
      float xb
      +

      Start of the interval in which the zero is supposed +to lie

      +
      float xe
      +

      End of the interval

      +
      float eps
      +

      Relative allowed error (defaults to 1.0e-7)

      +
      +
      ::math::calculus::root_chandrupatla f xb xe eps
      +

      Return an estimate of the zero or one of the zeros of the function +contained in the interval [xb,xe]. The error in this estimate is of the +order of eps*abs(xe-xb), the actual error may be slightly larger.

      +

      The method used is the so-called Chandrupatla method. It is a variant of the Brent method and +is reputed to be faster. See https://www.embeddedrelated.com/showarticle/855.php for a discussion.

      +
      +
      command f
      +

      Name of the command that evaluates the function for +which the zero is to be returned

      +
      float xb
      +

      Start of the interval in which the zero is supposed +to lie

      +
      float xe
      +

      End of the interval

      +
      float eps
      +

      Relative allowed error (defaults to 1.0e-7)

      +

      Notes:

      Several of the above procedures take the names of procedures as @@ -424,6 +498,10 @@

      math::calculus(n) 0.8.2 tcllib "Tcl Math Library
    3. Other types of boundary conditions (zero gradient, zero flux)

    4. Other schematisation of the first-order term (now central differences are used, but upstream differences might be useful too).

    5. +
    6. The various root finding methods differ in robustness, ease of use and convergence rates. While the Newton-Raphson +method is quite fast (quadratic convergence), it is not guaranteed to produce an answer. The methods +that bracket the root, require two starting points, but except for the secant method are guaranteed to +deliver a good estimate.

EXAMPLES

diff --git a/idoc/www/tcllib/files/modules/mime/mime.html b/idoc/www/tcllib/files/modules/mime/mime.html index 7c43f47baf..271455847b 100644 --- a/idoc/www/tcllib/files/modules/mime/mime.html +++ b/idoc/www/tcllib/files/modules/mime/mime.html @@ -107,7 +107,7 @@ | Applications ]
-

mime(n) 1.6.3 tcllib "Mime"

+

mime(n) 1.7.1 tcllib "Mime"

Name

mime - Manipulation of MIME body parts

@@ -128,7 +128,7 @@

mime(n) 1.6.3 tcllib "Mime"

  • package require Tcl 8.5
  • -
  • package require mime ?1.6.3?
  • +
  • package require mime ?1.7.1?
  • ::mime::initialize ?-canonical type/subtype ?-param {key value}...? ?-encoding value? ?-header {key value}...?? (-file name | -string value | -parts {token1 ... tokenN})
  • @@ -206,7 +206,7 @@

    mime(n) 1.6.3 tcllib "Mime"

    key and then creates a new header named key with the value of value. If delete is provided any existing header having a name that matches -key is deleted. +key is deleted. Returns a list of strings containing the previous value associated with the key.

    The value for -mode is one of:

    diff --git a/idoc/www/tcllib/files/modules/rc4/rc4.html b/idoc/www/tcllib/files/modules/rc4/rc4.html index 858871537d..330330be0b 100644 --- a/idoc/www/tcllib/files/modules/rc4/rc4.html +++ b/idoc/www/tcllib/files/modules/rc4/rc4.html @@ -190,7 +190,7 @@

    rc4(n) 1.1.0 tcllib "RC4 Stream Cipher"

    diff --git a/idoc/www/tcllib/files/modules/report/report.html b/idoc/www/tcllib/files/modules/report/report.html
    index 52a2cd3c0e..09b97829a0 100644
    --- a/idoc/www/tcllib/files/modules/report/report.html
    +++ b/idoc/www/tcllib/files/modules/report/report.html
    @@ -93,7 +93,7 @@
     
     
    -
     
    @@ -107,7 +107,7 @@
     | Applications
      ] 
    -

    report(n) 0.3.2 tcllib "Matrix reports"

    +

    report(n) 0.4 tcllib "Matrix reports"

    Name

    report - Create and manipulate report objects

    @@ -131,8 +131,8 @@

    report(n) 0.3.2 tcllib "Matrix reports"

    Synopsis

      -
    • package require Tcl 8.2
    • -
    • package require report ?0.3.2?
    • +
    • package require Tcl 8.5
    • +
    • package require report ?0.4?
    diff --git a/idoc/www/tcllib/files/modules/simulation/montecarlo.html b/idoc/www/tcllib/files/modules/simulation/montecarlo.html index 7b8c72a611..7abe083a7d 100644 --- a/idoc/www/tcllib/files/modules/simulation/montecarlo.html +++ b/idoc/www/tcllib/files/modules/simulation/montecarlo.html @@ -196,7 +196,7 @@

    simulation::montecarlo(n) 0.1 tcllib "Tcl Simula

    The package defines the following auxiliary procedures:

    ::simulation::montecarlo::getOption keyword
    -

    Get the value of an option given as part of the singeExperiment command.

    +

    Get the value of an option given as part of the singleExperiment command.

    string keyword

    Given keyword (without leading minus)

    diff --git a/idoc/www/tcllib/files/modules/struct/matrix.html b/idoc/www/tcllib/files/modules/struct/matrix.html index 28faf6fb02..f83405d175 100644 --- a/idoc/www/tcllib/files/modules/struct/matrix.html +++ b/idoc/www/tcllib/files/modules/struct/matrix.html @@ -93,7 +93,7 @@ - @@ -107,7 +107,7 @@ | Applications ]
    -

    struct::matrix(n) 2.0.4 tcllib "Tcl Data Structures"

    +

    struct::matrix(n) 2.1 tcllib "Tcl Data Structures"

    Name

    struct::matrix - Create and manipulate matrix objects

    @@ -126,8 +126,8 @@

    struct::matrix(n) 2.0.4 tcllib "Tcl Data Structu

    Synopsis

      -
    • package require Tcl 8.2
    • -
    • package require struct::matrix ?2.0.4?
    • +
    • package require Tcl 8.5
    • +
    • package require struct::matrix ?2.1?

    +zero width.

    +

    Note: The command properly recognizes and accounts for Asian double-wide characters.

    +

    In other words, the returned length is the number of terminal columns taken by the +string, and not the number of characters.

    matrixName delete column column

    Deletes the specified column from the matrix and shifts all columns with higher indices one index down.

    @@ -562,6 +565,6 @@

    struct::matrix(n) 2.0.4 tcllib "Tcl Data Structu

    Data structures

diff --git a/idoc/www/tcllib/files/modules/struct/matrix1.html b/idoc/www/tcllib/files/modules/struct/matrix1.html deleted file mode 100644 index 4515cc0053..0000000000 --- a/idoc/www/tcllib/files/modules/struct/matrix1.html +++ /dev/null @@ -1,455 +0,0 @@ - -struct::matrix_v1 - Tcl Data Structures - - - - - -
[ - Tcllib Home -| Main Table Of Contents -| Table Of Contents -| Keyword Index -| Categories -| Modules -| Applications - ]
-
-

struct::matrix_v1(n) 1.2.2 tcllib "Tcl Data Structures"

-

Name

-

struct::matrix_v1 - Create and manipulate matrix objects

-
- - -

Description

-

The ::struct::matrix command creates a new matrix object with an -associated global Tcl command whose name is matrixName. This -command may be used to invoke various operations on the matrix. It has -the following general form:

-
-
matrixName option ?arg arg ...?
-

Option and the args determine the exact behavior of the -command.

-
-

A matrix is a rectangular collection of cells, i.e. organized in rows -and columns. Each cell contains exactly one value of arbitrary -form. The cells in the matrix are addressed by pairs of integer -numbers, with the first (left) number in the pair specifying the -column and the second (right) number specifying the row the cell is -in. These indices are counted from 0 upward. The special non-numeric -index end refers to the last row or column in the matrix, -depending on the context. Indices of the form -end-number are counted from the end of the row or -column, like they are for standard Tcl lists. Trying to access -non-existing cells causes an error.

-

The matrices here are created empty, i.e. they have neither rows nor -columns. The user then has to add rows and columns as needed by his -application. A specialty of this structure is the ability to export an -array-view onto its contents. Such can be used by tkTable, for -example, to link the matrix into the display.

-

The following commands are possible for matrix objects:

-
-
matrixName add column ?values?
-

Extends the matrix by one column and then acts like setcolumn -(see below) on this new column if there were values -supplied. Without values the new cells will be set to the empty -string. The new column is appended immediately behind the last -existing column.

-
matrixName add row ?values?
-

Extends the matrix by one row and then acts like setrow (see -below) on this new row if there were values supplied. Without -values the new cells will be set to the empty string. The new -row is appended immediately behind the last existing row.

-
matrixName add columns n
-

Extends the matrix by n columns. The new cells will be set to -the empty string. The new columns are appended immediately behind the -last existing column. A value of n equal to or smaller than 0 is -not allowed.

-
matrixName add rows n
-

Extends the matrix by n rows. The new cells will be set to the -empty string. The new rows are appended immediately behind the last -existing row. A value of n equal to or smaller than 0 is not -allowed.

-
matrixName cells
-

Returns the number of cells currently managed by the matrix. This is -the product of rows and columns.

-
matrixName cellsize column row
-

Returns the length of the string representation of the value currently -contained in the addressed cell.

-
matrixName columns
-

Returns the number of columns currently managed by the matrix.

-
matrixName columnwidth column
-

Returns the length of the longest string representation of all the -values currently contained in the cells of the addressed column if -these are all spanning only one line. For cell values spanning -multiple lines the length of their longest line goes into the -computation.

-
matrixName delete column column
-

Deletes the specified column from the matrix and shifts all columns -with higher indices one index down.

-
matrixName delete row row
-

Deletes the specified row from the matrix and shifts all row with -higher indices one index down.

-
matrixName destroy
-

Destroys the matrix, including its storage space and associated -command.

-
matrixName format 2string ?report?
-

Formats the matrix using the specified report object and returns the -string containing the result of this operation. The report has to -support the printmatrix method. If no report is -specified the system will use an internal report definition to format -the matrix.

-
matrixName format 2chan ??report? channel?
-

Formats the matrix using the specified report object and writes the -string containing the result of this operation into the channel. The -report has to support the printmatrix2channel method. If no -report is specified the system will use an internal report -definition to format the matrix. If no channel is specified the -system will use stdout.

-
matrixName get cell column row
-

Returns the value currently contained in the cell identified by row -and column index.

-
matrixName get column column
-

Returns a list containing the values from all cells in the column -identified by the index. The contents of the cell in row 0 are stored -as the first element of this list.

-
matrixName get rect column_tl row_tl column_br row_br
-

Returns a list of lists of cell values. The values stored in the -result come from the sub-matrix whose top-left and bottom-right cells -are specified by column_tl, row_tl and -column_br, row_br resp. Note that the following equations have -to be true: "column_tl <= column_br" and "row_tl <= -row_br". The result is organized as follows: The outer list is -the list of rows, its elements are lists representing a single -row. The row with the smallest index is the first element of the outer -list. The elements of the row lists represent the selected cell -values. The cell with the smallest index is the first element in each -row list.

-
matrixName get row row
-

Returns a list containing the values from all cells in the row -identified by the index. The contents of the cell in column 0 are -stored as the first element of this list.

-
matrixName insert column column ?values?
-

Extends the matrix by one column and then acts like setcolumn -(see below) on this new column if there were values -supplied. Without values the new cells will be set to the empty -string. The new column is inserted just before the column specified by -the given index. This means, if column is less than or equal to -zero, then the new column is inserted at the beginning of the matrix, -before the first column. If column has the value end, -or if it is greater than or equal to the number of columns in the -matrix, then the new column is appended to the matrix, behind the last -column. The old column at the chosen index and all columns with higher -indices are shifted one index upward.

-
matrixName insert row row ?values?
-

Extends the matrix by one row and then acts like setrow (see -below) on this new row if there were values supplied. Without -values the new cells will be set to the empty string. The new -row is inserted just before the row specified by the given index. This -means, if row is less than or equal to zero, then the new row is -inserted at the beginning of the matrix, before the first row. If -row has the value end, or if it is greater than or -equal to the number of rows in the matrix, then the new row is -appended to the matrix, behind the last row. The old row at that index -and all rows with higher indices are shifted one index upward.

-
matrixName link ?-transpose? arrayvar
-

Links the matrix to the specified array variable. This means that the -contents of all cells in the matrix is stored in the array too, with -all changes to the matrix propagated there too. The contents of the -cell (column,row) is stored in the array using the key -column,row. If the option -transpose is specified the -key row,column will be used instead. It is possible to link the -matrix to more than one array. Note that the link is bidirectional, -i.e. changes to the array are mirrored in the matrix too.

-
matrixName links
-

Returns a list containing the names of all array variables the matrix -was linked to through a call to method link.

-
matrixName rowheight row
-

Returns the height of the specified row in lines. This is the highest -number of lines spanned by a cell over all cells in the row.

-
matrixName rows
-

Returns the number of rows currently managed by the matrix.

-
matrixName search ?-nocase? ?-exact|-glob|-regexp? all pattern
-

Searches the whole matrix for cells matching the pattern and -returns a list with all matches. Each item in the aforementioned list -is a list itself and contains the column and row index of the matching -cell, in this order. The results are ordered by column first and row -second, both times in ascending order. This means that matches to the -left and the top of the matrix come before matches to the right and -down.

-

The type of the pattern (string, glob, regular expression) is -determined by the option after the search keyword. If no -option is given it defaults to -exact.

-

If the option -nocase is specified the search will be -case-insensitive.

-
matrixName search ?-nocase? ?-exact|-glob|-regexp? column column pattern
-

Like search all, but the search is restricted to the -specified column.

-
matrixName search ?-nocase? ?-exact|-glob|-regexp? row row pattern
-

Like search all, but the search is restricted to the -specified row.

-
matrixName search ?-nocase? ?-exact|-glob|-regexp? rect column_tl row_tl column_br row_br pattern
-

Like search all, but the search is restricted to the -specified rectangular area of the matrix.

-
matrixName set cell column row value
-

Sets the value in the cell identified by row and column index to the -data in the third argument.

-
matrixName set column column values
-

Sets the values in the cells identified by the column index to the -elements of the list provided as the third argument. Each element of -the list is assigned to one cell, with the first element going into -the cell in row 0 and then upward. If there are less values in the -list than there are rows the remaining rows are set to the empty -string. If there are more values in the list than there are rows the -superfluous elements are ignored. The matrix is not extended by this -operation.

-
matrixName set rect column row values
-

Takes a list of lists of cell values and writes them into the -submatrix whose top-left cell is specified by the two indices. If the -sublists of the outerlist are not of equal length the shorter sublists -will be filled with empty strings to the length of the longest -sublist. If the submatrix specified by the top-left cell and the -number of rows and columns in the values extends beyond the -matrix we are modifying the over-extending parts of the values are -ignored, i.e. essentially cut off. This subcommand expects its input -in the format as returned by getrect.

-
matrixName set row row values
-

Sets the values in the cells identified by the row index to the -elements of the list provided as the third argument. Each element of -the list is assigned to one cell, with the first element going into -the cell in column 0 and then upward. If there are less values in the -list than there are columns the remaining columns are set to the empty -string. If there are more values in the list than there are columns -the superfluous elements are ignored. The matrix is not extended by -this operation.

-
matrixName sort columns ?-increasing|-decreasing? row
-

Sorts the columns in the matrix using the data in the specified -row as the key to sort by. The options -increasing -and -decreasing have the same meaning as for lsort. -If no option is specified -increasing is assumed.

-
matrixName sort rows ?-increasing|-decreasing? column
-

Sorts the rows in the matrix using the data in the specified -column as the key to sort by. The options -increasing -and -decreasing have the same meaning as for lsort. -If no option is specified -increasing is assumed.

-
matrixName swap columns column_a column_b
-

Swaps the contents of the two specified columns.

-
matrixName swap rows row_a row_b
-

Swaps the contents of the two specified rows.

-
matrixName unlink arrayvar
-

Removes the link between the matrix and the specified arrayvariable, -if there is one.

-
-
-

EXAMPLES

-

The examples below assume a 5x5 matrix M with the first row containing -the values 1 to 5, with 1 in the top-left cell. Each other row -contains the contents of the row above it, rotated by one cell to the -right.

-
- % M getrect 0 0 4 4
- {{1 2 3 4 5} {5 1 2 3 4} {4 5 1 2 3} {3 4 5 1 2} {2 3 4 5 1}}
-
-
- % M setrect 1 1 {{0 0 0} {0 0 0} {0 0 0}}
- % M getrect 0 0 4 4
- {{1 2 3 4 5} {5 0 0 0 4} {4 0 0 0 3} {3 0 0 0 2} {2 3 4 5 1}}
-
-

Assuming that the style definitions in the example section of the -manpage for the package report are loaded into the -interpreter now an example which formats a matrix into a tabular -report. The code filling the matrix with data is not shown. contains -useful data.

-
-    % ::struct::matrix m
-    % # ... fill m with data, assume 5 columns
-    % ::report::report r 5 style captionedtable 1
-    % m format 2string r
-    +---+-------------------+-------+-------+--------+
-    |000|VERSIONS:          |2:8.4a3|1:8.4a3|1:8.4a3%|
-    +---+-------------------+-------+-------+--------+
-    |001|CATCH return ok    |7      |13     |53.85   |
-    |002|CATCH return error |68     |91     |74.73   |
-    |003|CATCH no catch used|7      |14     |50.00   |
-    |004|IF if true numeric |12     |33     |36.36   |
-    |005|IF elseif          |15     |47     |31.91   |
-    |   |true numeric       |       |       |        |
-    +---+-------------------+-------+-------+--------+
-    %
-    % # alternate way of doing the above
-    % r printmatrix m
-
-
-

Bugs, Ideas, Feedback

-

This document, and the package it describes, will undoubtedly contain -bugs and other problems. -Please report such in the category struct :: matrix of the -Tcllib Trackers. -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.

-
- -

Category

-

Data structures

-
- -
diff --git a/idoc/www/tcllib/files/modules/textutil/wcswidth.html b/idoc/www/tcllib/files/modules/textutil/wcswidth.html new file mode 100644 index 0000000000..672a0aa211 --- /dev/null +++ b/idoc/www/tcllib/files/modules/textutil/wcswidth.html @@ -0,0 +1,179 @@ + +textutil::wcswidth - Text and string utilities, macro processing + + + + +
[ + Tcllib Home +| Main Table Of Contents +| Table Of Contents +| Keyword Index +| Categories +| Modules +| Applications + ]
+
+

textutil::wcswidth(n) 35.2 tcllib "Text and string utilities, macro processing"

+

Name

+

textutil::wcswidth - Procedures to compute terminal width of strings

+
+ +

Synopsis

+
+
    +
  • package require Tcl 8.5
  • +
  • package require textutil::wcswidth ?35.2?
  • +
+ +
+
+

Description

+

The package textutil::wcswidth provides commands that determine character type and width +when used in terminals, and the length of strings when printed in a terminal.

+

The data underlying the functionality of this package is provided by the Unicode database +file http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt.

+

The complete set of procedures is described below.

+
+
::textutil::wcswidth string
+

Returns the number of character cells taken by the string when printed to the terminal. +This takes double-wide characters from the various Asian and other scripts into account.

+
::textutil::wcswidth_char char
+

Returns the number of character cells taken by the character when printed to the terminal.

+

Beware: The character char is specified as Unicode codepoint.

+
::textutil::wcswidth_type char
+

Returns the character type of the specified character. +This a single character in the set of A, F, H, N, Na, and +W, as specified per http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt

+

Beware: The character char is specified as Unicode codepoint.

+
+
+

Bugs, Ideas, Feedback

+

This document, and the package it describes, will undoubtedly contain +bugs and other problems. +Please report such in the category textutil of the +Tcllib Trackers. +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.

+
+

See Also

+

regexp(n), split(n), string(n)

+
+ +

Category

+

Text processing

+
+
diff --git a/idoc/www/tcllib/files/modules/valtype/iban.html b/idoc/www/tcllib/files/modules/valtype/iban.html index 8d9ccd1410..504128e604 100644 --- a/idoc/www/tcllib/files/modules/valtype/iban.html +++ b/idoc/www/tcllib/files/modules/valtype/iban.html @@ -107,7 +107,7 @@ | Applications ]
-

valtype::iban(n) 1.7 tcllib "Validation types"

+

valtype::iban(n) 1.8 tcllib "Validation types"

Name

valtype::iban - Validation for IBAN

@@ -130,7 +130,7 @@

valtype::iban(n) 1.7 tcllib "Validation types&qu
  • package require Tcl 8.5
  • package require snit 2
  • package require valtype::common
  • -
  • package require valtype::iban ?1.7?
  • +
  • package require valtype::iban ?1.8?