# ACTIVESTATE TEAPOT-PKG BEGIN TM -*- tcl -*- # -- Tcl Module # @@ Meta Begin # Package doctools::toc::export::text 0.1 # Meta as::build::date 2015-05-25 # Meta as::origin http://sourceforge.net/projects/tcllib # Meta category Documentation tools # Meta description plain text export plugin # Meta license BSD # Meta platform tcl # Meta require {Tcl 8.4} # Meta require doctools::text # Meta require doctools::toc::structure # Meta subject {plain text} export serialization toc # Meta subject {table of contents} doctools # Meta summary doctools::toc::export::text # @@ Meta End # ACTIVESTATE TEAPOT-PKG BEGIN REQUIREMENTS package require Tcl 8.4 package require doctools::text package require doctools::toc::structure # ACTIVESTATE TEAPOT-PKG END REQUIREMENTS # ACTIVESTATE TEAPOT-PKG BEGIN DECLARE package provide doctools::toc::export::text 0.1 # ACTIVESTATE TEAPOT-PKG END DECLARE # ACTIVESTATE TEAPOT-PKG END TM # text.tcl -- # # The text export plugin. Generation of plain text (ReST - # re-structured text). # # Copyright (c) 2009 Andreas Kupries # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: export_text.tcl,v 1.3 2009/11/15 05:50:03 andreas_kupries Exp $ # This package is a plugin for the the doctools::toc v2 system. It # takes the list serialization of a table of contents and produces # text in text format. # ### ### ### ######### ######### ######### ## Requisites # @mdgen NODEP: doctools::toc::export::plugin package require Tcl 8.4 package require doctools::toc::export::plugin ; # Presence of this # pseudo package # indicates execution # inside of a properly # initialized plugin # interpreter. package require doctools::toc::structure ; # Verification that the # input is proper. package require doctools::text ; # Text assembly package doctools::text::import ;# -> ::text::* # ### ### ### ######### ######### ######### ## API. proc export {serial configuration} { # Phase I. Check that we got a canonical toc serialization. That # makes the unpacking easier, as we can mix it with the # generation of the output, knowing that everything is # already sorted as it should be. ::doctools::toc::structure verify-as-canonical $serial # ### ### ### ######### ######### ######### # Configuration ... # * Standard entries # - user = person running the application doing the formatting # - format = name of this format # - file = name of the file the toc came from. Optional. # - map = maps symbolic references to actual file path. Optional. # //possible parameters to influence the output. # //* symbolic mapping off/on # Import the configuration and initialize the internal state array set config $configuration array set map {} if {[info exists config(map)]} { array set map $config(map) } # ### ### ### ######### ######### ######### # Phase II. Generate the output, taking the configuration into # account. # Unpack the serialization. array set toc $serial array set toc $toc(doctools::toc) unset toc(doctools::toc) text::begin text::+ [Header] text::underline = # Iterate over the keys and their references PrintDivision $toc(items) # Return final assembled text return [text::done] } proc PrintDivision {items} { foreach element $items { foreach {etype edata} $element break array set toc $edata switch -exact -- $etype { reference { text::newline text::+ "[Map $toc(id)] : $toc(label)" text::newline text::indented 4 { text::+ $toc(desc) } text::newline } division { text::newline if {[info exists toc(id)]} { text::+ "[Map $toc(id)] : $toc(label)" } else { text::+ "$toc(label)" } text::underline - text::indented 4 { PrintDivision $toc(items) } text::newline } } } return } # ### ### ### ######### ######### ######### proc Header {} { upvar 1 toc(label) label toc(title) title if {($label ne {}) && ($title ne {})} { return "$label -- $title" } elseif {$label ne {}} { return $label } elseif {$title ne {}} { return $title } return -code error {Reached the unreachable} } proc Map {id} { upvar 1 map map if {![info exists map($id)]} { return $id } return $map($id) } # ### ### ### ######### ######### ######### ## Ready package provide doctools::toc::export::text 0.1 return