summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/doctools/tocexpand
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/doctools/tocexpand')
-rwxr-xr-xtcllib/modules/doctools/tocexpand136
1 files changed, 136 insertions, 0 deletions
diff --git a/tcllib/modules/doctools/tocexpand b/tcllib/modules/doctools/tocexpand
new file mode 100755
index 0000000..e01fc4b
--- /dev/null
+++ b/tcllib/modules/doctools/tocexpand
@@ -0,0 +1,136 @@
+#! /bin/sh
+# -*- tcl -*- \
+exec tclsh "$0" ${1+"$@"}
+
+rename source __source
+proc source {path} {
+ set f [file join [pwd] $path]
+ uplevel 1 __source $path
+}
+
+
+lappend auto_path [file dirname [file dirname [info script]]]
+package require doctools::toc
+
+# ---------------------------------------------------------------------
+# 1. Handle command line options, input and output
+# 2. Initialize a doctools object.
+# 3. Run the input through the object.
+# 4. Write output.
+# ---------------------------------------------------------------------
+
+proc usage {{exitstate 1}} {
+ global argv0
+ puts "Usage: $argv0\
+ ?-h|--help|-help|-??\
+ ?-help-fmt|--help-fmt?\
+ format in|- ?out|-?"
+ exit $exitstate
+}
+
+# ---------------------------------------------------------------------
+
+proc fmthelp {} {
+ # Tcllib FR #527029: short reference of formatting commands.
+
+ global argv0
+ puts "$argv0 [doctools::toc::help]"
+ exit 0
+}
+
+# ---------------------------------------------------------------------
+# 1. Handle command line options, input and output
+
+proc cmdline {} {
+ global argv0 argv format in out
+
+ set copyright ""
+ set extmodule ""
+ set deprecated 0
+
+ while {[string match -* [set opt [lindex $argv 0]]]} {
+ switch -exact -- $opt {
+ -help - -h - --help - -? {
+ # Tcllib FR #527029
+ usage 0
+ }
+ -help-fmt - --help-fmt {
+ # Tcllib FR #527029
+ fmthelp
+ }
+ default {
+ # Unknown option
+ usage
+ }
+ }
+ }
+
+ if {[llength $argv] < 3} {
+ usage
+ }
+ foreach {format in out} $argv break
+
+ if {$format == {} || $in == {}} {
+ usage
+ }
+ if {$out == {}} {set out -}
+ return $format
+}
+
+# ---------------------------------------------------------------------
+# 3. Read input. Also providing the namespace with file information.
+
+proc get_input {} {
+ global in
+ if {[string equal $in -]} {
+ return [read stdin]
+ } else {
+ set if [open $in r]
+ set text [read $if]
+ close $if
+ return $text
+ }
+}
+
+# ---------------------------------------------------------------------
+# 4. Write output.
+
+proc write_out {text} {
+ global out
+ if {[string equal $out -]} {
+ puts -nonewline stdout $text
+ } else {
+ set of [open $out w]
+ puts -nonewline $of $text
+ close $of
+ }
+}
+
+
+# ---------------------------------------------------------------------
+# Get it all together
+
+proc main {} {
+ global format in
+
+ #if {[catch {}
+ cmdline
+
+ ::doctools::toc::new dt -format $format
+ write_out [dt format [get_input]]
+
+ set warnings [dt warnings]
+ if {[llength $warnings] > 0} {
+ puts stderr [join $warnings \n]
+ }
+
+ #{} msg]} {}
+ #puts stderr "Execution error: $msg"
+ #{}
+ return
+}
+
+
+# ---------------------------------------------------------------------
+main
+exit