cmdr
Check-in [5a6408a944]
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to tclconference@googlegroups.com
or submit via the online form by Sep 9.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Continued the dev-guide in general, and completion internals in particular. Added draft diagram code for sequence diagrams. Snarfed from my 2012 kinetcl paper. Has to be modded for the completions. Todo: Document standard help formats, and how to write formats. Todo: Back-reference from the package docs to the completion internals.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:5a6408a944db24c6814596e6ee2876353163cbbe
User & Date: aku 2013-11-27 07:55:59
Context
2013-11-27
18:25
Added back-references from packages to the devguide for command-line completion. check-in: f7695638e8 user: andreask tags: trunk
07:55
Continued the dev-guide in general, and completion internals in particular. Added draft diagram code for sequence diagrams. Snarfed from my 2012 kinetcl paper. Has to be modded for the completions. Todo: Document standard help formats, and how to write formats. Todo: Back-reference from the package docs to the completion internals. check-in: 5a6408a944 user: aku tags: trunk
01:15
Draft work on internal workings of the command line completion. check-in: a1c106f24e user: andreask tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Name change from doc/complete.man to doc/cmdr_dev_completion.man.

     1      1   [comment {-*- tcl -*- doctools manpage}]
     2      2   [include parts/definitions.inc]
     3         -[manpage_begin [vset PROJECT] [vset MAN_SECTION] [vset VERSION]]
            3  +[manpage_begin [vset PROJECT]_completion [vset MAN_SECTION] [vset VERSION]]
     4      4   [include parts/module.inc]
     5      5   [require cmdr]
     6         -[titledesc [vset TITLE_COMPLETE]]
            6  +[titledesc [vset TITLE_DEV_COMPLETE]]
     7      7   [description]
     8      8   [include parts/welcome.inc]
     9      9   
    10         -This internal document describes how the framework performs
    11         -command-line completion, in both main and mini shells, plus the
    12         -relevant data structures and methods.
           10  +This internal document provides an overview on how the framework
           11  +performs command-line completion in both the main and mini shells,
           12  +referencing all the relevant methods and describing the data
           13  +structures in use.
    13     14   
    14         -[para] For more information about the framework's internals please
    15         -read [term [vset TITLE_DEV]].
    16         -
    17         -[comment {************************************************************}]
    18         -[section {Main Shell}]
           15  +[para] For more information about other internals of the framework
           16  +please read [term [vset TITLE_DEV]].
    19     17   
    20         -[package cmdr::officer] implements the [term {main shell}].
    21         -
    22         -[para] This shell accepts the names of all sub-ordinate commands known
    23         -to the officer as commands.
    24         -
    25         -[para] It may additional accept a hard-wired command [cmd .exit],
    26         -depending on the parse state (see flag [const doexit]).
    27         -
    28         -
    29         -[para] The main shell's repl core calls on the instance method
    30         -[method complete] for command-line completion.
    31         -
    32         -[para] This method uses the standard [method parse-line] method of its
    33         -own [package cmdr::actor] base-class to get the standard parsing
    34         -structure used within the framework and then delegates to the instance
    35         -method [method complete-words].
    36         -
    37         -[para] Note: The details of the state structure generated by
    38         -[method parse-line] and then taken by [method complete-words] are
    39         -explained in section [sectref {Parse State}]. Read it before trying to
    40         -follow the rules.
    41         -
    42         -[para] [method complete-words] then applies the following rules:
    43         -
    44         -
    45         -[list_begin enumerated]
    46         -
    47         -[enum] In case of syntax error return an empty list (no completion).
    48         -
    49         -[enum] For an empty command line return all commands, and all commands
    50         -	known to the default subordinate, if any.
    51         -
    52         -[enum] If the [term {current word}] (as per [const at]) is not the
    53         -	last word, treat it as the name of the sub-ordinate command
    54         -	responsible for handling the remaining words and delegate
    55         -	completion to it, advancing the current word as needed.
    56         -
    57         -[para] No completion is done if the word does not yield a command to
    58         -	delegate to (unknown or ambigous). If a default command is known
    59         -	this case will delegate to that.
    60         -
    61         -[para] When recursing in this way the subordinate command will see
    62         -	"[const doexit] == [const false]".
    63         -
    64         -[para] If the subordinate is again an officer it will proceed
    65         -	using this same set of rules. A [term private] on the other
    66         -	hand has its own set of rules, explained below.
    67         -
    68         -[enum] If the [term {current word}] is the last word on the command
    69         -	line then completion is done using the set of commands known
    70         -	to the officer and its default sub-ordinate, if any.
    71         -
    72         -	No recursion takes place.
    73         -[list_end]
    74         -
    75         -[para] When the recursion described above enters a [term private]
    76         -command the recursion ends and all remaining arguments are processed
    77         -to determine the set of parameters responsible for completion of the
    78         -last word.
    79         -
    80         -[para] This is similar to the argument parsing done ... todo ...
    81         -
    82         -
    83         -[comment { @ EDIT: --- todo --- sequence diagram main shell completion }]
    84         -
    85         -
    86         -[comment {************************************************************}]
    87         -[section {Mini Shell}]
    88         -
    89         -[package cmdr::config] implements the [term {mini shell}].
    90         -
    91         -[para] This shell accepts the [term system] names of all parameters
    92         -held by the config instance as commands, all taking a single value as
    93         -their argument, the string value of the parameter indicated by the
    94         -command name itself.
    95         -
    96         -[para] It additional accepts five hard-wired commands to control exit
    97         -conditions and access to help.
    98         -
    99         -These commands all start with a [const .] and do not take any
   100         -arguments at all. They are, in alphabetical order, [const .cancel],
   101         -[const .exit], [const .help] [const .ok], and [const .run].
   102         -
   103         -[para] The mini shell's repl core calls on the instance method
   104         -[method complete] for command-line completion.
   105         -
   106         -[para] This method uses the standard [method parse-line] method of the
   107         -[package cmdr::actor] base-class of the context (a
   108         -[package cmdr::private] instance) to get the standard parsing
   109         -structure used within the framework and then delegates to the instance
   110         -method [method complete-repl].
   111         -
   112         -[para] [method complete-rel] then applies the following rules:
   113         -
   114         -[list_begin enumerated]
   115         -
   116         -[enum] In case of syntax error return an empty list (no completion).
   117         -
   118         -[enum] For an empty command line return all commands.
   119         -
   120         -[enum] For a partial single word return all matching commands.
   121         -
   122         -[enum] For a command containing more than two words no further
   123         -	completion is possible, return an empty list.
   124         -
   125         -[enum] After a full single word delegate completion to the
   126         -	[package cmdr::parameter] instance indicated by the
   127         -	first word and return its results. The relevant
   128         -	method is [method complete-words].
   129         -
   130         -[para] No completion is done if the first word does not yield
   131         -        a parameter to delegate to (unknown or ambigous), or
   132         -	if it is a presence option, which does not take an argument.
   133         -
   134         -[para] The parameter essentially only extracts the word to complete
   135         -	from the state structure and then delegates to the validation
   136         -	type (method [method complete]) for actual completion.
   137         -
   138         -[list_end]
   139         -
   140         -[para] Note: The details of the state structure generated by
   141         -[method parse-line] and then taken by [method complete-repl] are
   142         -explained in section [sectref {Parse State}].
   143         -
   144         -[comment { @ EDIT: --- todo --- sequence diagram mini shell completion }]
   145         -
   146         -
   147         -[comment {************************************************************}]
   148         -[section {Parse State}]
   149         -
   150         -The state structure used by all methods relevant to command line
   151         -completion is a dictionary containing the six keys list below.
   152         -
   153         -Its only generator is method [method parse-line] of base-class
   154         -[package cmdr::actor], all others parts of the system then only read
   155         -and manipulate it.
   156         -
   157         -[list_begin definitions]
   158         -[def [const ok]]
   159         -A boolean flag. [const true] indicates that the [const line] parsed
   160         -sucessfully into words. [const false] indicates a syntax error.
   161         -
   162         -[para] The framework expects basic shell syntax with space-separated
   163         -words using single- and double-quotes for words containing whitespace
   164         -themselves. Note that complex syntax like variable- and
   165         -command-substitutions are not allowed.
   166         -
   167         -[def [const line]]
   168         -A copy of the unparsed command line.
   169         -
   170         -[def [const words]]
   171         -
   172         -The command [const line] parsed into the bare words. The data is not
   173         -valid if [const ok] indicates a parsing error. This is not a list of
   174         -strings, but actually a list of tokens.
   175         -
   176         -[para] Each token is a list of four elements containing, in the order
   177         -below:
   178         -
   179         -[list_begin enumerated]
   180         -[enum] Type of the token (implicitly specifies found quoting).
   181         -[enum] Start index of token in [const line] including quoting.
   182         -[enum] End index of token in [const line], including quoting.
   183         -[enum] The string value of the token, with escapes fully resolved.
   184         -	I.e. the actual word.
   185         -[list_end]
   186         -
   187         -[para] Note: If [const line] ended in trailing whitespace the last
   188         -element of this list will be an empty string representing the word
   189         -started by the user, yet still empty.
   190         -
   191         -[def [const nwords]]
   192         -The number of element in [const words]. The data is not valid if
   193         -[const ok] indicates a parsing error.
   194         -
   195         -[def [const at]]
   196         -The index of the [term {current word}] in [const words] currently
   197         -considered by the completion code. Initially [const 0] this advances
   198         -as the completion code works through the prefix to determine the
   199         -context for the completion of the last word.
   200         -
   201         -[def [const doexit]]
   202         -A boolean flag. Indicates if the pseudo-command [cmd .exit] is active
   203         -([const true]), or not. Initially [const true].
   204         -
   205         -[list_end]
           18  +[section {Code Overview}]        [include parts/completion_methods.inc]
           19  +[section {Parse State}]          [include parts/completion_state.inc]
           20  +[section {Main Shell Operation}] [include parts/completion_main.inc]
           21  +[section {Mini Shell Operation}] [include parts/completion_mini.inc]
   206     22   
   207     23   [include parts/feedback.inc]
   208     24   [manpage_end]

Changes to doc/cmdr_howto_development.man.

    55     55   [section {Demonstration/Example Applications}]
    56     56   
    57     57   [vset PTITLE] (currently) does not have demonstrations, nor examples.
    58     58   
    59     59   [comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
    60     60   [section {Directory structure}]
    61     61   
    62         -Explain the physical layout (directory structure).
           62  +The directory structure of the sources is as explained below:
    63     63   
    64     64   [list_begin definitions]
    65         -
    66     65   [include parts/layout_standard.inc]
    67     66   
    68         -[def [file actor.tcl]]     == Package [package cmdr::actor].
    69         -[def [file cmdr.tcl]]      == Package [package cmdr].
    70         -[def [file config.tcl]]    == Package [package cmdr::config].
    71         -[def [file help.tcl]]      == Package [package cmdr::help].
    72         -[def [file help_json.tcl]] == Package [package cmdr::help::json].
    73         -[def [file help_sql.tcl]]  == Package [package cmdr::help::sql].
    74         -[def [file officer.tcl]]   == Package [package cmdr::officer].
    75         -[def [file parameter.tcl]] == Package [package cmdr::parameter].
    76         -[def [file private.tcl]]   == Package [package cmdr::private].
    77         -[def [file util.tcl]]      == Package [package cmdr::util].
    78         -[def [file validate.tcl]]  == Package [package cmdr::validate].
    79         -[def [file vcommon.tcl]]   == Package [package cmdr::validate::common].
    80         -
           67  +[def [file actor.tcl]]     Package [package cmdr::actor].
           68  +[def [file cmdr.tcl]]      Package [package cmdr].
           69  +[def [file config.tcl]]    Package [package cmdr::config].
           70  +[def [file help.tcl]]      Package [package cmdr::help].
           71  +[def [file help_json.tcl]] Package [package cmdr::help::json].
           72  +[def [file help_sql.tcl]]  Package [package cmdr::help::sql].
           73  +[def [file officer.tcl]]   Package [package cmdr::officer].
           74  +[def [file parameter.tcl]] Package [package cmdr::parameter].
           75  +[def [file private.tcl]]   Package [package cmdr::private].
           76  +[def [file util.tcl]]      Package [package cmdr::util].
           77  +[def [file validate.tcl]]  Package [package cmdr::validate].
           78  +[def [file vcommon.tcl]]   Package [package cmdr::validate::common].
    81     79   [list_end]
    82     80   
           81  +[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
    83     82   [section {Extended Build Actions}]
    84         -
    85     83   [include parts/build-dev.inc]
    86     84   
    87     85   [comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
    88     86   [section {Architecture & Concepts}]
    89     87   
    90         -The following sections explain
    91         -
    92         -[list_begin enumerated]
    93         -[enum] the internal architecture and package dependencies.
    94         -[enum] the internal data structures.
    95         -[enum] important operation sequences (UML SD).
    96         -[list_end]
    97         -
    98         -[subsection {System Architecture}]
    99     88   [include parts/architecture.inc]
   100         -[comment { @EDIT Package dependencies (diagram) }]
           89  +
           90  +[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
           91  +[section {Validation Types}]
           92  +
           93  +Everything said in the public document [term [vset TITLE_DEV_VT]]
           94  +applies to the standard validation types of the framework (as listed
           95  +in [term [vset TITLE_VALIDATE]]) as well.
           96  +
           97  +[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
           98  +[section {Help Formats}]
           99  +
          100  +Everything said in the public document [term [vset TITLE_DEV_HF]]
          101  +applies to the standard help formats of the framework (as listed in
          102  +[term [vset TITLE_HELP_STD]]) as well.
          103  +
          104  +[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
          105  +[section {Command Line Completion}]
   101    106   
   102         -[subsection {Data structures}]
   103         -[comment { @EDIT Explain data structures }]
          107  +The document [term [vset TITLE_DEV_COMPLETE]] describes the inner
          108  +workings of the command line completion provided by the framework.
   104    109   
   105         -[subsection {Operation Sequences}]
   106         -[comment { @EDIT Explain operation sequences }]
   107         -
          110  +[comment @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]
   108    111   [include parts/related.inc]
   109    112   [include parts/feedback.inc]
   110    113   [manpage_end]

Added doc/figures/dsl_umlsequence.inc.

            1  +# -*- tcl -*- tcl.tk//DSL diagram//EN//1.0
            2  +## ====================================================================
            3  +## UML sequence diagram DSL, assembly level.
            4  +
            5  +# Should have a grid parameter the others are based on.
            6  +
            7  +set boxheight [10 mm]
            8  +set boxwidth  [30 mm]
            9  +set movelength [10 mm]
           10  +
           11  +proc actor {code n {w {}}} {
           12  +    global $code
           13  +    if {$w eq ""} {
           14  +	upvar 1 boxwidth bw
           15  +	set w $bw
           16  +    }
           17  +    box "$n" width $w
           18  +    group { down ; line }
           19  +    move to [by [5 mm] e]
           20  +    set $code [last line end]
           21  +    return
           22  +}
           23  +
           24  +proc skip {code} {
           25  +    global $code
           26  +    group { down ; line from [set $code] }
           27  +    set $code [last line end]
           28  +    return
           29  +}
           30  +
           31  +proc action {code args} {
           32  +    global $code a$code
           33  +    box fillcolor white {*}$args with north at [set $code] width [3 mm] height [10 mm]
           34  +    set $code [last box south]
           35  +    set a$code [last box]
           36  +    return
           37  +}
           38  +
           39  +proc label {code text} {
           40  +    global a$code
           41  +    text text $text with sw at [[set a$code] ne]
           42  +    return
           43  +}
           44  +
           45  +proc call-up {from to label} {
           46  +    global a$from a$to
           47  +    arrow from [[set a$from] w] to [[set a$to] e] stroke 2
           48  +    text $label with sw at [[last arrow end] by [2 mm] e]
           49  +    return
           50  +}
           51  +
           52  +proc call-down {from to label} {
           53  +    global a$from a$to
           54  +    arrow from [[set a$from] e] to [[set a$to] w] stroke 2
           55  +    text $label with se at [[last arrow end] by [2 mm] w]
           56  +    return
           57  +}
           58  +
           59  +proc return-down {from to label} {
           60  +    global a$from a$to
           61  +    arrow from [[set a$from] e] to [[set a$to] w] dotted
           62  +    text $label with sw at [[last arrow start] by [2 mm] e]
           63  +    return
           64  +}
           65  +
           66  +proc return-up {from to label} {
           67  +    global a$from a$to
           68  +    arrow from [[set a$from] w] to [[set a$to] e] dotted
           69  +    text $label with se at [[last arrow start] by [2 mm] w]
           70  +    return
           71  +}
           72  +
           73  +proc stop {code} {
           74  +    global $code
           75  +    skip $code
           76  +    circle with center at [set $code] radius [1 mm] fillcolor black
           77  +    return
           78  +}
           79  +
           80  +## ====================================================================

Added doc/figures/main-shell.dia.

            1  +# -*- tcl -*- tcl.tk//DSL diagram//EN//1.0
            2  +## DSL for uml sequences. Draft.
            3  +
            4  +source [file join [file dirname [file normalize [info script]]] dsl_umlsequence.inc]
            5  +
            6  +## ====================================================================
            7  +
            8  +actor kn "known"            [20 mm]
            9  +actor kv "kinetcl::Valid"
           10  +actor cb "BASE"             [20 mm]
           11  +actor cv "kinetcl_validate" [35 mm]
           12  +actor cf "framesync"        [25 mm]
           13  +actor co "context"          [20 mm]
           14  +
           15  +action  cf
           16  +label   cf can-sync-with(node)
           17  +action  cv
           18  +call-up cf cv "invoke"
           19  +action  kv
           20  +call-up cv kv "invoke"
           21  +action  kn
           22  +call-up kv kn "dict exists"
           23  +
           24  +action kn
           25  +action kv
           26  +return-down kn kv true
           27  +
           28  +skip   cb
           29  +action cb
           30  +call-down kv cb "@mark"
           31  +
           32  +skip co
           33  +action co
           34  +call-down cb co "save handle"
           35  +
           36  +action co
           37  +action cb
           38  +return-up co cb ""
           39  +action kv
           40  +return-up cb kv ""
           41  +
           42  +action kv
           43  +action cv dashed fillcolor {}
           44  +action cv dashed fillcolor {}
           45  +action cv
           46  +return-down kv cv "TCL_OK"
           47  +action co
           48  +call-down cv co "get handle"
           49  +action co
           50  +action cv
           51  +return-up co cv "handle"
           52  +
           53  +action cv
           54  +action cf dashed fillcolor {}
           55  +action cf dashed fillcolor {}
           56  +action cf dashed fillcolor {}
           57  +action cf dashed fillcolor {}
           58  +action cf
           59  +return-down cv cf "TCL_OK, handle"
           60  +
           61  +# sync heights...
           62  +
           63  +skip co
           64  +skip cb
           65  +skip cb
           66  +skip cb
           67  +skip kv
           68  +skip kv
           69  +skip kn
           70  +skip kn
           71  +skip kn
           72  +skip kn
           73  +stop co
           74  +stop cb
           75  +stop cf
           76  +stop cv
           77  +stop kv
           78  +stop kn
           79  +
           80  +# close timelines
           81  +
           82  +line \
           83  +    from [$kn by [10 mm] w] \
           84  +    to   [$co by [10 mm] e]
           85  +
           86  +# outside annotation ... need symbolic locations.
           87  +
           88  +set p [[0.5 between [2nd box ne] [3rd box nw]] by [5 mm] n]
           89  +line dashed \
           90  +    from $p \
           91  +    to   [[$p | $cb] by [5 mm] down]
           92  +text text C   with w at [last line start]
           93  +text text Tcl with e at [last line start]

Added doc/figures/mini-shell.dia.

            1  +# -*- tcl -*- tcl.tk//DSL diagram//EN//1.0
            2  +## DSL for uml sequences. Draft.
            3  +
            4  +source [file join [file dirname [file normalize [info script]]] dsl_umlsequence.inc]
            5  +
            6  +## ====================================================================
            7  +
            8  +actor kn "known"            [20 mm]
            9  +actor kv "kinetcl::Valid"
           10  +actor cb "BASE"             [20 mm]
           11  +actor cv "kinetcl_validate" [35 mm]
           12  +actor cf "framesync"        [25 mm]
           13  +actor co "context"          [20 mm]
           14  +
           15  +action  cf
           16  +label   cf can-sync-with(node)
           17  +action  cv
           18  +call-up cf cv "invoke"
           19  +action  kv
           20  +call-up cv kv "invoke"
           21  +action  kn
           22  +call-up kv kn "dict exists"
           23  +
           24  +action kn
           25  +action kv
           26  +return-down kn kv true
           27  +
           28  +skip   cb
           29  +action cb
           30  +call-down kv cb "@mark"
           31  +
           32  +skip co
           33  +action co
           34  +call-down cb co "save handle"
           35  +
           36  +action co
           37  +action cb
           38  +return-up co cb ""
           39  +action kv
           40  +return-up cb kv ""
           41  +
           42  +action kv
           43  +action cv dashed fillcolor {}
           44  +action cv dashed fillcolor {}
           45  +action cv
           46  +return-down kv cv "TCL_OK"
           47  +action co
           48  +call-down cv co "get handle"
           49  +action co
           50  +action cv
           51  +return-up co cv "handle"
           52  +
           53  +action cv
           54  +action cf dashed fillcolor {}
           55  +action cf dashed fillcolor {}
           56  +action cf dashed fillcolor {}
           57  +action cf dashed fillcolor {}
           58  +action cf
           59  +return-down cv cf "TCL_OK, handle"
           60  +
           61  +# sync heights...
           62  +
           63  +skip co
           64  +skip cb
           65  +skip cb
           66  +skip cb
           67  +skip kv
           68  +skip kv
           69  +skip kn
           70  +skip kn
           71  +skip kn
           72  +skip kn
           73  +stop co
           74  +stop cb
           75  +stop cf
           76  +stop cv
           77  +stop kv
           78  +stop kn
           79  +
           80  +# close timelines
           81  +
           82  +line \
           83  +    from [$kn by [10 mm] w] \
           84  +    to   [$co by [10 mm] e]
           85  +
           86  +# outside annotation ... need symbolic locations.
           87  +
           88  +set p [[0.5 between [2nd box ne] [3rd box nw]] by [5 mm] n]
           89  +line dashed \
           90  +    from $p \
           91  +    to   [[$p | $cb] by [5 mm] down]
           92  +text text C   with w at [last line start]
           93  +text text Tcl with e at [last line start]

Added doc/parts/completion_main.inc.

            1  +
            2  +[comment ==============================================================]
            3  +[subsection Overview]
            4  +
            5  +The [term {main shell}] is fully implemented within the package
            6  +[package cmdr::officer], while its command-line completion also
            7  +reaches into the packages [package cmdr::private],
            8  +[package cmdr::config], and [package cmdr::parameter].
            9  +
           10  +The purpose of this shell is interactive access to the commands of an
           11  +officer. Which implies, for the toplevel officer, access to the entire
           12  +command hierarchy.
           13  +
           14  +[para] To this end this shell accepts the names of all subordinate
           15  +commands known to the officer as commands.
           16  +
           17  +[para] It may additional accept a hard-wired command [cmd .exit],
           18  +depending on the parse state (see flag [const doexit]).
           19  +
           20  +
           21  +[comment ==============================================================]
           22  +[subsection {Sequencing and Rules}]
           23  +
           24  +This section is in essence the textual description of an UML sequence
           25  +diagram.
           26  +
           27  +[para] Note that the state structure used by this code and referenced
           28  +in the text is explained in section [sectref {Parse State}].
           29  +
           30  +[list_begin enumerated]
           31  +
           32  +[enum] The main shell's core read-eval-print-loop calls on the
           33  +instance method [method complete] for command-line completion,
           34  +providing the text of the buffer to complete at the end).
           35  +
           36  +[enum] The method [package cmdr::actor]::[method parse-line] is called
           37  +on first, to get a parse of the buffer. This parse is then delegated
           38  +to the instance method [method complete-words] to perform the bulk of
           39  +the work.
           40  +
           41  +[para] Note: The officer instance has access to [method parse-line]
           42  +because it is a derived class of [package cmdr::actor].
           43  +
           44  +[enum] The implementation of method [method complete-words] applies
           45  +the rules below:
           46  +
           47  +[list_begin enumerated]
           48  +
           49  +[enum] If the buffer was not properly parsed (i.e. the state indicates
           50  +a syntax error), the list of completions is empty.
           51  +
           52  +[enum] When the buffer is empty all commands are possible completions,
           53  +as are all the commands of the default subordinate, if any was
           54  +specified.
           55  +
           56  +[enum] If the [term {current word}] (as per [const at]) is the last
           57  +word (per [const nwords]) on the command line then completion is done
           58  +using the set of commands known to the officer and its default
           59  +subordinate, if any.
           60  +
           61  +[enum] For a [term {current word}] which is not the last, i.e. at the
           62  +beginning or in the middle of the command line instead, then this word
           63  +is the name of the subordinate object responsible for handling the
           64  +remaining words.
           65  +
           66  +[para] No completion is done however if the current word does not
           67  +yield a subordinate to delegate to (i.e. unknown or ambigous). If a
           68  +default command is known this case will delegate to this subordinate,
           69  +as a last attempt.
           70  +
           71  +[para] When a subordinate was found the system advances the current
           72  +word, resets the [const doexit] flag, and lastly invokes the method
           73  +[method complete-words] of the sub-ordinate.
           74  +
           75  +[enum] When the subordinate is again an [term officer], these rules
           76  +here apply again.
           77  +
           78  +[enum] A [term private] however will delegate to the embedded
           79  +[package cmdr::config] instance, again using the method
           80  +[method complete-words].
           81  +
           82  +[enum] This method processes the remaining words similar to how the
           83  +command line is parsed at runtime to match words to parameters, to
           84  +know at the end which (set of) parameter(s) governs the last word.
           85  +
           86  +[para] For [term options] the last word may be partial name of a flag,
           87  +or it may be the partial argument to an option.
           88  +
           89  +In case of the first the set of completions is the set of all flags
           90  +with the word as its prefix.
           91  +
           92  +In case of the second the completion delegates to the parameter
           93  +governing the flag, if there is any, which in turn delegates to its
           94  +associated validation type.
           95  +
           96  +[para] For [term inputs] the system essentially steps through a
           97  +non-deterministic finite automaton to find all the parameters which
           98  +may govern the current word. Completion is done as the union of the
           99  +completion done by the individual parameters.
          100  +
          101  +[para] Note that the automaton and its results can be precomputed,
          102  +this happens in the internal method [method CompletionGraph].
          103  +
          104  +[list_end]
          105  +
          106  +[list_end]
          107  +
          108  +[comment { @ EDIT: --- todo --- sequence diagram main shell completion }]

Added doc/parts/completion_methods.inc.

            1  +
            2  +The methods relevant to command-line completion can be found in four
            3  +packages/classes, namely:
            4  +
            5  +[list_begin definitions]
            6  +[def [package cmdr::actor]]
            7  +     [list_begin definitions]
            8  +     [def [method parse-line]]
            9  +     Takes a command-line and returns an initial parse structure as
           10  +     described in section [sectref {Parse State}]
           11  +
           12  +     [def [method completions]]
           13  +     [def [method match]]
           14  +     [list_end]
           15  +
           16  +[def [package cmdr::config]]
           17  +     [list_begin definitions]
           18  +     [def [method complete]]
           19  +     Hook method, entrypoint for the mini-shell.
           20  +
           21  +     Takes the buffer to complete and returns the list of completions,
           22  +     which may be empty.
           23  +
           24  +     Uses the workhorse method below and the [package cmdr::actor]
           25  +     methods.
           26  +
           27  +     [def [method complete-repl]]
           28  +     Main work method taking a parse structure and returning the list
           29  +     of completions. More details about it (and the mini-shell) can be
           30  +     found in section [sectref {Mini Shell Operation}].
           31  +
           32  +     [def [method complete-words]]
           33  +     Main work method for completion from the main shell, invoked by
           34  +     the [package cmdr::private] instance having to complete words.
           35  +
           36  +     [list_end]
           37  +
           38  +[def [package cmdr::officer]]
           39  +     [list_begin definitions]
           40  +     [def [method complete]]
           41  +
           42  +     Hook method, entrypoint for the main shell.
           43  +
           44  +     Takes the buffer to complete and returns the list of completions,
           45  +     which may be empty.
           46  +
           47  +     Uses the workhorse method below and the [package cmdr::actor]
           48  +     methods.
           49  +
           50  +     [def [method complete-words]]
           51  +     Main work method taking a parse structure and returning the list
           52  +     of completions. More details about it (and the main shell) can be
           53  +     found in section [sectref {Main Shell Operation}].
           54  +
           55  +     [para] Can recurse to the same method of other officers, and
           56  +     private instances.
           57  +
           58  +     [list_end]
           59  +
           60  +[def [package cmdr::parameter]]
           61  +     [list_begin definitions]
           62  +     [def [method complete-words]]
           63  +     Main work method when reaching a parameter.
           64  +
           65  +     Simply delegates the work to the method [method complete] of the
           66  +     validation type associated with the parameter.
           67  +     [list_end]
           68  +
           69  +[def [package cmdr::private]]
           70  +     [list_begin definitions]
           71  +     [def [method complete-words]]
           72  +     Main work method when reaching a private while recursing through
           73  +     the command hierarchy from officers.
           74  +
           75  +     Delegates to the [package cmdr::config] method of the same name.
           76  +
           77  +     [list_end]
           78  +[list_end]

Added doc/parts/completion_mini.inc.

            1  +
            2  +[comment ==============================================================]
            3  +[subsection Overview]
            4  +
            5  +The [term {mini shell}] and its command-line completion is fully
            6  +implemented within the package [package cmdr::config].
            7  +
            8  +The purpose of this shell is the interactive entry of the parameters
            9  +for a [term private].
           10  +
           11  +[para] To this end this shell accepts the [term system] names of all
           12  +parameters held by the config instance as commands, plus five
           13  +hard-wired commands to control exit conditions and access to help.
           14  +
           15  +[para] The parameter commands all take single value as their argument,
           16  +the string value to set.
           17  +
           18  +The sole exception to this are [term {presence options}] which do not
           19  +take any argument.
           20  +
           21  +[para] Similarly none of the hardwired commands take an
           22  +argument. Their names all start with a [const .]. They are, in
           23  +alphabetical order, [const .cancel], [const .exit], [const .help]
           24  +[const .ok], and [const .run].
           25  +
           26  +[comment ==============================================================]
           27  +[subsection {Sequencing and Rules}]
           28  +
           29  +This section is in essence the textual description of an UML sequence
           30  +diagram.
           31  +
           32  +[para] Note that the state structure used by this code and referenced
           33  +in the text is explained in section [sectref {Parse State}].
           34  +
           35  +[list_begin enumerated]
           36  +
           37  +[enum] The mini shell's core read-eval-print-loop calls on the
           38  +instance method [method complete] for command-line completion,
           39  +providing the text of the buffer to complete at the end).
           40  +
           41  +[enum] The method [package cmdr::actor]::[method parse-line] is called
           42  +on first, to get a parse of the buffer. This parse is then delegated
           43  +to the instance method [method complete-repl] to perform the bulk of
           44  +the work.
           45  +
           46  +[para] Note: The config instance has access to [method parse-line]
           47  +through its internal [const context] command, which is an alias of the
           48  +[package cmdr::private] instance the configuration belongs to. This
           49  +class is derived from [package cmdr::actor].
           50  +
           51  +[enum] The implementation of method [method complete-repl] applies the
           52  +rules below:
           53  +
           54  +[list_begin enumerated]
           55  +[enum] If the buffer was not properly parsed (i.e. the state indicates
           56  +a syntax error), the list of completions is empty.
           57  +
           58  +[enum] When the buffer is empty all commands are possible completions.
           59  +
           60  +[enum] When the buffer contains more than three words the list of
           61  +completions is empty, as all valid mini-shell commands consist of at
           62  +most two words.
           63  +
           64  +[enum] A buffer containing a single word contain a partial command
           65  +name and the list of completions is the set of commands having this
           66  +word as prefix.
           67  +
           68  +[enum] A buffer containing two words contains a command name and a
           69  +partial argument. Completion is delegated to the parameter (method
           70  +[package cmdr::parameter]::[method complete-words]) indicated by the
           71  +command name, and through it to the associated validation type.
           72  +
           73  +[para] No completion is done however if the first word does not yield
           74  +a parameter to delegate to (i.e. unknown or ambigous), or if it is a
           75  +presence option, which does not take an argument.
           76  +
           77  +[para] The hardwired commands fall here implicitly under unknown
           78  +parameter.
           79  +
           80  +[list_end]
           81  +[list_end]
           82  +
           83  +[comment { @ EDIT: --- todo --- sequence diagram mini shell completion }]
           84  +

Added doc/parts/completion_state.inc.

            1  +
            2  +The state structure used by all methods relevant to command line
            3  +completion is a dictionary containing the six keys listed below.
            4  +
            5  +The only generator for this structure is method [method parse-line] of
            6  +the base-class [package cmdr::actor]. All others parts of the system
            7  +then only read and manipulate it.
            8  +
            9  +[list_begin definitions]
           10  +[def [const ok]]
           11  +A boolean flag. Indicates if the [const line] parsed sucessfully into
           12  +words ([const true]), or not ([const false], syntax error).
           13  +
           14  +[para] The framework expects basic shell syntax with space-separated
           15  +words using single- and double-quotes for words containing whitespace
           16  +themselves. Note that complex syntax like variable- and
           17  +command-substitutions are not allowed.
           18  +
           19  +[def [const line]]
           20  +A copy of the unparsed command line.
           21  +
           22  +[def [const words]]
           23  +
           24  +The command [const line] parsed into the bare words. The data is not
           25  +valid if [const ok] indicates a parsing error. This is not a list of
           26  +strings, but actually a list of tokens.
           27  +
           28  +[para] Each token is a list of four elements containing, in the order
           29  +below:
           30  +
           31  +[list_begin enumerated]
           32  +[enum] Type of the token (implicitly specifies found quoting).
           33  +[enum] Start index of token in [const line] including quoting.
           34  +[enum] End index of token in [const line], including quoting.
           35  +[enum] The string value of the token, with escapes fully resolved.
           36  +	I.e. the actual word.
           37  +[list_end]
           38  +
           39  +[para] Note: If [const line] ended in trailing whitespace the last
           40  +element of this list will be an empty string representing the word
           41  +started by the user, yet still empty.
           42  +
           43  +[def [const nwords]]
           44  +The number of element in [const words]. The data is not valid if
           45  +[const ok] indicates a parsing error.
           46  +
           47  +[def [const at]]
           48  +The index of the [term {current word}] in [const words] currently
           49  +considered by the completion code. Initially [const 0] this advances
           50  +as the completion code works through the prefix to determine the
           51  +context for the completion of the last word.
           52  +
           53  +[def [const doexit]]
           54  +A boolean flag. Indicates if the pseudo-command [cmd .exit] is active
           55  +([const true]), or not. Initially [const true].
           56  +
           57  +[list_end]

Changes to doc/parts/definitions.inc.

     3      3   [vset TITLE_LICENSE  "[vset PTITLE] - License"			 ]
     4      4   [vset TITLE_CHANGES  "[vset PTITLE] - Log of Changes"    	 ]
     5      5   [vset TITLE_SOURCES  "[vset PTITLE] - How To Get The Sources"	 ]
     6      6   [vset TITLE_INSTALL  "[vset PTITLE] - The Installer's Guide"	 ]
     7      7   [vset TITLE_DEV      "[vset PTITLE] - The Developer's Guide"	 ]
     8      8   
     9      9   [comment {- Custom documents & titles - - -- --- ----- --------}]
    10         -[vset TITLE_MAIN      "[vset PTITLE] - Main package and API"]
    11         -[vset TITLE_ACTOR     "[vset PTITLE] - (Internal) Base class for officers and privates"]
    12         -[vset TITLE_CONFIG    "[vset PTITLE] - (Partially internal) Collection of parameters for privates"]
    13         -[vset TITLE_DEV_HF    "[vset PTITLE] - Writing custom help formats"]
    14         -[vset TITLE_DEV_VT    "[vset PTITLE] - Writing custom validation types"]
           10  +[vset TITLE_MAIN          "[vset PTITLE] - Main package and API"]
           11  +[vset TITLE_ACTOR         "[vset PTITLE] - (Internal) Base class for officers and privates"]
           12  +[vset TITLE_CONFIG        "[vset PTITLE] - (Partially internal) Collection of parameters for privates"]
           13  +[vset TITLE_DEV_COMPLETE  "[vset PTITLE] - Internals of command line completion"]
           14  +[vset TITLE_DEV_HF        "[vset PTITLE] - Writing custom help formats"]
           15  +[vset TITLE_DEV_VT        "[vset PTITLE] - Writing custom validation types"]
    15     16   [vset TITLE_DSL           "[vset PTITLE] - Introduction to the Specification Language"]
    16     17   [vset TITLE_DSL_OFFICER   "[vset PTITLE] - Officer Specification Language"]
    17     18   [vset TITLE_DSL_PRIVATE   "[vset PTITLE] - Private Specification Language"]
    18     19   [vset TITLE_DSL_PARAMETER "[vset PTITLE] - Parameter Specification Language"]
    19         -[vset TITLE_HELP      "[vset PTITLE] - (Internal) Utilities for help text formatting and setup"]
    20         -[vset TITLE_HELP_JSON "[vset PTITLE] - Formatting help as JSON object"]
    21         -[vset TITLE_HELP_SQL  "[vset PTITLE] - Formatting help as series of SQL commands"]
    22         -[vset TITLE_OFFICER   "[vset PTITLE] - (Internal) Aggregation of multiple commands for dispatch."]
    23         -[vset TITLE_PARAMETER "[vset PTITLE] - (Partially internal) Command parameters"]
    24         -[vset TITLE_PRIVATE   "[vset PTITLE] - (Internal) Single command handling, options, and arguments"]
    25         -[vset TITLE_UTIL      "[vset PTITLE] - (Internal) General Utilities"]
    26         -[vset TITLE_VALIDATE  "[vset PTITLE] - Standard validation types for parameters"]
    27         -[vset TITLE_VCOMMON   "[vset PTITLE] - Utilities for Validation Types"]
           20  +[vset TITLE_HELP          "[vset PTITLE] - (Internal) Utilities for help text formatting and setup"]
           21  +[vset TITLE_HELP_JSON     "[vset PTITLE] - Formatting help as JSON object"]
           22  +[vset TITLE_HELP_STD      "[vset PTITLE] - Standard help formats of the framework"]
           23  +[vset TITLE_HELP_SQL      "[vset PTITLE] - Formatting help as series of SQL commands"]
           24  +[vset TITLE_OFFICER       "[vset PTITLE] - (Internal) Aggregation of multiple commands for dispatch."]
           25  +[vset TITLE_PARAMETER     "[vset PTITLE] - (Partially internal) Command parameters"]
           26  +[vset TITLE_PRIVATE       "[vset PTITLE] - (Internal) Single command handling, options, and arguments"]
           27  +[vset TITLE_UTIL          "[vset PTITLE] - (Internal) General Utilities"]
           28  +[vset TITLE_VALIDATE      "[vset PTITLE] - Standard validation types for parameters"]
           29  +[vset TITLE_VCOMMON       "[vset PTITLE] - Utilities for Validation Types"]
    28     30   
    29     31   [comment {- Miscellanea ............. - - -- --- ----- --------}]

Added embedded/man/files/cmdr_dev_completion.n.

            1  +'\"
            2  +'\" Generated from file 'cmdr_dev_completion\&.man' by tcllib/doctools with format 'nroff'
            3  +'\" Copyright (c) 2013 Andreas Kupries
            4  +'\" Copyright (c) 2013 Documentation, Andreas Kupries
            5  +'\"
            6  +'\" The definitions below are for supplemental macros used in Tcl/Tk
            7  +'\" manual entries.
            8  +'\"
            9  +'\" .AP type name in/out ?indent?
           10  +'\"	Start paragraph describing an argument to a library procedure.
           11  +'\"	type is type of argument (int, etc.), in/out is either "in", "out",
           12  +'\"	or "in/out" to describe whether procedure reads or modifies arg,
           13  +'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
           14  +'\"	needed;  use .AS below instead)
           15  +'\"
           16  +'\" .AS ?type? ?name?
           17  +'\"	Give maximum sizes of arguments for setting tab stops.  Type and
           18  +'\"	name are examples of largest possible arguments that will be passed
           19  +'\"	to .AP later.  If args are omitted, default tab stops are used.
           20  +'\"
           21  +'\" .BS
           22  +'\"	Start box enclosure.  From here until next .BE, everything will be
           23  +'\"	enclosed in one large box.
           24  +'\"
           25  +'\" .BE
           26  +'\"	End of box enclosure.
           27  +'\"
           28  +'\" .CS
           29  +'\"	Begin code excerpt.
           30  +'\"
           31  +'\" .CE
           32  +'\"	End code excerpt.
           33  +'\"
           34  +'\" .VS ?version? ?br?
           35  +'\"	Begin vertical sidebar, for use in marking newly-changed parts
           36  +'\"	of man pages.  The first argument is ignored and used for recording
           37  +'\"	the version when the .VS was added, so that the sidebars can be
           38  +'\"	found and removed when they reach a certain age.  If another argument
           39  +'\"	is present, then a line break is forced before starting the sidebar.
           40  +'\"
           41  +'\" .VE
           42  +'\"	End of vertical sidebar.
           43  +'\"
           44  +'\" .DS
           45  +'\"	Begin an indented unfilled display.
           46  +'\"
           47  +'\" .DE
           48  +'\"	End of indented unfilled display.
           49  +'\"
           50  +'\" .SO
           51  +'\"	Start of list of standard options for a Tk widget.  The
           52  +'\"	options follow on successive lines, in four columns separated
           53  +'\"	by tabs.
           54  +'\"
           55  +'\" .SE
           56  +'\"	End of list of standard options for a Tk widget.
           57  +'\"
           58  +'\" .OP cmdName dbName dbClass
           59  +'\"	Start of description of a specific option.  cmdName gives the
           60  +'\"	option's name as specified in the class command, dbName gives
           61  +'\"	the option's name in the option database, and dbClass gives
           62  +'\"	the option's class in the option database.
           63  +'\"
           64  +'\" .UL arg1 arg2
           65  +'\"	Print arg1 underlined, then print arg2 normally.
           66  +'\"
           67  +'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
           68  +'\"
           69  +'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
           70  +.if t .wh -1.3i ^B
           71  +.nr ^l \n(.l
           72  +.ad b
           73  +'\"	# Start an argument description
           74  +.de AP
           75  +.ie !"\\$4"" .TP \\$4
           76  +.el \{\
           77  +.   ie !"\\$2"" .TP \\n()Cu
           78  +.   el          .TP 15
           79  +.\}
           80  +.ta \\n()Au \\n()Bu
           81  +.ie !"\\$3"" \{\
           82  +\&\\$1	\\fI\\$2\\fP	(\\$3)
           83  +.\".b
           84  +.\}
           85  +.el \{\
           86  +.br
           87  +.ie !"\\$2"" \{\
           88  +\&\\$1	\\fI\\$2\\fP
           89  +.\}
           90  +.el \{\
           91  +\&\\fI\\$1\\fP
           92  +.\}
           93  +.\}
           94  +..
           95  +'\"	# define tabbing values for .AP
           96  +.de AS
           97  +.nr )A 10n
           98  +.if !"\\$1"" .nr )A \\w'\\$1'u+3n
           99  +.nr )B \\n()Au+15n
          100  +.\"
          101  +.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
          102  +.nr )C \\n()Bu+\\w'(in/out)'u+2n
          103  +..
          104  +.AS Tcl_Interp Tcl_CreateInterp in/out
          105  +'\"	# BS - start boxed text
          106  +'\"	# ^y = starting y location
          107  +'\"	# ^b = 1
          108  +.de BS
          109  +.br
          110  +.mk ^y
          111  +.nr ^b 1u
          112  +.if n .nf
          113  +.if n .ti 0
          114  +.if n \l'\\n(.lu\(ul'
          115  +.if n .fi
          116  +..
          117  +'\"	# BE - end boxed text (draw box now)
          118  +.de BE
          119  +.nf
          120  +.ti 0
          121  +.mk ^t
          122  +.ie n \l'\\n(^lu\(ul'
          123  +.el \{\
          124  +.\"	Draw four-sided box normally, but don't draw top of
          125  +.\"	box if the box started on an earlier page.
          126  +.ie !\\n(^b-1 \{\
          127  +\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
          128  +.\}
          129  +.el \}\
          130  +\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
          131  +.\}
          132  +.\}
          133  +.fi
          134  +.br
          135  +.nr ^b 0
          136  +..
          137  +'\"	# VS - start vertical sidebar
          138  +'\"	# ^Y = starting y location
          139  +'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
          140  +.de VS
          141  +.if !"\\$2"" .br
          142  +.mk ^Y
          143  +.ie n 'mc \s12\(br\s0
          144  +.el .nr ^v 1u
          145  +..
          146  +'\"	# VE - end of vertical sidebar
          147  +.de VE
          148  +.ie n 'mc
          149  +.el \{\
          150  +.ev 2
          151  +.nf
          152  +.ti 0
          153  +.mk ^t
          154  +\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
          155  +.sp -1
          156  +.fi
          157  +.ev
          158  +.\}
          159  +.nr ^v 0
          160  +..
          161  +'\"	# Special macro to handle page bottom:  finish off current
          162  +'\"	# box/sidebar if in box/sidebar mode, then invoked standard
          163  +'\"	# page bottom macro.
          164  +.de ^B
          165  +.ev 2
          166  +'ti 0
          167  +'nf
          168  +.mk ^t
          169  +.if \\n(^b \{\
          170  +.\"	Draw three-sided box if this is the box's first page,
          171  +.\"	draw two sides but no top otherwise.
          172  +.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
          173  +.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
          174  +.\}
          175  +.if \\n(^v \{\
          176  +.nr ^x \\n(^tu+1v-\\n(^Yu
          177  +\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
          178  +.\}
          179  +.bp
          180  +'fi
          181  +.ev
          182  +.if \\n(^b \{\
          183  +.mk ^y
          184  +.nr ^b 2
          185  +.\}
          186  +.if \\n(^v \{\
          187  +.mk ^Y
          188  +.\}
          189  +..
          190  +'\"	# DS - begin display
          191  +.de DS
          192  +.RS
          193  +.nf
          194  +.sp
          195  +..
          196  +'\"	# DE - end display
          197  +.de DE
          198  +.fi
          199  +.RE
          200  +.sp
          201  +..
          202  +'\"	# SO - start of list of standard options
          203  +.de SO
          204  +.SH "STANDARD OPTIONS"
          205  +.LP
          206  +.nf
          207  +.ta 4c 8c 12c
          208  +.ft B
          209  +..
          210  +'\"	# SE - end of list of standard options
          211  +.de SE
          212  +.fi
          213  +.ft R
          214  +.LP
          215  +See the \\fBoptions\\fR manual entry for details on the standard options.
          216  +..
          217  +'\"	# OP - start of full description for a single option
          218  +.de OP
          219  +.LP
          220  +.nf
          221  +.ta 4c
          222  +Command-Line Name:	\\fB\\$1\\fR
          223  +Database Name:	\\fB\\$2\\fR
          224  +Database Class:	\\fB\\$3\\fR
          225  +.fi
          226  +.IP
          227  +..
          228  +'\"	# CS - begin code excerpt
          229  +.de CS
          230  +.RS
          231  +.nf
          232  +.ta .25i .5i .75i 1i
          233  +..
          234  +'\"	# CE - end code excerpt
          235  +.de CE
          236  +.fi
          237  +.RE
          238  +..
          239  +.de UL
          240  +\\$1\l'|0\(ul'\\$2
          241  +..
          242  +.TH "cmdr_completion" n 0 doc "Cmdr, a framework for command line parsing and dispatch"
          243  +.BS
          244  +.SH NAME
          245  +cmdr_completion \- Cmdr - Internals of command line completion
          246  +.SH SYNOPSIS
          247  +package require \fBcmdr \fR
          248  +.sp
          249  +.BE
          250  +.SH DESCRIPTION
          251  +.PP
          252  +Welcome to the Cmdr project, written by Andreas Kupries\&.
          253  +.PP
          254  +For availability please read \fICmdr - How To Get The Sources\fR\&.
          255  +.PP
          256  +This internal document provides an overview on how the framework
          257  +performs command-line completion in both the main and mini shells,
          258  +referencing all the relevant methods and describing the data
          259  +structures in use\&.
          260  +.PP
          261  +For more information about other internals of the framework
          262  +please read \fICmdr - The Developer's Guide\fR\&.
          263  +.SH "CODE OVERVIEW"
          264  +The methods relevant to command-line completion can be found in four
          265  +packages/classes, namely:
          266  +.TP
          267  +\fBcmdr::actor\fR
          268  +.RS
          269  +.TP
          270  +\fBparse-line\fR
          271  +Takes a command-line and returns an initial parse structure as
          272  +described in section \fBParse State\fR
          273  +.TP
          274  +\fBcompletions\fR
          275  +.TP
          276  +\fBmatch\fR
          277  +.RE
          278  +.TP
          279  +\fBcmdr::config\fR
          280  +.RS
          281  +.TP
          282  +\fBcomplete\fR
          283  +Hook method, entrypoint for the mini-shell\&.
          284  +Takes the buffer to complete and returns the list of completions,
          285  +which may be empty\&.
          286  +Uses the workhorse method below and the \fBcmdr::actor\fR
          287  +methods\&.
          288  +.TP
          289  +\fBcomplete-repl\fR
          290  +Main work method taking a parse structure and returning the list
          291  +of completions\&. More details about it (and the mini-shell) can be
          292  +found in section \fBMini Shell Operation\fR\&.
          293  +.TP
          294  +\fBcomplete-words\fR
          295  +Main work method for completion from the main shell, invoked by
          296  +the \fBcmdr::private\fR instance having to complete words\&.
          297  +.RE
          298  +.TP
          299  +\fBcmdr::officer\fR
          300  +.RS
          301  +.TP
          302  +\fBcomplete\fR
          303  +Hook method, entrypoint for the main shell\&.
          304  +Takes the buffer to complete and returns the list of completions,
          305  +which may be empty\&.
          306  +Uses the workhorse method below and the \fBcmdr::actor\fR
          307  +methods\&.
          308  +.TP
          309  +\fBcomplete-words\fR
          310  +Main work method taking a parse structure and returning the list
          311  +of completions\&. More details about it (and the main shell) can be
          312  +found in section \fBMain Shell Operation\fR\&.
          313  +.sp
          314  +Can recurse to the same method of other officers, and
          315  +private instances\&.
          316  +.RE
          317  +.TP
          318  +\fBcmdr::parameter\fR
          319  +.RS
          320  +.TP
          321  +\fBcomplete-words\fR
          322  +Main work method when reaching a parameter\&.
          323  +Simply delegates the work to the method \fBcomplete\fR of the
          324  +validation type associated with the parameter\&.
          325  +.RE
          326  +.TP
          327  +\fBcmdr::private\fR
          328  +.RS
          329  +.TP
          330  +\fBcomplete-words\fR
          331  +Main work method when reaching a private while recursing through
          332  +the command hierarchy from officers\&.
          333  +Delegates to the \fBcmdr::config\fR method of the same name\&.
          334  +.RE
          335  +.PP
          336  +.SH "PARSE STATE"
          337  +The state structure used by all methods relevant to command line
          338  +completion is a dictionary containing the six keys listed below\&.
          339  +The only generator for this structure is method \fBparse-line\fR of
          340  +the base-class \fBcmdr::actor\fR\&. All others parts of the system
          341  +then only read and manipulate it\&.
          342  +.TP
          343  +\fBok\fR
          344  +A boolean flag\&. Indicates if the \fBline\fR parsed sucessfully into
          345  +words (\fBtrue\fR), or not (\fBfalse\fR, syntax error)\&.
          346  +.sp
          347  +The framework expects basic shell syntax with space-separated
          348  +words using single- and double-quotes for words containing whitespace
          349  +themselves\&. Note that complex syntax like variable- and
          350  +command-substitutions are not allowed\&.
          351  +.TP
          352  +\fBline\fR
          353  +A copy of the unparsed command line\&.
          354  +.TP
          355  +\fBwords\fR
          356  +The command \fBline\fR parsed into the bare words\&. The data is not
          357  +valid if \fBok\fR indicates a parsing error\&. This is not a list of
          358  +strings, but actually a list of tokens\&.
          359  +.sp
          360  +Each token is a list of four elements containing, in the order
          361  +below:
          362  +.RS
          363  +.IP [1]
          364  +Type of the token (implicitly specifies found quoting)\&.
          365  +.IP [2]
          366  +Start index of token in \fBline\fR including quoting\&.
          367  +.IP [3]
          368  +End index of token in \fBline\fR, including quoting\&.
          369  +.IP [4]
          370  +The string value of the token, with escapes fully resolved\&.
          371  +I\&.e\&. the actual word\&.
          372  +.RE
          373  +.sp
          374  +Note: If \fBline\fR ended in trailing whitespace the last
          375  +element of this list will be an empty string representing the word
          376  +started by the user, yet still empty\&.
          377  +.TP
          378  +\fBnwords\fR
          379  +The number of element in \fBwords\fR\&. The data is not valid if
          380  +\fBok\fR indicates a parsing error\&.
          381  +.TP
          382  +\fBat\fR
          383  +The index of the \fIcurrent word\fR in \fBwords\fR currently
          384  +considered by the completion code\&. Initially \fB0\fR this advances
          385  +as the completion code works through the prefix to determine the
          386  +context for the completion of the last word\&.
          387  +.TP
          388  +\fBdoexit\fR
          389  +A boolean flag\&. Indicates if the pseudo-command \fB\&.exit\fR is active
          390  +(\fBtrue\fR), or not\&. Initially \fBtrue\fR\&.
          391  +.PP
          392  +.SH "MAIN SHELL OPERATION"
          393  +.SS OVERVIEW
          394  +The \fImain shell\fR is fully implemented within the package
          395  +\fBcmdr::officer\fR, while its command-line completion also
          396  +reaches into the packages \fBcmdr::private\fR,
          397  +\fBcmdr::config\fR, and \fBcmdr::parameter\fR\&.
          398  +The purpose of this shell is interactive access to the commands of an
          399  +officer\&. Which implies, for the toplevel officer, access to the entire
          400  +command hierarchy\&.
          401  +.PP
          402  +To this end this shell accepts the names of all subordinate
          403  +commands known to the officer as commands\&.
          404  +.PP
          405  +It may additional accept a hard-wired command \fB\&.exit\fR,
          406  +depending on the parse state (see flag \fBdoexit\fR)\&.
          407  +.SS "SEQUENCING AND RULES"
          408  +This section is in essence the textual description of an UML sequence
          409  +diagram\&.
          410  +.PP
          411  +Note that the state structure used by this code and referenced
          412  +in the text is explained in section \fBParse State\fR\&.
          413  +.IP [1]
          414  +The main shell's core read-eval-print-loop calls on the
          415  +instance method \fBcomplete\fR for command-line completion,
          416  +providing the text of the buffer to complete at the end)\&.
          417  +.IP [2]
          418  +The method \fBcmdr::actor\fR::\fBparse-line\fR is called
          419  +on first, to get a parse of the buffer\&. This parse is then delegated
          420  +to the instance method \fBcomplete-words\fR to perform the bulk of
          421  +the work\&.
          422  +.sp
          423  +Note: The officer instance has access to \fBparse-line\fR
          424  +because it is a derived class of \fBcmdr::actor\fR\&.
          425  +.IP [3]
          426  +The implementation of method \fBcomplete-words\fR applies
          427  +the rules below:
          428  +.RS
          429  +.IP [1]
          430  +If the buffer was not properly parsed (i\&.e\&. the state indicates
          431  +a syntax error), the list of completions is empty\&.
          432  +.IP [2]
          433  +When the buffer is empty all commands are possible completions,
          434  +as are all the commands of the default subordinate, if any was
          435  +specified\&.
          436  +.IP [3]
          437  +If the \fIcurrent word\fR (as per \fBat\fR) is the last
          438  +word (per \fBnwords\fR) on the command line then completion is done
          439  +using the set of commands known to the officer and its default
          440  +subordinate, if any\&.
          441  +.IP [4]
          442  +For a \fIcurrent word\fR which is not the last, i\&.e\&. at the
          443  +beginning or in the middle of the command line instead, then this word
          444  +is the name of the subordinate object responsible for handling the
          445  +remaining words\&.
          446  +.sp
          447  +No completion is done however if the current word does not
          448  +yield a subordinate to delegate to (i\&.e\&. unknown or ambigous)\&. If a
          449  +default command is known this case will delegate to this subordinate,
          450  +as a last attempt\&.
          451  +.sp
          452  +When a subordinate was found the system advances the current
          453  +word, resets the \fBdoexit\fR flag, and lastly invokes the method
          454  +\fBcomplete-words\fR of the sub-ordinate\&.
          455  +.IP [5]
          456  +When the subordinate is again an \fIofficer\fR, these rules
          457  +here apply again\&.
          458  +.IP [6]
          459  +A \fIprivate\fR however will delegate to the embedded
          460  +\fBcmdr::config\fR instance, again using the method
          461  +\fBcomplete-words\fR\&.
          462  +.IP [7]
          463  +This method processes the remaining words similar to how the
          464  +command line is parsed at runtime to match words to parameters, to
          465  +know at the end which (set of) parameter(s) governs the last word\&.
          466  +.sp
          467  +For \fIoptions\fR the last word may be partial name of a flag,
          468  +or it may be the partial argument to an option\&.
          469  +In case of the first the set of completions is the set of all flags
          470  +with the word as its prefix\&.
          471  +In case of the second the completion delegates to the parameter
          472  +governing the flag, if there is any, which in turn delegates to its
          473  +associated validation type\&.
          474  +.sp
          475  +For \fIinputs\fR the system essentially steps through a
          476  +non-deterministic finite automaton to find all the parameters which
          477  +may govern the current word\&. Completion is done as the union of the
          478  +completion done by the individual parameters\&.
          479  +.sp
          480  +Note that the automaton and its results can be precomputed,
          481  +this happens in the internal method \fBCompletionGraph\fR\&.
          482  +.RE
          483  +.PP
          484  +.SH "MINI SHELL OPERATION"
          485  +.SS OVERVIEW
          486  +The \fImini shell\fR and its command-line completion is fully
          487  +implemented within the package \fBcmdr::config\fR\&.
          488  +The purpose of this shell is the interactive entry of the parameters
          489  +for a \fIprivate\fR\&.
          490  +.PP
          491  +To this end this shell accepts the \fIsystem\fR names of all
          492  +parameters held by the config instance as commands, plus five
          493  +hard-wired commands to control exit conditions and access to help\&.
          494  +.PP
          495  +The parameter commands all take single value as their argument,
          496  +the string value to set\&.
          497  +The sole exception to this are \fIpresence options\fR which do not
          498  +take any argument\&.
          499  +.PP
          500  +Similarly none of the hardwired commands take an
          501  +argument\&. Their names all start with a \fB\&.\fR\&. They are, in
          502  +alphabetical order, \fB\&.cancel\fR, \fB\&.exit\fR, \fB\&.help\fR \fB\&.ok\fR, and \fB\&.run\fR\&.
          503  +.SS "SEQUENCING AND RULES"
          504  +This section is in essence the textual description of an UML sequence
          505  +diagram\&.
          506  +.PP
          507  +Note that the state structure used by this code and referenced
          508  +in the text is explained in section \fBParse State\fR\&.
          509  +.IP [1]
          510  +The mini shell's core read-eval-print-loop calls on the
          511  +instance method \fBcomplete\fR for command-line completion,
          512  +providing the text of the buffer to complete at the end)\&.
          513  +.IP [2]
          514  +The method \fBcmdr::actor\fR::\fBparse-line\fR is called
          515  +on first, to get a parse of the buffer\&. This parse is then delegated
          516  +to the instance method \fBcomplete-repl\fR to perform the bulk of
          517  +the work\&.
          518  +.sp
          519  +Note: The config instance has access to \fBparse-line\fR
          520  +through its internal \fBcontext\fR command, which is an alias of the
          521  +\fBcmdr::private\fR instance the configuration belongs to\&. This
          522  +class is derived from \fBcmdr::actor\fR\&.
          523  +.IP [3]
          524  +The implementation of method \fBcomplete-repl\fR applies the
          525  +rules below:
          526  +.RS
          527  +.IP [1]
          528  +If the buffer was not properly parsed (i\&.e\&. the state indicates
          529  +a syntax error), the list of completions is empty\&.
          530  +.IP [2]
          531  +When the buffer is empty all commands are possible completions\&.
          532  +.IP [3]
          533  +When the buffer contains more than three words the list of
          534  +completions is empty, as all valid mini-shell commands consist of at
          535  +most two words\&.
          536  +.IP [4]
          537  +A buffer containing a single word contain a partial command
          538  +name and the list of completions is the set of commands having this
          539  +word as prefix\&.
          540  +.IP [5]
          541  +A buffer containing two words contains a command name and a
          542  +partial argument\&. Completion is delegated to the parameter (method
          543  +\fBcmdr::parameter\fR::\fBcomplete-words\fR) indicated by the
          544  +command name, and through it to the associated validation type\&.
          545  +.sp
          546  +No completion is done however if the first word does not yield
          547  +a parameter to delegate to (i\&.e\&. unknown or ambigous), or if it is a
          548  +presence option, which does not take an argument\&.
          549  +.sp
          550  +The hardwired commands fall here implicitly under unknown
          551  +parameter\&.
          552  +.RE
          553  +.PP
          554  +.SH "BUGS, IDEAS, FEEDBACK"
          555  +Both the package(s) and this documentation will undoubtedly contain
          556  +bugs and other problems\&.
          557  +Please report such at
          558  +\fICmdr Tickets\fR [https:/core\&.tcl\&.tk/akupries/cmdr]\&.
          559  +.PP
          560  +Please also report any ideas you may have for enhancements of
          561  +either package(s) and/or documentation\&.
          562  +.SH KEYWORDS
          563  +arguments, command hierarchy, command line completion, command line handling, command tree, editing command line, help for command line, hierarchy of commands, interactive command shell, optional arguments, options, parameters, processing command line, tree of commands
          564  +.SH COPYRIGHT
          565  +.nf
          566  +Copyright (c) 2013 Andreas Kupries
          567  +Copyright (c) 2013 Documentation, Andreas Kupries
          568  +
          569  +.fi

Changes to embedded/man/files/cmdr_howto_development.n.

   281    281   This requirement is optional\&. If a Tcllib providing the package
   282    282   \fBdtplite\fR is installed then \fBkettle\fR will use the
   283    283   package in favor of the external application\&.
   284    284   .PP
   285    285   .SH "DEMONSTRATION/EXAMPLE APPLICATIONS"
   286    286   Cmdr (currently) does not have demonstrations, nor examples\&.
   287    287   .SH "DIRECTORY STRUCTURE"
   288         -Explain the physical layout (directory structure)\&.
          288  +The directory structure of the sources is as explained below:
   289    289   .TP
   290    290   "\fIbuild\&.tcl\fR"
   291    291   The main file of the \fBkettle\fR-based build-system\&.
   292    292   .TP
   293    293   "\fIdoc/\fR"
   294    294   Main directory for all documentation\&.
   295    295   .sp
................................................................................
   318    318   "\fItests/\fR"
   319    319   Main directory for the test-suite\&.
   320    320   .sp
   321    321   Based on the \fBtcltest\fR package distributed with the Tcl
   322    322   core\&.
   323    323   .TP
   324    324   "\fIactor\&.tcl\fR"
   325         -== Package \fBcmdr::actor\fR\&.
          325  +Package \fBcmdr::actor\fR\&.
   326    326   .TP
   327    327   "\fIcmdr\&.tcl\fR"
   328         -== Package \fBcmdr\fR\&.
          328  +Package \fBcmdr\fR\&.
   329    329   .TP
   330    330   "\fIconfig\&.tcl\fR"
   331         -== Package \fBcmdr::config\fR\&.
          331  +Package \fBcmdr::config\fR\&.
   332    332   .TP
   333    333   "\fIhelp\&.tcl\fR"
   334         -== Package \fBcmdr::help\fR\&.
          334  +Package \fBcmdr::help\fR\&.
   335    335   .TP
   336    336   "\fIhelp_json\&.tcl\fR"
   337         -== Package \fBcmdr::help::json\fR\&.
          337  +Package \fBcmdr::help::json\fR\&.
   338    338   .TP
   339    339   "\fIhelp_sql\&.tcl\fR"
   340         -== Package \fBcmdr::help::sql\fR\&.
          340  +Package \fBcmdr::help::sql\fR\&.
   341    341   .TP
   342    342   "\fIofficer\&.tcl\fR"
   343         -== Package \fBcmdr::officer\fR\&.
          343  +Package \fBcmdr::officer\fR\&.
   344    344   .TP
   345    345   "\fIparameter\&.tcl\fR"
   346         -== Package \fBcmdr::parameter\fR\&.
          346  +Package \fBcmdr::parameter\fR\&.
   347    347   .TP
   348    348   "\fIprivate\&.tcl\fR"
   349         -== Package \fBcmdr::private\fR\&.
          349  +Package \fBcmdr::private\fR\&.
   350    350   .TP
   351    351   "\fIutil\&.tcl\fR"
   352         -== Package \fBcmdr::util\fR\&.
          352  +Package \fBcmdr::util\fR\&.
   353    353   .TP
   354    354   "\fIvalidate\&.tcl\fR"
   355         -== Package \fBcmdr::validate\fR\&.
          355  +Package \fBcmdr::validate\fR\&.
   356    356   .TP
   357    357   "\fIvcommon\&.tcl\fR"
   358         -== Package \fBcmdr::validate::common\fR\&.
          358  +Package \fBcmdr::validate::common\fR\&.
   359    359   .PP
   360    360   .SH "EXTENDED BUILD ACTIONS"
   361    361   Our build-system is based on \fBkettle\fR, as already explained in
   362    362   the \fICmdr - The Installer's Guide\fR\&. Beyond the targets useful for
   363    363   installation it also provides targets aiding developers and
   364    364   maintainers\&. These are:
   365    365   .TP
................................................................................
   405    405   
   406    406   
   407    407   % /path/to/cmdr/build\&.tcl test --log <stem>
   408    408   
   409    409   .CE
   410    410   .PP
   411    411   .SH "ARCHITECTURE & CONCEPTS"
   412         -The following sections explain
   413         -.IP [1]
   414         -the internal architecture and package dependencies\&.
   415         -.IP [2]
   416         -the internal data structures\&.
   417         -.IP [3]
   418         -important operation sequences (UML SD)\&.
   419         -.PP
   420         -.SS "SYSTEM ARCHITECTURE"
   421    412   .PP
   422    413   All packages in the framework belong to one of three layers,
   423    414   as shown below:
   424    415   .PP
   425    416   .PS
   426    417   .nf
   427    418   +--------------------------------------------+
................................................................................
   474    465   straight-forward, following mostly directly out of the relationships
   475    466   shown above, plus the few where the utilities are imported\&. To reduce
   476    467   the complexity of the diagram below a few direct dependencies on
   477    468   \fBcmdr::util\fR were omitted where indirectly present through
   478    469   other dependencies (i\&.e\&. through \fBcmdr::help\fR):
   479    470   .PP
   480    471   IMAGE: pkg_dependencies
   481         -.SS "DATA STRUCTURES"
   482         -.SS "OPERATION SEQUENCES"
          472  +.SH "VALIDATION TYPES"
          473  +Everything said in the public document \fICmdr - Writing custom validation types\fR
          474  +applies to the standard validation types of the framework (as listed
          475  +in \fICmdr - Standard validation types for parameters\fR) as well\&.
          476  +.SH "HELP FORMATS"
          477  +Everything said in the public document \fICmdr - Writing custom help formats\fR
          478  +applies to the standard help formats of the framework (as listed in
          479  +\fICmdr - Standard help formats of the framework\fR) as well\&.
          480  +.SH "COMMAND LINE COMPLETION"
          481  +The document \fICmdr - Internals of command line completion\fR describes the inner
          482  +workings of the command line completion provided by the framework\&.
   483    483   .SH "RELATED DOCUMENTS"
   484    484   .IP [1]
   485    485   \fICmdr - Introduction to the project\fR
   486    486   .IP [2]
   487    487   \fICmdr - License\fR
   488    488   .IP [3]
   489    489   \fICmdr - Log of Changes\fR

Changes to embedded/man/index.n.

   278    278   cmdr::validate
   279    279   .TP
   280    280   \fBfiles/cmdr_vcommon\&.n\fR
   281    281   cmdr::validate::common
   282    282   .TP
   283    283   \fBfiles/cmdr_changes\&.n\fR
   284    284   cmdr_changes
          285  +.TP
          286  +\fBfiles/cmdr_dev_completion\&.n\fR
          287  +cmdr_completion
   285    288   .TP
   286    289   \fBfiles/cmdr_howto_development\&.n\fR
   287    290   cmdr_development
   288    291   .TP
   289    292   \fBfiles/cmdr_dsl\&.n\fR
   290    293   cmdr_dsl
   291    294   .TP
................................................................................
   350    353   cmdr::validate
   351    354   .TP
   352    355   \fBfiles/cmdr_vcommon\&.n\fR
   353    356   cmdr::validate::common
   354    357   .TP
   355    358   \fBfiles/cmdr_changes\&.n\fR
   356    359   cmdr_changes
          360  +.TP
          361  +\fBfiles/cmdr_dev_completion\&.n\fR
          362  +cmdr_completion
   357    363   .TP
   358    364   \fBfiles/cmdr_howto_development\&.n\fR
   359    365   cmdr_development
   360    366   .TP
   361    367   \fBfiles/cmdr_dsl\&.n\fR
   362    368   cmdr_dsl
   363    369   .TP
................................................................................
   422    428   cmdr::validate
   423    429   .TP
   424    430   \fBfiles/cmdr_vcommon\&.n\fR
   425    431   cmdr::validate::common
   426    432   .TP
   427    433   \fBfiles/cmdr_changes\&.n\fR
   428    434   cmdr_changes
          435  +.TP
          436  +\fBfiles/cmdr_dev_completion\&.n\fR
          437  +cmdr_completion
   429    438   .TP
   430    439   \fBfiles/cmdr_howto_development\&.n\fR
   431    440   cmdr_development
   432    441   .TP
   433    442   \fBfiles/cmdr_dsl\&.n\fR
   434    443   cmdr_dsl
   435    444   .TP
................................................................................
   494    503   cmdr::validate
   495    504   .TP
   496    505   \fBfiles/cmdr_vcommon\&.n\fR
   497    506   cmdr::validate::common
   498    507   .TP
   499    508   \fBfiles/cmdr_changes\&.n\fR
   500    509   cmdr_changes
          510  +.TP
          511  +\fBfiles/cmdr_dev_completion\&.n\fR
          512  +cmdr_completion
   501    513   .TP
   502    514   \fBfiles/cmdr_howto_development\&.n\fR
   503    515   cmdr_development
   504    516   .TP
   505    517   \fBfiles/cmdr_dsl\&.n\fR
   506    518   cmdr_dsl
   507    519   .TP
................................................................................
   566    578   cmdr::validate
   567    579   .TP
   568    580   \fBfiles/cmdr_vcommon\&.n\fR
   569    581   cmdr::validate::common
   570    582   .TP
   571    583   \fBfiles/cmdr_changes\&.n\fR
   572    584   cmdr_changes
          585  +.TP
          586  +\fBfiles/cmdr_dev_completion\&.n\fR
          587  +cmdr_completion
   573    588   .TP
   574    589   \fBfiles/cmdr_howto_development\&.n\fR
   575    590   cmdr_development
   576    591   .TP
   577    592   \fBfiles/cmdr_dsl\&.n\fR
   578    593   cmdr_dsl
   579    594   .TP
................................................................................
   638    653   cmdr::validate
   639    654   .TP
   640    655   \fBfiles/cmdr_vcommon\&.n\fR
   641    656   cmdr::validate::common
   642    657   .TP
   643    658   \fBfiles/cmdr_changes\&.n\fR
   644    659   cmdr_changes
          660  +.TP
          661  +\fBfiles/cmdr_dev_completion\&.n\fR
          662  +cmdr_completion
   645    663   .TP
   646    664   \fBfiles/cmdr_howto_development\&.n\fR
   647    665   cmdr_development
   648    666   .TP
   649    667   \fBfiles/cmdr_dsl\&.n\fR
   650    668   cmdr_dsl
   651    669   .TP
................................................................................
   710    728   cmdr::validate
   711    729   .TP
   712    730   \fBfiles/cmdr_vcommon\&.n\fR
   713    731   cmdr::validate::common
   714    732   .TP
   715    733   \fBfiles/cmdr_changes\&.n\fR
   716    734   cmdr_changes
          735  +.TP
          736  +\fBfiles/cmdr_dev_completion\&.n\fR
          737  +cmdr_completion
   717    738   .TP
   718    739   \fBfiles/cmdr_howto_development\&.n\fR
   719    740   cmdr_development
   720    741   .TP
   721    742   \fBfiles/cmdr_dsl\&.n\fR
   722    743   cmdr_dsl
   723    744   .TP
................................................................................
   782    803   cmdr::validate
   783    804   .TP
   784    805   \fBfiles/cmdr_vcommon\&.n\fR
   785    806   cmdr::validate::common
   786    807   .TP
   787    808   \fBfiles/cmdr_changes\&.n\fR
   788    809   cmdr_changes
          810  +.TP
          811  +\fBfiles/cmdr_dev_completion\&.n\fR
          812  +cmdr_completion
   789    813   .TP
   790    814   \fBfiles/cmdr_howto_development\&.n\fR
   791    815   cmdr_development
   792    816   .TP
   793    817   \fBfiles/cmdr_dsl\&.n\fR
   794    818   cmdr_dsl
   795    819   .TP
................................................................................
   854    878   cmdr::validate
   855    879   .TP
   856    880   \fBfiles/cmdr_vcommon\&.n\fR
   857    881   cmdr::validate::common
   858    882   .TP
   859    883   \fBfiles/cmdr_changes\&.n\fR
   860    884   cmdr_changes
          885  +.TP
          886  +\fBfiles/cmdr_dev_completion\&.n\fR
          887  +cmdr_completion
   861    888   .TP
   862    889   \fBfiles/cmdr_howto_development\&.n\fR
   863    890   cmdr_development
   864    891   .TP
   865    892   \fBfiles/cmdr_dsl\&.n\fR
   866    893   cmdr_dsl
   867    894   .TP
................................................................................
   926    953   cmdr::validate
   927    954   .TP
   928    955   \fBfiles/cmdr_vcommon\&.n\fR
   929    956   cmdr::validate::common
   930    957   .TP
   931    958   \fBfiles/cmdr_changes\&.n\fR
   932    959   cmdr_changes
          960  +.TP
          961  +\fBfiles/cmdr_dev_completion\&.n\fR
          962  +cmdr_completion
   933    963   .TP
   934    964   \fBfiles/cmdr_howto_development\&.n\fR
   935    965   cmdr_development
   936    966   .TP
   937    967   \fBfiles/cmdr_dsl\&.n\fR
   938    968   cmdr_dsl
   939    969   .TP
................................................................................
   998   1028   cmdr::validate
   999   1029   .TP
  1000   1030   \fBfiles/cmdr_vcommon\&.n\fR
  1001   1031   cmdr::validate::common
  1002   1032   .TP
  1003   1033   \fBfiles/cmdr_changes\&.n\fR
  1004   1034   cmdr_changes
         1035  +.TP
         1036  +\fBfiles/cmdr_dev_completion\&.n\fR
         1037  +cmdr_completion
  1005   1038   .TP
  1006   1039   \fBfiles/cmdr_howto_development\&.n\fR
  1007   1040   cmdr_development
  1008   1041   .TP
  1009   1042   \fBfiles/cmdr_dsl\&.n\fR
  1010   1043   cmdr_dsl
  1011   1044   .TP
................................................................................
  1070   1103   cmdr::validate
  1071   1104   .TP
  1072   1105   \fBfiles/cmdr_vcommon\&.n\fR
  1073   1106   cmdr::validate::common
  1074   1107   .TP
  1075   1108   \fBfiles/cmdr_changes\&.n\fR
  1076   1109   cmdr_changes
         1110  +.TP
         1111  +\fBfiles/cmdr_dev_completion\&.n\fR
         1112  +cmdr_completion
  1077   1113   .TP
  1078   1114   \fBfiles/cmdr_howto_development\&.n\fR
  1079   1115   cmdr_development
  1080   1116   .TP
  1081   1117   \fBfiles/cmdr_dsl\&.n\fR
  1082   1118   cmdr_dsl
  1083   1119   .TP
................................................................................
  1142   1178   cmdr::validate
  1143   1179   .TP
  1144   1180   \fBfiles/cmdr_vcommon\&.n\fR
  1145   1181   cmdr::validate::common
  1146   1182   .TP
  1147   1183   \fBfiles/cmdr_changes\&.n\fR
  1148   1184   cmdr_changes
         1185  +.TP
         1186  +\fBfiles/cmdr_dev_completion\&.n\fR
         1187  +cmdr_completion
  1149   1188   .TP
  1150   1189   \fBfiles/cmdr_howto_development\&.n\fR
  1151   1190   cmdr_development
  1152   1191   .TP
  1153   1192   \fBfiles/cmdr_dsl\&.n\fR
  1154   1193   cmdr_dsl
  1155   1194   .TP
................................................................................
  1214   1253   cmdr::validate
  1215   1254   .TP
  1216   1255   \fBfiles/cmdr_vcommon\&.n\fR
  1217   1256   cmdr::validate::common
  1218   1257   .TP
  1219   1258   \fBfiles/cmdr_changes\&.n\fR
  1220   1259   cmdr_changes
         1260  +.TP
         1261  +\fBfiles/cmdr_dev_completion\&.n\fR
         1262  +cmdr_completion
  1221   1263   .TP
  1222   1264   \fBfiles/cmdr_howto_development\&.n\fR
  1223   1265   cmdr_development
  1224   1266   .TP
  1225   1267   \fBfiles/cmdr_dsl\&.n\fR
  1226   1268   cmdr_dsl
  1227   1269   .TP

Changes to embedded/man/toc.n.

   277    277   .TP
   278    278   \fBcmdr::validate::common\fR
   279    279   \fIfiles/cmdr_vcommon\&.n\fR: Cmdr - Utilities for Validation Types
   280    280   .TP
   281    281   \fBcmdr_changes\fR
   282    282   \fIfiles/cmdr_changes\&.n\fR: Cmdr - Log of Changes
   283    283   .TP
          284  +\fBcmdr_completion\fR
          285  +\fIfiles/cmdr_dev_completion\&.n\fR: Cmdr - Internals of command line completion
          286  +.TP
   284    287   \fBcmdr_development\fR
   285    288   \fIfiles/cmdr_howto_development\&.n\fR: Cmdr - The Developer's Guide
   286    289   .TP
   287    290   \fBcmdr_dsl\fR
   288    291   \fIfiles/cmdr_dsl\&.n\fR: Cmdr - Introduction to the Specification Language
   289    292   .TP
   290    293   \fBcmdr_dsl_officer\fR

Added embedded/www/doc/files/cmdr_dev_completion.html.

            1  +
            2  +<html><head>
            3  +<title>cmdr_completion - Cmdr, a framework for command line parsing and dispatch</title>
            4  +<style type="text/css"><!--
            5  +    HTML {
            6  +	background: 	#FFFFFF;
            7  +	color: 		black;
            8  +    }
            9  +    BODY {
           10  +	background: 	#FFFFFF;
           11  +	color:	 	black;
           12  +    }
           13  +    DIV.doctools {
           14  +	margin-left:	10%;
           15  +	margin-right:	10%;
           16  +    }
           17  +    DIV.doctools H1,DIV.doctools H2 {
           18  +	margin-left:	-5%;
           19  +    }
           20  +    H1, H2, H3, H4 {
           21  +	margin-top: 	1em;
           22  +	font-family:	sans-serif;
           23  +	font-size:	large;
           24  +	color:		#005A9C;
           25  +	background: 	transparent;
           26  +	text-align:		left;
           27  +    }
           28  +    H1.title {
           29  +	text-align: center;
           30  +    }
           31  +    UL,OL {
           32  +	margin-right: 0em;
           33  +	margin-top: 3pt;
           34  +	margin-bottom: 3pt;
           35  +    }
           36  +    UL LI {
           37  +	list-style: disc;
           38  +    }
           39  +    OL LI {
           40  +	list-style: decimal;
           41  +    }
           42  +    DT {
           43  +	padding-top: 	1ex;
           44  +    }
           45  +    UL.toc,UL.toc UL, UL.toc UL UL {
           46  +	font:		normal 12pt/14pt sans-serif;
           47  +	list-style:	none;
           48  +    }
           49  +    LI.section, LI.subsection {
           50  +	list-style: 	none;
           51  +	margin-left: 	0em;
           52  +	text-indent:	0em;
           53  +	padding: 	0em;
           54  +    }
           55  +    PRE {
           56  +	display: 	block;
           57  +	font-family:	monospace;
           58  +	white-space:	pre;
           59  +	margin:		0%;
           60  +	padding-top:	0.5ex;
           61  +	padding-bottom:	0.5ex;
           62  +	padding-left:	1ex;
           63  +	padding-right:	1ex;
           64  +	width:		100%;
           65  +    }
           66  +    PRE.example {
           67  +	color: 		black;
           68  +	background: 	#f5dcb3;
           69  +	border:		1px solid black;
           70  +    }
           71  +    UL.requirements LI, UL.syntax LI {
           72  +	list-style: 	none;
           73  +	margin-left: 	0em;
           74  +	text-indent:	0em;
           75  +	padding:	0em;
           76  +    }
           77  +    DIV.synopsis {
           78  +	color: 		black;
           79  +	background: 	#80ffff;
           80  +	border:		1px solid black;
           81  +	font-family:	serif;
           82  +	margin-top: 	1em;
           83  +	margin-bottom: 	1em;
           84  +    }
           85  +    UL.syntax {
           86  +	margin-top: 	1em;
           87  +	border-top:	1px solid black;
           88  +    }
           89  +    UL.requirements {
           90  +	margin-bottom: 	1em;
           91  +	border-bottom:	1px solid black;
           92  +    }
           93  +--></style>
           94  +</head>
           95  +<! -- Generated from file 'cmdr_dev_completion.man' by tcllib/doctools with format 'html'
           96  +   -->
           97  +<! -- Copyright &copy; 2013 Andreas Kupries   -- Copyright &copy; 2013 Documentation, Andreas Kupries
           98  +   -->
           99  +<! -- CVS: $Id$ cmdr_completion.n
          100  +   -->
          101  +<body><div class="doctools">
          102  +<hr> [
          103  +   <a href="../../../../../../home">Home</a>
          104  +| <a href="../../toc.html">Main Table Of Contents</a>
          105  +| <a href="../toc.html">Table Of Contents</a>
          106  +| <a href="../../index.html">Keyword Index</a>
          107  + ] <hr>
          108  +<h1 class="title">cmdr_completion(n) 0 doc &quot;Cmdr, a framework for command line parsing and dispatch&quot;</h1>
          109  +<div id="name" class="section"><h2><a name="name">Name</a></h2>
          110  +<p>cmdr_completion - Cmdr - Internals of command line completion</p>
          111  +</div>
          112  +<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
          113  +<ul class="toc">
          114  +<li class="section"><a href="#toc">Table Of Contents</a></li>
          115  +<li class="section"><a href="#synopsis">Synopsis</a></li>
          116  +<li class="section"><a href="#section1">Description</a></li>
          117  +<li class="section"><a href="#section2">Code Overview</a></li>
          118  +<li class="section"><a href="#section3">Parse State</a></li>
          119  +<li class="section"><a href="#section4">Main Shell Operation</a>
          120  +<ul>
          121  +<li class="subsection"><a href="#subsection1">Overview</a></li>
          122  +<li class="subsection"><a href="#subsection2">Sequencing and Rules</a></li>
          123  +</ul>
          124  +</li>
          125  +<li class="section"><a href="#section5">Mini Shell Operation</a>
          126  +<ul>
          127  +<li class="subsection"><a href="#subsection3">Overview</a></li>
          128  +<li class="subsection"><a href="#subsection4">Sequencing and Rules</a></li>
          129  +</ul>
          130  +</li>
          131  +<li class="section"><a href="#section6">Bugs, Ideas, Feedback</a></li>
          132  +<li class="section"><a href="#keywords">Keywords</a></li>
          133  +<li class="section"><a href="#copyright">Copyright</a></li>
          134  +</ul>
          135  +</div>
          136  +<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
          137  +<div class="synopsis">
          138  +<ul class="requirements">
          139  +<li>package require <b class="pkgname">cmdr</b></li>
          140  +</ul>
          141  +</div>
          142  +</div>
          143  +<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
          144  +<p>Welcome to the Cmdr project, written by Andreas Kupries.</p>
          145  +<p>For availability please read <i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i>.</p>
          146  +<p>This internal document provides an overview on how the framework
          147  +performs command-line completion in both the main and mini shells,
          148  +referencing all the relevant methods and describing the data
          149  +structures in use.</p>
          150  +<p>For more information about other internals of the framework
          151  +please read <i class="term"><a href="cmdr_howto_development.html">Cmdr - The Developer's Guide</a></i>.</p>
          152  +</div>
          153  +<div id="section2" class="section"><h2><a name="section2">Code Overview</a></h2>
          154  +<p>The methods relevant to command-line completion can be found in four
          155  +packages/classes, namely:</p>
          156  +<dl class="definitions">
          157  +<dt><b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b></dt>
          158  +<dd><dl class="definitions">
          159  +     
          160  +<dt><b class="method">parse-line</b></dt>
          161  +<dd><p>Takes a command-line and returns an initial parse structure as
          162  +     described in section <span class="sectref"><a href="#section3">Parse State</a></span></p></dd>
          163  +<dt><b class="method">completions</b></dt>
          164  +<dd></dd>
          165  +<dt><b class="method">match</b></dt>
          166  +<dd></dd>
          167  +</dl></dd>
          168  +<dt><b class="package"><a href="cmdr_config.html">cmdr::config</a></b></dt>
          169  +<dd><dl class="definitions">
          170  +     
          171  +<dt><b class="method">complete</b></dt>
          172  +<dd><p>Hook method, entrypoint for the mini-shell.
          173  +     Takes the buffer to complete and returns the list of completions,
          174  +     which may be empty.
          175  +     Uses the workhorse method below and the <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>
          176  +     methods.</p></dd>
          177  +<dt><b class="method">complete-repl</b></dt>
          178  +<dd><p>Main work method taking a parse structure and returning the list
          179  +     of completions. More details about it (and the mini-shell) can be
          180  +     found in section <span class="sectref"><a href="#section5">Mini Shell Operation</a></span>.</p></dd>
          181  +<dt><b class="method">complete-words</b></dt>
          182  +<dd><p>Main work method for completion from the main shell, invoked by
          183  +     the <b class="package"><a href="cmdr_private.html">cmdr::private</a></b> instance having to complete words.</p></dd>
          184  +</dl></dd>
          185  +<dt><b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b></dt>
          186  +<dd><dl class="definitions">
          187  +     
          188  +<dt><b class="method">complete</b></dt>
          189  +<dd><p>Hook method, entrypoint for the main shell.
          190  +     Takes the buffer to complete and returns the list of completions,
          191  +     which may be empty.
          192  +     Uses the workhorse method below and the <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>
          193  +     methods.</p></dd>
          194  +<dt><b class="method">complete-words</b></dt>
          195  +<dd><p>Main work method taking a parse structure and returning the list
          196  +     of completions. More details about it (and the main shell) can be
          197  +     found in section <span class="sectref"><a href="#section4">Main Shell Operation</a></span>.</p>
          198  +<p>Can recurse to the same method of other officers, and
          199  +     private instances.</p></dd>
          200  +</dl></dd>
          201  +<dt><b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b></dt>
          202  +<dd><dl class="definitions">
          203  +     
          204  +<dt><b class="method">complete-words</b></dt>
          205  +<dd><p>Main work method when reaching a parameter.
          206  +     Simply delegates the work to the method <b class="method">complete</b> of the
          207  +     validation type associated with the parameter.</p></dd>
          208  +</dl></dd>
          209  +<dt><b class="package"><a href="cmdr_private.html">cmdr::private</a></b></dt>
          210  +<dd><dl class="definitions">
          211  +     
          212  +<dt><b class="method">complete-words</b></dt>
          213  +<dd><p>Main work method when reaching a private while recursing through
          214  +     the command hierarchy from officers.
          215  +     Delegates to the <b class="package"><a href="cmdr_config.html">cmdr::config</a></b> method of the same name.</p></dd>
          216  +</dl></dd>
          217  +</dl>
          218  +</div>
          219  +<div id="section3" class="section"><h2><a name="section3">Parse State</a></h2>
          220  +<p>The state structure used by all methods relevant to command line
          221  +completion is a dictionary containing the six keys listed below.
          222  +The only generator for this structure is method <b class="method">parse-line</b> of
          223  +the base-class <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>. All others parts of the system
          224  +then only read and manipulate it.</p>
          225  +<dl class="definitions">
          226  +<dt><b class="const">ok</b></dt>
          227  +<dd><p>A boolean flag. Indicates if the <b class="const">line</b> parsed sucessfully into
          228  +words (<b class="const">true</b>), or not (<b class="const">false</b>, syntax error).</p>
          229  +<p>The framework expects basic shell syntax with space-separated
          230  +words using single- and double-quotes for words containing whitespace
          231  +themselves. Note that complex syntax like variable- and
          232  +command-substitutions are not allowed.</p></dd>
          233  +<dt><b class="const">line</b></dt>
          234  +<dd><p>A copy of the unparsed command line.</p></dd>
          235  +<dt><b class="const">words</b></dt>
          236  +<dd><p>The command <b class="const">line</b> parsed into the bare words. The data is not
          237  +valid if <b class="const">ok</b> indicates a parsing error. This is not a list of
          238  +strings, but actually a list of tokens.</p>
          239  +<p>Each token is a list of four elements containing, in the order
          240  +below:</p>
          241  +<ol class="enumerated">
          242  +<li><p>Type of the token (implicitly specifies found quoting).</p></li>
          243  +<li><p>Start index of token in <b class="const">line</b> including quoting.</p></li>
          244  +<li><p>End index of token in <b class="const">line</b>, including quoting.</p></li>
          245  +<li><p>The string value of the token, with escapes fully resolved.
          246  +	I.e. the actual word.</p></li>
          247  +</ol>
          248  +<p>Note: If <b class="const">line</b> ended in trailing whitespace the last
          249  +element of this list will be an empty string representing the word
          250  +started by the user, yet still empty.</p></dd>
          251  +<dt><b class="const">nwords</b></dt>
          252  +<dd><p>The number of element in <b class="const">words</b>. The data is not valid if
          253  +<b class="const">ok</b> indicates a parsing error.</p></dd>
          254  +<dt><b class="const">at</b></dt>
          255  +<dd><p>The index of the <i class="term">current word</i> in <b class="const">words</b> currently
          256  +considered by the completion code. Initially <b class="const">0</b> this advances
          257  +as the completion code works through the prefix to determine the
          258  +context for the completion of the last word.</p></dd>
          259  +<dt><b class="const">doexit</b></dt>
          260  +<dd><p>A boolean flag. Indicates if the pseudo-command <b class="cmd">.exit</b> is active
          261  +(<b class="const">true</b>), or not. Initially <b class="const">true</b>.</p></dd>
          262  +</dl>
          263  +</div>
          264  +<div id="section4" class="section"><h2><a name="section4">Main Shell Operation</a></h2>
          265  +<div id="subsection1" class="subsection"><h3><a name="subsection1">Overview</a></h3>
          266  +<p>The <i class="term">main shell</i> is fully implemented within the package
          267  +<b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b>, while its command-line completion also
          268  +reaches into the packages <b class="package"><a href="cmdr_private.html">cmdr::private</a></b>,
          269  +<b class="package"><a href="cmdr_config.html">cmdr::config</a></b>, and <b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>.
          270  +The purpose of this shell is interactive access to the commands of an
          271  +officer. Which implies, for the toplevel officer, access to the entire
          272  +command hierarchy.</p>
          273  +<p>To this end this shell accepts the names of all subordinate
          274  +commands known to the officer as commands.</p>
          275  +<p>It may additional accept a hard-wired command <b class="cmd">.exit</b>,
          276  +depending on the parse state (see flag <b class="const">doexit</b>).</p>
          277  +</div>
          278  +<div id="subsection2" class="subsection"><h3><a name="subsection2">Sequencing and Rules</a></h3>
          279  +<p>This section is in essence the textual description of an UML sequence
          280  +diagram.</p>
          281  +<p>Note that the state structure used by this code and referenced
          282  +in the text is explained in section <span class="sectref"><a href="#section3">Parse State</a></span>.</p>
          283  +<ol class="enumerated">
          284  +<li><p>The main shell's core read-eval-print-loop calls on the
          285  +instance method <b class="method">complete</b> for command-line completion,
          286  +providing the text of the buffer to complete at the end).</p></li>
          287  +<li><p>The method <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>::<b class="method">parse-line</b> is called
          288  +on first, to get a parse of the buffer. This parse is then delegated
          289  +to the instance method <b class="method">complete-words</b> to perform the bulk of
          290  +the work.</p>
          291  +<p>Note: The officer instance has access to <b class="method">parse-line</b>
          292  +because it is a derived class of <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></li>
          293  +<li><p>The implementation of method <b class="method">complete-words</b> applies
          294  +the rules below:</p>
          295  +<ol class="enumerated">
          296  +<li><p>If the buffer was not properly parsed (i.e. the state indicates
          297  +a syntax error), the list of completions is empty.</p></li>
          298  +<li><p>When the buffer is empty all commands are possible completions,
          299  +as are all the commands of the default subordinate, if any was
          300  +specified.</p></li>
          301  +<li><p>If the <i class="term">current word</i> (as per <b class="const">at</b>) is the last
          302  +word (per <b class="const">nwords</b>) on the command line then completion is done
          303  +using the set of commands known to the officer and its default
          304  +subordinate, if any.</p></li>
          305  +<li><p>For a <i class="term">current word</i> which is not the last, i.e. at the
          306  +beginning or in the middle of the command line instead, then this word
          307  +is the name of the subordinate object responsible for handling the
          308  +remaining words.</p>
          309  +<p>No completion is done however if the current word does not
          310  +yield a subordinate to delegate to (i.e. unknown or ambigous). If a
          311  +default command is known this case will delegate to this subordinate,
          312  +as a last attempt.</p>
          313  +<p>When a subordinate was found the system advances the current
          314  +word, resets the <b class="const">doexit</b> flag, and lastly invokes the method
          315  +<b class="method">complete-words</b> of the sub-ordinate.</p></li>
          316  +<li><p>When the subordinate is again an <i class="term">officer</i>, these rules
          317  +here apply again.</p></li>
          318  +<li><p>A <i class="term">private</i> however will delegate to the embedded
          319  +<b class="package"><a href="cmdr_config.html">cmdr::config</a></b> instance, again using the method
          320  +<b class="method">complete-words</b>.</p></li>
          321  +<li><p>This method processes the remaining words similar to how the
          322  +command line is parsed at runtime to match words to parameters, to
          323  +know at the end which (set of) parameter(s) governs the last word.</p>
          324  +<p>For <i class="term"><a href="../../index.html#key2">options</a></i> the last word may be partial name of a flag,
          325  +or it may be the partial argument to an option.
          326  +In case of the first the set of completions is the set of all flags
          327  +with the word as its prefix.
          328  +In case of the second the completion delegates to the parameter
          329  +governing the flag, if there is any, which in turn delegates to its
          330  +associated validation type.</p>
          331  +<p>For <i class="term">inputs</i> the system essentially steps through a
          332  +non-deterministic finite automaton to find all the parameters which
          333  +may govern the current word. Completion is done as the union of the
          334  +completion done by the individual parameters.</p>
          335  +<p>Note that the automaton and its results can be precomputed,
          336  +this happens in the internal method <b class="method">CompletionGraph</b>.</p></li>
          337  +</ol>
          338  +</li>
          339  +</ol>
          340  +</div>
          341  +</div>
          342  +<div id="section5" class="section"><h2><a name="section5">Mini Shell Operation</a></h2>
          343  +<div id="subsection3" class="subsection"><h3><a name="subsection3">Overview</a></h3>
          344  +<p>The <i class="term">mini shell</i> and its command-line completion is fully
          345  +implemented within the package <b class="package"><a href="cmdr_config.html">cmdr::config</a></b>.
          346  +The purpose of this shell is the interactive entry of the parameters
          347  +for a <i class="term">private</i>.</p>
          348  +<p>To this end this shell accepts the <i class="term">system</i> names of all
          349  +parameters held by the config instance as commands, plus five
          350  +hard-wired commands to control exit conditions and access to help.</p>
          351  +<p>The parameter commands all take single value as their argument,
          352  +the string value to set.
          353  +The sole exception to this are <i class="term">presence options</i> which do not
          354  +take any argument.</p>
          355  +<p>Similarly none of the hardwired commands take an
          356  +argument. Their names all start with a <b class="const">.</b>. They are, in
          357  +alphabetical order, <b class="const">.cancel</b>, <b class="const">.exit</b>, <b class="const">.help</b>
          358  +<b class="const">.ok</b>, and <b class="const">.run</b>.</p>
          359  +</div>
          360  +<div id="subsection4" class="subsection"><h3><a name="subsection4">Sequencing and Rules</a></h3>
          361  +<p>This section is in essence the textual description of an UML sequence
          362  +diagram.</p>
          363  +<p>Note that the state structure used by this code and referenced
          364  +in the text is explained in section <span class="sectref"><a href="#section3">Parse State</a></span>.</p>
          365  +<ol class="enumerated">
          366  +<li><p>The mini shell's core read-eval-print-loop calls on the
          367  +instance method <b class="method">complete</b> for command-line completion,
          368  +providing the text of the buffer to complete at the end).</p></li>
          369  +<li><p>The method <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>::<b class="method">parse-line</b> is called
          370  +on first, to get a parse of the buffer. This parse is then delegated
          371  +to the instance method <b class="method">complete-repl</b> to perform the bulk of
          372  +the work.</p>
          373  +<p>Note: The config instance has access to <b class="method">parse-line</b>
          374  +through its internal <b class="const">context</b> command, which is an alias of the
          375  +<b class="package"><a href="cmdr_private.html">cmdr::private</a></b> instance the configuration belongs to. This
          376  +class is derived from <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></li>
          377  +<li><p>The implementation of method <b class="method">complete-repl</b> applies the
          378  +rules below:</p>
          379  +<ol class="enumerated">
          380  +<li><p>If the buffer was not properly parsed (i.e. the state indicates
          381  +a syntax error), the list of completions is empty.</p></li>
          382  +<li><p>When the buffer is empty all commands are possible completions.</p></li>
          383  +<li><p>When the buffer contains more than three words the list of
          384  +completions is empty, as all valid mini-shell commands consist of at
          385  +most two words.</p></li>
          386  +<li><p>A buffer containing a single word contain a partial command
          387  +name and the list of completions is the set of commands having this
          388  +word as prefix.</p></li>
          389  +<li><p>A buffer containing two words contains a command name and a
          390  +partial argument. Completion is delegated to the parameter (method
          391  +<b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>::<b class="method">complete-words</b>) indicated by the
          392  +command name, and through it to the associated validation type.</p>
          393  +<p>No completion is done however if the first word does not yield
          394  +a parameter to delegate to (i.e. unknown or ambigous), or if it is a
          395  +presence option, which does not take an argument.</p>
          396  +<p>The hardwired commands fall here implicitly under unknown
          397  +parameter.</p></li>
          398  +</ol>
          399  +</li>
          400  +</ol>
          401  +</div>
          402  +</div>
          403  +<div id="section6" class="section"><h2><a name="section6">Bugs, Ideas, Feedback</a></h2>
          404  +<p>Both the package(s) and this documentation will undoubtedly contain
          405  +bugs and other problems.
          406  +Please report such at
          407  +<a href="https:/core.tcl.tk/akupries/cmdr">Cmdr Tickets</a>.</p>
          408  +<p>Please also report any ideas you may have for enhancements of
          409  +either package(s) and/or documentation.</p>
          410  +</div>
          411  +<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
          412  +<p><a href="../../index.html#key4">arguments</a>, <a href="../../index.html#key5">command hierarchy</a>, <a href="../../index.html#key9">command line completion</a>, <a href="../../index.html#key11">command line handling</a>, <a href="../../index.html#key13">command tree</a>, <a href="../../index.html#key0">editing command line</a>, <a href="../../index.html#key8">help for command line</a>, <a href="../../index.html#key6">hierarchy of commands</a>, <a href="../../index.html#key3">interactive command shell</a>, <a href="../../index.html#key1">optional arguments</a>, <a href="../../index.html#key2">options</a>, <a href="../../index.html#key12">parameters</a>, <a href="../../index.html#key10">processing command line</a>, <a href="../../index.html#key7">tree of commands</a></p>
          413  +</div>
          414  +<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
          415  +<p>Copyright &copy; 2013 Andreas Kupries<br>
          416  +Copyright &copy; 2013 Documentation, Andreas Kupries</p>
          417  +</div>
          418  +</div></body></html>

Changes to embedded/www/doc/files/cmdr_howto_development.html.

   113    113   <ul class="toc">
   114    114   <li class="section"><a href="#toc">Table Of Contents</a></li>
   115    115   <li class="section"><a href="#section1">Description</a></li>
   116    116   <li class="section"><a href="#section2">Development Tools</a></li>
   117    117   <li class="section"><a href="#section3">Demonstration/Example Applications</a></li>
   118    118   <li class="section"><a href="#section4">Directory structure</a></li>
   119    119   <li class="section"><a href="#section5">Extended Build Actions</a></li>
   120         -<li class="section"><a href="#section6">Architecture &amp; Concepts</a>
   121         -<ul>
   122         -<li class="subsection"><a href="#subsection1">System Architecture</a></li>
   123         -<li class="subsection"><a href="#subsection2">Data structures</a></li>
   124         -<li class="subsection"><a href="#subsection3">Operation Sequences</a></li>
   125         -</ul>
   126         -</li>
   127         -<li class="section"><a href="#section7">Related Documents</a></li>
   128         -<li class="section"><a href="#section8">Bugs, Ideas, Feedback</a></li>
          120  +<li class="section"><a href="#section6">Architecture &amp; Concepts</a></li>
          121  +<li class="section"><a href="#section7">Validation Types</a></li>
          122  +<li class="section"><a href="#section8">Help Formats</a></li>
          123  +<li class="section"><a href="#section9">Command Line Completion</a></li>
          124  +<li class="section"><a href="#section10">Related Documents</a></li>
          125  +<li class="section"><a href="#section11">Bugs, Ideas, Feedback</a></li>
   129    126   <li class="section"><a href="#keywords">Keywords</a></li>
   130    127   <li class="section"><a href="#copyright">Copyright</a></li>
   131    128   </ul>
   132    129   </div>
   133    130   <div id="section1" class="section"><h2><a name="section1">Description</a></h2>
   134    131   <p>Welcome to the Cmdr project, written by Andreas Kupries.</p>
   135    132   <p>For availability please read <i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i>.</p>
................................................................................
   163    160   package in favor of the external application.</p></dd>
   164    161   </dl>
   165    162   </div>
   166    163   <div id="section3" class="section"><h2><a name="section3">Demonstration/Example Applications</a></h2>
   167    164   <p>Cmdr (currently) does not have demonstrations, nor examples.</p>
   168    165   </div>
   169    166   <div id="section4" class="section"><h2><a name="section4">Directory structure</a></h2>
   170         -<p>Explain the physical layout (directory structure).</p>
          167  +<p>The directory structure of the sources is as explained below:</p>
   171    168   <dl class="definitions">
   172    169   <dt>&quot;<b class="file">build.tcl</b>&quot;</dt>
   173    170   <dd><p>The main file of the <b class="syscmd">kettle</b>-based build-system.</p></dd>
   174    171   <dt>&quot;<b class="file">doc/</b>&quot;</dt>
   175    172   <dd><p>Main directory for all documentation.</p>
   176    173   <p>Based on the <b class="package">doctools</b> package and tools provided by
   177    174   <b class="package">Tcllib</b>.</p></dd>
................................................................................
   190    187   installation process itself).</p></li>
   191    188   </ol></dd>
   192    189   <dt>&quot;<b class="file">tests/</b>&quot;</dt>
   193    190   <dd><p>Main directory for the test-suite.</p>
   194    191   <p>Based on the <b class="package">tcltest</b> package distributed with the Tcl
   195    192   core.</p></dd>
   196    193   <dt>&quot;<b class="file">actor.tcl</b>&quot;</dt>
   197         -<dd><p>== Package <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></dd>
          194  +<dd><p>Package <b class="package"><a href="cmdr_actor.html">cmdr::actor</a></b>.</p></dd>
   198    195   <dt>&quot;<b class="file">cmdr.tcl</b>&quot;</dt>
   199         -<dd><p>== Package <b class="package"><a href="cmdr.html">cmdr</a></b>.</p></dd>
          196  +<dd><p>Package <b class="package"><a href="cmdr.html">cmdr</a></b>.</p></dd>
   200    197   <dt>&quot;<b class="file">config.tcl</b>&quot;</dt>
   201         -<dd><p>== Package <b class="package"><a href="cmdr_config.html">cmdr::config</a></b>.</p></dd>
          198  +<dd><p>Package <b class="package"><a href="cmdr_config.html">cmdr::config</a></b>.</p></dd>
   202    199   <dt>&quot;<b class="file">help.tcl</b>&quot;</dt>
   203         -<dd><p>== Package <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>.</p></dd>
          200  +<dd><p>Package <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>.</p></dd>
   204    201   <dt>&quot;<b class="file">help_json.tcl</b>&quot;</dt>
   205         -<dd><p>== Package <b class="package"><a href="cmdr_help_json.html">cmdr::help::json</a></b>.</p></dd>
          202  +<dd><p>Package <b class="package"><a href="cmdr_help_json.html">cmdr::help::json</a></b>.</p></dd>
   206    203   <dt>&quot;<b class="file">help_sql.tcl</b>&quot;</dt>
   207         -<dd><p>== Package <b class="package"><a href="cmdr_help_sql.html">cmdr::help::sql</a></b>.</p></dd>
          204  +<dd><p>Package <b class="package"><a href="cmdr_help_sql.html">cmdr::help::sql</a></b>.</p></dd>
   208    205   <dt>&quot;<b class="file">officer.tcl</b>&quot;</dt>
   209         -<dd><p>== Package <b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b>.</p></dd>
          206  +<dd><p>Package <b class="package"><a href="cmdr_officer.html">cmdr::officer</a></b>.</p></dd>
   210    207   <dt>&quot;<b class="file">parameter.tcl</b>&quot;</dt>
   211         -<dd><p>== Package <b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>.</p></dd>
          208  +<dd><p>Package <b class="package"><a href="cmdr_parameter.html">cmdr::parameter</a></b>.</p></dd>
   212    209   <dt>&quot;<b class="file">private.tcl</b>&quot;</dt>
   213         -<dd><p>== Package <b class="package"><a href="cmdr_private.html">cmdr::private</a></b>.</p></dd>
          210  +<dd><p>Package <b class="package"><a href="cmdr_private.html">cmdr::private</a></b>.</p></dd>
   214    211   <dt>&quot;<b class="file">util.tcl</b>&quot;</dt>
   215         -<dd><p>== Package <b class="package"><a href="cmdr_util.html">cmdr::util</a></b>.</p></dd>
          212  +<dd><p>Package <b class="package"><a href="cmdr_util.html">cmdr::util</a></b>.</p></dd>
   216    213   <dt>&quot;<b class="file">validate.tcl</b>&quot;</dt>
   217         -<dd><p>== Package <b class="package"><a href="cmdr_validate.html">cmdr::validate</a></b>.</p></dd>
          214  +<dd><p>Package <b class="package"><a href="cmdr_validate.html">cmdr::validate</a></b>.</p></dd>
   218    215   <dt>&quot;<b class="file">vcommon.tcl</b>&quot;</dt>
   219         -<dd><p>== Package <b class="package"><a href="cmdr_vcommon.html">cmdr::validate::common</a></b>.</p></dd>
          216  +<dd><p>Package <b class="package"><a href="cmdr_vcommon.html">cmdr::validate::common</a></b>.</p></dd>
   220    217   </dl>
   221    218   </div>
   222    219   <div id="section5" class="section"><h2><a name="section5">Extended Build Actions</a></h2>
   223    220   <p>Our build-system is based on <b class="syscmd">kettle</b>, as already explained in
   224    221   the <i class="term"><a href="cmdr_howto_installation.html">Cmdr - The Installer's Guide</a></i>. Beyond the targets useful for
   225    222   installation it also provides targets aiding developers and
   226    223   maintainers. These are:</p>
................................................................................
   256    253   <pre class="example">
   257    254   % /path/to/cmdr/build.tcl test --log &lt;stem&gt;
   258    255   </pre>
   259    256   </dd>
   260    257   </dl>
   261    258   </div>
   262    259   <div id="section6" class="section"><h2><a name="section6">Architecture &amp; Concepts</a></h2>
   263         -<p>The following sections explain</p>
   264         -<ol class="enumerated">
   265         -<li><p>the internal architecture and package dependencies.</p></li>
   266         -<li><p>the internal data structures.</p></li>
   267         -<li><p>important operation sequences (UML SD).</p></li>
   268         -</ol>
   269         -<div id="subsection1" class="subsection"><h3><a name="subsection1">System Architecture</a></h3>
   270    260   <p>All packages in the framework belong to one of three layers,
   271    261   as shown below:</p>
   272    262   <p><img alt="architecture" src="../../image/architecture.png"></p>
   273    263   <p>Note that:</p>
   274    264   <ul class="itemized">
   275    265   <li><p>Packages marked with a dashed blue border are public in parts,
   276    266   and private in parts.</p></li>
................................................................................
   290    280   straight-forward, following mostly directly out of the relationships
   291    281   shown above, plus the few where the utilities are imported. To reduce
   292    282   the complexity of the diagram below a few direct dependencies on
   293    283   <b class="package"><a href="cmdr_util.html">cmdr::util</a></b> were omitted where indirectly present through
   294    284   other dependencies (i.e. through <b class="package"><a href="cmdr_help.html">cmdr::help</a></b>):</p>
   295    285   <p><img alt="pkg_dependencies" src="../../image/pkg_dependencies.png"></p>
   296    286   </div>
   297         -<div id="subsection2" class="subsection"><h3><a name="subsection2">Data structures</a></h3>
          287  +<div id="section7" class="section"><h2><a name="section7">Validation Types</a></h2>
          288  +<p>Everything said in the public document <i class="term"><a href="cmdr_vtypes.html">Cmdr - Writing custom validation types</a></i>
          289  +applies to the standard validation types of the framework (as listed
          290  +in <i class="term"><a href="cmdr_validate.html">Cmdr - Standard validation types for parameters</a></i>) as well.</p>
          291  +</div>
          292  +<div id="section8" class="section"><h2><a name="section8">Help Formats</a></h2>
          293  +<p>Everything said in the public document <i class="term">Cmdr - Writing custom help formats</i>
          294  +applies to the standard help formats of the framework (as listed in
          295  +<i class="term">Cmdr - Standard help formats of the framework</i>) as well.</p>
   298    296   </div>
   299         -<div id="subsection3" class="subsection"><h3><a name="subsection3">Operation Sequences</a></h3>
          297  +<div id="section9" class="section"><h2><a name="section9">Command Line Completion</a></h2>
          298  +<p>The document <i class="term"><a href="cmdr_dev_completion.html">Cmdr - Internals of command line completion</a></i> describes the inner
          299  +workings of the command line completion provided by the framework.</p>
   300    300   </div>
   301         -</div>
   302         -<div id="section7" class="section"><h2><a name="section7">Related Documents</a></h2>
          301  +<div id="section10" class="section"><h2><a name="section10">Related Documents</a></h2>
   303    302   <ol class="enumerated">
   304    303   <li><p><i class="term"><a href="cmdr_introduction.html">Cmdr - Introduction to the project</a></i></p></li>
   305    304   <li><p><i class="term"><a href="cmdr_license.html">Cmdr - License</a></i></p></li>
   306    305   <li><p><i class="term"><a href="cmdr_changes.html">Cmdr - Log of Changes</a></i></p></li>
   307    306   <li><p><i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i></p></li>
   308    307   <li><p><i class="term"><a href="cmdr_howto_installation.html">Cmdr - The Installer's Guide</a></i></p></li>
   309    308   <li><p><i class="term">Cmdr - The Developer's Guide</i></p></li>
   310    309   </ol>
   311    310   </div>
   312         -<div id="section8" class="section"><h2><a name="section8">Bugs, Ideas, Feedback</a></h2>
          311  +<div id="section11" class="section"><h2><a name="section11">Bugs, Ideas, Feedback</a></h2>
   313    312   <p>Both the package(s) and this documentation will undoubtedly contain
   314    313   bugs and other problems.
   315    314   Please report such at
   316    315   <a href="https:/core.tcl.tk/akupries/cmdr">Cmdr Tickets</a>.</p>
   317    316   <p>Please also report any ideas you may have for enhancements of
   318    317   either package(s) and/or documentation.</p>
   319    318   </div>

Changes to embedded/www/doc/toc.html.

    62     62   <td class="#tocright">Cmdr - Utilities for Validation Types</td>
    63     63   </tr>
    64     64   <tr class="#toceven" >
    65     65   <td class="#tocleft" ><a href="files/cmdr_changes.html">cmdr_changes</a></td>
    66     66   <td class="#tocright">Cmdr - Log of Changes</td>
    67     67   </tr>
    68     68   <tr class="#tocodd"  >
           69  +<td class="#tocleft" ><a href="files/cmdr_dev_completion.html">cmdr_completion</a></td>
           70  +<td class="#tocright">Cmdr - Internals of command line completion</td>
           71  +</tr>
           72  +<tr class="#toceven" >
    69     73   <td class="#tocleft" ><a href="files/cmdr_howto_development.html">cmdr_development</a></td>
    70     74   <td class="#tocright">Cmdr - The Developer's Guide</td>
    71     75   </tr>
    72         -<tr class="#toceven" >
           76  +<tr class="#tocodd"  >
    73     77   <td class="#tocleft" ><a href="files/cmdr_dsl.html">cmdr_dsl</a></td>
    74     78   <td class="#tocright">Cmdr - Introduction to the Specification Language</td>
    75     79   </tr>
    76         -<tr class="#tocodd"  >
           80  +<tr class="#toceven" >
    77     81   <td class="#tocleft" ><a href="files/cmdr_dsl_officer.html">cmdr_dsl_officer</a></td>
    78     82   <td class="#tocright">Cmdr - Officer Specification Language</td>
    79     83   </tr>
    80         -<tr class="#toceven" >
           84  +<tr class="#tocodd"  >
    81     85   <td class="#tocleft" ><a href="files/cmdr_dsl_parameter.html">cmdr_dsl_parameter</a></td>
    82     86   <td class="#tocright">Cmdr - Parameter Specification Language</td>
    83     87   </tr>
    84         -<tr class="#tocodd"  >
           88  +<tr class="#toceven" >
    85     89   <td class="#tocleft" ><a href="files/cmdr_dsl_private.html">cmdr_dsl_private</a></td>
    86     90   <td class="#tocright">Cmdr - Private Specification Language</td>
    87     91   </tr>
    88         -<tr class="#toceven" >
           92  +<tr class="#tocodd"  >
    89     93   <td class="#tocleft" ><a href="files/cmdr_howto_get_sources.html">cmdr_howto_get_sources</a></td>
    90     94   <td class="#tocright">Cmdr - How To Get The Sources</td>
    91     95   </tr>
    92         -<tr class="#tocodd"  >
           96  +<tr class="#toceven" >
    93     97   <td class="#tocleft" ><a href="files/cmdr_howto_installation.html">cmdr_installation</a></td>
    94     98   <td class="#tocright">Cmdr - The Installer's Guide</td>
    95     99   </tr>
    96         -<tr class="#toceven" >
          100  +<tr class="#tocodd"  >
    97    101   <td class="#tocleft" ><a href="files/cmdr_introduction.html">cmdr_introduction</a></td>
    98    102   <td class="#tocright">Cmdr - Introduction to the project</td>
    99    103   </tr>
   100         -<tr class="#tocodd"  >
          104  +<tr class="#toceven" >
   101    105   <td class="#tocleft" ><a href="files/cmdr_license.html">cmdr_license</a></td>
   102    106   <td class="#tocright">Cmdr - License</td>
   103    107   </tr>
   104         -<tr class="#toceven" >
          108  +<tr class="#tocodd"  >
   105    109   <td class="#tocleft" ><a href="files/cmdr_vtypes.html">cmdr_vtypes</a></td>
   106    110   <td class="#tocright">Cmdr - Writing custom validation types</td>
   107    111   </tr>
   108    112   </table>
   109    113   </dl><hr></body></html>

Changes to embedded/www/index.html.

    18     18   <hr><table class="#idx" width="100%">
    19     19   <tr class="#idxheader"><th colspan="2">
    20     20   <a name="c1">Keywords: A</a>
    21     21   </th></tr>
    22     22   <tr class="#idxeven" valign=top>
    23     23   <td class="#idxleft" width="35%"><a name="key4"> arguments </a></td>
    24     24   <td class="#idxright" width="65%">
    25         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           25  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    26     26   </td></tr>
    27     27   <tr class="#idxheader"><th colspan="2">
    28     28   <a name="c2">Keywords: C</a>
    29     29   </th></tr>
    30     30   <tr class="#idxodd" valign=top>
    31     31   <td class="#idxleft" width="35%"><a name="key5"> command hierarchy </a></td>
    32     32   <td class="#idxright" width="65%">
    33         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           33  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    34     34   </td></tr>
    35     35   <tr class="#idxeven" valign=top>
    36     36   <td class="#idxleft" width="35%"><a name="key9"> command line completion </a></td>
    37     37   <td class="#idxright" width="65%">
    38         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           38  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    39     39   </td></tr>
    40     40   <tr class="#idxodd" valign=top>
    41     41   <td class="#idxleft" width="35%"><a name="key11"> command line handling </a></td>
    42     42   <td class="#idxright" width="65%">
    43         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           43  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    44     44   </td></tr>
    45     45   <tr class="#idxeven" valign=top>
    46     46   <td class="#idxleft" width="35%"><a name="key13"> command tree </a></td>
    47     47   <td class="#idxright" width="65%">
    48         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           48  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    49     49   </td></tr>
    50     50   <tr class="#idxheader"><th colspan="2">
    51     51   <a name="c3">Keywords: E</a>
    52     52   </th></tr>
    53     53   <tr class="#idxodd" valign=top>
    54     54   <td class="#idxleft" width="35%"><a name="key0"> editing command line </a></td>
    55     55   <td class="#idxright" width="65%">
    56         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           56  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    57     57   </td></tr>
    58     58   <tr class="#idxheader"><th colspan="2">
    59     59   <a name="c4">Keywords: H</a>
    60     60   </th></tr>
    61     61   <tr class="#idxeven" valign=top>
    62     62   <td class="#idxleft" width="35%"><a name="key8"> help for command line </a></td>
    63     63   <td class="#idxright" width="65%">
    64         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           64  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    65     65   </td></tr>
    66     66   <tr class="#idxodd" valign=top>
    67     67   <td class="#idxleft" width="35%"><a name="key6"> hierarchy of commands </a></td>
    68     68   <td class="#idxright" width="65%">
    69         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           69  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    70     70   </td></tr>
    71     71   <tr class="#idxheader"><th colspan="2">
    72     72   <a name="c5">Keywords: I</a>
    73     73   </th></tr>
    74     74   <tr class="#idxeven" valign=top>
    75     75   <td class="#idxleft" width="35%"><a name="key3"> interactive command shell </a></td>
    76     76   <td class="#idxright" width="65%">
    77         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           77  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    78     78   </td></tr>
    79     79   <tr class="#idxheader"><th colspan="2">
    80     80   <a name="c6">Keywords: O</a>
    81     81   </th></tr>
    82     82   <tr class="#idxodd" valign=top>
    83     83   <td class="#idxleft" width="35%"><a name="key1"> optional arguments </a></td>
    84     84   <td class="#idxright" width="65%">
    85         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           85  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    86     86   </td></tr>
    87     87   <tr class="#idxeven" valign=top>
    88     88   <td class="#idxleft" width="35%"><a name="key2"> options </a></td>
    89     89   <td class="#idxright" width="65%">
    90         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           90  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    91     91   </td></tr>
    92     92   <tr class="#idxheader"><th colspan="2">
    93     93   <a name="c7">Keywords: P</a>
    94     94   </th></tr>
    95     95   <tr class="#idxodd" valign=top>
    96     96   <td class="#idxleft" width="35%"><a name="key12"> parameters </a></td>
    97     97   <td class="#idxright" width="65%">
    98         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
           98  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
    99     99   </td></tr>
   100    100   <tr class="#idxeven" valign=top>
   101    101   <td class="#idxleft" width="35%"><a name="key10"> processing command line </a></td>
   102    102   <td class="#idxright" width="65%">
   103         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
          103  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
   104    104   </td></tr>
   105    105   <tr class="#idxheader"><th colspan="2">
   106    106   <a name="c8">Keywords: T</a>
   107    107   </th></tr>
   108    108   <tr class="#idxodd" valign=top>
   109    109   <td class="#idxleft" width="35%"><a name="key7"> tree of commands </a></td>
   110    110   <td class="#idxright" width="65%">
   111         -<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
          111  +<a href="doc/files/cmdr.html"> cmdr </a> &#183; <a href="doc/files/cmdr_actor.html"> cmdr::actor </a> &#183; <a href="doc/files/cmdr_config.html"> cmdr::config </a> &#183; <a href="doc/files/cmdr_help.html"> cmdr::help </a> &#183; <a href="doc/files/cmdr_help_json.html"> cmdr::help::json </a> &#183; <a href="doc/files/cmdr_help_sql.html"> cmdr::help::sql </a> &#183; <a href="doc/files/cmdr_officer.html"> cmdr::officer </a> &#183; <a href="doc/files/cmdr_parameter.html"> cmdr::parameter </a> &#183; <a href="doc/files/cmdr_private.html"> cmdr::private </a> &#183; <a href="doc/files/cmdr_util.html"> cmdr::util </a> &#183; <a href="doc/files/cmdr_validate.html"> cmdr::validate </a> &#183; <a href="doc/files/cmdr_vcommon.html"> cmdr::validate::common </a> &#183; <a href="doc/files/cmdr_changes.html"> cmdr_changes </a> &#183; <a href="doc/files/cmdr_dev_completion.html"> cmdr_completion </a> &#183; <a href="doc/files/cmdr_howto_development.html"> cmdr_development </a> &#183; <a href="doc/files/cmdr_dsl.html"> cmdr_dsl </a> &#183; <a href="doc/files/cmdr_dsl_officer.html"> cmdr_dsl_officer </a> &#183; <a href="doc/files/cmdr_dsl_parameter.html"> cmdr_dsl_parameter </a> &#183; <a href="doc/files/cmdr_dsl_private.html"> cmdr_dsl_private </a> &#183; <a href="doc/files/cmdr_howto_get_sources.html"> cmdr_howto_get_sources </a> &#183; <a href="doc/files/cmdr_howto_installation.html"> cmdr_installation </a> &#183; <a href="doc/files/cmdr_introduction.html"> cmdr_introduction </a> &#183; <a href="doc/files/cmdr_license.html"> cmdr_license </a> &#183; <a href="doc/files/cmdr_vtypes.html"> cmdr_vtypes </a>
   112    112   </td></tr>
   113    113   </table>
   114    114   </body></html>

Changes to embedded/www/toc.html.

    62     62   <td class="#tocright">Cmdr - Utilities for Validation Types</td>
    63     63   </tr>
    64     64   <tr class="#toceven" >
    65     65   <td class="#tocleft" ><a href="doc/files/cmdr_changes.html">cmdr_changes</a></td>
    66     66   <td class="#tocright">Cmdr - Log of Changes</td>
    67     67   </tr>
    68     68   <tr class="#tocodd"  >
           69  +<td class="#tocleft" ><a href="doc/files/cmdr_dev_completion.html">cmdr_completion</a></td>
           70  +<td class="#tocright">Cmdr - Internals of command line completion</td>
           71  +</tr>
           72  +<tr class="#toceven" >
    69     73   <td class="#tocleft" ><a href="doc/files/cmdr_howto_development.html">cmdr_development</a></td>
    70     74   <td class="#tocright">Cmdr - The Developer's Guide</td>
    71     75   </tr>
    72         -<tr class="#toceven" >
           76  +<tr class="#tocodd"  >
    73     77   <td class="#tocleft" ><a href="doc/files/cmdr_dsl.html">cmdr_dsl</a></td>
    74     78   <td class="#tocright">Cmdr - Introduction to the Specification Language</td>
    75     79   </tr>
    76         -<tr class="#tocodd"  >
           80  +<tr class="#toceven" >
    77     81   <td class="#tocleft" ><a href="doc/files/cmdr_dsl_officer.html">cmdr_dsl_officer</a></td>
    78     82   <td class="#tocright">Cmdr - Officer Specification Language</td>
    79     83   </tr>
    80         -<tr class="#toceven" >
           84  +<tr class="#tocodd"  >
    81     85   <td class="#tocleft" ><a href="doc/files/cmdr_dsl_parameter.html">cmdr_dsl_parameter</a></td>
    82     86   <td class="#tocright">Cmdr - Parameter Specification Language</td>
    83     87   </tr>
    84         -<tr class="#tocodd"  >
           88  +<tr class="#toceven" >
    85     89   <td class="#tocleft" ><a href="doc/files/cmdr_dsl_private.html">cmdr_dsl_private</a></td>
    86     90   <td class="#tocright">Cmdr - Private Specification Language</td>
    87     91   </tr>
    88         -<tr class="#toceven" >
           92  +<tr class="#tocodd"  >
    89     93   <td class="#tocleft" ><a href="doc/files/cmdr_howto_get_sources.html">cmdr_howto_get_sources</a></td>
    90     94   <td class="#tocright">Cmdr - How To Get The Sources</td>
    91     95   </tr>
    92         -<tr class="#tocodd"  >
           96  +<tr class="#toceven" >
    93     97   <td class="#tocleft" ><a href="doc/files/cmdr_howto_installation.html">cmdr_installation</a></td>
    94     98   <td class="#tocright">Cmdr - The Installer's Guide</td>
    95     99   </tr>
    96         -<tr class="#toceven" >
          100  +<tr class="#tocodd"  >
    97    101   <td class="#tocleft" ><a href="doc/files/cmdr_introduction.html">cmdr_introduction</a></td>
    98    102   <td class="#tocright">Cmdr - Introduction to the project</td>
    99    103   </tr>
   100         -<tr class="#tocodd"  >
          104  +<tr class="#toceven" >
   101    105   <td class="#tocleft" ><a href="doc/files/cmdr_license.html">cmdr_license</a></td>
   102    106   <td class="#tocright">Cmdr - License</td>
   103    107   </tr>
   104         -<tr class="#toceven" >
          108  +<tr class="#tocodd"  >
   105    109   <td class="#tocleft" ><a href="doc/files/cmdr_vtypes.html">cmdr_vtypes</a></td>
   106    110   <td class="#tocright">Cmdr - Writing custom validation types</td>
   107    111   </tr>
   108    112   </table>
   109    113   </dl><hr></body></html>