Browse Source

project_layouts module updates

master
Julian Noble 1 day ago
parent
commit
a0cf2a946a
  1. 2
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/fauxlink-0.1.0.tm
  2. 4
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/fauxlink-0.1.1.tm
  3. 5
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/overtype-1.6.5.tm
  4. 23
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk-0.1.tm
  5. 10
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/aliascore-0.1.0.tm
  6. 150
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/ansi-0.1.1.tm
  7. 721
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/args-0.1.0.tm
  8. 6
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/assertion-0.1.0.tm
  9. 8
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/console-0.1.1.tm
  10. 1
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/docgen-0.1.0.tm
  11. 932
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/lib-0.1.1.tm
  12. 6
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/mix/commandset/doc-0.1.0.tm
  13. 96
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/mix/commandset/scriptwrap-0.1.0.tm
  14. 14
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/nav/fs-0.1.0.tm
  15. 7
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/ns-0.1.0.tm
  16. 10
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/packagepreference-0.1.0.tm
  17. 2
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/repo-0.1.1.tm
  18. 85
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/trie-0.1.0.tm
  19. 104
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/zip-0.1.1.tm
  20. 1173
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/textblock-0.1.2.tm
  21. 2
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/fauxlink-0.1.0.tm
  22. 4
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/fauxlink-0.1.1.tm
  23. 5
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/overtype-1.6.5.tm
  24. 23
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk-0.1.tm
  25. 10
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/aliascore-0.1.0.tm
  26. 150
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/ansi-0.1.1.tm
  27. 721
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/args-0.1.0.tm
  28. 6
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/assertion-0.1.0.tm
  29. 8
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/console-0.1.1.tm
  30. 1
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/docgen-0.1.0.tm
  31. 932
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/lib-0.1.1.tm
  32. 6
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/mix/commandset/doc-0.1.0.tm
  33. 96
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/mix/commandset/scriptwrap-0.1.0.tm
  34. 14
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/nav/fs-0.1.0.tm
  35. 7
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/ns-0.1.0.tm
  36. 10
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/packagepreference-0.1.0.tm
  37. 2
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/repo-0.1.1.tm
  38. 85
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/trie-0.1.0.tm
  39. 104
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/zip-0.1.1.tm
  40. 1173
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/textblock-0.1.2.tm

2
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/fauxlink-0.1.0.tm

@ -34,7 +34,7 @@
#[para] The + symbol substitutes for forward-slashes. #[para] The + symbol substitutes for forward-slashes.
#[para] Other chars can be encoded using url-like encoding - (but only up to %7E !) #[para] Other chars can be encoded using url-like encoding - (but only up to %7E !)
#[para] We deliberately treat higher % sequences literally. #[para] We deliberately treat higher % sequences literally.
#[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [heart]) can remain literal for linking to urls. #[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [lb]heart[rb]) can remain literal for linking to urls.
#[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23 #[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23
#[para] e.g a link to a file file#A.txt in parent dir could be: #[para] e.g a link to a file file#A.txt in parent dir could be:
#[para] file%23A.txt#..+file%23A.txt.fxlnk #[para] file%23A.txt#..+file%23A.txt.fxlnk

4
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/fauxlink-0.1.1.tm

@ -34,7 +34,7 @@
#[para] The + symbol substitutes for forward-slashes. #[para] The + symbol substitutes for forward-slashes.
#[para] Other chars can be encoded using url-like encoding - (but only up to %7E !) #[para] Other chars can be encoded using url-like encoding - (but only up to %7E !)
#[para] We deliberately treat higher % sequences literally. #[para] We deliberately treat higher % sequences literally.
#[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [heart]) can remain literal for linking to urls. #[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [lb]heart[rb]) can remain literal for linking to urls.
#[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23 #[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23
#[para] e.g a link to a file file#A.txt in parent dir could be: #[para] e.g a link to a file file#A.txt in parent dir could be:
#[para] file%23A.txt#..+file%23A.txt.fxlnk #[para] file%23A.txt#..+file%23A.txt.fxlnk
@ -46,7 +46,7 @@
#[para] The target being fully specified in the name means the file doesn't have to be read for the target to be determined #[para] The target being fully specified in the name means the file doesn't have to be read for the target to be determined
#[para] Extensions to behaviour should be added in the file as text data in Toml format, #[para] Extensions to behaviour should be added in the file as text data in Toml format,
#[para] with custom data being under a single application-chosen table name #[para] with custom data being under a single application-chosen table name
#[para] The toplevel Toml table [fauxlink] is reserved for core extensions to this system. #[para] The toplevel Toml table [lb]fauxlink[rb] is reserved for core extensions to this system.
#[para] Aside from the 2 used for delimiting (+ #) #[para] Aside from the 2 used for delimiting (+ #)
#[para] certain characters which might normally be allowed in filesystems are required to be encoded #[para] certain characters which might normally be allowed in filesystems are required to be encoded
#[para] e.g space and tab are required to be %20 %09 #[para] e.g space and tab are required to be %20 %09

5
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/overtype-1.6.5.tm

@ -1366,7 +1366,8 @@ tcl::namespace::eval overtype {
if {$overflowlength > 0} { if {$overflowlength > 0} {
#overlay line wider or equal #overlay line wider or equal
set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -overflow [tcl::dict::get $opts -overflow] -exposed1 $opt_exposed1 -exposed2 $opt_exposed2 $undertext $overtext] #review - we still expand_right for centred for now.. possibly should expand_both with ellipsis each end?
set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -expand_right [tcl::dict::get $opts -overflow] -exposed1 $opt_exposed1 -exposed2 $opt_exposed2 $undertext $overtext]
set rendered [tcl::dict::get $rinfo result] set rendered [tcl::dict::get $rinfo result]
set overflow_right [tcl::dict::get $rinfo overflow_right] set overflow_right [tcl::dict::get $rinfo overflow_right]
set unapplied [tcl::dict::get $rinfo unapplied] set unapplied [tcl::dict::get $rinfo unapplied]
@ -1547,7 +1548,7 @@ tcl::namespace::eval overtype {
} else { } else {
#padded overtext #padded overtext
#lappend outputlines [renderline -insert_mode 0 -transparent $opt_transparent -startcolumn [expr {$left_exposed + 1}] $undertext $overtext] #lappend outputlines [renderline -insert_mode 0 -transparent $opt_transparent -startcolumn [expr {$left_exposed + 1}] $undertext $overtext]
#Note - we still need overflow here - as although the overtext is short - it may oveflow due to the startoffset #Note - we still need overflow(exapnd_right) here - as although the overtext is short - it may oveflow due to the startoffset
set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -expand_right $opt_overflow -startcolumn [expr {$left_exposed + 1 + $startoffset}] $undertext $overtext] set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -expand_right $opt_overflow -startcolumn [expr {$left_exposed + 1 + $startoffset}] $undertext $overtext]
lappend outputlines [tcl::dict::get $rinfo result] lappend outputlines [tcl::dict::get $rinfo result]
} }

23
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk-0.1.tm

@ -7326,21 +7326,28 @@ namespace eval punk {
if {$topic in [list tcl]} { if {$topic in [list tcl]} {
if {[punk::lib::system::has_tclbug_script_var]} { if {[punk::lib::check::has_tclbug_script_var]} {
append warningblock \n "minor warning: punk::lib::system::has_tclbug_script_var returned true! (string rep for list variable in script generated when script changed)" append warningblock \n "minor warning: punk::lib::check::has_tclbug_script_var returned true! (string rep for list variable in script generated when script changed)"
} }
if {[punk::lib::system::has_tclbug_safeinterp_compile]} { if {[punk::lib::check::has_tclbug_safeinterp_compile]} {
set indent " " set indent " "
append warningblock \n "[a+ web-red]warning: punk::lib::system::has_tclbug_safeinterp returned true!" \n append warningblock \n "[a+ web-red]warning: punk::lib::check::has_tclbug_safeinterp returned true!" \n
append warningblock "${indent}(ensemble commands not compiled in safe interps - heavy performance impact in safe interps)" \n append warningblock "${indent}(ensemble commands not compiled in safe interps - heavy performance impact in safe interps)" \n
append warningblock "${indent}see https://core.tcl-lang.org/tcl/tktview/1095bf7f75" append warningblock "${indent}see [punk::ansi::hyperlink https://core.tcl-lang.org/tcl/tktview/1095bf7f75]"
append warningblock [a] append warningblock [a]
} }
if {[punk::lib::system::has_tclbug_list_quoting_emptyjoin]} { if {[punk::lib::check::has_tclbug_lsearch_strideallinline]} {
set indent " " set indent " "
append warningblock \n "[a+ web-red]warning: punk::lib::system::has_tclbug_list_quoting returned true!" \n append warningblock \n "[a+ web-red]warning: punk::lib::check::has_tclbug_lsearch_strideallinline returned true!" \n
append warningblock "${indent}(lsearch using -stride -all -inline -subindices does not return values corresponding to subindex when a single -index value is used)" \n
append warningblock "${indent}see [punk::ansi::hyperlink https://core.tcl-lang.org/tcl/tktview/5a1aaa201d]"
append warningblock [a]
}
if {[punk::lib::check::has_tclbug_list_quoting_emptyjoin]} {
set indent " "
append warningblock \n "[a+ web-red]warning: punk::lib::check::has_tclbug_list_quoting returned true!" \n
append warningblock "${indent}lists elements not properly quoted in some cases. e.g 'list {*}[lindex {etc #foo} 1] {*}[list]' (#foo not braced)" \n append warningblock "${indent}lists elements not properly quoted in some cases. e.g 'list {*}[lindex {etc #foo} 1] {*}[list]' (#foo not braced)" \n
append warningblock "${indent}see https://core.tcl-lang.org/tcl/tktview/e38dce74e2" append warningblock "${indent}see [punk::ansi::hyperlink https://core.tcl-lang.org/tcl/tktview/e38dce74e2]"
} }
} }

10
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/aliascore-0.1.0.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -18,12 +18,12 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::aliascore 0 0.1.0] #[manpage_begin punkshell_module_punk::aliascore 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {punkshell command aliases}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {-}] [comment {-- Description at end of page heading --}]
#[require punk::aliascore] #[require punk::aliascore]
#[keywords module] #[keywords module alias]
#[description] #[description]
#[para] - #[para] -

150
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/ansi-0.1.1.tm

@ -417,8 +417,11 @@ tcl::namespace::eval punk::ansi {
convert*\ convert*\
clear*\ clear*\
cursor_*\ cursor_*\
delete*\
detect*\ detect*\
erase*\
get_*\ get_*\
hyperlink\
move*\ move*\
reset*\ reset*\
ansistrip*\ ansistrip*\
@ -618,7 +621,7 @@ tcl::namespace::eval punk::ansi {
set subtitle [tcl::dict::get $picinfo status] set subtitle [tcl::dict::get $picinfo status]
} }
set title [tcl::dict::get $picinfo filename] set title [tcl::dict::get $picinfo filename]
set fr [textblock::frame -width $colwidth -subtitle $subtitle -title $title [tcl::dict::get $picinfo pic]] set fr [textblock::frame -checkargs 0 -width $colwidth -subtitle $subtitle -title $title [tcl::dict::get $picinfo pic]]
# -- --- --- --- # -- --- --- ---
#we need the max height of a row element to use join_basic instead of join below #we need the max height of a row element to use join_basic instead of join below
# -- --- --- --- # -- --- --- ---
@ -3096,6 +3099,18 @@ Brightblack 100 Brightred 101 Brightgreen 102 Brightyellow 103 Brightblu
return "\033\[?25l" return "\033\[?25l"
} }
# REVIEW - osc8 replays etc for split lines? - textblock
#the 'id' parameter logically connects split hyperlinks
proc hyperlink {uri {display ""}} {
if {$display eq ""} {
set display $uri
}
set params "" ;#todo e.g id=xyz123:foo=bar:baz=quux
set open "\x1b\]8\;$params\;$uri\x1b\\"
set close "\x1b\]8\;\;\x1b\\"
return ${open}${display}${close}
}
# -- --- --- --- --- # -- --- --- --- ---
proc move {row col} { proc move {row col} {
#*** !doctools #*** !doctools
@ -3634,11 +3649,27 @@ Brightblack 100 Brightred 101 Brightgreen 102 Brightyellow 103 Brightblu
} }
set parts [punk::ansi::ta::split_codes $text] set parts [punk::ansi::ta::split_codes $text]
set out "" set out ""
#todo - try: join [lsearch -stride 2 -index 0 -subindices -all -inline $parts *] ""
# - (if/when lsearch -stride bug fixed)
foreach {pt code} $parts { foreach {pt code} $parts {
append out $pt append out $pt
} }
return $out return $out
} }
proc ansistrip2 {text} {
#*** !doctools
#[call [fun ansistrip] [arg text] ]
#[para]Return a string with ansi codes stripped out
#[para]Alternate graphics chars are replaced with modern unicode equivalents (e.g boxdrawing glyphs)
if {[punk::ansi::ta::detect_g0 $text]} {
set text [convert_g0 $text];#Convert ansi borders to unicode line drawing instead of ascii letters
}
set parts [punk::ansi::ta::split_codes $text]
#todo - try: join [lsearch -stride 2 -index 0 -subindices -all -inline $parts *] ""
# - (if/when lsearch -stride bug fixed)
join [lmap v [lseq 0 to [llength $parts] by 2] {lindex $parts $v}] "" ;#slightly slower than above foreach
}
#interp alias {} stripansi {} ::punk::ansi::ansistrip #interp alias {} stripansi {} ::punk::ansi::ansistrip
proc ansistripraw {text} { proc ansistripraw {text} {
#*** !doctools #*** !doctools
@ -3842,8 +3873,9 @@ tcl::namespace::eval punk::ansi {
proc sgr_merge {codelist args} { proc sgr_merge {codelist args} {
set allparts [list] set allparts [list]
foreach c $codelist { foreach c $codelist {
set cparts [punk::ansi::ta::split_codes_single $c] #set cparts [punk::ansi::ta::split_codes_single $c]
lappend allparts {*}[lsearch -all -inline -not $cparts ""] #lappend allparts {*}[lsearch -all -inline -not $cparts ""]
lappend allparts {*}[punk::ansi::ta::get_codes_single $c]
} }
sgr_merge_singles $allparts {*}$args sgr_merge_singles $allparts {*}$args
} }
@ -4362,10 +4394,12 @@ tcl::namespace::eval punk::ansi::ta {
# -- --- --- --- # -- --- --- ---
variable re_ansi_detect1 "${re_csi_code}|${re_esc_osc1}|${re_esc_osc2}|${re_esc_osc3}|${re_standalones}|${re_ST}|${re_g0_open}|${re_g0_close}" variable re_ansi_detect1 "${re_csi_code}|${re_esc_osc1}|${re_esc_osc2}|${re_esc_osc3}|${re_standalones}|${re_ST}|${re_g0_open}|${re_g0_close}"
# -- --- --- --- # -- --- --- ---
#handrafted TRIE version of above. Somewhat difficult to construct and maintain. TODO - find a regext TRIE generator that works with Tcl regexes #handrafted TRIE version of above. Somewhat difficult to construct and maintain. TODO - find a regexp TRIE generator that works with Tcl regexes
#This does make things quicker - but it's too early to finalise the detect/split regexes (e.g missing \U0090 ) - will need to be redone. #This does make things quicker - but it's too early to finalise the detect/split regexes (e.g missing \U0090 ) - will need to be redone.
variable re_ansi_detect {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c} #variable re_ansi_detect {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c}
variable re_ansi_detect {(?:\x1b(?:\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\((?:0|B)|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c}
# -- --- --- --- # -- --- --- ---
#variable re_csi_code {(?:\x1b\[|\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]}
@ -4389,9 +4423,7 @@ tcl::namespace::eval punk::ansi::ta {
#can be used on dicts - but will check keys too. keys could also contain ansi and have escapes #can be used on dicts - but will check keys too. keys could also contain ansi and have escapes
proc detect_in_list {list} { proc detect_in_list {list} {
detect [join $list " "] #loop is commonly faster than using join. (certain ansi codes triggering list quoting? review)
}
proc detect_in_list2 {list} {
foreach item $list { foreach item $list {
if {[detect $item]} { if {[detect $item]} {
return 1 return 1
@ -4399,6 +4431,11 @@ tcl::namespace::eval punk::ansi::ta {
} }
return 0 return 0
} }
#surprisingly - the ::join operation can be (relatively) slow on lists containing ansi
proc detect_in_list2 {list} {
detect [join $list " "]
}
proc detect_g0 {text} [string map [list <re> [list $re_g0_group]] { proc detect_g0 {text} [string map [list <re> [list $re_g0_group]] {
regexp <re> $text regexp <re> $text
}] }]
@ -4580,13 +4617,108 @@ tcl::namespace::eval punk::ansi::ta {
#like split_codes - but each ansi-escape is split out separately (with empty string of plaintext between codes so odd/even plain ansi still holds) #like split_codes - but each ansi-escape is split out separately (with empty string of plaintext between codes so odd/even plain ansi still holds)
#- the slightly simpler regex than split_codes means that it will be slightly faster than keeping the codes grouped. #- the slightly simpler regex than split_codes means that it will be slightly faster than keeping the codes grouped.
proc split_codes_single {text} { proc split_codes_single2 {text} {
variable re_ansi_split variable re_ansi_split
return [_perlish_split $re_ansi_split $text] return [_perlish_split $re_ansi_split $text]
} }
proc split_codes_single3 {text} {
#copy from re_ansi_split
_perlish_split {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c} $text
}
proc split_codes_single4 {text} {
if {$text eq ""} {
return {}
}
variable re_ansi_split
set re $re_ansi_split
#variable re_ansi_detect1
#set re $re_ansi_detect1
set list [list]
set start 0
#set re {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c}
#We can get $matchEnd < $matchStart; we need to ensure there is an exit condition for non-greedy empty results REVIEW
#while {[regexp -start $start -indices -- {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c} $text match]} {}
while {[regexp -start $start -indices -- $re $text match]} {
lassign $match matchStart matchEnd
#puts "->start $start ->match $matchStart $matchEnd"
lappend list [tcl::string::range $text $start $matchStart-1]
if {$matchEnd < $matchStart} {
set e $matchStart
incr start
} else {
set e $matchEnd
set start [expr {$matchEnd+1}]
}
lappend list [tcl::string::range $text $matchStart $e]
if {$start >= [tcl::string::length $text]} {
break
}
}
return [lappend list [tcl::string::range $text $start end]]
}
proc split_codes_single {text} {
if {$text eq ""} {
return {}
}
variable re_ansi_split
set next 0
set b -1
set list [list]
set coderanges [regexp -indices -all -inline -- $re_ansi_split $text]
foreach cr $coderanges {
lappend list [tcl::string::range $text $next [lindex $cr 0]-1] [tcl::string::range $text [lindex $cr 0] [lindex $cr 1]]
set next [expr {[lindex $cr 1]+1}]
}
lappend list [tcl::string::range $text $next end]
return $list
}
proc get_codes_single {text} {
variable re_ansi_split
regexp -all -inline -- $re_ansi_split $text
}
#review - tcl greedy expressions may match multiple in one element #review - tcl greedy expressions may match multiple in one element
proc _perlish_split {re text} { proc _perlish_split {re text} {
if {$text eq ""} {
return {}
}
set next 0
set b -1
set list [list]
set coderanges [regexp -indices -all -inline -- $re $text]
foreach cr $coderanges {
lappend list [tcl::string::range $text $next [lindex $cr 0]-1] [tcl::string::range $text [lindex $cr 0] [lindex $cr 1]]
set next [expr {[lindex $cr 1]+1}]
}
lappend list [tcl::string::range $text $next end]
return $list
}
proc _perlish_split2 {re text} {
if {$text eq ""} {
return {}
}
set list [list]
set start 0
#We can get $matchEnd < $matchStart; we need to ensure there is an exit condition for non-greedy empty results REVIEW
while {[regexp -start $start -indices -- $re $text match]} {
lassign $match matchStart matchEnd
#puts "->start $start ->match $matchStart $matchEnd"
if {$matchEnd < $matchStart} {
lappend list [tcl::string::range $text $start $matchStart-1] [tcl::string::range $text $matchStart $matchStart]
incr start
} else {
lappend list [tcl::string::range $text $start $matchStart-1] [tcl::string::range $text $matchStart $matchEnd]
set start [expr {$matchEnd+1}]
}
if {$start >= [tcl::string::length $text]} {
break
}
}
return [lappend list [tcl::string::range $text $start end]]
}
proc _perlish_split3 {re text} {
if {$text eq ""} { if {$text eq ""} {
return {} return {}
} }

721
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/args-0.1.0.tm

File diff suppressed because it is too large Load Diff

6
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/assertion-0.1.0.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -18,7 +18,7 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::assertion 0 0.1.0] #[manpage_begin punkshell_module_punk::assertion 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {assertion alternative to control::assert}] [comment {-- Name section and table of contents description --}] #[titledesc {assertion alternative to control::assert}] [comment {-- Name section and table of contents description --}]
#[moddesc {per-namespace assertions with }] [comment {-- Description at end of page heading --}] #[moddesc {per-namespace assertions with }] [comment {-- Description at end of page heading --}]

8
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/console-0.1.1.tm

@ -593,7 +593,13 @@ namespace eval punk::console {
if {!$::punk::console::ansi_available} { if {!$::punk::console::ansi_available} {
return "" return ""
} }
set callid [info cmdcount] ;#info cmdcount is almost as fast as clock clicks - and whilst not unique in a long-running app(will wrap?) - fine for this context # -- ---
#set callid [info cmdcount] ;#info cmdcount is fast, though not as fast as clock clicks - and whilst not unique in a long-running app(will wrap?) - fine for this context
#clock clicks is approx 2x faster - but can sometimes give duplicates if called sequentially e.g list [clock clicks] [clock clicks]
#Either is suitable here, where subsequent calls will be relatively far apart in time
#speed of call insignificant compared to function
set callid [clock clicks]
# -- ---
# #
upvar ::punk::console::ansi_response_chunk accumulator upvar ::punk::console::ansi_response_chunk accumulator

1
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/docgen-0.1.0.tm

@ -31,6 +31,7 @@ namespace eval punk::docgen {
error "get_doctools_comments file '$fname' not found" error "get_doctools_comments file '$fname' not found"
} }
set fd [open $fname r] set fd [open $fname r]
chan conf $fd -translation binary
set data [read $fd] set data [read $fd]
close $fd close $fd
if {![string match "*#\**!doctools*" $data]} { if {![string match "*#\**!doctools*" $data]} {

932
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/lib-0.1.1.tm

File diff suppressed because it is too large Load Diff

6
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/mix/commandset/doc-0.1.0.tm

@ -48,6 +48,7 @@ namespace eval punk::mix::commandset::doc {
set oldfiles [punk::path::treefilenames -dir $projectdir/src/doc _module_*.man] set oldfiles [punk::path::treefilenames -dir $projectdir/src/doc _module_*.man]
foreach maybedoomed $oldfiles { foreach maybedoomed $oldfiles {
set fd [open $maybedoomed r] set fd [open $maybedoomed r]
chan conf $fd -translation binary
set data [read $fd] set data [read $fd]
close $fd close $fd
if {[string match "*--- punk::docgen overwrites *" $data]} { if {[string match "*--- punk::docgen overwrites *" $data]} {
@ -170,7 +171,7 @@ namespace eval punk::mix::commandset::doc {
-- -type none -optional 1 -help "end of options marker --" -- -type none -optional 1 -help "end of options marker --"
-individual -type boolean -default 1 -individual -type boolean -default 1
*values -min 0 -max -1 *values -min 0 -max -1
patterns -default {*} -type any -multiple 1 patterns -default {*.man} -type any -multiple 1
} $args] } $args]
set opt_individual [tcl::dict::get $argd opts -individual] set opt_individual [tcl::dict::get $argd opts -individual]
set patterns [tcl::dict::get $argd values patterns] set patterns [tcl::dict::get $argd values patterns]
@ -190,7 +191,7 @@ namespace eval punk::mix::commandset::doc {
set docroot $projectdir/src/doc set docroot $projectdir/src/doc
cd $docroot cd $docroot
if {!$opt_individual && "*" in $patterns} { if {!$opt_individual && "*.man" in $patterns} {
if {[catch { if {[catch {
dtplite validate $docroot dtplite validate $docroot
} errM]} { } errM]} {
@ -251,6 +252,7 @@ namespace eval punk::mix::commandset::doc {
append docgen_header_comments {[comment {--- punk::docgen DO NOT EDIT DOCS HERE UNLESS YOU REMOVE THESE COMMENT LINES ---}]} \n append docgen_header_comments {[comment {--- punk::docgen DO NOT EDIT DOCS HERE UNLESS YOU REMOVE THESE COMMENT LINES ---}]} \n
append docgen_header_comments {[comment {--- punk::docgen overwrites this file ---}]} \n append docgen_header_comments {[comment {--- punk::docgen overwrites this file ---}]} \n
foreach fullpath $matched_paths { foreach fullpath $matched_paths {
puts stdout "do_docgen processing: $fullpath"
set doctools [punk::docgen::get_doctools_comments $fullpath] set doctools [punk::docgen::get_doctools_comments $fullpath]
if {$doctools ne ""} { if {$doctools ne ""} {
set fname [file tail $fullpath] set fname [file tail $fullpath]

96
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/mix/commandset/scriptwrap-0.1.0.tm

@ -1,5 +1,5 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use 'pmix make' or src/make.tcl to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use 'dev make' or src/make.tcl to update from <pkg>-buildversion.txt
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -13,19 +13,70 @@
# @@ Meta End # @@ Meta End
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[manpage_begin punkshell_module_scriptwrap 0 0.1.0]
#[copyright "2024"]
#[titledesc {scriptwrap polyglot tool}] [comment {-- Name section and table of contents description --}]
#[moddesc {scriptwrap tool}] [comment {-- Description at end of page heading --}]
#[require punk::mix::commandset::scriptwrap]
#[keywords module commandset launcher scriptwrap]
#[description]
#[para] -
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[section Overview]
#[para] overview of scriptwrap
#[subsection Concepts]
#[para] -
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Requirements
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[subsection dependencies]
#[para] packages used by poshinfo
#[list_begin itemized]
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Requirements ## Requirements
##e.g package require frobz ##e.g package require frobz
package require punk::lib
package require punk::args
package require punk::mix package require punk::mix
package require punk::mix::base package require punk::mix::base
package require punk::fileline package require punk::fileline
#*** !doctools
#[item] [package {Tcl 8.6}]
#[item] [package {punk::lib}]
#[item] [package {punk::args}]
#[item] [package {punk::mix}]
#[item] [package {punk::base}]
#[item] [package {punk::fileline}]
#*** !doctools
#[list_end]
#*** !doctools
#[section API]
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
namespace eval punk::mix::commandset::scriptwrap { namespace eval punk::mix::commandset::scriptwrap {
#*** !doctools
#[subsection {Namespace punk::mix::commandset::scriptwrap}]
#[para] Core API functions for punk::mix::commandset::scriptwrap
#[list_begin definitions]
namespace export * namespace export *
namespace eval fileline { namespace eval fileline {
@ -1192,22 +1243,33 @@ namespace eval punk::mix::commandset::scriptwrap {
return $result return $result
} }
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::mix::commandset::scriptwrap ---}]
namespace eval lib { namespace eval lib {
#*** !doctools
#[subsection {Namespace punk::mix::commandset::scriptwrap::lib}]
#[para] Library API functions for punk::mix::commandset::scriptwrap
#[list_begin definitions]
proc get_wrapper_folders {args} { proc get_wrapper_folders {args} {
set argd [punk::args::get_dict { set argd [punk::args::get_dict {
#*** !doctools #*** !doctools
#[call [fun get_wrapper_folders] [arg args] ] #[call [fun get_wrapper_folders] [arg args] ]
#[para] Return list of dicts representing wrapper folders. keys: basefolder sourceinfo #[para] Return list of dicts representing wrapper folders in the project. keys: basefolder sourceinfo
#[para] Arguments: #[para] Arguments:
# [list_begin arguments] # [list_begin arguments]
# [arg_def string args] name-value pairs -scriptpath <path> # [arg_def string args] name-value pairs -scriptpath <path>
# [list_end] # [list_end]
*proc -name get_wrapper_folders *id punk::mix::commandset::scriptwrap
*proc -name punk::mix::commandset::get_wrapper_folders
*opts -anyopts 0 *opts -anyopts 0
-scriptpath -default "" -scriptpath -default "" -type directory\
-help ""
#todo -help folder within a punk.templates provided area???
*values -minvalues 0 -maxvalues 0 *values -minvalues 0 -maxvalues 0
} $args] } $args]
@ -1377,11 +1439,16 @@ namespace eval punk::mix::commandset::scriptwrap {
return [dict create ok $status linecount [llength $lines] data $tags errors $errors] return [dict create ok $status linecount [llength $lines] data $tags errors $errors]
} }
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::mix::commandset::scriptwrap::lib ---}]
} }
namespace eval batchlib { namespace eval batchlib {
# #*** !doctools
#[subsection {Namespace punk::mix::commandset::scriptwrap::batchlib}]
#[para] Utility funcions for processing windows .bat files
#[list_begin definitions]
#see also: https://www.dostips.com/forum/viewtopic.php?t=3803 'Rules for label names vs GOTO and CALL #see also: https://www.dostips.com/forum/viewtopic.php?t=3803 'Rules for label names vs GOTO and CALL
# review - we may need different get_callsite_label functions? # review - we may need different get_callsite_label functions?
@ -1647,23 +1714,13 @@ namespace eval punk::mix::commandset::scriptwrap {
#return rawlabel so we can see it as it appears in the data - as opposed to how it is interpreted as a label by cmd.exe #return rawlabel so we can see it as it appears in the data - as opposed to how it is interpreted as a label by cmd.exe
return [list labelfound 1 label $label rawlabel $rawlabel] return [list labelfound 1 label $label rawlabel $rawlabel]
} }
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::mix::commandset::scriptwrap::batchlib ---}]
} }
} }
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Ready ## Ready
package provide punk::mix::commandset::scriptwrap [namespace eval punk::mix::commandset::scriptwrap { package provide punk::mix::commandset::scriptwrap [namespace eval punk::mix::commandset::scriptwrap {
@ -1671,3 +1728,6 @@ package provide punk::mix::commandset::scriptwrap [namespace eval punk::mix::com
set version 0.1.0 set version 0.1.0
}] }]
return return
#*** !doctools
#[manpage_end]

14
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/nav/fs-0.1.0.tm

@ -20,10 +20,10 @@
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::nav::fs 0 0.1.0] #[manpage_begin shellspy_module_punk::nav::fs 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {punk::nav::fs console filesystem navigation}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {fs nav}] [comment {-- Description at end of page heading --}]
#[require punk::nav::fs] #[require punk::nav::fs]
#[keywords module] #[keywords module filesystem terminal]
#[description] #[description]
#[para] - #[para] -
@ -936,7 +936,7 @@ tcl::namespace::eval punk::nav::fs {
#windows doesn't consider dotfiles as hidden - mac does (?) #windows doesn't consider dotfiles as hidden - mac does (?)
#we add dotfiles to flaggedhidden list in case there is some other mechanism that has flagged items as hidden #we add dotfiles to flaggedhidden list in case there is some other mechanism that has flagged items as hidden
if {$::tcl_platform(platform) ne "windows"} { if {$::tcl_platform(platform) ne "windows"} {
lappend flaggedhidden {*}[lsearch -all -inline [concat $dirs $files] ".*"] lappend flaggedhidden {*}[lsearch -all -inline [list {*}$dirs {*}$files] ".*"]
#e.g we can have dupes in the case where there are vfs mounted files that appear as dirs #e.g we can have dupes in the case where there are vfs mounted files that appear as dirs
#as we will need to do a (nat)sort as a last step - it will be faster to not sort items prematurely #as we will need to do a (nat)sort as a last step - it will be faster to not sort items prematurely
#set flaggedhidden [lsort -unique $flaggedhidden] #set flaggedhidden [lsort -unique $flaggedhidden]
@ -977,7 +977,8 @@ tcl::namespace::eval punk::nav::fs {
# -- --- # -- ---
foreach nm [concat $dirs $files] { #jmn
foreach nm [list {*}$dirs {*}$files] {
if {[punk::winpath::illegalname_test $nm]} { if {[punk::winpath::illegalname_test $nm]} {
lappend nonportable $nm lappend nonportable $nm
} }
@ -1272,7 +1273,8 @@ tcl::namespace::eval punk::nav::fs {
#set widest1 [punk::pipedata [list {*}$dirs ""] {lmap v $data {string length $v}} {tcl::mathfunc::max {*}$data}] #set widest1 [punk::pipedata [list {*}$dirs ""] {lmap v $data {string length $v}} {tcl::mathfunc::max {*}$data}]
set widest1 [tcl::mathfunc::max {*}[lmap v [concat $dirs [list ""]] {string length $v}]] #set widest1 [tcl::mathfunc::max {*}[lmap v [concat $dirs [list ""]] {string length $v}]]
set widest1 [tcl::mathfunc::max {*}[lmap v [list {*}$dirs ""] {string length $v}]]
set displaylist [list] set displaylist [list]
set col1 [string repeat " " [expr {$widest1 + 2}]] set col1 [string repeat " " [expr {$widest1 + 2}]]

7
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/ns-0.1.0.tm

@ -755,7 +755,9 @@ tcl::namespace::eval punk::ns {
set seencmds [list] set seencmds [list]
set masked [list] ;# set masked [list] ;#
set cmdsets [concat $procs $ensembles $ooclasses $ooobjects $ooprivateobjects $ooprivateclasses $native $interps $coroutines $zlibstreams] #jmn
#set cmdsets [concat $procs $ensembles $ooclasses $ooobjects $ooprivateobjects $ooprivateclasses $native $interps $coroutines $zlibstreams]
set cmdsets [list {*}$procs {*}$ensembles {*}$ooclasses {*}$ooobjects {*}$ooprivateobjects {*}$ooprivateclasses {*}$native {*}$interps {*}$coroutines {*}$zlibstreams]
foreach a $aliases { foreach a $aliases {
if {[list c $a] in $elements} { if {[list c $a] in $elements} {
#possibly an ordinary alias - or a renamed alias that is masked by a proc/ensemble/oo #possibly an ordinary alias - or a renamed alias that is masked by a proc/ensemble/oo
@ -1691,7 +1693,8 @@ tcl::namespace::eval punk::ns {
proc _pkguse_vars {varnames} { proc _pkguse_vars {varnames} {
while {"pkguse_vars_[incr n]" in $varnames} {} while {"pkguse_vars_[incr n]" in $varnames} {}
return [concat $varnames pkguse_vars_$n] #return [concat $varnames pkguse_vars_$n]
return [list {*}$varnames pkguse_vars_$n]
} }
proc tracehandler_nowrite {args} { proc tracehandler_nowrite {args} {
error "readonly in use block" error "readonly in use block"

10
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/packagepreference-0.1.0.tm

@ -1,5 +1,5 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm # module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
@ -18,12 +18,12 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::packagepreference 0 0.1.0] #[manpage_begin punkshell_module_punk::packagepreference 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {punkshell package/module loading}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {package/module load}] [comment {-- Description at end of page heading --}]
#[require punk::packagepreference] #[require punk::packagepreference]
#[keywords module] #[keywords module package]
#[description] #[description]
#[para] - #[para] -

2
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/repo-0.1.1.tm

@ -710,7 +710,7 @@ namespace eval punk::repo {
lappend col2_values [dict get $summary_dict $f] lappend col2_values [dict get $summary_dict $f]
} }
set title1 "" set title1 ""
set widest1 [tcl::mathfunc::max {*}[lmap v [concat [list $title1] $col1_fields] {string length $v}]] set widest1 [tcl::mathfunc::max {*}[lmap v [list $title1 {*}$col1_fields] {string length $v}]]
set col1 [string repeat " " $widest1] set col1 [string repeat " " $widest1]
set title2 "" set title2 ""
set widest2 [tcl::mathfunc::max {*}[lmap v [concat [list $title2] $col2_values] {string length $v}]] set widest2 [tcl::mathfunc::max {*}[lmap v [concat [list $title2] $col2_values] {string length $v}]]

85
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/trie-0.1.0.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -18,7 +18,7 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::trie 0 0.1.0] #[manpage_begin punkshell_module_punk::trie 0 0.1.0]
#[copyright "2010"] #[copyright "2010"]
#[titledesc {punk::trie API}] [comment {-- Name section and table of contents description --}] #[titledesc {punk::trie API}] [comment {-- Name section and table of contents description --}]
#[moddesc {punk::trie}] [comment {-- Description at end of page heading --}] #[moddesc {punk::trie}] [comment {-- Description at end of page heading --}]
@ -64,34 +64,34 @@ package require Tcl 8.6-
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# oo::class namespace # oo::class namespace
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#tcl::namespace::eval punk::trie::class { # #tcl::namespace::eval punk::trie::class {
#*** !doctools
#[subsection {Namespace punk::trie::class}]
#[para] class definitions
#if {[tcl::info::commands [tcl::namespace::current]::interface_sample1] eq ""} {
#*** !doctools
#[list_begin enumerated]
# oo::class create interface_sample1 {
# #*** !doctools # #*** !doctools
# #[enum] CLASS [class interface_sample1] # #[subsection {Namespace punk::trie::class}]
# #[list_begin definitions] # #[para] class definitions
# #if {[tcl::info::commands [tcl::namespace::current]::interface_sample1] eq ""} {
# method test {arg1} {
# #*** !doctools # #*** !doctools
# #[call class::interface_sample1 [method test] [arg arg1]] # #[list_begin enumerated]
# #[para] test method #
# puts "test: $arg1" # # oo::class create interface_sample1 {
# } # # #*** !doctools
# # #[enum] CLASS [class interface_sample1]
# # #[list_begin definitions]
#
# # method test {arg1} {
# # #*** !doctools
# # #[call class::interface_sample1 [method test] [arg arg1]]
# # #[para] test method
# # puts "test: $arg1"
# # }
#
# # #*** !doctools
# # #[list_end] [comment {-- end definitions interface_sample1}]
# # }
#
# #*** !doctools # #*** !doctools
# #[list_end] [comment {-- end definitions interface_sample1}] # #[list_end] [comment {--- end class enumeration ---}]
# } # #}
# #}
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
#}
#}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
@ -114,11 +114,18 @@ tcl::namespace::eval punk::trie {
} }
#namespace path ::punk::trie::log #namespace path ::punk::trie::log
#[para] class definitions #*** !doctools
#[subsection {Namespace punk::trie}]
#[para] Core API functions for punk::trie
if {[tcl::info::commands [tcl::namespace::current]::trieclass] eq ""} { if {[tcl::info::commands [tcl::namespace::current]::trieclass] eq ""} {
#*** !doctools #*** !doctools
#[list_begin enumerated] #[list_begin enumerated]
oo::class create [tcl::namespace::current]::trieclass { oo::class create [tcl::namespace::current]::trieclass {
#*** !doctools
#[enum] CLASS [class trieclass]
#[list_begin definitions]
variable trie id variable trie id
method matches {t what} { method matches {t what} {
@ -412,9 +419,8 @@ tcl::namespace::eval punk::trie {
} }
set acc {} set acc {}
dict for {key val} $t {
foreach key [dict keys $t] { lappend acc {*}[my flatten $val $prefix$key]
lappend acc {*}[my flatten [dict get $t $key] $prefix$key]
} }
return $acc return $acc
} }
@ -484,8 +490,14 @@ tcl::namespace::eval punk::trie {
my insert $a my insert $a
} }
} }
#*** !doctools
#[list_end] [comment {--- end definitions ---}]
} }
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
set testlist [list blah x black blacken] set testlist [list blah x black blacken]
proc test1 {} { proc test1 {} {
#JMN #JMN
@ -516,14 +528,9 @@ tcl::namespace::eval punk::trie {
# #[list_end] [comment {-- end definitions interface_sample1}] # #[list_end] [comment {-- end definitions interface_sample1}]
# } # }
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
} }
#*** !doctools
#[subsection {Namespace punk::trie}]
#[para] Core API functions for punk::trie
#[list_begin definitions]
@ -542,8 +549,6 @@ tcl::namespace::eval punk::trie {
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::trie ---}]
} }
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++

104
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/zip-0.1.1.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -11,7 +11,7 @@
# @@ Meta Begin # @@ Meta Begin
# Application punk::zip 0.1.1 # Application punk::zip 0.1.1
# Meta platform tcl # Meta platform tcl
# Meta license <unspecified> # Meta license MIT
# @@ Meta End # @@ Meta End
@ -19,12 +19,12 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::zip 0 0.1.1] #[manpage_begin punkshell_module_punk::zip 0 0.1.1]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {Module API}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {-}] [comment {-- Description at end of page heading --}]
#[require punk::zip] #[require punk::zip]
#[keywords module] #[keywords module zip fileformat]
#[description] #[description]
#[para] - #[para] -
@ -60,38 +60,6 @@ package require punk::args
#*** !doctools #*** !doctools
#[section API] #[section API]
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# oo::class namespace
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#tcl::namespace::eval punk::zip::class {
#*** !doctools
#[subsection {Namespace punk::zip::class}]
#[para] class definitions
#if {[tcl::info::commands [tcl::namespace::current]::interface_sample1] eq ""} {
#*** !doctools
#[list_begin enumerated]
# oo::class create interface_sample1 {
# #*** !doctools
# #[enum] CLASS [class interface_sample1]
# #[list_begin definitions]
# method test {arg1} {
# #*** !doctools
# #[call class::interface_sample1 [method test] [arg arg1]]
# #[para] test method
# puts "test: $arg1"
# }
# #*** !doctools
# #[list_end] [comment {-- end definitions interface_sample1}]
# }
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
#}
#}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# Base namespace # Base namespace
@ -541,37 +509,60 @@ tcl::namespace::eval punk::zip {
#todo - doctools - [arg ?globs...?] syntax? #todo - doctools - [arg ?globs...?] syntax?
#*** !doctools #*** !doctools
#[call [fun mkzip] [arg ?options?] [arg filename] ] #[call [fun mkzip]\
#[para] Create a zip archive in 'filename' # [opt "[option -offsettype] [arg offsettype]"]\
# [opt "[option -return] [arg returntype]"]\
# [opt "[option -zipkit] [arg 0|1]"]\
# [opt "[option -runtime] [arg preamble_filename]"]\
# [opt "[option -comment] [arg zipfilecomment]"]\
# [opt "[option -directory] [arg dir_to_zip]"]\
# [opt "[option -base] [arg archive_root]"]\
# [opt "[option -exclude] [arg globlist]"]\
# [arg zipfilename]\
# [arg ?glob...?]]
#[para] Create a zip archive in 'zipfilename'
#[para] If a file already exists, an error will be raised. #[para] If a file already exists, an error will be raised.
#[para] Call 'punk::zip::mkzip' with no arguments for usage display.
set argd [punk::args::get_dict { set argd [punk::args::get_dict {
*proc -name punk::zip::mkzip -help "Create a zip archive in 'filename'" *proc -name punk::zip::mkzip\
-help "Create a zip archive in 'filename'"
*opts *opts
-offsettype -default "archive" -choices {archive file} -help "zip offsets stored relative to start of entire file or relative to start of zip-archive -offsettype -default "archive" -choices {archive file}\
-help "zip offsets stored relative to start of entire file or relative to start of zip-archive
Only relevant if the created file has a script/runtime prefix. Only relevant if the created file has a script/runtime prefix.
" "
-return -default "pretty" -choices {pretty list none} -help "mkzip can return a list of the files and folders added to the archive -return -default "pretty" -choices {pretty list none}\
-help "mkzip can return a list of the files and folders added to the archive
the option -return pretty is the default and uses the punk::lib pdict/plist system the option -return pretty is the default and uses the punk::lib pdict/plist system
to return a formatted list for the terminal to return a formatted list for the terminal
" "
-zipkit -default 0 -type none -help "whether to add mounting script -zipkit -default 0 -type none\
-help "whether to add mounting script
mutually exclusive with -runtime option mutually exclusive with -runtime option
currently vfs::zip based - todo - autodetect zipfs/vfs with pref for zipfs currently vfs::zip based - todo - autodetect zipfs/vfs with pref for zipfs
" "
-runtime -default "" -help "specify a prefix file -runtime -default ""\
-help "specify a prefix file
e.g punk::zip::mkzip -runtime unzipsfx.exe -directory subdir -base subdir output.zip e.g punk::zip::mkzip -runtime unzipsfx.exe -directory subdir -base subdir output.zip
will create a self-extracting zip archive from the subdir/ folder. will create a self-extracting zip archive from the subdir/ folder.
Expects runtime with no existing vfs attached (review) Expects runtime with no existing vfs attached (review)
" "
-comment -default "" -help "An optional comment for the archive" -comment -default ""\
-directory -default "" -help "The new zip archive will scan for contents within this folder or current directory if not provided" -help "An optional comment for the archive"
-base -default "" -help "The new zip archive will be rooted in this directory if provided -directory -default ""\
-help "The new zip archive will scan for contents within this folder or current directory if not provided."
-base -default ""\
-help "The new zip archive will be rooted in this directory if provided
it must be a parent of -directory or the same path as -directory" it must be a parent of -directory or the same path as -directory"
-exclude -default {CVS/* */CVS/* *~ ".#*" "*/.#*"} -exclude -default {CVS/* */CVS/* *~ ".#*" "*/.#*"}
*values -min 1 -max -1 *values -min 1 -max -1
filename -type file -default "" -help "name of zipfile to create" filename -type file -default ""\
globs -default {*} -multiple 1 -help "list of glob patterns to match. -help "name of zipfile to create"
Only directories with matching files will be included in the archive" globs -default {*} -multiple 1\
-help "list of glob patterns to match.
Only directories with matching files will be included in the archive."
} $args] } $args]
set filename [dict get $argd values filename] set filename [dict get $argd values filename]
@ -733,7 +724,7 @@ tcl::namespace::eval punk::zip {
} }
set cdoffset [tell $zf] set cdoffset [tell $zf]
set endrec [binary format a4ssssiis PK\05\06 0 0 \ set endrec [binary format a4ssssiis PK\05\06 0 0 \
$count $count [string length $cd] $cdoffset\ $count $count [string length $cd] [expr {$cdoffset - $dataStartOffset}]\
[string length $opts(-comment)]] [string length $opts(-comment)]]
append endrec $opts(-comment) append endrec $opts(-comment)
puts -nonewline $zf $cd puts -nonewline $zf $cd
@ -793,17 +784,6 @@ tcl::namespace::eval punk::zip::lib {
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[section Internal]
#tcl::namespace::eval punk::zip::system {
#*** !doctools
#[subsection {Namespace punk::zip::system}]
#[para] Internal functions that are not part of the API
#}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Ready ## Ready
package provide punk::zip [tcl::namespace::eval punk::zip { package provide punk::zip [tcl::namespace::eval punk::zip {

1173
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/textblock-0.1.2.tm

File diff suppressed because it is too large Load Diff

2
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/fauxlink-0.1.0.tm

@ -34,7 +34,7 @@
#[para] The + symbol substitutes for forward-slashes. #[para] The + symbol substitutes for forward-slashes.
#[para] Other chars can be encoded using url-like encoding - (but only up to %7E !) #[para] Other chars can be encoded using url-like encoding - (but only up to %7E !)
#[para] We deliberately treat higher % sequences literally. #[para] We deliberately treat higher % sequences literally.
#[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [heart]) can remain literal for linking to urls. #[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [lb]heart[rb]) can remain literal for linking to urls.
#[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23 #[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23
#[para] e.g a link to a file file#A.txt in parent dir could be: #[para] e.g a link to a file file#A.txt in parent dir could be:
#[para] file%23A.txt#..+file%23A.txt.fxlnk #[para] file%23A.txt#..+file%23A.txt.fxlnk

4
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/fauxlink-0.1.1.tm

@ -34,7 +34,7 @@
#[para] The + symbol substitutes for forward-slashes. #[para] The + symbol substitutes for forward-slashes.
#[para] Other chars can be encoded using url-like encoding - (but only up to %7E !) #[para] Other chars can be encoded using url-like encoding - (but only up to %7E !)
#[para] We deliberately treat higher % sequences literally. #[para] We deliberately treat higher % sequences literally.
#[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [heart]) can remain literal for linking to urls. #[para] This means actual uri::urn encoded unicode sequences (e.g %E2%99%A5 [lb]heart[rb]) can remain literal for linking to urls.
#[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23 #[para] e.g if an actual + or # is required in a filename or path segment they can be encoded as %2B & %23
#[para] e.g a link to a file file#A.txt in parent dir could be: #[para] e.g a link to a file file#A.txt in parent dir could be:
#[para] file%23A.txt#..+file%23A.txt.fxlnk #[para] file%23A.txt#..+file%23A.txt.fxlnk
@ -46,7 +46,7 @@
#[para] The target being fully specified in the name means the file doesn't have to be read for the target to be determined #[para] The target being fully specified in the name means the file doesn't have to be read for the target to be determined
#[para] Extensions to behaviour should be added in the file as text data in Toml format, #[para] Extensions to behaviour should be added in the file as text data in Toml format,
#[para] with custom data being under a single application-chosen table name #[para] with custom data being under a single application-chosen table name
#[para] The toplevel Toml table [fauxlink] is reserved for core extensions to this system. #[para] The toplevel Toml table [lb]fauxlink[rb] is reserved for core extensions to this system.
#[para] Aside from the 2 used for delimiting (+ #) #[para] Aside from the 2 used for delimiting (+ #)
#[para] certain characters which might normally be allowed in filesystems are required to be encoded #[para] certain characters which might normally be allowed in filesystems are required to be encoded
#[para] e.g space and tab are required to be %20 %09 #[para] e.g space and tab are required to be %20 %09

5
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/overtype-1.6.5.tm

@ -1366,7 +1366,8 @@ tcl::namespace::eval overtype {
if {$overflowlength > 0} { if {$overflowlength > 0} {
#overlay line wider or equal #overlay line wider or equal
set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -overflow [tcl::dict::get $opts -overflow] -exposed1 $opt_exposed1 -exposed2 $opt_exposed2 $undertext $overtext] #review - we still expand_right for centred for now.. possibly should expand_both with ellipsis each end?
set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -expand_right [tcl::dict::get $opts -overflow] -exposed1 $opt_exposed1 -exposed2 $opt_exposed2 $undertext $overtext]
set rendered [tcl::dict::get $rinfo result] set rendered [tcl::dict::get $rinfo result]
set overflow_right [tcl::dict::get $rinfo overflow_right] set overflow_right [tcl::dict::get $rinfo overflow_right]
set unapplied [tcl::dict::get $rinfo unapplied] set unapplied [tcl::dict::get $rinfo unapplied]
@ -1547,7 +1548,7 @@ tcl::namespace::eval overtype {
} else { } else {
#padded overtext #padded overtext
#lappend outputlines [renderline -insert_mode 0 -transparent $opt_transparent -startcolumn [expr {$left_exposed + 1}] $undertext $overtext] #lappend outputlines [renderline -insert_mode 0 -transparent $opt_transparent -startcolumn [expr {$left_exposed + 1}] $undertext $overtext]
#Note - we still need overflow here - as although the overtext is short - it may oveflow due to the startoffset #Note - we still need overflow(exapnd_right) here - as although the overtext is short - it may oveflow due to the startoffset
set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -expand_right $opt_overflow -startcolumn [expr {$left_exposed + 1 + $startoffset}] $undertext $overtext] set rinfo [renderline -info 1 -insert_mode 0 -transparent $opt_transparent -expand_right $opt_overflow -startcolumn [expr {$left_exposed + 1 + $startoffset}] $undertext $overtext]
lappend outputlines [tcl::dict::get $rinfo result] lappend outputlines [tcl::dict::get $rinfo result]
} }

23
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk-0.1.tm

@ -7326,21 +7326,28 @@ namespace eval punk {
if {$topic in [list tcl]} { if {$topic in [list tcl]} {
if {[punk::lib::system::has_tclbug_script_var]} { if {[punk::lib::check::has_tclbug_script_var]} {
append warningblock \n "minor warning: punk::lib::system::has_tclbug_script_var returned true! (string rep for list variable in script generated when script changed)" append warningblock \n "minor warning: punk::lib::check::has_tclbug_script_var returned true! (string rep for list variable in script generated when script changed)"
} }
if {[punk::lib::system::has_tclbug_safeinterp_compile]} { if {[punk::lib::check::has_tclbug_safeinterp_compile]} {
set indent " " set indent " "
append warningblock \n "[a+ web-red]warning: punk::lib::system::has_tclbug_safeinterp returned true!" \n append warningblock \n "[a+ web-red]warning: punk::lib::check::has_tclbug_safeinterp returned true!" \n
append warningblock "${indent}(ensemble commands not compiled in safe interps - heavy performance impact in safe interps)" \n append warningblock "${indent}(ensemble commands not compiled in safe interps - heavy performance impact in safe interps)" \n
append warningblock "${indent}see https://core.tcl-lang.org/tcl/tktview/1095bf7f75" append warningblock "${indent}see [punk::ansi::hyperlink https://core.tcl-lang.org/tcl/tktview/1095bf7f75]"
append warningblock [a] append warningblock [a]
} }
if {[punk::lib::system::has_tclbug_list_quoting_emptyjoin]} { if {[punk::lib::check::has_tclbug_lsearch_strideallinline]} {
set indent " " set indent " "
append warningblock \n "[a+ web-red]warning: punk::lib::system::has_tclbug_list_quoting returned true!" \n append warningblock \n "[a+ web-red]warning: punk::lib::check::has_tclbug_lsearch_strideallinline returned true!" \n
append warningblock "${indent}(lsearch using -stride -all -inline -subindices does not return values corresponding to subindex when a single -index value is used)" \n
append warningblock "${indent}see [punk::ansi::hyperlink https://core.tcl-lang.org/tcl/tktview/5a1aaa201d]"
append warningblock [a]
}
if {[punk::lib::check::has_tclbug_list_quoting_emptyjoin]} {
set indent " "
append warningblock \n "[a+ web-red]warning: punk::lib::check::has_tclbug_list_quoting returned true!" \n
append warningblock "${indent}lists elements not properly quoted in some cases. e.g 'list {*}[lindex {etc #foo} 1] {*}[list]' (#foo not braced)" \n append warningblock "${indent}lists elements not properly quoted in some cases. e.g 'list {*}[lindex {etc #foo} 1] {*}[list]' (#foo not braced)" \n
append warningblock "${indent}see https://core.tcl-lang.org/tcl/tktview/e38dce74e2" append warningblock "${indent}see [punk::ansi::hyperlink https://core.tcl-lang.org/tcl/tktview/e38dce74e2]"
} }
} }

10
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/aliascore-0.1.0.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -18,12 +18,12 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::aliascore 0 0.1.0] #[manpage_begin punkshell_module_punk::aliascore 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {punkshell command aliases}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {-}] [comment {-- Description at end of page heading --}]
#[require punk::aliascore] #[require punk::aliascore]
#[keywords module] #[keywords module alias]
#[description] #[description]
#[para] - #[para] -

150
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/ansi-0.1.1.tm

@ -417,8 +417,11 @@ tcl::namespace::eval punk::ansi {
convert*\ convert*\
clear*\ clear*\
cursor_*\ cursor_*\
delete*\
detect*\ detect*\
erase*\
get_*\ get_*\
hyperlink\
move*\ move*\
reset*\ reset*\
ansistrip*\ ansistrip*\
@ -618,7 +621,7 @@ tcl::namespace::eval punk::ansi {
set subtitle [tcl::dict::get $picinfo status] set subtitle [tcl::dict::get $picinfo status]
} }
set title [tcl::dict::get $picinfo filename] set title [tcl::dict::get $picinfo filename]
set fr [textblock::frame -width $colwidth -subtitle $subtitle -title $title [tcl::dict::get $picinfo pic]] set fr [textblock::frame -checkargs 0 -width $colwidth -subtitle $subtitle -title $title [tcl::dict::get $picinfo pic]]
# -- --- --- --- # -- --- --- ---
#we need the max height of a row element to use join_basic instead of join below #we need the max height of a row element to use join_basic instead of join below
# -- --- --- --- # -- --- --- ---
@ -3096,6 +3099,18 @@ Brightblack 100 Brightred 101 Brightgreen 102 Brightyellow 103 Brightblu
return "\033\[?25l" return "\033\[?25l"
} }
# REVIEW - osc8 replays etc for split lines? - textblock
#the 'id' parameter logically connects split hyperlinks
proc hyperlink {uri {display ""}} {
if {$display eq ""} {
set display $uri
}
set params "" ;#todo e.g id=xyz123:foo=bar:baz=quux
set open "\x1b\]8\;$params\;$uri\x1b\\"
set close "\x1b\]8\;\;\x1b\\"
return ${open}${display}${close}
}
# -- --- --- --- --- # -- --- --- --- ---
proc move {row col} { proc move {row col} {
#*** !doctools #*** !doctools
@ -3634,11 +3649,27 @@ Brightblack 100 Brightred 101 Brightgreen 102 Brightyellow 103 Brightblu
} }
set parts [punk::ansi::ta::split_codes $text] set parts [punk::ansi::ta::split_codes $text]
set out "" set out ""
#todo - try: join [lsearch -stride 2 -index 0 -subindices -all -inline $parts *] ""
# - (if/when lsearch -stride bug fixed)
foreach {pt code} $parts { foreach {pt code} $parts {
append out $pt append out $pt
} }
return $out return $out
} }
proc ansistrip2 {text} {
#*** !doctools
#[call [fun ansistrip] [arg text] ]
#[para]Return a string with ansi codes stripped out
#[para]Alternate graphics chars are replaced with modern unicode equivalents (e.g boxdrawing glyphs)
if {[punk::ansi::ta::detect_g0 $text]} {
set text [convert_g0 $text];#Convert ansi borders to unicode line drawing instead of ascii letters
}
set parts [punk::ansi::ta::split_codes $text]
#todo - try: join [lsearch -stride 2 -index 0 -subindices -all -inline $parts *] ""
# - (if/when lsearch -stride bug fixed)
join [lmap v [lseq 0 to [llength $parts] by 2] {lindex $parts $v}] "" ;#slightly slower than above foreach
}
#interp alias {} stripansi {} ::punk::ansi::ansistrip #interp alias {} stripansi {} ::punk::ansi::ansistrip
proc ansistripraw {text} { proc ansistripraw {text} {
#*** !doctools #*** !doctools
@ -3842,8 +3873,9 @@ tcl::namespace::eval punk::ansi {
proc sgr_merge {codelist args} { proc sgr_merge {codelist args} {
set allparts [list] set allparts [list]
foreach c $codelist { foreach c $codelist {
set cparts [punk::ansi::ta::split_codes_single $c] #set cparts [punk::ansi::ta::split_codes_single $c]
lappend allparts {*}[lsearch -all -inline -not $cparts ""] #lappend allparts {*}[lsearch -all -inline -not $cparts ""]
lappend allparts {*}[punk::ansi::ta::get_codes_single $c]
} }
sgr_merge_singles $allparts {*}$args sgr_merge_singles $allparts {*}$args
} }
@ -4362,10 +4394,12 @@ tcl::namespace::eval punk::ansi::ta {
# -- --- --- --- # -- --- --- ---
variable re_ansi_detect1 "${re_csi_code}|${re_esc_osc1}|${re_esc_osc2}|${re_esc_osc3}|${re_standalones}|${re_ST}|${re_g0_open}|${re_g0_close}" variable re_ansi_detect1 "${re_csi_code}|${re_esc_osc1}|${re_esc_osc2}|${re_esc_osc3}|${re_standalones}|${re_ST}|${re_g0_open}|${re_g0_close}"
# -- --- --- --- # -- --- --- ---
#handrafted TRIE version of above. Somewhat difficult to construct and maintain. TODO - find a regext TRIE generator that works with Tcl regexes #handrafted TRIE version of above. Somewhat difficult to construct and maintain. TODO - find a regexp TRIE generator that works with Tcl regexes
#This does make things quicker - but it's too early to finalise the detect/split regexes (e.g missing \U0090 ) - will need to be redone. #This does make things quicker - but it's too early to finalise the detect/split regexes (e.g missing \U0090 ) - will need to be redone.
variable re_ansi_detect {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c} #variable re_ansi_detect {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c}
variable re_ansi_detect {(?:\x1b(?:\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\((?:0|B)|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c}
# -- --- --- --- # -- --- --- ---
#variable re_csi_code {(?:\x1b\[|\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]}
@ -4389,9 +4423,7 @@ tcl::namespace::eval punk::ansi::ta {
#can be used on dicts - but will check keys too. keys could also contain ansi and have escapes #can be used on dicts - but will check keys too. keys could also contain ansi and have escapes
proc detect_in_list {list} { proc detect_in_list {list} {
detect [join $list " "] #loop is commonly faster than using join. (certain ansi codes triggering list quoting? review)
}
proc detect_in_list2 {list} {
foreach item $list { foreach item $list {
if {[detect $item]} { if {[detect $item]} {
return 1 return 1
@ -4399,6 +4431,11 @@ tcl::namespace::eval punk::ansi::ta {
} }
return 0 return 0
} }
#surprisingly - the ::join operation can be (relatively) slow on lists containing ansi
proc detect_in_list2 {list} {
detect [join $list " "]
}
proc detect_g0 {text} [string map [list <re> [list $re_g0_group]] { proc detect_g0 {text} [string map [list <re> [list $re_g0_group]] {
regexp <re> $text regexp <re> $text
}] }]
@ -4580,13 +4617,108 @@ tcl::namespace::eval punk::ansi::ta {
#like split_codes - but each ansi-escape is split out separately (with empty string of plaintext between codes so odd/even plain ansi still holds) #like split_codes - but each ansi-escape is split out separately (with empty string of plaintext between codes so odd/even plain ansi still holds)
#- the slightly simpler regex than split_codes means that it will be slightly faster than keeping the codes grouped. #- the slightly simpler regex than split_codes means that it will be slightly faster than keeping the codes grouped.
proc split_codes_single {text} { proc split_codes_single2 {text} {
variable re_ansi_split variable re_ansi_split
return [_perlish_split $re_ansi_split $text] return [_perlish_split $re_ansi_split $text]
} }
proc split_codes_single3 {text} {
#copy from re_ansi_split
_perlish_split {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c} $text
}
proc split_codes_single4 {text} {
if {$text eq ""} {
return {}
}
variable re_ansi_split
set re $re_ansi_split
#variable re_ansi_detect1
#set re $re_ansi_detect1
set list [list]
set start 0
#set re {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c}
#We can get $matchEnd < $matchStart; we need to ensure there is an exit condition for non-greedy empty results REVIEW
#while {[regexp -start $start -indices -- {(?:\x1b(?:\((?:0|B)|\[(?:[\x20-\x2f\x30-\x3f]*[\x40-\x7e])|\](?:(?:[^\007]*)\007|(?:(?!\x1b\\).)*\x1b\\)|(?:P|X|\^|_)(?:(?:(?!\x1b\\|\007).)*(?:\x1b\\|\007))|c|7|8|M|E|D|H|=|>|(?:#(?:3|4|5|6|8))))|(?:\u0090|\u0098|\u009E|\u009F)(?:(?!\u009c).)*(?:\u009c)|(?:\u009b)[\x20-\x2f\x30-\x3f]*[\x40-\x7e]|(?:\u009d)(?:[^\u009c]*)?\u009c} $text match]} {}
while {[regexp -start $start -indices -- $re $text match]} {
lassign $match matchStart matchEnd
#puts "->start $start ->match $matchStart $matchEnd"
lappend list [tcl::string::range $text $start $matchStart-1]
if {$matchEnd < $matchStart} {
set e $matchStart
incr start
} else {
set e $matchEnd
set start [expr {$matchEnd+1}]
}
lappend list [tcl::string::range $text $matchStart $e]
if {$start >= [tcl::string::length $text]} {
break
}
}
return [lappend list [tcl::string::range $text $start end]]
}
proc split_codes_single {text} {
if {$text eq ""} {
return {}
}
variable re_ansi_split
set next 0
set b -1
set list [list]
set coderanges [regexp -indices -all -inline -- $re_ansi_split $text]
foreach cr $coderanges {
lappend list [tcl::string::range $text $next [lindex $cr 0]-1] [tcl::string::range $text [lindex $cr 0] [lindex $cr 1]]
set next [expr {[lindex $cr 1]+1}]
}
lappend list [tcl::string::range $text $next end]
return $list
}
proc get_codes_single {text} {
variable re_ansi_split
regexp -all -inline -- $re_ansi_split $text
}
#review - tcl greedy expressions may match multiple in one element #review - tcl greedy expressions may match multiple in one element
proc _perlish_split {re text} { proc _perlish_split {re text} {
if {$text eq ""} {
return {}
}
set next 0
set b -1
set list [list]
set coderanges [regexp -indices -all -inline -- $re $text]
foreach cr $coderanges {
lappend list [tcl::string::range $text $next [lindex $cr 0]-1] [tcl::string::range $text [lindex $cr 0] [lindex $cr 1]]
set next [expr {[lindex $cr 1]+1}]
}
lappend list [tcl::string::range $text $next end]
return $list
}
proc _perlish_split2 {re text} {
if {$text eq ""} {
return {}
}
set list [list]
set start 0
#We can get $matchEnd < $matchStart; we need to ensure there is an exit condition for non-greedy empty results REVIEW
while {[regexp -start $start -indices -- $re $text match]} {
lassign $match matchStart matchEnd
#puts "->start $start ->match $matchStart $matchEnd"
if {$matchEnd < $matchStart} {
lappend list [tcl::string::range $text $start $matchStart-1] [tcl::string::range $text $matchStart $matchStart]
incr start
} else {
lappend list [tcl::string::range $text $start $matchStart-1] [tcl::string::range $text $matchStart $matchEnd]
set start [expr {$matchEnd+1}]
}
if {$start >= [tcl::string::length $text]} {
break
}
}
return [lappend list [tcl::string::range $text $start end]]
}
proc _perlish_split3 {re text} {
if {$text eq ""} { if {$text eq ""} {
return {} return {}
} }

721
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/args-0.1.0.tm

File diff suppressed because it is too large Load Diff

6
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/assertion-0.1.0.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.2.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -18,7 +18,7 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::assertion 0 0.1.0] #[manpage_begin punkshell_module_punk::assertion 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {assertion alternative to control::assert}] [comment {-- Name section and table of contents description --}] #[titledesc {assertion alternative to control::assert}] [comment {-- Name section and table of contents description --}]
#[moddesc {per-namespace assertions with }] [comment {-- Description at end of page heading --}] #[moddesc {per-namespace assertions with }] [comment {-- Description at end of page heading --}]

8
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/console-0.1.1.tm

@ -593,7 +593,13 @@ namespace eval punk::console {
if {!$::punk::console::ansi_available} { if {!$::punk::console::ansi_available} {
return "" return ""
} }
set callid [info cmdcount] ;#info cmdcount is almost as fast as clock clicks - and whilst not unique in a long-running app(will wrap?) - fine for this context # -- ---
#set callid [info cmdcount] ;#info cmdcount is fast, though not as fast as clock clicks - and whilst not unique in a long-running app(will wrap?) - fine for this context
#clock clicks is approx 2x faster - but can sometimes give duplicates if called sequentially e.g list [clock clicks] [clock clicks]
#Either is suitable here, where subsequent calls will be relatively far apart in time
#speed of call insignificant compared to function
set callid [clock clicks]
# -- ---
# #
upvar ::punk::console::ansi_response_chunk accumulator upvar ::punk::console::ansi_response_chunk accumulator

1
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/docgen-0.1.0.tm

@ -31,6 +31,7 @@ namespace eval punk::docgen {
error "get_doctools_comments file '$fname' not found" error "get_doctools_comments file '$fname' not found"
} }
set fd [open $fname r] set fd [open $fname r]
chan conf $fd -translation binary
set data [read $fd] set data [read $fd]
close $fd close $fd
if {![string match "*#\**!doctools*" $data]} { if {![string match "*#\**!doctools*" $data]} {

932
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/lib-0.1.1.tm

File diff suppressed because it is too large Load Diff

6
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/mix/commandset/doc-0.1.0.tm

@ -48,6 +48,7 @@ namespace eval punk::mix::commandset::doc {
set oldfiles [punk::path::treefilenames -dir $projectdir/src/doc _module_*.man] set oldfiles [punk::path::treefilenames -dir $projectdir/src/doc _module_*.man]
foreach maybedoomed $oldfiles { foreach maybedoomed $oldfiles {
set fd [open $maybedoomed r] set fd [open $maybedoomed r]
chan conf $fd -translation binary
set data [read $fd] set data [read $fd]
close $fd close $fd
if {[string match "*--- punk::docgen overwrites *" $data]} { if {[string match "*--- punk::docgen overwrites *" $data]} {
@ -170,7 +171,7 @@ namespace eval punk::mix::commandset::doc {
-- -type none -optional 1 -help "end of options marker --" -- -type none -optional 1 -help "end of options marker --"
-individual -type boolean -default 1 -individual -type boolean -default 1
*values -min 0 -max -1 *values -min 0 -max -1
patterns -default {*} -type any -multiple 1 patterns -default {*.man} -type any -multiple 1
} $args] } $args]
set opt_individual [tcl::dict::get $argd opts -individual] set opt_individual [tcl::dict::get $argd opts -individual]
set patterns [tcl::dict::get $argd values patterns] set patterns [tcl::dict::get $argd values patterns]
@ -190,7 +191,7 @@ namespace eval punk::mix::commandset::doc {
set docroot $projectdir/src/doc set docroot $projectdir/src/doc
cd $docroot cd $docroot
if {!$opt_individual && "*" in $patterns} { if {!$opt_individual && "*.man" in $patterns} {
if {[catch { if {[catch {
dtplite validate $docroot dtplite validate $docroot
} errM]} { } errM]} {
@ -251,6 +252,7 @@ namespace eval punk::mix::commandset::doc {
append docgen_header_comments {[comment {--- punk::docgen DO NOT EDIT DOCS HERE UNLESS YOU REMOVE THESE COMMENT LINES ---}]} \n append docgen_header_comments {[comment {--- punk::docgen DO NOT EDIT DOCS HERE UNLESS YOU REMOVE THESE COMMENT LINES ---}]} \n
append docgen_header_comments {[comment {--- punk::docgen overwrites this file ---}]} \n append docgen_header_comments {[comment {--- punk::docgen overwrites this file ---}]} \n
foreach fullpath $matched_paths { foreach fullpath $matched_paths {
puts stdout "do_docgen processing: $fullpath"
set doctools [punk::docgen::get_doctools_comments $fullpath] set doctools [punk::docgen::get_doctools_comments $fullpath]
if {$doctools ne ""} { if {$doctools ne ""} {
set fname [file tail $fullpath] set fname [file tail $fullpath]

96
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/mix/commandset/scriptwrap-0.1.0.tm

@ -1,5 +1,5 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use 'pmix make' or src/make.tcl to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use 'dev make' or src/make.tcl to update from <pkg>-buildversion.txt
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -13,19 +13,70 @@
# @@ Meta End # @@ Meta End
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[manpage_begin punkshell_module_scriptwrap 0 0.1.0]
#[copyright "2024"]
#[titledesc {scriptwrap polyglot tool}] [comment {-- Name section and table of contents description --}]
#[moddesc {scriptwrap tool}] [comment {-- Description at end of page heading --}]
#[require punk::mix::commandset::scriptwrap]
#[keywords module commandset launcher scriptwrap]
#[description]
#[para] -
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[section Overview]
#[para] overview of scriptwrap
#[subsection Concepts]
#[para] -
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Requirements
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[subsection dependencies]
#[para] packages used by poshinfo
#[list_begin itemized]
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Requirements ## Requirements
##e.g package require frobz ##e.g package require frobz
package require punk::lib
package require punk::args
package require punk::mix package require punk::mix
package require punk::mix::base package require punk::mix::base
package require punk::fileline package require punk::fileline
#*** !doctools
#[item] [package {Tcl 8.6}]
#[item] [package {punk::lib}]
#[item] [package {punk::args}]
#[item] [package {punk::mix}]
#[item] [package {punk::base}]
#[item] [package {punk::fileline}]
#*** !doctools
#[list_end]
#*** !doctools
#[section API]
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
namespace eval punk::mix::commandset::scriptwrap { namespace eval punk::mix::commandset::scriptwrap {
#*** !doctools
#[subsection {Namespace punk::mix::commandset::scriptwrap}]
#[para] Core API functions for punk::mix::commandset::scriptwrap
#[list_begin definitions]
namespace export * namespace export *
namespace eval fileline { namespace eval fileline {
@ -1192,22 +1243,33 @@ namespace eval punk::mix::commandset::scriptwrap {
return $result return $result
} }
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::mix::commandset::scriptwrap ---}]
namespace eval lib { namespace eval lib {
#*** !doctools
#[subsection {Namespace punk::mix::commandset::scriptwrap::lib}]
#[para] Library API functions for punk::mix::commandset::scriptwrap
#[list_begin definitions]
proc get_wrapper_folders {args} { proc get_wrapper_folders {args} {
set argd [punk::args::get_dict { set argd [punk::args::get_dict {
#*** !doctools #*** !doctools
#[call [fun get_wrapper_folders] [arg args] ] #[call [fun get_wrapper_folders] [arg args] ]
#[para] Return list of dicts representing wrapper folders. keys: basefolder sourceinfo #[para] Return list of dicts representing wrapper folders in the project. keys: basefolder sourceinfo
#[para] Arguments: #[para] Arguments:
# [list_begin arguments] # [list_begin arguments]
# [arg_def string args] name-value pairs -scriptpath <path> # [arg_def string args] name-value pairs -scriptpath <path>
# [list_end] # [list_end]
*proc -name get_wrapper_folders *id punk::mix::commandset::scriptwrap
*proc -name punk::mix::commandset::get_wrapper_folders
*opts -anyopts 0 *opts -anyopts 0
-scriptpath -default "" -scriptpath -default "" -type directory\
-help ""
#todo -help folder within a punk.templates provided area???
*values -minvalues 0 -maxvalues 0 *values -minvalues 0 -maxvalues 0
} $args] } $args]
@ -1377,11 +1439,16 @@ namespace eval punk::mix::commandset::scriptwrap {
return [dict create ok $status linecount [llength $lines] data $tags errors $errors] return [dict create ok $status linecount [llength $lines] data $tags errors $errors]
} }
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::mix::commandset::scriptwrap::lib ---}]
} }
namespace eval batchlib { namespace eval batchlib {
# #*** !doctools
#[subsection {Namespace punk::mix::commandset::scriptwrap::batchlib}]
#[para] Utility funcions for processing windows .bat files
#[list_begin definitions]
#see also: https://www.dostips.com/forum/viewtopic.php?t=3803 'Rules for label names vs GOTO and CALL #see also: https://www.dostips.com/forum/viewtopic.php?t=3803 'Rules for label names vs GOTO and CALL
# review - we may need different get_callsite_label functions? # review - we may need different get_callsite_label functions?
@ -1647,23 +1714,13 @@ namespace eval punk::mix::commandset::scriptwrap {
#return rawlabel so we can see it as it appears in the data - as opposed to how it is interpreted as a label by cmd.exe #return rawlabel so we can see it as it appears in the data - as opposed to how it is interpreted as a label by cmd.exe
return [list labelfound 1 label $label rawlabel $rawlabel] return [list labelfound 1 label $label rawlabel $rawlabel]
} }
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::mix::commandset::scriptwrap::batchlib ---}]
} }
} }
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Ready ## Ready
package provide punk::mix::commandset::scriptwrap [namespace eval punk::mix::commandset::scriptwrap { package provide punk::mix::commandset::scriptwrap [namespace eval punk::mix::commandset::scriptwrap {
@ -1671,3 +1728,6 @@ package provide punk::mix::commandset::scriptwrap [namespace eval punk::mix::com
set version 0.1.0 set version 0.1.0
}] }]
return return
#*** !doctools
#[manpage_end]

14
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/nav/fs-0.1.0.tm

@ -20,10 +20,10 @@
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::nav::fs 0 0.1.0] #[manpage_begin shellspy_module_punk::nav::fs 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {punk::nav::fs console filesystem navigation}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {fs nav}] [comment {-- Description at end of page heading --}]
#[require punk::nav::fs] #[require punk::nav::fs]
#[keywords module] #[keywords module filesystem terminal]
#[description] #[description]
#[para] - #[para] -
@ -936,7 +936,7 @@ tcl::namespace::eval punk::nav::fs {
#windows doesn't consider dotfiles as hidden - mac does (?) #windows doesn't consider dotfiles as hidden - mac does (?)
#we add dotfiles to flaggedhidden list in case there is some other mechanism that has flagged items as hidden #we add dotfiles to flaggedhidden list in case there is some other mechanism that has flagged items as hidden
if {$::tcl_platform(platform) ne "windows"} { if {$::tcl_platform(platform) ne "windows"} {
lappend flaggedhidden {*}[lsearch -all -inline [concat $dirs $files] ".*"] lappend flaggedhidden {*}[lsearch -all -inline [list {*}$dirs {*}$files] ".*"]
#e.g we can have dupes in the case where there are vfs mounted files that appear as dirs #e.g we can have dupes in the case where there are vfs mounted files that appear as dirs
#as we will need to do a (nat)sort as a last step - it will be faster to not sort items prematurely #as we will need to do a (nat)sort as a last step - it will be faster to not sort items prematurely
#set flaggedhidden [lsort -unique $flaggedhidden] #set flaggedhidden [lsort -unique $flaggedhidden]
@ -977,7 +977,8 @@ tcl::namespace::eval punk::nav::fs {
# -- --- # -- ---
foreach nm [concat $dirs $files] { #jmn
foreach nm [list {*}$dirs {*}$files] {
if {[punk::winpath::illegalname_test $nm]} { if {[punk::winpath::illegalname_test $nm]} {
lappend nonportable $nm lappend nonportable $nm
} }
@ -1272,7 +1273,8 @@ tcl::namespace::eval punk::nav::fs {
#set widest1 [punk::pipedata [list {*}$dirs ""] {lmap v $data {string length $v}} {tcl::mathfunc::max {*}$data}] #set widest1 [punk::pipedata [list {*}$dirs ""] {lmap v $data {string length $v}} {tcl::mathfunc::max {*}$data}]
set widest1 [tcl::mathfunc::max {*}[lmap v [concat $dirs [list ""]] {string length $v}]] #set widest1 [tcl::mathfunc::max {*}[lmap v [concat $dirs [list ""]] {string length $v}]]
set widest1 [tcl::mathfunc::max {*}[lmap v [list {*}$dirs ""] {string length $v}]]
set displaylist [list] set displaylist [list]
set col1 [string repeat " " [expr {$widest1 + 2}]] set col1 [string repeat " " [expr {$widest1 + 2}]]

7
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/ns-0.1.0.tm

@ -755,7 +755,9 @@ tcl::namespace::eval punk::ns {
set seencmds [list] set seencmds [list]
set masked [list] ;# set masked [list] ;#
set cmdsets [concat $procs $ensembles $ooclasses $ooobjects $ooprivateobjects $ooprivateclasses $native $interps $coroutines $zlibstreams] #jmn
#set cmdsets [concat $procs $ensembles $ooclasses $ooobjects $ooprivateobjects $ooprivateclasses $native $interps $coroutines $zlibstreams]
set cmdsets [list {*}$procs {*}$ensembles {*}$ooclasses {*}$ooobjects {*}$ooprivateobjects {*}$ooprivateclasses {*}$native {*}$interps {*}$coroutines {*}$zlibstreams]
foreach a $aliases { foreach a $aliases {
if {[list c $a] in $elements} { if {[list c $a] in $elements} {
#possibly an ordinary alias - or a renamed alias that is masked by a proc/ensemble/oo #possibly an ordinary alias - or a renamed alias that is masked by a proc/ensemble/oo
@ -1691,7 +1693,8 @@ tcl::namespace::eval punk::ns {
proc _pkguse_vars {varnames} { proc _pkguse_vars {varnames} {
while {"pkguse_vars_[incr n]" in $varnames} {} while {"pkguse_vars_[incr n]" in $varnames} {}
return [concat $varnames pkguse_vars_$n] #return [concat $varnames pkguse_vars_$n]
return [list {*}$varnames pkguse_vars_$n]
} }
proc tracehandler_nowrite {args} { proc tracehandler_nowrite {args} {
error "readonly in use block" error "readonly in use block"

10
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/packagepreference-0.1.0.tm

@ -1,5 +1,5 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm # module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
@ -18,12 +18,12 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::packagepreference 0 0.1.0] #[manpage_begin punkshell_module_punk::packagepreference 0 0.1.0]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {punkshell package/module loading}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {package/module load}] [comment {-- Description at end of page heading --}]
#[require punk::packagepreference] #[require punk::packagepreference]
#[keywords module] #[keywords module package]
#[description] #[description]
#[para] - #[para] -

2
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/repo-0.1.1.tm

@ -710,7 +710,7 @@ namespace eval punk::repo {
lappend col2_values [dict get $summary_dict $f] lappend col2_values [dict get $summary_dict $f]
} }
set title1 "" set title1 ""
set widest1 [tcl::mathfunc::max {*}[lmap v [concat [list $title1] $col1_fields] {string length $v}]] set widest1 [tcl::mathfunc::max {*}[lmap v [list $title1 {*}$col1_fields] {string length $v}]]
set col1 [string repeat " " $widest1] set col1 [string repeat " " $widest1]
set title2 "" set title2 ""
set widest2 [tcl::mathfunc::max {*}[lmap v [concat [list $title2] $col2_values] {string length $v}]] set widest2 [tcl::mathfunc::max {*}[lmap v [concat [list $title2] $col2_values] {string length $v}]]

85
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/trie-0.1.0.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -18,7 +18,7 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::trie 0 0.1.0] #[manpage_begin punkshell_module_punk::trie 0 0.1.0]
#[copyright "2010"] #[copyright "2010"]
#[titledesc {punk::trie API}] [comment {-- Name section and table of contents description --}] #[titledesc {punk::trie API}] [comment {-- Name section and table of contents description --}]
#[moddesc {punk::trie}] [comment {-- Description at end of page heading --}] #[moddesc {punk::trie}] [comment {-- Description at end of page heading --}]
@ -64,34 +64,34 @@ package require Tcl 8.6-
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# oo::class namespace # oo::class namespace
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#tcl::namespace::eval punk::trie::class { # #tcl::namespace::eval punk::trie::class {
#*** !doctools
#[subsection {Namespace punk::trie::class}]
#[para] class definitions
#if {[tcl::info::commands [tcl::namespace::current]::interface_sample1] eq ""} {
#*** !doctools
#[list_begin enumerated]
# oo::class create interface_sample1 {
# #*** !doctools # #*** !doctools
# #[enum] CLASS [class interface_sample1] # #[subsection {Namespace punk::trie::class}]
# #[list_begin definitions] # #[para] class definitions
# #if {[tcl::info::commands [tcl::namespace::current]::interface_sample1] eq ""} {
# method test {arg1} {
# #*** !doctools # #*** !doctools
# #[call class::interface_sample1 [method test] [arg arg1]] # #[list_begin enumerated]
# #[para] test method #
# puts "test: $arg1" # # oo::class create interface_sample1 {
# } # # #*** !doctools
# # #[enum] CLASS [class interface_sample1]
# # #[list_begin definitions]
#
# # method test {arg1} {
# # #*** !doctools
# # #[call class::interface_sample1 [method test] [arg arg1]]
# # #[para] test method
# # puts "test: $arg1"
# # }
#
# # #*** !doctools
# # #[list_end] [comment {-- end definitions interface_sample1}]
# # }
#
# #*** !doctools # #*** !doctools
# #[list_end] [comment {-- end definitions interface_sample1}] # #[list_end] [comment {--- end class enumeration ---}]
# } # #}
# #}
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
#}
#}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
@ -114,11 +114,18 @@ tcl::namespace::eval punk::trie {
} }
#namespace path ::punk::trie::log #namespace path ::punk::trie::log
#[para] class definitions #*** !doctools
#[subsection {Namespace punk::trie}]
#[para] Core API functions for punk::trie
if {[tcl::info::commands [tcl::namespace::current]::trieclass] eq ""} { if {[tcl::info::commands [tcl::namespace::current]::trieclass] eq ""} {
#*** !doctools #*** !doctools
#[list_begin enumerated] #[list_begin enumerated]
oo::class create [tcl::namespace::current]::trieclass { oo::class create [tcl::namespace::current]::trieclass {
#*** !doctools
#[enum] CLASS [class trieclass]
#[list_begin definitions]
variable trie id variable trie id
method matches {t what} { method matches {t what} {
@ -412,9 +419,8 @@ tcl::namespace::eval punk::trie {
} }
set acc {} set acc {}
dict for {key val} $t {
foreach key [dict keys $t] { lappend acc {*}[my flatten $val $prefix$key]
lappend acc {*}[my flatten [dict get $t $key] $prefix$key]
} }
return $acc return $acc
} }
@ -484,8 +490,14 @@ tcl::namespace::eval punk::trie {
my insert $a my insert $a
} }
} }
#*** !doctools
#[list_end] [comment {--- end definitions ---}]
} }
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
set testlist [list blah x black blacken] set testlist [list blah x black blacken]
proc test1 {} { proc test1 {} {
#JMN #JMN
@ -516,14 +528,9 @@ tcl::namespace::eval punk::trie {
# #[list_end] [comment {-- end definitions interface_sample1}] # #[list_end] [comment {-- end definitions interface_sample1}]
# } # }
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
} }
#*** !doctools
#[subsection {Namespace punk::trie}]
#[para] Core API functions for punk::trie
#[list_begin definitions]
@ -542,8 +549,6 @@ tcl::namespace::eval punk::trie {
#*** !doctools
#[list_end] [comment {--- end definitions namespace punk::trie ---}]
} }
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++

104
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/zip-0.1.1.tm

@ -1,6 +1,6 @@
# -*- tcl -*- # -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'pmix make' or bin/punkmake to update from <pkg>-buildversion.txt # Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt
# module template: shellspy/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm # module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm
# #
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
@ -11,7 +11,7 @@
# @@ Meta Begin # @@ Meta Begin
# Application punk::zip 0.1.1 # Application punk::zip 0.1.1
# Meta platform tcl # Meta platform tcl
# Meta license <unspecified> # Meta license MIT
# @@ Meta End # @@ Meta End
@ -19,12 +19,12 @@
# doctools header # doctools header
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools #*** !doctools
#[manpage_begin shellspy_module_punk::zip 0 0.1.1] #[manpage_begin punkshell_module_punk::zip 0 0.1.1]
#[copyright "2024"] #[copyright "2024"]
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] #[titledesc {Module API}] [comment {-- Name section and table of contents description --}]
#[moddesc {-}] [comment {-- Description at end of page heading --}] #[moddesc {-}] [comment {-- Description at end of page heading --}]
#[require punk::zip] #[require punk::zip]
#[keywords module] #[keywords module zip fileformat]
#[description] #[description]
#[para] - #[para] -
@ -60,38 +60,6 @@ package require punk::args
#*** !doctools #*** !doctools
#[section API] #[section API]
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# oo::class namespace
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#tcl::namespace::eval punk::zip::class {
#*** !doctools
#[subsection {Namespace punk::zip::class}]
#[para] class definitions
#if {[tcl::info::commands [tcl::namespace::current]::interface_sample1] eq ""} {
#*** !doctools
#[list_begin enumerated]
# oo::class create interface_sample1 {
# #*** !doctools
# #[enum] CLASS [class interface_sample1]
# #[list_begin definitions]
# method test {arg1} {
# #*** !doctools
# #[call class::interface_sample1 [method test] [arg arg1]]
# #[para] test method
# puts "test: $arg1"
# }
# #*** !doctools
# #[list_end] [comment {-- end definitions interface_sample1}]
# }
#*** !doctools
#[list_end] [comment {--- end class enumeration ---}]
#}
#}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# Base namespace # Base namespace
@ -541,37 +509,60 @@ tcl::namespace::eval punk::zip {
#todo - doctools - [arg ?globs...?] syntax? #todo - doctools - [arg ?globs...?] syntax?
#*** !doctools #*** !doctools
#[call [fun mkzip] [arg ?options?] [arg filename] ] #[call [fun mkzip]\
#[para] Create a zip archive in 'filename' # [opt "[option -offsettype] [arg offsettype]"]\
# [opt "[option -return] [arg returntype]"]\
# [opt "[option -zipkit] [arg 0|1]"]\
# [opt "[option -runtime] [arg preamble_filename]"]\
# [opt "[option -comment] [arg zipfilecomment]"]\
# [opt "[option -directory] [arg dir_to_zip]"]\
# [opt "[option -base] [arg archive_root]"]\
# [opt "[option -exclude] [arg globlist]"]\
# [arg zipfilename]\
# [arg ?glob...?]]
#[para] Create a zip archive in 'zipfilename'
#[para] If a file already exists, an error will be raised. #[para] If a file already exists, an error will be raised.
#[para] Call 'punk::zip::mkzip' with no arguments for usage display.
set argd [punk::args::get_dict { set argd [punk::args::get_dict {
*proc -name punk::zip::mkzip -help "Create a zip archive in 'filename'" *proc -name punk::zip::mkzip\
-help "Create a zip archive in 'filename'"
*opts *opts
-offsettype -default "archive" -choices {archive file} -help "zip offsets stored relative to start of entire file or relative to start of zip-archive -offsettype -default "archive" -choices {archive file}\
-help "zip offsets stored relative to start of entire file or relative to start of zip-archive
Only relevant if the created file has a script/runtime prefix. Only relevant if the created file has a script/runtime prefix.
" "
-return -default "pretty" -choices {pretty list none} -help "mkzip can return a list of the files and folders added to the archive -return -default "pretty" -choices {pretty list none}\
-help "mkzip can return a list of the files and folders added to the archive
the option -return pretty is the default and uses the punk::lib pdict/plist system the option -return pretty is the default and uses the punk::lib pdict/plist system
to return a formatted list for the terminal to return a formatted list for the terminal
" "
-zipkit -default 0 -type none -help "whether to add mounting script -zipkit -default 0 -type none\
-help "whether to add mounting script
mutually exclusive with -runtime option mutually exclusive with -runtime option
currently vfs::zip based - todo - autodetect zipfs/vfs with pref for zipfs currently vfs::zip based - todo - autodetect zipfs/vfs with pref for zipfs
" "
-runtime -default "" -help "specify a prefix file -runtime -default ""\
-help "specify a prefix file
e.g punk::zip::mkzip -runtime unzipsfx.exe -directory subdir -base subdir output.zip e.g punk::zip::mkzip -runtime unzipsfx.exe -directory subdir -base subdir output.zip
will create a self-extracting zip archive from the subdir/ folder. will create a self-extracting zip archive from the subdir/ folder.
Expects runtime with no existing vfs attached (review) Expects runtime with no existing vfs attached (review)
" "
-comment -default "" -help "An optional comment for the archive" -comment -default ""\
-directory -default "" -help "The new zip archive will scan for contents within this folder or current directory if not provided" -help "An optional comment for the archive"
-base -default "" -help "The new zip archive will be rooted in this directory if provided -directory -default ""\
-help "The new zip archive will scan for contents within this folder or current directory if not provided."
-base -default ""\
-help "The new zip archive will be rooted in this directory if provided
it must be a parent of -directory or the same path as -directory" it must be a parent of -directory or the same path as -directory"
-exclude -default {CVS/* */CVS/* *~ ".#*" "*/.#*"} -exclude -default {CVS/* */CVS/* *~ ".#*" "*/.#*"}
*values -min 1 -max -1 *values -min 1 -max -1
filename -type file -default "" -help "name of zipfile to create" filename -type file -default ""\
globs -default {*} -multiple 1 -help "list of glob patterns to match. -help "name of zipfile to create"
Only directories with matching files will be included in the archive" globs -default {*} -multiple 1\
-help "list of glob patterns to match.
Only directories with matching files will be included in the archive."
} $args] } $args]
set filename [dict get $argd values filename] set filename [dict get $argd values filename]
@ -733,7 +724,7 @@ tcl::namespace::eval punk::zip {
} }
set cdoffset [tell $zf] set cdoffset [tell $zf]
set endrec [binary format a4ssssiis PK\05\06 0 0 \ set endrec [binary format a4ssssiis PK\05\06 0 0 \
$count $count [string length $cd] $cdoffset\ $count $count [string length $cd] [expr {$cdoffset - $dataStartOffset}]\
[string length $opts(-comment)]] [string length $opts(-comment)]]
append endrec $opts(-comment) append endrec $opts(-comment)
puts -nonewline $zf $cd puts -nonewline $zf $cd
@ -793,17 +784,6 @@ tcl::namespace::eval punk::zip::lib {
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
#*** !doctools
#[section Internal]
#tcl::namespace::eval punk::zip::system {
#*** !doctools
#[subsection {Namespace punk::zip::system}]
#[para] Internal functions that are not part of the API
#}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Ready ## Ready
package provide punk::zip [tcl::namespace::eval punk::zip { package provide punk::zip [tcl::namespace::eval punk::zip {

1173
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/textblock-0.1.2.tm

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save