Appendix A : HDML 2.0 BNF Summary


                    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 $
                         ::= &gt; | &lt; | &quot; | &amp; | &nbsp; | &dol;
                         ::= &# hex hex ;
 
              plain-text ::= text except blank-space


HDML 2.0 Specification - 11 APR 1997