deck ::= deck-header { action }* { card }+ deck-footer deck-header ::= <HDML o-version ol(deck-options) > deck-options ::= o-ttl | o-deckseq | o-public | o-accessdomain | o-accesspath | o-markable deck-footer ::= </HDML> o-version ::= version = value o-ttl ::= ttl = {numeric}+ o-public ::= public = boolean-value o-accessdomain ::= accessdomain = url o-accesspath ::= accesspath = path o-markable ::= markable = boolean-value boolean-value ::= true | false card ::= display-card | nodisplay-card | choice-card | entry-card card-options ::= o-name | o-title | o-bookmark | o-markable o-name ::= name = identifier o-title ::= title = value-with-vars o-bookmark ::= bookmark = destination display-card ::= display-header display-content display-footer display-header ::= <DISPLAY ol(display-options) > display-options ::= card-options display-content ::= { action }* formatted-text display-footer ::= </DISPLAY> nodisplay-card ::= nodisplay-header nodisplay-content nodisplay-footer nodisplay-header ::= <NODISPLAY ol(nodisplay-options) > nodisplay-options ::= card-options nodisplay-content ::= { action }* nodisplay-footer ::= </NODISPLAY> choice-card ::= choice-header display-content { entries } choice-footer choice-header ::= <CHOICE ol(choice-options) > choice-options ::= card-options | o-method | o-key | o-ikey | o-default | o-idefault o-method ::= method = method-type method-type ::= list | alpha entries ::= { choice-entry }+ choice-footer ::= </CHOICE> o-key ::= key = identifier o-ikey ::= ikey = identifier o-default ::= default = value-with-vars o-idefault ::= idefault = value-with-vars choice-entry ::= choice-entry-header choice-entry-content choice-entry-footer choice-entry-header ::= <CE ol(choice-entry-options) > choice-entry-options ::= o-value | task-options choice-entry-content ::= formatted-line choice-entry-footer ::= { </CE> } o-value ::= value = value entry-header ::= <ENTRY ol(entry-options) > entry-options ::= card-options | o-format | o-noecho | o-emptyok | o-key | o-default entry-footer ::= </ENTRY> o-format ::= format = value o-noecho ::= noecho = boolean-value o-emptyok ::= emptyok = boolean-value formatted-line ::= { { line-format } {alignment-format} text-line } formatted-text ::= formatted-line* text-line ::= {text | variable | image | text-format | tab-format}* text-format ::= <B> | <I> ::= </B> | </I> alignment-format ::= <CENTER> | <RIGHT> tab-format ::= <TAB> line-format ::= <WRAP> | <LINE> ::= <BR> image ::= <IMG ol(image-options) > image-options ::= o-alt | o-name | o-src o-alt ::= alt = value-with-vars o-name ::= name = value-with-vars o-src ::= src = destination action ::= <ACTION ol(action-options) > action-options ::= o-label | o-type | o-image | task-options o-type ::= type = key key ::= soft1 | soft2 | soft3 | soft4 | soft5 | soft6 | soft7 | soft8 | accept | prev | help o-label ::= label = value-with-vars o-image ::= image = url
(phase 1)
destination ::= value-with-vars url ::= value-with-vars path ::= value-with-vars
(phase 2)
destination ::= url { # fragment } url ::= absolute-url | relative-url absolute-url ::= generic-rl ::= scheme : { uchar | reserved }* generic-url ::= scheme : relative-url relative-url ::= net-path | abs-path | rel-path net-path ::= // net-loc { abs-path } abs-path ::= / rel-path rel-path ::= { path } { ; params } { ? query } path ::= fsegment { / segment } fsegment ::= { pchar }+ segment ::= { pchar }* params ::= param { ; param }* param ::= { pchar | / }* scheme ::= { alpha-numeric | + | - | . }+ net-loc ::= { pchar | ; | ? }* query ::= { uchar | reserved }* fragment ::= { uchar | reserved }* pchar ::= uchar | : | @ | & | = uchar ::= unreserved | escape unreserved ::= alpha-numeric | safe | extra escape ::= % hex hex safe ::= $ | - | _ | . | + extra ::= ! | * | ' | ( | ) | , national ::= { | } | | | \ | ^ | ~ | [ | ] | ` reserved ::= ; | / | ? | : | @ | & | = punctuation ::= < | > | # | % | " task-options ::= o-task | o-dest | o-vars | o-receive | o-retvals | o-next | o-cancel | o-sendreferer | o-friend | o-clear | o-confirm | o-data | o-number | o-go | o-call o-task ::= task = task-type task-type ::= go | gosub | prev | return | cancel | post | call | noop o-dest ::= dest = destination o-vars ::= vars = value-with-vars o-receive ::= receive = receive-list receive-list ::= { ; }* identifier { ; { identifier } }* o-retvals ::= retvals = retval-list retval-list ::= value-with-vars { ; value-with-vars } o-next ::= next = destination o-cancel ::= cancel = destination o-sendreferer ::= sendreferer = boolean-value o-friend ::= friend = boolean-value o-clear ::= clear = boolean-value o-data ::= data = data-list data-list ::= identifier { ; identifier } o-number ::= number = value-with-vars o-go ::= go = destination o-call ::= call = value-with-vars variable ::= $ identifier ::= $( identifier { : conversion } ) conversion ::= n { oesc } ::= e { scape } variable-text ::= variable | text alpha ::= any alphabetic character a through z or A through Z numeric ::= any digit 0 through 9 alpha-numeric ::= alpha | numeric hex ::= numeric | any letter A through F, either case blank-space ::= { space | tab | new-line }+ space ::= the space character tab ::= the tab character new-line ::= the carriage return character ::= the line feed character ::= the sequence carriage return, line feed word ::= { alpha-numeric }+ identifier ::= alpha { alpha-numeric }* integer ::= { + | - } { numeric }+ text ::= any ISO-Latin-1 character except <, >, ", &, or $ ::= > | < | " | & | | &dol; ::= &# hex hex ; plain-text ::= text except blank-space