Index: ChangeLog ================================================================== --- ChangeLog +++ ChangeLog @@ -1,10 +1,21 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-28 Andreas Kupries * modules/fileutil: New package 'fileutil::decode'. * modules/zip: New module 'zip', with packages 'zipfile::encode' and 'zipfile::decode' + +2013-01-24 Andreas Kupries + + * New module and packages: clock (rfc2822, iso8601). + Tcl 8.5 only. 2013-01-08 Andreas Kupries * configure.in: [Bug 3593146]: Extended with CYGPATH usage to allow building under cygwin. Index: modules/aes/ChangeLog ================================================================== --- modules/aes/ChangeLog +++ modules/aes/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-08 Andreas Kupries * aes.man: [Bug 3574004]: Documented the -- option stopping * aes.tcl: option processing to protect data starting with * aes.test: a dash. Additionally auto-stop if only one argument Index: modules/amazon-s3/ChangeLog ================================================================== --- modules/amazon-s3/ChangeLog +++ modules/amazon-s3/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/asn/ChangeLog ================================================================== --- modules/asn/ChangeLog +++ modules/asn/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/base32/ChangeLog ================================================================== --- modules/base32/ChangeLog +++ modules/base32/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/base64/ChangeLog ================================================================== --- modules/base64/ChangeLog +++ modules/base64/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-08 Andreas Kupries * base64.man: [Bug 3581373]: Document behaviour for -maxlen 0. 2011-12-13 Andreas Kupries Index: modules/bee/ChangeLog ================================================================== --- modules/bee/ChangeLog +++ modules/bee/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/bench/ChangeLog ================================================================== --- modules/bench/ChangeLog +++ modules/bench/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/bibtex/ChangeLog ================================================================== --- modules/bibtex/ChangeLog +++ modules/bibtex/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/blowfish/ChangeLog ================================================================== --- modules/blowfish/ChangeLog +++ modules/blowfish/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/cache/ChangeLog ================================================================== --- modules/cache/ChangeLog +++ modules/cache/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/calendar/ChangeLog ================================================================== --- modules/calendar/ChangeLog +++ modules/calendar/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * ADDED modules/clock/ChangeLog Index: modules/clock/ChangeLog ================================================================== --- /dev/null +++ modules/clock/ChangeLog @@ -0,0 +1,12 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + +2013-01-24 Andreas Kupries + + * New module, 2 packages. + * rfc2822.tcl: Parsing rfc2822 dates (mail, news) + * iso8601.tcl: Parsing iso8601 dates and times. + * pkgIndex.tcl: ADDED modules/clock/iso8601.man Index: modules/clock/iso8601.man ================================================================== --- /dev/null +++ modules/clock/iso8601.man @@ -0,0 +1,57 @@ +[comment {-*- tcl -*- doctools manpage}] +[manpage_begin clock_iso8601 n 0.1] +[moddesc {Date/Time Utilities}] +[titledesc {Parsing ISO 8601 dates/times}] +[category {Text processing}] +[require Tcl 8.5] +[require clock::iso8601 [opt 0.1]] +[description] + +This package provides functionality to parse dates and times in +ISO 8601 format. + +[para] + +[list_begin definitions] + +[call [cmd {::clock::iso8601 parse_date}] \ + [arg date] [arg options...]] + +This command parses an ISO8601 date string in an unknown variant and +returns the given date/time in seconds since epoch. + +[para] The acceptable options are +[option -base], +[option -gmt], +[option -locale], and +[option -timezone] +of the builtin command [cmd {clock scan}]. + +[call [cmd {::clock::iso8601 parse_time}] \ + [arg time] [arg options...]] + +This command parses a full ISO8601 timestamp string (date and time) in +an unknown variant and returns the given time in seconds since epoch. + +[para] The acceptable options are +[option -base], +[option -gmt], +[option -locale], and +[option -timezone] +of the builtin command [cmd {clock scan}]. + +[list_end] + +[section {BUGS, IDEAS, FEEDBACK}] + +This document, and the package it describes, will undoubtedly contain +bugs and other problems. + +Please report such in the category [emph clock::iso8601] of the +[uri {http://sourceforge.net/tracker/?group_id=12883} {Tcllib SF Trackers}]. + +Please also report any ideas for enhancements you may have for either +package and/or documentation. + + +[manpage_end] ADDED modules/clock/iso8601.pcx Index: modules/clock/iso8601.pcx ================================================================== --- /dev/null +++ modules/clock/iso8601.pcx @@ -0,0 +1,43 @@ +# -*- tcl -*- iso8601.pcx +# Syntax of the commands provided by package iso8601. + +# For use by TclDevKit's static syntax checker. +# See http://www.activestate.com/solutions/tcl/ +# See http://aspn.activestate.com/ASPN/docs/Tcl_Dev_Kit/4.0/Checker.html#pcx_api +# for the documentation describing the format of the code contained in this file +# + +package require pcx +pcx::register clock::iso8601 +pcx::tcldep 0.1 needs tcl 8.5 + +namespace eval ::clock::iso8601 {} + +#pcx::message FOO {... text ...} type +#pcx::scan + +# Switches are per clock scan (Tcl 8.5), restricted subset. +pcx::check 0.1 std ::clock::iso8601::parse_date \ + {checkSimpleArgs 1 -1 { + checkWord + {checkSwitches 0 { + {-locale checkWord} + {-timezone checkWord} + {-base checkInt} + {-gmt checkBoolean} + } {}} + }} +pcx::check 0.1 std ::clock::iso8601::parse_time \ + {checkSimpleArgs 1 -1 { + checkWord + {checkSwitches 0 { + {-locale checkWord} + {-timezone checkWord} + {-base checkInt} + {-gmt checkBoolean} + } {}} + }} + +# Initialization via pcx::init. +# Use a ::iso8601::init procedure for non-standard initialization. +pcx::complete ADDED modules/clock/iso8601.tcl Index: modules/clock/iso8601.tcl ================================================================== --- /dev/null +++ modules/clock/iso8601.tcl @@ -0,0 +1,280 @@ +## -*- tcl -*- +# # ## ### ##### ######## ############# ##################### +## Copyright (c) 2004 Kevin Kenny +## Origin http://wiki.tcl.tk/13094 +## Modified for Tcl 8.5 only (eval -> {*}). + +# # ## ### ##### ######## ############# ##################### +## Requisites + +package require Tcl 8.5 +package provide clock::iso8601 0.1 +namespace eval ::clock::iso8601 {} + +# # ## ### ##### ######## ############# ##################### +## API + +# iso8601::parse_date -- +# +# Parse an ISO8601 date/time string in an unknown variant. +# +# Parameters: +# string -- String to parse +# args -- Arguments as for [clock scan]; may include any of +# the '-base', '-gmt', '-locale' or '-timezone options. +# +# Results: +# Returns the given date in seconds from the Posix epoch. + +proc ::clock::iso8601::parse_date { string args } { + variable DatePatterns + variable Repattern + foreach { regex interpretation } $DatePatterns { + if { [regexp "^$regex\$" $string] } { + #puts A|$string|\t|$regex|\t|$interpretation| + + # For incomplete dates (month and/or day missing), we have + # to set our own default values to overcome clock scan's + # settings. We do this by switching to a different pattern + # and extending the input properly for that pattern. + + if {[dict exists $Repattern $interpretation]} { + lassign [dict get $Repattern $interpretation] interpretation adjust modifier + {*}$modifier + # adjust irrelevant here, see parse_time for use. + } + + #puts B|$string|\t|$regex|\t|$interpretation| + return [clock scan $string -format $interpretation {*}$args] + } + } + return -code error "not an iso8601 date string" +} + +# iso8601::parse_time -- +# +# Parse a point-in-time in ISO8601 format +# +# Parameters: +# string -- String to parse +# args -- Arguments as for [clock scan]; may include any of +# the '-base', '-gmt', '-locale' or '-timezone options. +# +# Results: +# Returns the given time in seconds from the Posix epoch. + +proc ::clock::iso8601::parse_time { string args } { + variable DatePatterns + variable Repattern + if {![MatchTime $string field]} { + return -code error "not an iso8601 time string" + } + + #parray field + #puts A|$string| + + set pattern {} + foreach {regex interpretation} $DatePatterns { + if {[Has $interpretation tstart]} { + append pattern $interpretation + } + } + + if {[dict exists $Repattern $pattern]} { + lassign [dict get $Repattern $pattern] interpretation adjust modifier + {*}$modifier + incr tstart $adjust + } + + append pattern [Get T len] + incr tstart $len + + if {[Has %H tstart]} { + append pattern %H [Get Hcolon len] + incr tstart $len + + if {[Has %M tstart]} { + append pattern %M [Get Mcolon len] + incr tstart $len + + if {[Has %S tstart]} { + append pattern %S + } else { + # No seconds, default to start of minute. + append pattern %S + Insert string $tstart 00 + } + } else { + # No minutes, nor seconds, default to start of hour. + append pattern %M%S + Insert string $tstart 0000 + } + } else { + # No time information, default to midnight. + append pattern %H%M%S + Insert string $tstart 000000 + } + if {[Has %Z _]} { + append pattern %Z + } + + #puts B|$string|\t|$pattern| + return [clock scan $string -format $pattern {*}$args] +} + +# # ## ### ##### ######## ############# ##################### + +proc ::clock::iso8601::Get {x lv} { + upvar 1 field field string string $lv len + lassign $field($x) s e + if {($s >= 0) && ($e >= 0)} { + set len [expr {$e - $s + 1}] + return [string range $string $s $e] + } + set len 0 + return "" + +} + +proc ::clock::iso8601::Has {x nv} { + upvar 1 field field string string $nv next + lassign $field($x) s e + if {($s >= 0) && ($e >= 0)} { + set next $e + incr next + return 1 + } + return 0 +} + +proc ::clock::iso8601::Insert {sv index str} { + upvar 1 $sv string + append r [string range $string 0 ${index}-1] + append r $str + append r [string range $string $index end] + set string $r + return +} + +# # ## ### ##### ######## ############# ##################### +## State + +namespace eval ::clock::iso8601 { + + namespace export parse_date parse_time + namespace ensemble create + + # Enumerate the patterns that we recognize for an ISO8601 date as both + # the regexp patterns that match them and the [clock] patterns that scan + # them. + + variable DatePatterns { + {\d\d\d\d-\d\d-\d\d} {%Y-%m-%d} + {\d\d\d\d\d\d\d\d} {%Y%m%d} + {\d\d\d\d-\d\d\d} {%Y-%j} + {\d\d\d\d\d\d\d} {%Y%j} + {\d\d-\d\d-\d\d} {%y-%m-%d} + {\d\d\d\d-\d\d} {%Y-%m} + {\d\d\d\d\d\d} {%y%m%d} + {\d\d-\d\d\d} {%y-%j} + {\d\d\d\d\d} {%y%j} + {--\d\d-\d\d} {--%m-%d} + {--\d\d\d\d} {--%m%d} + {--\d\d\d} {--%j} + {---\d\d} {---%d} + {\d\d\d\d-W\d\d-\d} {%G-W%V-%u} + {\d\d\d\dW\d\d\d} {%GW%V%u} + {\d\d-W\d\d-\d} {%g-W%V-%u} + {\d\dW\d\d\d} {%gW%V%u} + {\d\d\d\d-W\d\d} {%G-W%V} + {\d\d\d\dW\d\d} {%GW%V} + {-W\d\d-\d} {-W%V-%u} + {-W\d\d\d} {-W%V%u} + {-W-\d} {%u} + {\d\d\d\d} {%Y} + } + + # Dictionary of the patterns requiring modifications to the input + # for proper month and/or day defaults. + variable Repattern { + %Y-%m {%Y-%m-%d 3 {Insert string 7 -01}} + %Y {%Y-%m-%d 5 {Insert string 4 -01-01}} + %G-W%V {%G-W%V-%u 1 {Insert string 8 -1}} + %GW%V {%GW%V%u 1 {Insert string 6 1}} + } +} + +# # ## ### ##### ######## ############# ##################### +## Initialization + +apply {{} { + # MatchTime -- (constructed procedure) + # + # Match an ISO8601 date/time string and indicate how it matched. + # + # Parameters: + # string -- String to match. + # fieldArray -- Name of an array in caller's scope that will receive + # parsed fields of the time. + # + # Results: + # Returns 1 if the time was scanned successfully, 0 otherwise. + # + # Side effects: + # Initializes the field array. The keys that are significant: + # - Any date pattern in 'DatePatterns' indicates that the + # corresponding value, if non-empty, contains a date string + # in the given format. + # - The patterns T, Hcolon, and Mcolon indicate a literal + # T preceding the time, a colon following the hour, or + # a colon following the minute. + # - %H, %M, %S, and %Z indicate the presence of the + # corresponding parts of the time. + + variable DatePatterns + + set cmd {regexp -indices -expanded -nocase -- {PATTERN} $timeString ->} + set re \(?:\(?: + set sep {} + foreach {regex interpretation} $DatePatterns { + append re $sep \( $regex \) + append cmd " " [list field($interpretation)] + set sep | + } + append re \) {(T|[[:space:]]+)} \)? + append cmd { field(T)} + append re {(\d\d)(?:(:?)(\d\d)(?:(:?)(\d\d)?))?} + append cmd { field(%H) field(Hcolon) } {field(%M) field(Mcolon) field(%S)} + append re {[[:space:]]*(Z|[-+]\d\d:?\d\d)?} + append cmd { field(%Z)} + set cmd [string map [list {{PATTERN}} [list $re]] \ + $cmd] + + proc MatchTime { timeString fieldArray } " + upvar 1 \$fieldArray field + $cmd + " + + #puts [info body MatchTime] + +} ::clock::iso8601} + +# # ## ### ##### ######## ############# ##################### + +return +# Usage examples, disabled. + +if { [info exists ::argv0] && ( $::argv0 eq [info script] ) } { + puts "::clock::iso8601::parse_date" + puts [::clock::iso8601::parse_date 1970-01-02 -timezone :UTC] + puts [::clock::iso8601::parse_date 1970-W01-5 -timezone :UTC] + puts [time {::clock::iso8601::parse_date 1970-01-02 -timezone :UTC} 1000] + puts [time {::clock::iso8601::parse_date 1970-W01-5 -timezone :UTC} 1000] + puts "::clock::iso8601::parse_time" + puts [clock format [::clock::iso8601::parse_time 2004-W33-2T18:52:24Z] \ + -format {%X %x %z} -locale system] + puts [clock format [::clock::iso8601::parse_time 18:52:24Z] \ + -format {%X %x %z} -locale system] + puts [time {::clock::iso8601::parse_time 2004-W33-2T18:52:24Z} 1000] + puts [time {::clock::iso8601::parse_time 18:52:24Z} 1000] +} ADDED modules/clock/iso8601.test Index: modules/clock/iso8601.test ================================================================== --- /dev/null +++ modules/clock/iso8601.test @@ -0,0 +1,217 @@ +# ------------------------------------------------------------------------- +# iso8601.test -*- tcl -*- +# (C) 2013 Andreas Kupries. BSD licensed. +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.5 +testsNeedTcltest 2.0 + +testing { + useLocal iso8601.tcl clock::iso8601 +} + +# ------------------------------------------------------------------------- + +test clock-iso8601-1.0.0 {parse_date wrong\#args} -constraints {tcl8.5plus tcl8.5minus} -body { + clock::iso8601 parse_date +} -returnCodes error -result {wrong # args: should be "clock::iso8601 parse_date string ..."} + +test clock-iso8601-1.0.1 {parse_date wrong\#args} -constraints {tcl8.6plus} -body { + clock::iso8601 parse_date +} -returnCodes error -result {wrong # args: should be "clock::iso8601 parse_date string ?arg ...?"} + +test clock-iso8601-1.1 {parse_date, bad option} -body { + clock::iso8601 parse_date 1994-11-05 -foo x +} -returnCodes error -result {bad switch "-foo", must be -base, -format, -gmt, -locale or -timezone} + +# NOTE: While listed as legal, -format is NOT. This is because the +# command simply hands off to clock scan, and we are seeing its error +# message. Either we do our own argument check first, or we capture +# and rewrite the error. + +# ------------------------------------------------------------------------- + +test clock-iso8601-2.0 {parse_date, bad input} -body { + clock::iso8601 parse_date A +} -returnCodes error -result {not an iso8601 date string} + +test clock-iso8601-2.1 {parse_date} -body { + clock::iso8601 parse_date 1994-11-05 + # It is unclear if this is influenced by TZ. +} -result 784022400 + +# ------------------------------------------------------------------------- + +test clock-iso8601-2.0.0 {parse_date, format: 19700102, reformatted with clock format -format {%D}} -body { + clock format [clock::iso8601 parse_date {19700102}] -format {%D} +} -result {01/02/1970} + +test clock-iso8601-2.0.1 {parse_date, format: 1970-W01-5, reformatted with clock format -format {%D}} -body { + clock format [clock::iso8601 parse_date {1970-W01-5}] -format {%D} +} -result {01/02/1970} + +test clock-iso8601-2.1.0 {parse_date, format: 19700102, using -timezone :UTC} -body { + clock::iso8601 parse_date {19700102} -timezone :UTC +} -result {86400} + +test clock-iso8601-2.1.1 {parse_date, format: 1970-W01-5, using -timezone :UTC} -body { + clock::iso8601 parse_date {1970-W01-5} -timezone :UTC +} -result {86400} + +test clock-iso8601-2.2.0 {parse_date, format: 970701 (yymmdd), reformatted with clock format -format {%D}} -body { + clock format [clock::iso8601 parse_date {970701}] -format {%D} +} -result {07/01/1997} + +test clock-iso8601-2.2.1 {parse_date, format: 1997-07, reformatted with clock format -format {%D}} -body { + clock format [clock::iso8601 parse_date {1997-07}] -format {%D} +} -result {07/01/1997} + +test clock-iso8601-2.3.0 {parse_date, format: 970701 (yymmdd), using -timezone :UTC} -body { + clock::iso8601 parse_date {970701} -timezone :UTC +} -result {867715200} + +test clock-iso8601-2.3.1 {parse_date, format: 1997-07, using -timezone :UTC} -body { + clock::iso8601 parse_date {1997-07} -timezone :UTC +} -result {867715200} + +test clock-iso8601-2.4.0 {parse_date, format: 1997, reformatted with clock format -format {%D}} -body { + clock format [clock::iso8601 parse_date {1997}] -format {%D} +} -result {01/01/1997} + +test clock-iso8601-2.4.1 {parse_date, format: 1997, reformatted with clock format -format {%D}} -body { + clock format [clock::iso8601 parse_date {1997}] -format {%D} +} -result {01/01/1997} + +test clock-iso8601-2.5.0 {parse_date, format: 1997, using -timezone :UTC} -body { + clock::iso8601 parse_date {1997} -timezone :UTC +} -result {852076800} + +test clock-iso8601-2.5.1 {parse_date, format: 1997-, using -timezone :UTC} -body { + clock::iso8601 parse_date {1997} -timezone :UTC +} -result {852076800} + +# ------------------------------------------------------------------------- + +foreach {n iso week} { + 00 01/01/2005 2004-W53-6 + 01 01/02/2005 2004-W53-7 + 02 12/31/2005 2005-W52-6 + 03 01/01/2007 2007-W01-1 + 04 12/30/2007 2007-W52-7 + 05 12/31/2007 2008-W01-1 + 06 01/01/2008 2008-W01-2 + 07 12/28/2008 2008-W52-7 + 08 12/29/2008 2009-W01-1 + 09 12/30/2008 2009-W01-2 + 10 12/31/2008 2009-W01-3 + 11 01/01/2009 2009-W01-4 + 12 12/31/2009 2009-W53-4 + 13 01/01/2010 2009-W53-5 + 14 01/02/2010 2009-W53-6 + 15 01/03/2010 2009-W53-7 +} { + test clock-iso8601-2.6.$n {parse_date, format: YYYY-Www-D into %D} -body { + clock format [clock::iso8601 parse_date $week] -format {%D} + } -result $iso + + test clock-iso8601-2.7.$n {parse_date, format: YYYYWwwD into %D} -body { + clock format [clock::iso8601 parse_date [string map {- {}} $week]] -format {%D} + } -result $iso +} + +foreach {n iso week} { + 00 01/01/2007 2007-W01 + 01 12/31/2007 2008-W01 + 02 12/29/2008 2009-W01 +} { + test clock-iso8601-2.8.$n {parse_date, format: YYYY-Www into %D} -body { + clock format [clock::iso8601 parse_date $week] -format {%D} + } -result $iso + + test clock-iso8601-2.9.$n {parse_date, format: YYYYWww into %D} -body { + clock format [clock::iso8601 parse_date [string map {- {}} $week]] -format {%D} + } -result $iso +} + +# ------------------------------------------------------------------------- + +test clock-iso8601-5.0.0 {parse_time wrong\#args} -constraints {tcl8.5plus tcl8.5minus} -body { + clock::iso8601 parse_time +} -returnCodes error -result {wrong # args: should be "clock::iso8601 parse_time string ..."} + +test clock-iso8601-5.0.1 {parse_time wrong\#args} -constraints {tcl8.6plus} -body { + clock::iso8601 parse_time +} -returnCodes error -result {wrong # args: should be "clock::iso8601 parse_time string ?arg ...?"} + +test clock-iso8601-5.1 {parse_time, bad option} -body { + clock::iso8601 parse_time A -foo x +} -returnCodes error -result {not an iso8601 time string} + +# ------------------------------------------------------------------------- + +test clock-iso8601-6.0.0 {parse_time, full date time} -body { + clock::iso8601 parse_time 2004-W33-2T18:52:24Z +} -result {1092163944} + +test clock-iso8601-6.0.1 {parse_time, full time} -body { + clock format [clock::iso8601 parse_time 18:52:24Z] -format {%X %z} -timezone :UTC +} -result {18:52:24 +0000} + +test clock-iso8601-6.1.0 {parse_time, full date time to minute and offset as +/-hh:mm} -body { + clock::iso8601 parse_time 1997-07-16T19:20+01:00 +} -result {869077200} + +test clock-iso8601-6.1.1 {parse_time, full date time to minute and offset as +/-hhmm} -body { + clock::iso8601 parse_time 1997-07-16T19:20+0100 +} -result {869077200} + +test clock-iso8601-6.2.0 {parse_time, full date time to hour and offset as +/-hh:mm} -body { + clock::iso8601 parse_time 1997-07-16T19+01:00 +} -result {869076000} + +test clock-iso8601-6.2.1 {parse_time, full date time to hour and offset as +/-hhmm} -body { + clock::iso8601 parse_time 1997-07-16T19+0100 +} -result {869076000} + +test clock-iso8601-6.3.0 {parse_time, full date time to second and offset as +/-hh:mm} -body { + clock::iso8601 parse_time 1997-07-16T19:20:30+01:00 +} -result {869077230} + +test clock-iso8601-6.3.1 {parse_time, full date time to second and offset as +/-hhmm} -body { + clock::iso8601 parse_time 1997-07-16T19:20:30+0100 +} -result {869077230} + +test clock-iso8601-6.4.0 {parse_time, full date time to minute and offset as +/-hh:mm} -body { + clock::iso8601 parse_time 1997-07-16T19:20:30.45+01:00 +} -returnCodes error -result {input string does not match supplied format} + +test clock-iso8601-6.4.1 {parse_time, full date time to minute and offset as +/-hhmm} -body { + clock::iso8601 parse_time 1997-07-16T19:20:30.45+0100 +} -returnCodes error -result {input string does not match supplied format} + +# ------------------------------------------------------------------------- + +test clock-iso8601-7.0 {parse_time, bad input} -body { + clock::iso8601 parse_time A +} -returnCodes error -result {not an iso8601 time string} + +test clock-iso8601-7.1 {parse_time} -body { + # The difference to midnight is constant. + # The day part is not, and there is TZ. + expr {[clock::iso8601 parse_time 08:15:30] - + [clock::iso8601 parse_time 00:00:00]} +} -result 29730 + +# ------------------------------------------------------------------------- + +testsuiteCleanup +return + +# Local Variables: +# mode: tcl +# indent-tabs-mode: nil +# End: ADDED modules/clock/pkgIndex.tcl Index: modules/clock/pkgIndex.tcl ================================================================== --- /dev/null +++ modules/clock/pkgIndex.tcl @@ -0,0 +1,3 @@ +if {![package vsatisfies [package provide Tcl] 8.5]} {return} +package ifneeded clock::rfc2822 0.1 [list source [file join $dir rfc2822.tcl]] +package ifneeded clock::iso8601 0.1 [list source [file join $dir iso8601.tcl]] ADDED modules/clock/rfc2822.man Index: modules/clock/rfc2822.man ================================================================== --- /dev/null +++ modules/clock/rfc2822.man @@ -0,0 +1,36 @@ +[comment {-*- tcl -*- doctools manpage}] +[manpage_begin clock_rfc2822 n 0.1] +[moddesc {Date/Time Utilities}] +[titledesc {Parsing ISO 8601 dates/times}] +[category {Text processing}] +[require Tcl 8.5] +[require clock::rfc2822 [opt 0.1]] +[description] + +This package provides functionality to parse dates in +RFC 2822 format. + +[para] + +[list_begin definitions] + +[call [cmd {::clock::rfc2822 parse_date}] [arg date]] + +This command parses an RFC2822 date string and returns +the given date in seconds since epoch. An error is thrown +if the command is unable to parse the date. + +[list_end] + +[section {BUGS, IDEAS, FEEDBACK}] + +This document, and the package it describes, will undoubtedly contain +bugs and other problems. + +Please report such in the category [emph clock::rfc2822] of the +[uri {http://sourceforge.net/tracker/?group_id=12883} {Tcllib SF Trackers}]. + +Please also report any ideas for enhancements you may have for either +package and/or documentation. + +[manpage_end] ADDED modules/clock/rfc2822.pcx Index: modules/clock/rfc2822.pcx ================================================================== --- /dev/null +++ modules/clock/rfc2822.pcx @@ -0,0 +1,27 @@ +# -*- tcl -*- rfc2822.pcx +# Syntax of the commands provided by package rfc2822. + +# For use by TclDevKit's static syntax checker. +# See http://www.activestate.com/solutions/tcl/ +# See http://aspn.activestate.com/ASPN/docs/Tcl_Dev_Kit/4.0/Checker.html#pcx_api +# for the documentation describing the format of the code contained in this file +# + +package require pcx +pcx::register clock::rfc2822 +pcx::tcldep 0.1 needs tcl 8.5 + +namespace eval ::clock::rfc2822 {} + +#pcx::message FOO {... text ...} type +#pcx::scan + +# Switches are per clock scan (Tcl 8.5), restricted subset. +pcx::check 0.1 std ::clock::rfc2822::parse_date \ + {checkSimpleArgs 1 1 { + checkWord + }} + +# Initialization via pcx::init. +# Use a ::rfc2822::init procedure for non-standard initialization. +pcx::complete ADDED modules/clock/rfc2822.tcl Index: modules/clock/rfc2822.tcl ================================================================== --- /dev/null +++ modules/clock/rfc2822.tcl @@ -0,0 +1,214 @@ +## -*- tcl -*- +# # ## ### ##### ######## ############# ##################### +## Copyright (c) 2004 Kevin Kenny +## Origin http://wiki.tcl.tk/24074 + +# # ## ### ##### ######## ############# ##################### +## Requisites + +package require Tcl 8.5 +package provide clock::rfc2822 0.1 +namespace eval ::clock::rfc2822 {} + +# # ## ### ##### ######## ############# ##################### +## API + +# ::clock::rfc2822::parse_date -- +# +# Parses a date expressed in RFC2822 format +# +# Parameters: +# date - The date to parse +# +# Results: +# Returns the date expressed in seconds from the Epoch, or throws +# an error if the date could not be parsed. + +proc ::clock::rfc2822::parse_date { date } { + variable datepats + + # Strip comments and excess whitespace from the date field + + regsub -all -expanded { + \( # open parenthesis + (:? + [^()[.\.]] # character other than ()\ + |\\. # or backslash escape + )* # any number of times + \) # close paren + } $date {} date + set date [string trim $date] + + # Match the patterns in order of preference, returning the first success + + foreach {regexp pat} $datepats { + if { [regexp -nocase $regexp $date] } { + return [clock scan $date -format $pat] + } + } + + return -code error -errorcode {CLOCK RFC2822 BADDATE} \ + "expected an RFC2822 date, got \"$date\"" +} + + +# # ## ### ##### ######## ############# ##################### +## Internals, transient, removed after initialization. + +# AddDatePat -- +# +# Internal procedure that adds a date pattern to the pattern list +# +# Parameters: +# wpat - Regexp pattern that matches the weekday +# wgrp - Format group that matches the weekday +# ypat - Regexp pattern that matches the year +# ygrp - Format group that matches the year +# mdpat - Regexp pattern that matches month and day +# mdgrp - Format group that matches month and day +# spat - Regexp pattern that matches the seconds of the minute +# sgrp - Format group that matches the seconds of the minute +# zpat - Regexp pattern that matches the time zone +# zgrp - Format group that matches the time zone +# +# Results: +# None +# +# Side effects: +# Adds a complete regexp and a complete [clock scan] pattern to +# 'datepats' + +proc ::clock::rfc2822::AddDatePat { wpat wgrp ypat ygrp mdpat mdgrp + spat sgrp zpat zgrp } { + variable datepats + + set regexp {^[[:space:]]*} + set pat {} + append regexp $wpat $mdpat {[[:space:]]+} $ypat + append pat $wgrp $mdgrp $ygrp + append regexp {[[:space:]]+\d\d?:\d\d} $spat + append pat { %H:%M} $sgrp + append regexp $zpat + append pat $zgrp + append regexp {[[:space:]]*$} + lappend datepats $regexp $pat + return +} + +# InitDatePats -- +# +# Internal procedure that initializes the set of date patterns +# allowed in an RFC2822 date +# +# Parameters: +# permissible - 1 if erroneous (but common) time zones are to be +# allowed, 0 if they are to be rejected +# +# Results: +# None. +# +# Side effects: + +proc ::clock::rfc2822::InitDatePats { permissible } { + # Produce formats for the observed variants of ISO2822 dates. + # Permissible variants come first in the list; impermissible ones + # come later. + + # The month and day may be "%b %d" or "%d %b" + + foreach mdpat {{[[:alpha:]]+[[:space:]]+\d\d?} + {\d\d?[[:space:]]+[[:alpha:]]+}} \ + mdgrp {{%b %d} {%d %b}} \ + mdperm {0 1} { + # The year may be two digits, or four. Four digit year is + # done first. + + foreach ypat {{\d\d\d\d} {\d\d}} ygrp {%Y %y} { + # The seconds of the minute may be provided, or + # omitted. + + foreach spat {{:\d\d} {}} sgrp {:%S {}} { + # The weekday may be provided or omitted. It is + # common but impermissible to omit the comma after + # the weekday name. + + foreach wpat { + {(?:Mon|T(?:ue|hu)|Wed|Fri|S(?:at|un)),[[:space:]]+} + {(?:Mon|T(?:ue|hu)|Wed|Fri|S(?:at|un))[[:space:]]+} + {} + } wgrp { + {%a, } + {%a } + {} + } wperm { + 1 + 0 + 1 + } { + # Time zone is defined as +/- hhmm, or as a + # named time zone. Other common but buggy + # formats are GMT+-hh:mm, a time zone name in + # quotation marks, and complete omission of + # the time zone. + + foreach zpat { + {[[:space:]]+(?:[-+]\d\d\d\d|[[:alpha:]]+)} + {[[:space:]]+GMT[-+]\d\d:?\d\d} + {[[:space:]]+"[[:alpha:]]+"} + {} + } zgrp { + { %Z} + { GMT%Z} + { "%Z"} + {} + } zperm { + 1 + 0 + 0 + 0 + } { + if { ($zperm && $wperm && $mdperm) + == $permissible } { + AddDatePat $wpat $wgrp $ypat $ygrp \ + $mdpat $mdgrp \ + $spat $sgrp $zpat $zgrp + } + } + } + } + } + } + return +} + +# # ## ### ##### ######## ############# ##################### +## State + +namespace eval ::clock::rfc2822 { + namespace export parse_date + namespace ensemble create + + variable datepats {} +} + +# # ## ### ##### ######## ############# ##################### +# Initialize the date patterns + +namespace eval ::clock::rfc2822 { + InitDatePats 1 + InitDatePats 0 + rename AddDatePat {} + rename InitDatePats {} + #puts [join $datepats \n] +} + +# # ## ### ##### ######## ############# ##################### + +return +# Usage example, disabled + +if {![info exists ::argv0] || [info script] ne $::argv0} return +puts [clock format \ + [::clock::rfc2822::parse_date {Mon(day), 23 Aug(ust) 2004 01:23:45 UT}]] +puts [clock format \ + [::clock::rfc2822::parse_date "Tue, Jul 21 2009 19:37:47 GMT-0400"]] ADDED modules/clock/rfc2822.test Index: modules/clock/rfc2822.test ================================================================== --- /dev/null +++ modules/clock/rfc2822.test @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------- +# rfc2822.test -*- tcl -*- +# (C) 2013 Andreas Kupries. BSD licensed. +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.5 +testsNeedTcltest 2.0 + +testing { + useLocal rfc2822.tcl clock::rfc2822 +} + +# ------------------------------------------------------------------------- + +test clock-rfc2822-1.0 {parse_date wrong\#args} -body { + clock::rfc2822 parse_date +} -returnCodes error -result {wrong # args: should be "clock::rfc2822 parse_date date"} + +test clock-rfc2822-1.1 {parse_date wrong\#args} -body { + clock::rfc2822 parse_date D X +} -returnCodes error -result {wrong # args: should be "clock::rfc2822 parse_date date"} + +# ------------------------------------------------------------------------- + +test clock-rfc2822-2.0 {parse_date, bad input} -body { + clock::rfc2822 parse_date D +} -returnCodes error -result {expected an RFC2822 date, got "D"} + +test clock-rfc2822-2.1 {parse_date} -body { + clock::rfc2822 parse_date {Fri, 09 Sep 2005 13:51:39 -0700} +} -result 1126299099 + +# ------------------------------------------------------------------------- +testsuiteCleanup +return + +# Local Variables: +# mode: tcl +# indent-tabs-mode: nil +# End: Index: modules/cmdline/ChangeLog ================================================================== --- modules/cmdline/ChangeLog +++ modules/cmdline/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-08 Andreas Kupries * typedCmdline.test: Fixed test results of typed-cmdline-6.14 for Tcl 8.6 and higher. Rewritten to use constraints properly instead of via conditional execution. Index: modules/comm/ChangeLog ================================================================== --- modules/comm/ChangeLog +++ modules/comm/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/control/ChangeLog ================================================================== --- modules/control/ChangeLog +++ modules/control/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/coroutine/ChangeLog ================================================================== --- modules/coroutine/ChangeLog +++ modules/coroutine/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/counter/ChangeLog ================================================================== --- modules/counter/ChangeLog +++ modules/counter/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/crc/ChangeLog ================================================================== --- modules/crc/ChangeLog +++ modules/crc/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-01-23 Pat Thoyts * crc16: bug #3477684: handle data with leading hyphen. 2011-12-13 Andreas Kupries Index: modules/csv/ChangeLog ================================================================== --- modules/csv/ChangeLog +++ modules/csv/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-08 Andreas Kupries * csv.tcl: [Bug 3575707]: Actually a feature change, the commands * csv.test: join, joinlist, and joinmatrix are extended with a flag * csv.pcx: argument to force use of the delimiter/quoting character, Index: modules/des/ChangeLog ================================================================== --- modules/des/ChangeLog +++ modules/des/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/dns/ChangeLog ================================================================== --- modules/dns/ChangeLog +++ modules/dns/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/docstrip/ChangeLog ================================================================== --- modules/docstrip/ChangeLog +++ modules/docstrip/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/doctools/ChangeLog ================================================================== --- modules/doctools/ChangeLog +++ modules/doctools/ChangeLog @@ -1,5 +1,25 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + +2013-01-29 Andreas Kupries + + * doctools.man: Bumped version to 1.4.14 for the + * doctools.tcl: last change, see below. + * pkgIndex.tcl: + +2013-01-21 Andreas Kupries + + * checker.tcl: Added check to manpage_begin, reject spaces in title. + * mpformats/c.msg: Message catalogs extended with new warning + * mpformats/de.msg: 'mptitle' for spaces in the manpage title. + * mpformats/en.msg: The french catalog contains the english + * mpformats/fr.msg: text, and needs a translation. + 2012-02-27 Andreas Kupries * tests/text/04: Update the expected the result to match the new actual result. See the 2011-12-13 last-second bugfix in textutil::adjust::undent for the cause. Index: modules/doctools/checker.tcl ================================================================== --- modules/doctools/checker.tcl +++ modules/doctools/checker.tcl @@ -269,10 +269,11 @@ # ------------------------------------------------------------- # Formatting commands proc manpage_begin {title section version} { Enter manpage_begin if {[IsNot manpage_begin]} {Error mpbegin} + if {[string match {* *} $title]} {Error mptitle} Go header fmt_manpage_begin $title $section $version } proc moddesc {desc} { Enter moddesc Index: modules/doctools/doctools.man ================================================================== --- modules/doctools/doctools.man +++ modules/doctools/doctools.man @@ -1,13 +1,13 @@ [comment {-*- tcl -*- doctools manpage}] -[manpage_begin doctools n 1.4.13] -[copyright {2003-2011 Andreas Kupries }] +[manpage_begin doctools n 1.4.14] +[copyright {2003-2013 Andreas Kupries }] [moddesc {Documentation tools}] [titledesc {doctools - Processing documents}] [category {Documentation tools}] [require Tcl 8.2] -[require doctools [opt 1.4.13]] +[require doctools [opt 1.4.14]] [description] This package provides a class for the creation of objects able to process and convert text written in the [term doctools] markup language into any output format X for which a Index: modules/doctools/doctools.tcl ================================================================== --- modules/doctools/doctools.tcl +++ modules/doctools/doctools.tcl @@ -1,10 +1,10 @@ # doctools.tcl -- # # Implementation of doctools objects for Tcl. # -# Copyright (c) 2003-2011 Andreas Kupries +# Copyright (c) 2003-2013 Andreas Kupries # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: doctools.tcl,v 1.45 2011/02/23 22:11:59 andreas_kupries Exp $ @@ -1335,6 +1335,6 @@ #catch {search [file join $here lib doctools mpformats]} #catch {search [file join [file dirname $here] lib doctools mpformats]} catch {search [file join $here mpformats]} } -package provide doctools 1.4.13 +package provide doctools 1.4.14 Index: modules/doctools/mpformats/_common.tcl ================================================================== --- modules/doctools/mpformats/_common.tcl +++ modules/doctools/mpformats/_common.tcl @@ -73,11 +73,23 @@ set cc $state(copyright) if {$cc == {}} {set cc [dt_copyright]} if {$cc == {}} {return {}} - return "Copyright [c_copyrightsymbol] [join $cc "\nCopyright [c_copyrightsymbol] "]" + set stmts {} + set re {^Copyright +(?:\(c\)|\\\(co|©)? *(.+)$} + foreach stmt $cc { + if { [string equal -nocase "public domain" [string trim $stmt]] } { + lappend stmts "Public domain" + } elseif { [regexp -nocase -- $re $stmt -> stmt] } { + lappend stmts $stmt + } else { + lappend stmts "Copyright [c_copyrightsymbol] $stmt" + } + } + + return [join $stmts \n] } proc c_provenance {} { return "Generated from file '[dt_file]' by tcllib/doctools with format '[dt_format]'" } Index: modules/doctools/mpformats/_nroff.tcl ================================================================== --- modules/doctools/mpformats/_nroff.tcl +++ modules/doctools/mpformats/_nroff.tcl @@ -6,51 +6,52 @@ ################################################################ # nroff specific commands # -# All dot-commands (f.e. .PP) are returned with a leading \n, -# enforcing that they are on a new line. Any empty line created -# because of this is filtered out in the post-processing step. +# All dot-commands (f.e. .PP) are returned with a leading \n\1, +# enforcing that they are on a new line and will be protected as markup. +# Any empty line created because of this is filtered out in the +# post-processing step. -proc nr_lp {} {return \n.LP} +proc nr_lp {} {return \n\1.LP} proc nr_ta {{text {}}} {return ".ta$text"} proc nr_bld {} {return \1\\fB} -proc nr_bldt {t} {return "\n.B $t\n"} +proc nr_bldt {t} {return "\n\1.B $t\n"} proc nr_ul {} {return \1\\fI} proc nr_rst {} {return \1\\fR} -proc nr_p {} {return \n.PP\n} +proc nr_p {} {return \n\1.PP\n} proc nr_comment {text} {return "\1'\1\\\" [join [split $text \n] "\n\1'\1\\\" "]"} ; # " proc nr_enum {num} {nr_item " \[$num\]"} -proc nr_item {{text {}}} {return "\n.IP$text"} -proc nr_vspace {} {return \n.sp\n} -proc nr_blt {text} {return "\n.TP\n$text"} -proc nr_bltn {n text} {return "\n.TP $n\n$text"} -proc nr_in {} {return \n.RS} -proc nr_out {} {return \n.RE} -proc nr_nofill {} {return \n.nf} -proc nr_fill {} {return \n.fi} -proc nr_title {text} {return "\n.TH $text"} -proc nr_include {file} {return "\n.so $file"} -proc nr_bolds {} {return \n.BS} -proc nr_bolde {} {return \n.BE} +proc nr_item {{text {}}} {return "\n\1.IP$text"} +proc nr_vspace {} {return \n\1.sp\n} +proc nr_blt {text} {return "\n\1.TP\n$text"} +proc nr_bltn {n text} {return "\n\1.TP $n\n$text"} +proc nr_in {} {return \n\1.RS} +proc nr_out {} {return \n\1.RE} +proc nr_nofill {} {return \n\1.nf} +proc nr_fill {} {return \n\1.fi} +proc nr_title {text} {return "\n\1.TH $text"} +proc nr_include {file} {return "\n\1.so $file"} +proc nr_bolds {} {return \n\1.BS} +proc nr_bolde {} {return \n\1.BE} proc nr_read {fn} {return [nroffMarkup [dt_read $fn]]} -proc nr_cs {} {return \n.CS\n} -proc nr_ce {} {return \n.CE\n} +proc nr_cs {} {return \n\1.CS\n} +proc nr_ce {} {return \n\1.CE\n} proc nr_section {name} { if {![regexp {[ ]} $name]} { - return "\n.SH [string toupper $name]" + return "\n\1.SH [string toupper $name]" } - return "\n.SH \"[string toupper $name]\"" + return "\n\1.SH \"[string toupper $name]\"" } proc nr_subsection {name} { if {![regexp {[ ]} $name]} { - return "\n.SS [string toupper $name]" + return "\n\1.SS [string toupper $name]" } - return "\n.SS \"[string toupper $name]\"" + return "\n\1.SS \"[string toupper $name]\"" } ################################################################ @@ -65,15 +66,17 @@ global markupMap set markupMap [list \ "\\" "\1\\" \ "'" "\1'" \ + "." "\1." \ "\\\\" "\\"] global finalMap set finalMap [list \ "\1\\" "\\" \ "\1'" "'" \ + "\1." "." \ "\\" "\\\\"] global textMap set textMap [list "\\" "\\\\"] @@ -126,18 +129,22 @@ # the current line. We lift this line up and attach it # at the end of the last line to remove this # irregularity. Note that the regexp has to look for # the special 0x01 character as well to be sure that # the sequence in question truly is formatting. + # [bug-3601370] Only lift & attach if last line is not + # a directive set last [lindex $lines end] - set lines [lreplace $lines end end] - set line "$last $line" - } elseif {[string match '* $line]} { - # Apostrophes at the beginning of a line have to - # quoted to prevent misinterpretation as comments. - # The apostrophes for true comments are quoted with \1 + if { ! [string match "\1.*" $last] } { + set lines [lreplace $lines end end] + set line "$last $line" + } + } elseif {[string match {['.]*} $line]} { + # Apostrophes or periods at the beginning of a line have to + # quoted to prevent misinterpretation as comments or directives. + # The true comments and directive are quoted with \1 # already and will therefore not detected by the code # here. set line \1\\$line } @@ -158,13 +165,13 @@ # Remove superfluous .IP commands (empty paragraph). The first # identity mapping is there to avoid smashing a man macro # definition. set lines [string map [list \ - \n.IP\n..\n \n.IP\n..\n \ - \n.IP\n. \n.] \ + \n\1.IP\n\1..\n \n\1.IP\n\1..\n \ + \n\1.IP\n\1. \n\1.] \ $lines] # Return the modified result buffer return [string map $finalMap $lines] } Index: modules/doctools/mpformats/c.msg ================================================================== --- modules/doctools/mpformats/c.msg +++ modules/doctools/mpformats/c.msg @@ -4,10 +4,11 @@ mcset c end/open/list "End of manpage reached, \[list_end\] missing" mcset c end/open/example "End of manpage reached, \[example_end\] missing" mcset c end/open/mp "End of manpage reached, \[manpage_end\] missing" mcset c mpbegin "Command must be first of manpage" +mcset c mptitle "Spaces not allowed in manpage title" mcset c hdrcmd "Command not allowed outside of the header section" mcset c bodycmd "Command not allowed outside of the body of the manpage" mcset c body "Plain text not allowed outside of the body of the manpage" mcset c reqcmd "Command not allowed outside of header or requirement section" mcset c invalidlist "Invalid list type \"@\"" Index: modules/doctools/mpformats/de.msg ================================================================== --- modules/doctools/mpformats/de.msg +++ modules/doctools/mpformats/de.msg @@ -4,10 +4,11 @@ mcset de end/open/list "Dokument zu Ende, nicht alle Listen wurden geschlossen" mcset de end/open/example "Dokument zu Ende, das letzte Beispiel wurde nicht abgeschlossen" mcset de end/open/mp "Dokument zu Ende, es fehlt der Abschlussbefehl \[manpage_end\]" mcset de mpbegin "Erwartete diesen Befehl als ersten in der Manpage" +mcset de mptitle "Der Manpage Titel darf keine Leerzeichen enthalten" mcset de hdrcmd "Dieser Befehl ist ausserhalb des Headers nicht erlaubt" mcset de bodycmd "Dieser Befehl darf nicht ausserhalb des Hauptteils der Manpage auftreten" mcset de body "Text darf nicht ausserhalb des Hauptteils der Manpage auftreten" mcset de reqcmd "Dieser Befehl ist ausserhalb von Header/Requirements nicht erlaubt" mcset de invalidlist "Die Listenart \"@\" ist dem System nicht bekannt" Index: modules/doctools/mpformats/en.msg ================================================================== --- modules/doctools/mpformats/en.msg +++ modules/doctools/mpformats/en.msg @@ -4,10 +4,11 @@ mcset en end/open/list "End of manpage reached, \[list_end\] missing" mcset en end/open/example "End of manpage reached, \[example_end\] missing" mcset en end/open/mp "End of manpage reached, \[manpage_end\] missing" mcset en mpbegin "Command must be first of manpage" +mcset en mptitle "Spaces not allowed in manpage title" mcset en hdrcmd "Command not allowed outside of the header section" mcset en bodycmd "Command not allowed outside of the body of the manpage" mcset en body "Plain text not allowed outside of the body of the manpage" mcset en reqcmd "Command not allowed outside of header or requirement section" mcset en invalidlist "Invalid list type \"@\"" Index: modules/doctools/mpformats/fmt.nroff ================================================================== --- modules/doctools/mpformats/fmt.nroff +++ modules/doctools/mpformats/fmt.nroff @@ -82,11 +82,15 @@ append nroff [fmt_section {SEE ALSO}] \n append nroff [join [lsort $sa] ", "] \n } if {[llength $kw] > 0} { append nroff [fmt_section KEYWORDS] \n - append nroff [join [lsort $kw] ", "] \n + set kwline [join [lsort $kw] ", "] + if { [string match ".*" $kwline] } { + set kwline "\\$kwline" + } + append nroff $kwline \n } if {$ca ne ""} { append nroff [fmt_section CATEGORY] \n append nroff $ca \n } Index: modules/doctools/mpformats/fr.msg ================================================================== --- modules/doctools/mpformats/fr.msg +++ modules/doctools/mpformats/fr.msg @@ -4,10 +4,11 @@ mcset fr end/open/list "Fin de la page de manuel atteinte, \[list_end\] manquant" mcset fr end/open/example "Fin de la page de manuel atteinte, \[example_end\] manquant" mcset fr end/open/mp "Fin de la page de manuel atteinte, \[manpage_end\] manquant" mcset fr mpbegin "Cette commande doit \xEAtre la premi\xE8re de la page de manuel" +mcset fr mptitle "TODO: TRANSLATE: Spaces not allowed in manpage title" mcset fr hdrcmd "Commande interdite \xE0 l'ext\xE9rieur de l'en-t\xEAte" mcset fr bodycmd "Commande interdite \xE0 l'ext\xE9rieur du corps de la page de manuel" mcset fr body "Le texte est interdit \xE0 l'ext\xE9rieur du corps de la page de manuel" mcset fr reqcmd "Commande interdite \xE0 l'ext\xE9rieur de l'en-t\xEAte ou de la section de condition" mcset fr invalidlist "Type de liste non valide \"@\"" Index: modules/doctools/pkgIndex.tcl ================================================================== --- modules/doctools/pkgIndex.tcl +++ modules/doctools/pkgIndex.tcl @@ -1,6 +1,6 @@ if {![package vsatisfies [package provide Tcl] 8.2]} {return} -package ifneeded doctools 1.4.13 [list source [file join $dir doctools.tcl]] +package ifneeded doctools 1.4.14 [list source [file join $dir doctools.tcl]] package ifneeded doctools::toc 1.1.3 [list source [file join $dir doctoc.tcl]] package ifneeded doctools::idx 1.0.4 [list source [file join $dir docidx.tcl]] package ifneeded doctools::cvs 1 [list source [file join $dir cvs.tcl]] package ifneeded doctools::changelog 1 [list source [file join $dir changelog.tcl]] Index: modules/doctools2base/ChangeLog ================================================================== --- modules/doctools2base/ChangeLog +++ modules/doctools2base/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/doctools2idx/ChangeLog ================================================================== --- modules/doctools2idx/ChangeLog +++ modules/doctools2idx/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/doctools2toc/ChangeLog ================================================================== --- modules/doctools2toc/ChangeLog +++ modules/doctools2toc/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/exif/ChangeLog ================================================================== --- modules/exif/ChangeLog +++ modules/exif/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/fileutil/ChangeLog ================================================================== --- modules/fileutil/ChangeLog +++ modules/fileutil/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-28 Andreas Kupries * decode.tcl: New. Simple package to support writing decoders * pkgIndex.tcl: for binary files. @@ -6,11 +12,11 @@ 2013-01-08 Andreas Kupries * fileutil.man: [Bug 3147481], [Bug 3141568]. Fixed issues with * fileutil.tcl: changes to [glob]'s behaviour in 8.5+, reported * find.setup: by guardus@users.sourceforge.net. Plus [Bug 3599839] - * find.test: reminding us of these, and Win 7. Bunped version to + * find.test: reminding us of these, and Win 7. Bumped version to * pkgIndex.tcl: 1.14.5. Extended testsuite, can be repro'd under Unix also. 2012-08-29 Andreas Kupries Index: modules/ftp/ChangeLog ================================================================== --- modules/ftp/ChangeLog +++ modules/ftp/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ftpd/ChangeLog ================================================================== --- modules/ftpd/ChangeLog +++ modules/ftpd/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/fumagic/ChangeLog ================================================================== --- modules/fumagic/ChangeLog +++ modules/fumagic/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/generator/ChangeLog ================================================================== --- modules/generator/ChangeLog +++ modules/generator/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-08-07 Andreas Kupries * New Module. Provided by Neil Madden. Index: modules/gpx/ChangeLog ================================================================== --- modules/gpx/ChangeLog +++ modules/gpx/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/grammar_aycock/ChangeLog ================================================================== --- modules/grammar_aycock/ChangeLog +++ modules/grammar_aycock/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/grammar_fa/ChangeLog ================================================================== --- modules/grammar_fa/ChangeLog +++ modules/grammar_fa/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/grammar_me/ChangeLog ================================================================== --- modules/grammar_me/ChangeLog +++ modules/grammar_me/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-08 Andreas Kupries * me_tcl.test: (mevmtcl-ict_match_tokclass-1.2*): Fixed test results for Tcl 8.6 and higher. Index: modules/grammar_peg/ChangeLog ================================================================== --- modules/grammar_peg/ChangeLog +++ modules/grammar_peg/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-02-22 Andreas Kupries * peg.tcl: [Bug 3490008]: Fixed variable name typo reported by * pkgIndex.tcl: glastonbridge2. Bumped version to 0.2. Index: modules/hook/ChangeLog ================================================================== --- modules/hook/ChangeLog +++ modules/hook/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/html/ChangeLog ================================================================== --- modules/html/ChangeLog +++ modules/html/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/htmlparse/ChangeLog ================================================================== --- modules/htmlparse/ChangeLog +++ modules/htmlparse/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-08-02 Andreas Kupries * htmlparse.tcl: [Bug 3553350]: Fixed bad handling of characters special to regsub in the callback. Bumped version to 1.2.1. * htmlparse.test: New test case for the above. Index: modules/http/ChangeLog ================================================================== --- modules/http/ChangeLog +++ modules/http/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-05-28 Andreas Kupries * autoproxy.tcl: Fixed bug where https proxying was attempted * autoproxy.man: in the face of a domain exception. The TLS * pkgIndex.tcl: setup code has to 'filter' properly. Further Index: modules/ident/ChangeLog ================================================================== --- modules/ident/ChangeLog +++ modules/ident/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/imap4/ChangeLog ================================================================== --- modules/imap4/ChangeLog +++ modules/imap4/ChangeLog @@ -1,5 +1,22 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + +2013-01-25 Andreas Kupries + + * imap4.man: Updated documentation with text contributed by Nicola + Hall, explaining the new commands. + +2013-01-22 Andreas Kupries + + * imap4.tcl: Applied contribution by Nicola Hall. + * imap4.man: Additional commands. Bumped version + * pkgIndex.tcl: to 0.4. + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/imap4/imap4.man ================================================================== --- modules/imap4/imap4.man +++ modules/imap4/imap4.man @@ -1,16 +1,16 @@ -[manpage_begin imap4 n 0.3] +[manpage_begin imap4 n 0.4] [moddesc {imap client}] [titledesc {imap client-side tcl implementation of imap protocol}] [require Tcl 8.5] -[require imap4 [opt 0.3]] +[require imap4 [opt 0.4]] [description] The [package imap4] library package provides the client side of the -[strong "Internet Message Access Protocol"] (IMAP) using standard +[emph "Internet Message Access Protocol"] (IMAP) using standard sockets or secure connection via TLS/SSL. The package is fully implemented in Tcl. [para] This document describes the procedures and explains their usage. @@ -55,18 +55,18 @@ [example {{{Arc08 noselect} {Arc08/Private {noinferiors unmarked}} {INBOX noinferiors}}}] [call [cmd ::imap4::select] [arg chan] [opt [arg mailbox]]] [para]Select a mailbox, 0 is returned on success. [para][arg chan] - imap channel -[para][arg mailbox] - Path of the mailbox, defaults to [strong INBOX] +[para][arg mailbox] - Path of the mailbox, defaults to [emph INBOX] [para]Prior to examine/select an open mailbox must be closed - see: [cmd ::imap4::close]. [call [cmd ::imap4::examine] [arg chan] [opt [arg mailbox]]] [para]"Examines" a mailbox, read-only equivalent of [cmd ::imap4::select]. [para][arg chan] - imap channel [para][arg mailbox] - mailbox name or path to mailbox, -defaults to [strong INBOX] +defaults to [emph INBOX] [para]Prior to examine/select an open mailbox must be closed - see: [cmd ::imap4::close]. [call [cmd ::imap4::fetch] [arg chan] [arg range] [opt [arg -inline]] [opt [arg "attr ..."]]] [para]Fetch attributes from messages. [para]The attributes are fetched and stored in the internal state @@ -99,14 +99,14 @@ false if it is not. [para][arg chan] - imap channel [para][arg info] - folderlist options to retrieve [para] Currently supported options: -[strong delim] - hierarchy delimiter only, -[strong match] - ref and mbox search patterns (see [cmd ::imap4::folders]), -[strong names] - list of folder names only, -[strong flags] - list of folder names with flags in format +[emph delim] - hierarchy delimiter only, +[emph match] - ref and mbox search patterns (see [cmd ::imap4::folders]), +[emph names] - list of folder names only, +[emph flags] - list of folder names with flags in format [emph "{ {name {flags}} ... }"] (see also compact format in function [cmd ::imap4::folders]). [example { {{Arc08 {{\NoSelect}}} {Arc08/Private {{\NoInferiors} {\UnMarked}}} {INBOX {\NoInferiors}}} }] @@ -136,17 +136,17 @@ false if it is not. [para][arg chan] - imap channel [para][arg opt] - mailbox option to retrieve [para] Currently supported options: -[strong EXISTS] (noof msgs), -[strong RECENT] (noof 'recent' flagged msgs), -[strong FLAGS] +[emph EXISTS] (noof msgs), +[emph RECENT] (noof 'recent' flagged msgs), +[emph FLAGS] [para]In conjunction with OK: -[strong PERMFLAGS], [strong UIDNEXT], [strong UIDVAL], [strong UNSEEN] +[emph PERMFLAGS], [emph UIDNEXT], [emph UIDVAL], [emph UNSEEN] [para]Div. states: -[strong CURRENT], [strong FOUND], [strong PERM]. +[emph CURRENT], [emph FOUND], [emph PERM]. [example { ::imap4::select $chan INBOX puts "[::imap4::mboxinfo $chan exists] mails in INBOX"}] @@ -234,10 +234,59 @@ The ::imap4::debug variable is automatically set to '1' on enter. [para]It's possible to execute Tcl commands starting the line with a slash. [para][arg chan] - imap channel [para][arg errormsg] - optional error message to display + +[call [cmd ::imap4::store] [arg chan] [arg range] [arg data] [arg flaglist]] + +[para] Alters data associated with a message in the selected +mailbox. + +[para][arg chan] - imap channel +[para][arg range] - message index in format [emph FROM]:[emph TO] +[para][arg flaglist] - Flags the [arg data] operates on. +[para][arg data] - The currently defined [arg data] items that can be +stored are shown below. [emph Note] that all of these data types may +also be suffixed with ".SILENT" to suppress the untagged FETCH +response. + +[list_begin definitions] +[def FLAGS] +Replace the flags for the message (other than \Recent) with the +[arg flaglist]. +[def "+FLAGS"] +Add the flags in [arg flaglist] to the existing flags for the message. +[def "-FLAGS"] +Remove the flags in [arg flaglist] to the existing flags for the +message. +[list_end] + +For example: +[example { + ::imap4::store $chan $start_msgid:$end_msgid +FLAGS "Deleted" +}] + +[call [cmd ::imap4::expunge] [arg chan]] + +[para] Permanently removes all messages that have the \Deleted flag +set from the currently selected mailbox, without the need to close the +connection. + +[para][arg chan] - imap channel + +[call [cmd ::imap4::logout] [arg chan]] + +[para] Informs the server that the client is done with the connection +and closes the network connection. Permanently removes \Deleted +messages. + +[para] A new connection will need to be established to login once +more. + +[para][arg chan] - imap channel + [list_end] [section EXAMPLES] [example_begin] Index: modules/imap4/imap4.tcl ================================================================== --- modules/imap4/imap4.tcl +++ modules/imap4/imap4.tcl @@ -1,10 +1,11 @@ # IMAP4 protocol pure Tcl implementation. # # COPYRIGHT AND PERMISSION NOTICE # # Copyright (C) 2004 Salvatore Sanfilippo . +# Copyright (C) 2013 Nicola Hall # # All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the @@ -46,14 +47,14 @@ # implementation of LIST command # 20100709: Adding suppport for SSL connections, namespace variable # use_ssl must be set to 1 and package TLS must be loaded # 20100716: Bug in parsing special leading FLAGS characters in FETCH # command repaired, documentation cleanup. -# +# 20121221: Added basic scope, expunge and logout function package require Tcl 8.5 -package provide imap4 0.3 +package provide imap4 0.4 namespace eval imap4 { variable debugmode 0 ;# inside debug mode? usually not. variable folderinfo variable mboxinfo @@ -223,11 +224,11 @@ set line [string range $line [expr {$idx+1}] end] # If it's just a command continuation response, return. if {$tag eq {+}} {return +} # Extract the error code, if it's a tagged line - if {$tag ne {*}} { + if {$tag ne "*"} { set idx [string first { } $line] if {$idx <= 0} { protoerror $chan "IMAP: malformed response '$line'" } set code [string range $line 0 [expr {$idx-1}]] @@ -254,20 +255,20 @@ } set flags [string range $line [expr {$p1+1}] [expr {$p2-1}]] set delim [string range $line [expr {$p2+2}] [expr {$p3-1}]] set fname [string range $line [expr {$p3+1}] end] if {$fname eq ""} { - set folderinfo($chan,delim) [string trim $delim {"}] + set folderinfo($chan,delim) [string trim $delim "\""] } else { set fflag {} foreach f [split $flags] { lappend fflag $f } lappend folderinfo($chan,names) $fname lappend folderinfo($chan,flags) [list $fname $fflag] if {$delim ne "NIL"} { - set folderinfo($chan,delim) [string trim $delim {"}] + set folderinfo($chan,delim) [string trim $delim "\""] } } incr dirty } {FLAGS *(*)*} { @@ -523,11 +524,11 @@ # Write a request. proc request {chan request} { variable debug variable info - set t "[tag $chan] $request" + set t "[tag $chan] [string trim $request]" if {$debug} { puts "C: $t" } set info($chan,lastrequest) $t puts -nonewline $chan "$t\r\n" @@ -940,13 +941,13 @@ set rv [simplecmd $chan LIST {SELECT AUTH} \"$ref\" \"$mbox\"] if {$inline} { set rv {} foreach f [folderinfo $chan flags] { set lflags {} - foreach {fl} [lindex $f 1] { + foreach fl [lindex $f 1] { if {[string is alnum [string index $fl 0]]} { - lappend lflags [string tolower $fl]] + lappend lflags [string tolower $fl] } else { lappend lflags [string tolower [string range $fl 1 end]] } } lappend rv [list [lindex $f 0] $lflags] @@ -1216,10 +1217,67 @@ # proc ::imap4::idle notify-command # proc ::imap4::auth plain ... # proc ::imap4::securestauth user pass # proc ::imap4::store # proc ::imap4::logout (need to clean both msg and mailbox info arrays) + + # Amend the flags of a message to be updated once CLOSE/EXPUNGE is initiated + proc store {chan range key values} { + set valid_keys { + FLAGS + FLAGS.SILENT + +FLAGS + +FLAGS.SILENT + -FLAGS + -FLAGS.SILENT + } + if {$key ni $valid_keys} { + error "Invalid data item: $key. Must be one of [join $valid_keys ,]" + } + parserange $chan $range start end + set newflags {} + foreach val $values { + if {[regexp {^\\+(.*?)$} $val]} { + lappend newflags $values + } else { + lappend newflags "\\$val" + } + } + request $chan "STORE $start:$end $key ([join $newflags])" + if {[getresponse $chan]} { + return 1 + } + return 0 + } + + # Logout + proc logout {chan} { + if {[simplecmd $chan LOGOUT SELECT {}]} { + # clean out info arrays + variable info + variable folderinfo + variable mboxinfo + variable msginfo + + array unset folderinfo $chan,* + array unset mboxinfo $chan,* + array unset msginfo $chan,* + array unset info $chan,* + + return 1 + } + return 0 + } + + # Expunge : force removal of any messages with the + # flag \Deleted + proc expunge {chan} { + if {[simplecmd $chan EXPUNGE SELECT {}]} { + return 1 + } + return 0 + } } ################################################################################ # Example and test ################################################################################ Index: modules/imap4/pkgIndex.tcl ================================================================== --- modules/imap4/pkgIndex.tcl +++ modules/imap4/pkgIndex.tcl @@ -1,2 +1,2 @@ if {![package vsatisfies [package provide Tcl] 8.5]} {return} -package ifneeded imap4 0.3 [list source [file join $dir imap4.tcl]] +package ifneeded imap4 0.4 [list source [file join $dir imap4.tcl]] Index: modules/inifile/ChangeLog ================================================================== --- modules/inifile/ChangeLog +++ modules/inifile/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-01-05 Andreas Kupries * ini.tcl: [Bug 3469006]: Followup to [Bug 3419727]. Fixed * ini.man: the unscoped 'close' command left in the code. * pkgIndex.tcl: Bumped version to 0.2.5 Index: modules/interp/ChangeLog ================================================================== --- modules/interp/ChangeLog +++ modules/interp/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/irc/ChangeLog ================================================================== --- modules/irc/ChangeLog +++ modules/irc/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-09 Andreas Kupries * irc.man: Documented the callback for EOF as required. 2011-12-13 Andreas Kupries Index: modules/javascript/ChangeLog ================================================================== --- modules/javascript/ChangeLog +++ modules/javascript/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/jpeg/ChangeLog ================================================================== --- modules/jpeg/ChangeLog +++ modules/jpeg/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/json/ChangeLog ================================================================== --- modules/json/ChangeLog +++ modules/json/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-02-01 Andreas Kupries * json_write.tcl: While we can quote / (solidus) via \/ as per the * json_write.man: JSON syntax there is no reason why we should. * json_write.test: Bumped version to 1.0.2. Index: modules/lambda/ChangeLog ================================================================== --- modules/lambda/ChangeLog +++ modules/lambda/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ldap/ChangeLog ================================================================== --- modules/ldap/ChangeLog +++ modules/ldap/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ldap/ldap.man ================================================================== --- modules/ldap/ldap.man +++ modules/ldap/ldap.man @@ -219,11 +219,11 @@ [para] [call [cmd ::ldap::searchEnd] [arg handle]] This command terminates a LDAP search initiated -by [call ::ldap::searchInit]. It also cleans up +by [cmd ::ldap::searchInit]. It also cleans up the internal state so a new search can be initiated. If the client has not yet received all results, the client sends an ABANDON message to inform the server that no further results for the previous search should to be sent. Index: modules/log/ChangeLog ================================================================== --- modules/log/ChangeLog +++ modules/log/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-07-09 Andreas Kupries * logger.tcl: [Bug 3541628]: Fixed creative writing issue in * logger.man: logger::init. Bumped package to version 0.9.3 * pkgIndex.tcl: Whitespace cleanup in places. Index: modules/map/ChangeLog ================================================================== --- modules/map/ChangeLog +++ modules/map/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-05-11 Andreas Kupries * map_slippy_fetcher.tcl: Added timeouts to the http queries issued * map_geocode_nominatim.tcl: by the fetcher and geo-name resolver. Fetcher bumped to version 0.3. Index: modules/mapproj/ChangeLog ================================================================== --- modules/mapproj/ChangeLog +++ modules/mapproj/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/math/ChangeLog ================================================================== --- modules/math/ChangeLog +++ modules/math/ChangeLog @@ -1,8 +1,15 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-06-25 Arjen Markus - * statistics.tcl: Add procedures for Wilcoxon test and Spearman rank correlation - to the export list + + * statistics.tcl: Add procedures for Wilcoxon test and Spearman + rank correlation to the export list 2012-06-24 Arjen Markus * decimal.man: Correct documentation (namespace) for decimal package * statistics.tcl: Add Wilcoxon test and Spearman rank correlation Bumped version to 0.8 Index: modules/md4/ChangeLog ================================================================== --- modules/md4/ChangeLog +++ modules/md4/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/md5/ChangeLog ================================================================== --- modules/md5/ChangeLog +++ modules/md5/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/md5crypt/ChangeLog ================================================================== --- modules/md5crypt/ChangeLog +++ modules/md5crypt/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/mime/ChangeLog ================================================================== --- modules/mime/ChangeLog +++ modules/mime/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-09 Andreas Kupries * mime.tcl (::mime::buildmessage): [Bug 3565267]: Handle * mime.man: possibility of 'errorCode' not set. Version * pkgIndex.tcl: bumped to 1.5.6. Index: modules/multiplexer/ChangeLog ================================================================== --- modules/multiplexer/ChangeLog +++ modules/multiplexer/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/namespacex/ChangeLog ================================================================== --- modules/namespacex/ChangeLog +++ modules/namespacex/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ncgi/ChangeLog ================================================================== --- modules/ncgi/ChangeLog +++ modules/ncgi/ChangeLog @@ -1,5 +1,19 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + +2013-01-30 Andreas Kupries + + * ncgi.man: [Bug 3601995]: Accepted [decode] changes by + * ncgi.tcl: . Fixed both missing + * ncgi.test: acceptance of various ut-8 sequences, and missing + * pkgIndex.tcl: rejection of bad sequences. Test cases + added. Bumped to version 1.4.1. + 2012-05-03 Andreas Kupries * ncgi.tcl: Applied Richard Hipp's patch to extend handling of * pkgIndex.tcl: utf characters in [decode]. Extended testsuite. * ncgi.man: Used the opportunity to bump the minimum required Index: modules/ncgi/ncgi.man ================================================================== --- modules/ncgi/ncgi.man +++ modules/ncgi/ncgi.man @@ -1,12 +1,12 @@ -[manpage_begin ncgi n 1.4] +[manpage_begin ncgi n 1.4.1] [comment {-*- tcl -*- doctools manpage}] [moddesc {CGI Support}] [titledesc {Procedures to manipulate CGI values.}] [category {CGI programming}] -[require Tcl 8.2] -[require ncgi [opt 1.4]] +[require Tcl 8.4] +[require ncgi [opt 1.4.1]] [description] [para] The [package ncgi] package provides commands that manipulate CGI values. These are values that come from Web forms and are processed Index: modules/ncgi/ncgi.tcl ================================================================== --- modules/ncgi/ncgi.tcl +++ modules/ncgi/ncgi.tcl @@ -26,11 +26,11 @@ # We use newer string routines package require Tcl 8.4 package require fileutil ; # Required by importFile. -package provide ncgi 1.4 +package provide ncgi 1.4.1 namespace eval ::ncgi { # "query" holds the raw query (i.e., form) data # This is treated as a cache, too, so you can call ncgi::query more than @@ -267,13 +267,13 @@ # rewrite "+" back to space # protect \ from quoting another '\' set str [string map [list + { } "\\" "\\\\" \[ \\\[ \] \\\]] $str] # prepare to process all %-escapes - regsub -all -- {%([A-Fa-f][A-Fa-f0-9])%([A-Fa-f][A-Fa-f0-9])%([A-Fa-f][A-Fa-f0-9])} \ + regsub -all -- {%([Ee][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])} \ $str {[encoding convertfrom utf-8 [DecodeHex \1\2\3]]} str - regsub -all -- {%([A-Fa-f][A-Fa-f0-9])%([A-Fa-f][A-Fa-f0-9])} \ + regsub -all -- {%([CDcd][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])} \ $str {[encoding convertfrom utf-8 [DecodeHex \1\2]]} str regsub -all -- {%([0-7][A-Fa-f0-9])} $str {\\u00\1} str # process \u unicode mapped chars return [subst -novar $str] Index: modules/ncgi/ncgi.test ================================================================== --- modules/ncgi/ncgi.test +++ modules/ncgi/ncgi.test @@ -126,10 +126,26 @@ test ncgi-3.6 {ncgi::decode} { ncgi::decode {paran%C3%A1} } "paran\u00E1" ; # a+acute +test ncgi-3.7 {ncgi::decode, bug 3601995} { + ncgi::decode {%C4%85} +} "\u0105" ; # a+ogonek + +test ncgi-3.8 {ncgi::decode, bug 3601995} { + ncgi::decode {%E2%80%A0} +} "\u2020" ; # dagger + +test ncgi-3.9 {ncgi::decode, bug 3601995} { + ncgi::decode {%E2%A0%90} +} "\u2810" ; # a braille pattern + +test ncgi-3.10 {ncgi::decode, bug 3601995} { + ncgi::decode {%E2%B1} +} "%E2%B1" ; # missing byte trailing %A0, do not accept/decode, pass through. + test ncgi-4.1 {ncgi::encode} { ncgi::encode abcdef0123 } abcdef0123 test ncgi-4.2 {ncgi::encode} { Index: modules/ncgi/pkgIndex.tcl ================================================================== --- modules/ncgi/pkgIndex.tcl +++ modules/ncgi/pkgIndex.tcl @@ -1,2 +1,2 @@ if {![package vsatisfies [package provide Tcl] 8.4]} {return} -package ifneeded ncgi 1.4 [list source [file join $dir ncgi.tcl]] +package ifneeded ncgi 1.4.1 [list source [file join $dir ncgi.tcl]] Index: modules/nmea/ChangeLog ================================================================== --- modules/nmea/ChangeLog +++ modules/nmea/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/nns/ChangeLog ================================================================== --- modules/nns/ChangeLog +++ modules/nns/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/nntp/ChangeLog ================================================================== --- modules/nntp/ChangeLog +++ modules/nntp/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ntp/ChangeLog ================================================================== --- modules/ntp/ChangeLog +++ modules/ntp/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ooutil/ChangeLog ================================================================== --- modules/ooutil/ChangeLog +++ modules/ooutil/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-30 Andreas Kupries * ooutil.man: Added more utilities to support class variables, * ooutil.tcl: class methods, and singleton classes. Packed version * pkgIndex.tcl: bumped to 1.1 for all these new features. Index: modules/otp/ChangeLog ================================================================== --- modules/otp/ChangeLog +++ modules/otp/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/page/ChangeLog ================================================================== --- modules/page/ChangeLog +++ modules/page/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/pki/ChangeLog ================================================================== --- modules/pki/ChangeLog +++ modules/pki/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/pluginmgr/ChangeLog ================================================================== --- modules/pluginmgr/ChangeLog +++ modules/pluginmgr/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/png/ChangeLog ================================================================== --- modules/png/ChangeLog +++ modules/png/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-07-09 Aaron Faupell * png.tcl: add capability to read and write images from color lists * png.tcl: make crc package optional in imageInfo Index: modules/png/pkgIndex.tcl ================================================================== --- modules/png/pkgIndex.tcl +++ modules/png/pkgIndex.tcl @@ -1,2 +1,2 @@ if {![package vsatisfies [package provide Tcl] 8.2]} {return} -package ifneeded png 0.1.2 [list source [file join $dir png.tcl]] +package ifneeded png 0.2 [list source [file join $dir png.tcl]] Index: modules/png/png.tcl ================================================================== --- modules/png/png.tcl +++ modules/png/png.tcl @@ -1,17 +1,17 @@ # png.tcl -- # # Querying and modifying PNG image files. # -# Copyright (c) 2004 Aaron Faupell +# Copyright (c) 2004-2012 Aaron Faupell # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: png.tcl,v 1.11 2012/07/09 16:35:04 afaupell Exp $ -package provide png 0.1.2 +package provide png 0.2 namespace eval ::png {} proc ::png::_openPNG {file {mode r}} { set fh [open $file $mode] Index: modules/pop3/ChangeLog ================================================================== --- modules/pop3/ChangeLog +++ modules/pop3/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-01-10 Andreas Kupries * pop3.test: Requiring Tcl 8.4 here as well. * pop3.tcl: [Bug 3471474]: Fixed bug where the socketcmd was not Index: modules/pop3/pop3.man ================================================================== --- modules/pop3/pop3.man +++ modules/pop3/pop3.man @@ -46,11 +46,11 @@ Setting this option tells the package that the server we are talking to is an MS Exchange server (which has some oddities we have to work around). The default is [const False]. -[opt_def -retr-mode retr|list|slow]. +[opt_def -retr-mode retr|list|slow] The retrieval mode determines how exactly messages are read from the server. The allowed values are [const retr], [const list] and [const slow]. Index: modules/pop3d/ChangeLog ================================================================== --- modules/pop3d/ChangeLog +++ modules/pop3d/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/profiler/ChangeLog ================================================================== --- modules/profiler/ChangeLog +++ modules/profiler/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/pt/ChangeLog ================================================================== --- modules/pt/ChangeLog +++ modules/pt/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/rc4/ChangeLog ================================================================== --- modules/rc4/ChangeLog +++ modules/rc4/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/rcs/ChangeLog ================================================================== --- modules/rcs/ChangeLog +++ modules/rcs/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/report/ChangeLog ================================================================== --- modules/report/ChangeLog +++ modules/report/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/rest/ChangeLog ================================================================== --- modules/rest/ChangeLog +++ modules/rest/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/ripemd/ChangeLog ================================================================== --- modules/ripemd/ChangeLog +++ modules/ripemd/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/sasl/ChangeLog ================================================================== --- modules/sasl/ChangeLog +++ modules/sasl/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/sha1/ChangeLog ================================================================== --- modules/sha1/ChangeLog +++ modules/sha1/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/simulation/ChangeLog ================================================================== --- modules/simulation/ChangeLog +++ modules/simulation/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-08-15 Arjen Markus * random.tcl: Correct the normal random number generator (missing factor 2 - reported by Jochem Snuverink) * pkgIndex.tcl: bumped version to 0.3.1 for "random" 2011-12-13 Andreas Kupries Index: modules/smtpd/ChangeLog ================================================================== --- modules/smtpd/ChangeLog +++ modules/smtpd/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/snit/ChangeLog ================================================================== --- modules/snit/ChangeLog +++ modules/snit/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/soundex/ChangeLog ================================================================== --- modules/soundex/ChangeLog +++ modules/soundex/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/stooop/ChangeLog ================================================================== --- modules/stooop/ChangeLog +++ modules/stooop/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/stringprep/ChangeLog ================================================================== --- modules/stringprep/ChangeLog +++ modules/stringprep/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/struct/ChangeLog ================================================================== --- modules/struct/ChangeLog +++ modules/struct/ChangeLog @@ -1,5 +1,18 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + +2013-01-21 Andreas Kupries + + * queue.tcl: Rewritten, simplified. The 8.5 requisite means + * queue_oo.tcl: that we have extended requirement syntax allowing + * stack.tcl: us to jump the major version barrier without fuss. + * stack_oo.tcl: + 2013-01-08 Andreas Kupries * pkgIndex.tcl: Fixed package require mismatch for use of TclOO * queue.man: in Tcl 8.6+. This is TclOO v1 (major version change). * queue.tcl: Now accepting 0.6.1+ and 1+. Versions bumped to Index: modules/struct/graph1.man ================================================================== --- modules/struct/graph1.man +++ modules/struct/graph1.man @@ -1,7 +1,7 @@ [comment {-*- tcl -*-}] -[manpage_begin {struct::graph v1} n 1.2.1] +[manpage_begin {struct::graph_v1} n 1.2.1] [copyright {2002 Andreas Kupries }] [moddesc {Tcl Data Structures}] [titledesc {Create and manipulate directed graph objects}] [category {Data structures}] [require Tcl 8.2] Index: modules/struct/matrix1.man ================================================================== --- modules/struct/matrix1.man +++ modules/struct/matrix1.man @@ -1,7 +1,7 @@ [comment {-*- tcl -*-}] -[manpage_begin {struct::matrix v1} n 1.2.1] +[manpage_begin {struct::matrix_v1} n 1.2.1] [copyright {2002 Andreas Kupries }] [moddesc {Tcl Data Structures}] [titledesc {Create and manipulate matrix objects}] [category {Data structures}] [require Tcl 8.2] Index: modules/struct/queue.tcl ================================================================== --- modules/struct/queue.tcl +++ modules/struct/queue.tcl @@ -41,12 +41,11 @@ } tcl { variable selfdir if { [package vsatisfies [package provide Tcl] 8.5] && - (![catch {package require TclOO 0.6.1}] || - ![catch {package require TclOO 1}]) + ![catch {package require TclOO 0.6.1-}] } { source [file join $selfdir queue_oo.tcl] } else { source [file join $selfdir queue_tcl.tcl] } Index: modules/struct/queue_oo.tcl ================================================================== --- modules/struct/queue_oo.tcl +++ modules/struct/queue_oo.tcl @@ -8,13 +8,12 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: queue_oo.tcl,v 1.2 2010/09/10 17:31:04 andreas_kupries Exp $ -if {[catch {package require TclOO 0.6.1}]} { - package require TclOO 1 -} +package require Tcl 8.5 +package require TclOO 0.6.1- ; # This includes 1 and higher. # Cleanup first catch {namespace delete ::struct::queue::queue_oo} catch {rename ::struct::queue::queue_oo {}} oo::class create ::struct::queue::queue_oo { Index: modules/struct/stack.tcl ================================================================== --- modules/struct/stack.tcl +++ modules/struct/stack.tcl @@ -41,12 +41,11 @@ } tcl { variable selfdir if { [package vsatisfies [package provide Tcl] 8.5] && - (![catch {package require TclOO 0.6.1}] || - ![catch {package require TclOO 1}]) + ![catch {package require TclOO 0.6.1-} mx] } { source [file join $selfdir stack_oo.tcl] } else { source [file join $selfdir stack_tcl.tcl] } Index: modules/struct/stack_oo.tcl ================================================================== --- modules/struct/stack_oo.tcl +++ modules/struct/stack_oo.tcl @@ -7,13 +7,12 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: stack_oo.tcl,v 1.4 2010/09/10 17:31:04 andreas_kupries Exp $ -if {[catch {package require TclOO 0.6.1}]} { - package require TclOO 1 -} +package require Tcl 8.5 +package require TclOO 0.6.1- ; # This includes 1 and higher. # Cleanup first catch {namespace delete ::struct::stack::stack_oo} catch {rename ::struct::stack::stack_oo {}} Index: modules/struct/struct_tree1.man ================================================================== --- modules/struct/struct_tree1.man +++ modules/struct/struct_tree1.man @@ -1,7 +1,7 @@ [comment {-*- tcl -*-}] -[manpage_begin {struct::tree v1} n 1.2.2] +[manpage_begin {struct::tree_v1} n 1.2.2] [copyright {2002 Andreas Kupries }] [moddesc {Tcl Data Structures}] [titledesc {Create and manipulate tree objects}] [category {Data structures}] [require Tcl 8.2] Index: modules/tar/ChangeLog ================================================================== --- modules/tar/ChangeLog +++ modules/tar/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-09-11 Andreas Kupries * tar.tcl (seekorskip): Fixed seekorskip which prevented its use * pkgIndex.tcl: from a non-seekable channel, like stdin. The issue was that the original attempt to seek before skipping not just Index: modules/tepam/ChangeLog ================================================================== --- modules/tepam/ChangeLog +++ modules/tepam/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012/05/07 Andreas Drollinger * TEPAM version 0.4.0 * Add the new text procedure argument type and the text multi line data entry widget. Add test and documentation support for these new features: Index: modules/term/ChangeLog ================================================================== --- modules/term/ChangeLog +++ modules/term/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-08 Andreas Kupries * ansi/code/ctrl.tcl: Bumped to version 0.1.2. Moved character definition around to prevent mis-interpretation as a bad continuation line by static syntax checkers. Index: modules/textutil/ChangeLog ================================================================== --- modules/textutil/ChangeLog +++ modules/textutil/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/tie/ChangeLog ================================================================== --- modules/tie/ChangeLog +++ modules/tie/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/tiff/ChangeLog ================================================================== --- modules/tiff/ChangeLog +++ modules/tiff/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/transfer/ChangeLog ================================================================== --- modules/transfer/ChangeLog +++ modules/transfer/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/treeql/ChangeLog ================================================================== --- modules/treeql/ChangeLog +++ modules/treeql/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/try/ChangeLog ================================================================== --- modules/try/ChangeLog +++ modules/try/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-06-25 Andreas Kupries * try.man: Renamed to tcllib_try.man to prevent clash with Tcl core manpage. Effectively removed. * tcllib_try.man: Effectively added, new name of try.man. Index: modules/uev/ChangeLog ================================================================== --- modules/uev/ChangeLog +++ modules/uev/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-04-09 Andreas Kupries * uevent.man: Fixed typo in variable name (counter / tcounter). * uevent.tcl: Bumped version to 0.3.1. Updated documentation. * pkgIndex.tcl: Index: modules/units/ChangeLog ================================================================== --- modules/units/ChangeLog +++ modules/units/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/uri/ChangeLog ================================================================== --- modules/uri/ChangeLog +++ modules/uri/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/uuid/ChangeLog ================================================================== --- modules/uuid/ChangeLog +++ modules/uuid/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-11-19 Andreas Kupries * uuid.tcl (::uuid::generate_tcl): Accepted patch by Sean Woods * uuid.man: caching the host information part of the uuid. Avoids * pkgIndex.tcl: hammering the network stack for hostname and Index: modules/valtype/ChangeLog ================================================================== --- modules/valtype/ChangeLog +++ modules/valtype/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-06-06 Andreas Kupries * iban.tcl: [Patch 3532308]: Applied patch by Max Jarek to * iban.test: update the code to the IBAN Registry version 35. * iban.man: Bumped package version to 1.1. Index: modules/virtchannel_base/ChangeLog ================================================================== --- modules/virtchannel_base/ChangeLog +++ modules/virtchannel_base/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2012-10-05 Andreas Kupries * cat.tcl (read): Fixed bugs in the reader. Bad check of buffer * pkgIndex.tcl: length, and buffer length was not taken into account for the next read after an incomplete one. Version Index: modules/virtchannel_core/ChangeLog ================================================================== --- modules/virtchannel_core/ChangeLog +++ modules/virtchannel_core/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/virtchannel_transform/ChangeLog ================================================================== --- modules/virtchannel_transform/ChangeLog +++ modules/virtchannel_transform/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/wip/ChangeLog ================================================================== --- modules/wip/ChangeLog +++ modules/wip/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/yaml/ChangeLog ================================================================== --- modules/yaml/ChangeLog +++ modules/yaml/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2011-12-13 Andreas Kupries * * Released and tagged Tcllib 1.14 ======================== * Index: modules/zip/ChangeLog ================================================================== --- modules/zip/ChangeLog +++ modules/zip/ChangeLog @@ -1,5 +1,11 @@ +2013-02-01 Andreas Kupries + + * + * Released and tagged Tcllib 1.15 ======================== + * + 2013-01-28 Andreas Kupries * decode.tcl: New module and packages. De- and * encode.tcl: encoding zipfiles. * pkgIndex.tcl: Index: sak.tcl ================================================================== --- sak.tcl +++ sak.tcl @@ -5,11 +5,11 @@ # -------------------------------------------------------------- # Perform various checks and operations on the distribution. # SAK = Swiss Army Knife. set distribution [file dirname [info script]] -lappend auto_path [file join $distribution modules] +set auto_path [linsert $auto_path 0 [file join $distribution modules]] set critcldefault {} set critclnotes {} set dist_excluded {} Index: support/installation/modules.tcl ================================================================== --- support/installation/modules.tcl +++ support/installation/modules.tcl @@ -43,10 +43,11 @@ Module bench _tcl _null _null Module bibtex _tcl _man _exa Module blowfish _tcl _man _null Module cache _tcl _man _null Module calendar _tci _man _null +Module clock _tcl _man _null Module cmdline _tcl _man _null Module comm _tcl _man _null Module control _tci _man _null Module coroutine _tcl _null _null Module counter _tcl _man _null Index: support/installation/version.tcl ================================================================== --- support/installation/version.tcl +++ support/installation/version.tcl @@ -1,6 +1,6 @@ -package_version 1.14 +package_version 1.15 package_name tcllib dist_exclude config dist_exclude modules/ftp/example dist_exclude modules/ftpd/examples Index: support/releases/PACKAGES ================================================================== --- support/releases/PACKAGES +++ support/releases/PACKAGES @@ -1,15 +1,15 @@ -@@ RELEASE 1.14 +@@ RELEASE 1.15 S3 1.0.0 SASL 1.3.2 SASL::NTLM 1.1.1 SASL::XGoogleToken 1.0.1 -aes 1.0.2 +aes 1.1 ascii85 1.0 asn 0.8.4 -autoproxy 1.5.1 +autoproxy 1.5.3 base32 0.1 base32::core 0.1 base32::hex 0.1 base64 2.4.2 bee 0.1 @@ -21,25 +21,27 @@ blowfish 1.0.4 cache::async 0.3 calendar 0.2 char 1 cksum 1.1.3 +clock::iso8601 0.1 +clock::rfc2822 0.1 cmdline 1.3.3 comm 4.6.2 configuration 1 control 0.1.3 coroutine 1.1 coroutine::auto 1.1 counter 2.0.4 -crc16 1.1.1 +crc16 1.1.2 crc32 1.3.1 -csv 0.7.3 +csv 0.8 des 1.1.0 dns 1.3.3 docstrip 1.2 docstrip::util 1.3 -doctools 1.4.13 +doctools 1.4.14 doctools::changelog 1 doctools::config 0.1 doctools::cvs 1 doctools::html 0.1 doctools::html::cssdefaults 0.1 @@ -83,22 +85,24 @@ doctools::toc::import::doctoc 0.1 doctools::toc::import::json 0.1 doctools::toc::parse 0.1 doctools::toc::structure 0.1 exif 1.1.2 -fileutil 1.14.4 +fileutil 1.14.5 +fileutil::decode 0.1 fileutil::magic::cfront 1.0 fileutil::magic::cgen 1.0 fileutil::magic::filetype 1.0.2 fileutil::magic::mimetype 1.0.2 fileutil::magic::rt 1.0 fileutil::multi 0.1 fileutil::multi::op 0.5.3 -fileutil::traverse 0.4.2 +fileutil::traverse 0.4.3 ftp 2.4.11 ftp::geturl 0.2.1 ftpd 1.2.6 +generator 0.1 gpx 1 grammar::aycock 1.0 grammar::aycock::debug 1.0 grammar::aycock::runtime 1.0 grammar::fa 0.4 @@ -108,38 +112,39 @@ grammar::me::cpu 0.2 grammar::me::cpu::core 0.2 grammar::me::cpu::gasm 0.1 grammar::me::tcl 0.1 grammar::me::util 0.1 -grammar::peg 0.1 +grammar::peg 0.2 grammar::peg::interp 0.1.1 hook 0.1 html 1.4 -htmlparse 1.2 +htmlparse 1.2.1 huddle 0.1.5 ident 0.42 -imap4 0.3 -inifile 0.2.4 +imap4 0.4 +inifile 0.2.5 interp 0.1.2 interp::delegate::method 0.2 interp::delegate::proc 0.2 ip 1.2 irc 0.6.1 javascript 1.0.2 jpeg 0.4.0 json 1.1.2 -json::write 1.0.1 +json::write 1.0.2 lambda 1 ldap 1.8 ldapx 1.0 log 1.3 -logger 0.9 +logger 0.9.3 logger::appender 1.3 logger::utils 1.3 -map::slippy 0.4 +map::geocode::nominatim 0.1 +map::slippy 0.5 map::slippy::cache 0.2 -map::slippy::fetcher 0.2 +map::slippy::fetcher 0.3 mapproj 1.0 math 1.2.5 math::bigfloat 1.2.2 math::bigfloat 2.0.1 math::bignum 3.1.1 @@ -158,26 +163,26 @@ math::optimize 1.0 math::polynomials 1.0.1 math::rationalfunctions 1.0.1 math::roman 1.0 math::special 0.2.2 -math::statistics 0.7.0 +math::statistics 0.8.0 md4 1.0.5 md5 1.4.4 md5 2.0.7 md5crypt 1.1.0 -mime 1.5.4 +mime 1.5.6 multiplexer 0.2 nameserv 0.4.2 nameserv::auto 0.3 nameserv::common 0.1 nameserv::server 0.3.2 namespacex 0.1 -ncgi 1.3.2 +ncgi 1.4.1 nmea 1.0.0 nntp 0.2.1 -oo::util 1 +oo::util 1.1 otp 1.0.0 page::analysis::peg::emodes 0.1 page::analysis::peg::minimize 0.1 page::analysis::peg::reachable 0.1 page::analysis::peg::realizable 0.1 @@ -217,14 +222,14 @@ page::writer::ser 0.1 page::writer::tpc 0.1 page::writer::tree 0.1 paths 1 picoirc 0.5.1 -pki 0.2 +pki 0.6 pluginmgr 0.3 -png 0.1.2 -pop3 1.8 +png 0.2 +pop3 1.9 pop3d 1.1.0 pop3d::dbox 1.0.2 pop3d::udb 1.1 profiler 0.3 pt::ast 1.1 @@ -266,11 +271,11 @@ sha1 1.1.0 sha1 2.0.3 sha256 1.0.3 simulation::annealing 0.2 simulation::montecarlo 0.1 -simulation::random 0.3 +simulation::random 0.3.1 smtp 1.4.5 smtpd 1.5 snit 1.4.2 snit 2.3.2 soundex 1.0 @@ -282,26 +287,26 @@ struct 2.1 struct::disjointset 1.0 struct::graph 1.2.1 struct::graph 2.4 struct::graph::op 0.11.3 -struct::list 1.8.1 +struct::list 1.8.2 struct::matrix 1.2.1 struct::matrix 2.0.2 struct::pool 1.2.1 struct::prioqueue 1.4 -struct::queue 1.4.2 +struct::queue 1.4.4 struct::record 1.2.1 struct::set 2.2.3 struct::skiplist 1.3 -struct::stack 1.5.1 +struct::stack 1.5.3 struct::tree 1.2.2 struct::tree 2.1.2 sum 1.1.0 switched 2.2.1 -tar 0.7 -tcl::chan::cat 1.0.1 +tar 0.7.1 +tcl::chan::cat 1.0.2 tcl::chan::core 1 tcl::chan::events 1 tcl::chan::facade 1.0.1 tcl::chan::fifo 1 tcl::chan::fifo2 1 @@ -329,15 +334,15 @@ tcl::transform::rot 1 tcl::transform::spacer 1 tcl::transform::zlib 1 tclDES 1.0.0 tclDESjr 1.0.0 -tepam 0.2.0 +tepam 0.4.0 term 0.1 term::ansi::code 0.1 term::ansi::code::attr 0.1 -term::ansi::code::ctrl 0.1.1 +term::ansi::code::ctrl 0.1.2 term::ansi::code::macros 0.1 term::ansi::ctrl::unix 0.1.1 term::ansi::send 0.1 term::interact::menu 0.1 term::interact::pager 0.1 @@ -369,26 +374,26 @@ transfer::data::source 0.2 transfer::receiver 0.2 transfer::transmitter 0.2 treeql 1.3.1 try 1 -uevent 0.2 +uevent 0.3.1 uevent::onidle 0.1 unicode 1.0.0 unicode::data 1.0.0 units 2.1.1 uri 1.2.2 uri::urn 1.0.2 uuencode 1.1.5 -uuid 1.0.1 +uuid 1.0.2 valtype::common 1 valtype::creditcard::amex 1 valtype::creditcard::discover 1 valtype::creditcard::mastercard 1 valtype::creditcard::visa 1 valtype::gs1::ean13 1 -valtype::iban 1 +valtype::iban 1.1 valtype::imei 1 valtype::isbn 1 valtype::luhn 1 valtype::luhn5 1 valtype::usnpi 1 @@ -396,5 +401,7 @@ wip 1.2 wip 2.2 xsxp 1.0 yaml 0.3.6 yencode 1.1.3 +zipfile::decode 0.2 +zipfile::encode 0.1 ADDED support/releases/history/README-1.15.txt Index: support/releases/history/README-1.15.txt ================================================================== --- /dev/null +++ support/releases/history/README-1.15.txt @@ -0,0 +1,220 @@ +Overview +======== + + 7 new packages in 5 modules + 33 changed packages in 29 modules + 10 internally changed packages in 6 modules + 344 unchanged packages in 90 modules + 400 packages, total in 110 modules, total + +New in tcllib 1.15 +================== + + Module Package New Version Comments + ----------- ------------------------- ------------- ---------- + clock clock::iso8601 0.1 + clock::rfc2822 0.1 + ----------- ------------------------- ------------- ---------- + fileutil fileutil::decode 0.1 + generator generator 0.1 + map map::geocode::nominatim 0.1 + ----------- ------------------------- ------------- ---------- + zip zipfile::decode 0.2 + zipfile::encode 0.1 + ----------- ------------------------- ------------- ---------- + +Changes from tcllib 1.14 to 1.15 +================================ + + tcllib 1.14 tcllib 1.15 + Module Package Old Version New Version Comments + ------------------ ------------------------ ------------- ------------- ---------- + aes aes 1.0.2 1.1 D EF + crc crc16 1.1.1 1.1.2 B + csv csv 0.7.3 0.8 EF + doctools doctools 1.4.13 1.4.14 T B + ------------------ ------------------------ ------------- ------------- ---------- + fileutil fileutil 1.14.4 1.14.5 B + fileutil::traverse 0.4.2 0.4.3 B + ------------------ ------------------------ ------------- ------------- ---------- + grammar_peg grammar::peg 0.1 0.2 B + htmlparse htmlparse 1.2 1.2.1 B + http autoproxy 1.5.1 1.5.3 B + imap4 imap4 0.3 0.4 EF + inifile inifile 0.2.4 0.2.5 B + json json::write 1.0.1 1.0.2 B + log logger 0.9 0.9.3 B + ------------------ ------------------------ ------------- ------------- ---------- + map map::slippy 0.4 0.5 EF + map::slippy::fetcher 0.2 0.3 EF + ------------------ ------------------------ ------------- ------------- ---------- + math math::statistics 0.7.0 0.8.0 EF + mime mime 1.5.4 1.5.6 B + ncgi ncgi 1.3.2 1.4.1 EF B T D + ooutil oo::util 1 1.1 EF + pki pki 0.2 0.6 EF + png png 0.1.2 0.2 EF + pop3 pop3 1.8 1.9 B T + simulation simulation::random 0.3 0.3.1 B + ------------------ ------------------------ ------------- ------------- ---------- + struct struct::list 1.8.1 1.8.2 B T + struct::queue 1.4.2 1.4.4 B T D + struct::stack 1.5.1 1.5.3 B T + ------------------ ------------------------ ------------- ------------- ---------- + tar tar 0.7 0.7.1 B + tepam tepam 0.2.0 0.4.0 EF D T + term term::ansi::code::ctrl 0.1.1 0.1.2 B + uev uevent 0.2 0.3.1 EF B + uuid uuid 1.0.1 1.0.2 B + valtype valtype::iban 1 1.1 EF + virtchannel_base tcl::chan::cat 1.0.1 1.0.2 B + ------------------ ------------------------ ------------- ------------- ---------- + +Invisible changes (documentation, testsuites) +============================================= + + tcllib 1.14 tcllib 1.15 + Module Package Old Version New Version Comments + ------------ ------------------------ ------------- ------------- ---------- + base64 base64 2.4.2 2.4.2 D + cmdline cmdline 1.3.3 1.3.3 T + ------------ ------------------------ ------------- ------------- ---------- + grammar_me grammar::me::cpu 0.2 0.2 T + grammar::me::cpu::core 0.2 0.2 T + grammar::me::cpu::gasm 0.1 0.1 T + grammar::me::tcl 0.1 0.1 T + grammar::me::util 0.1 0.1 T + ------------ ------------------------ ------------- ------------- ---------- + irc irc 0.6.1 0.6.1 D + ------------ ------------------------ ------------- ------------- ---------- + struct struct::tree 1.2.2 1.2.2 D + struct::tree 2.1.2 2.1.2 D + ------------ ------------------------ ------------- ------------- ---------- + try try 1 1 D + ------------ ------------------------ ------------- ------------- ---------- + +Unchanged +========= + + ascii85, asn, base32, base32::core, base32::hex, bee, bench, + bench::in, bench::out::csv, bench::out::text, bibtex, blowfish, + cache::async, calendar, char, cksum, comm, configuration, + control, coroutine, coroutine::auto, counter, crc32, des, dns, + docstrip, docstrip::util, doctools::changelog, doctools::config, + doctools::cvs, doctools::html, doctools::html::cssdefaults, + 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, doctools::idx::parse, + doctools::idx::structure, 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, + doctools::nroff::man_macros, doctools::paths, + doctools::tcl::parse, doctools::text, 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, doctools::toc::parse, + doctools::toc::structure, exif, fileutil::magic::cfront, + fileutil::magic::cgen, fileutil::magic::filetype, + fileutil::magic::mimetype, fileutil::magic::rt, fileutil::multi, + fileutil::multi::op, ftp, ftp::geturl, ftpd, gpx, + grammar::aycock, grammar::aycock::debug, + grammar::aycock::runtime, grammar::fa, grammar::fa::dacceptor, + grammar::fa::dexec, grammar::fa::op, grammar::peg::interp, hook, + html, huddle, ident, interp, interp::delegate::method, + interp::delegate::proc, ip, javascript, jpeg, json, lambda, + ldap, ldapx, log, logger::appender, logger::utils, + map::slippy::cache, mapproj, math, math::bigfloat, math::bignum, + math::calculus, math::calculus::symdiff, math::complexnumbers, + math::constants, math::decimal, math::fourier, math::fuzzy, + math::geometry, math::interpolate, math::linearalgebra, + math::machineparameters, math::numtheory, math::optimize, + math::polynomials, math::rationalfunctions, math::roman, + math::special, md4, md5, md5crypt, multiplexer, nameserv, + nameserv::auto, nameserv::common, nameserv::server, namespacex, + nmea, nntp, otp, page::analysis::peg::emodes, + page::analysis::peg::minimize, page::analysis::peg::reachable, + page::analysis::peg::realizable, page::compiler::peg::mecpu, + page::config::peg, page::gen::peg::canon, page::gen::peg::cpkg, + page::gen::peg::hb, page::gen::peg::me, page::gen::peg::mecpu, + page::gen::peg::ser, page::gen::tree::text, page::parse::lemon, + page::parse::peg, page::parse::peghb, page::parse::pegser, + page::pluginmgr, page::reader::hb, page::reader::lemon, + page::reader::peg, page::reader::ser, page::reader::treeser, + page::transform::mecpu, page::transform::reachable, + page::transform::realizable, page::util::flow, + page::util::norm::lemon, page::util::norm::peg, page::util::peg, + page::util::quote, page::writer::hb, page::writer::identity, + page::writer::me, page::writer::mecpu, page::writer::null, + page::writer::peg, page::writer::ser, page::writer::tpc, + page::writer::tree, paths, picoirc, pluginmgr, pop3d, + pop3d::dbox, pop3d::udb, profiler, pt::ast, + pt::cparam::configuration::critcl, pt::parse::peg, 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::json, pt::peg::from::peg, + pt::peg::import, pt::peg::import::json, pt::peg::import::peg, + pt::peg::interp, pt::peg::op, 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::pgen, pt::rde, + pt::tclparam::configuration::snit, + pt::tclparam::configuration::tcloo, rc4, rcs, report, resolv, + rest, ripemd128, ripemd160, S3, SASL, SASL::NTLM, + SASL::XGoogleToken, sha1, sha256, simulation::annealing, + simulation::montecarlo, smtp, smtpd, snit, soundex, spf, stooop, + stringprep, stringprep::data, struct, struct::disjointset, + struct::graph, struct::graph::op, struct::matrix, struct::pool, + struct::prioqueue, struct::record, struct::set, + struct::skiplist, sum, switched, 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, tclDES, tclDESjr, term, term::ansi::code, + term::ansi::code::attr, term::ansi::code::macros, + term::ansi::ctrl::unix, term::ansi::send, term::interact::menu, + term::interact::pager, term::receive, term::receive::bind, + term::send, text::write, textutil, textutil::adjust, + textutil::expander, textutil::repeat, textutil::split, + textutil::string, textutil::tabify, textutil::trim, tie, + tie::std::array, tie::std::dsource, tie::std::file, + tie::std::growfile, tie::std::log, tie::std::rarray, tiff, time, + transfer::connect, transfer::copy, transfer::copy::queue, + transfer::data::destination, transfer::data::source, + transfer::receiver, transfer::transmitter, treeql, + uevent::onidle, unicode, unicode::data, units, uri, uri::urn, + uuencode, valtype::common, valtype::creditcard::amex, + valtype::creditcard::discover, valtype::creditcard::mastercard, + valtype::creditcard::visa, valtype::gs1::ean13, valtype::imei, + valtype::isbn, valtype::luhn, valtype::luhn5, valtype::usnpi, + valtype::verhoeff, wip, xsxp, yaml, yencode + +Legend Change Details Comments + ------ ------- --------- + Major API: ** incompatible ** API changes. + + Minor EF : Extended functionality, API. + I : Major rewrite, but no API change + + Patch B : Bug fixes. + EX : New examples. + P : Performance enhancement. + + None T : Testsuite changes. + D : Documentation updates. +