<?ZBNF-www.vishia.de version="1.0" encoding="iso-8859-1" ?>
$xmlns:gen="http://www.vishia.de/2006/DocuGenCtrl".
$xmlns:xhtml="http://www.w3.org/1999/xhtml".
$inputEncodingKeyword="encoding".
$import "../xsl/ZmakeStd.zbnf".

GenCtrl::=[<*|\nDocuGenCtrl_RULES:?> DocuGenCtrl_RULES:] <GenCtrl_i?>.  

GenCtrl_i::=<?GenCtrl>
[\<\?DocuGenCtrl-www\.vishia\.[de|org] {version=<""?@version-GenDocuCtr>|encoding=<""?@encoding>} \?\>]
genCtrl: <*\ ;?@file> ;
[<?hrefCtrl> hrefCtrl: <*\ ;?!prepFilePath> ; ]
[ importXsl ( {<import> ? , } ) ; ]
[{ target: <target>; | \$<variable>; }]                              ##some Zmake-targets 
##[{ target: }]                              ##some Zmake-targets 
[{ prepXml: <prepXml> }]
{ <document> }
[ HyperlinkAssociation <HyperlinkAssociations> ]
\e.


import::=[<*:\ \r\n,)?@dir>:]<*|.xsl|.xslp?@href>[<?@type>\.xslp|\.xsl].

prepXml::=
[ \{  { <*\ \r\n-,?!prepInputfile> ? ,} \}  ##more as one inputfile in {input, input, ...}
| <*\ \r\n-?!prepInputfile>                 ##NOTE: - as terminate char is the first of followed "-> symbol"
]
 -\> <$?@translator> [-\> <*;\ \r\n-?@outputfile>] ; .

##see ZmakeStd.zbnf prepInputfile::=<prepInputFilePath?input>.

##see ZmakeStd.zbnf prepInputFilePath::=[<+<</:\\?@path>]<*?@file>.

document::=Document <""?@title> ident = <$?@ident>  ##the ident is the identification of the document for generating
  process. Old form, it is the file name in html/ident.html and word/ident.xml
                        [ html = <file?outHtml>  ]  ##this file with path will be produced as html-file
                        [ css  = <""?cssHtml>  ]    ##this file with path is linked as css file in the html-file
                        [ word = <file?outWord>  ]  ##this file with path will be produced as word-file
\{
[{ input: <prepXmlInput?input> ;                    ##The input files for generating the XhtmlPre, possible
  preprocessed, see <prepXml>
 | inputCrossRef: <prepXmlInput?inputCrossRef> ;
 | inset: <inset> ;                                 ##association between inset proxy label and associated topic
}]
[xslCrossRef: <import?xslCrossRef> ; ]
{ chapter <chapter>                                   ##at least one, or more toplevel chapters
| <content?>
| HyperlinkAssociation <HyperlinkAssociations>
}
\}
.


?topic::="topic content without sub-topics. Use /* on end of select string to get the content without the topic-title.".
?topictree::="topic with all sub-topics as sub-chapters.".
?freemindtopictree::="topic with all sub-topics as sub-chapters from freemind.mm.".

prepXmlInput::=<*;\ \r\n-?@inputfile> [ -\> <$?@translator> [ -\> <*;\ \r\n-?@outputfile>]].

##association between inset label and a topic. Just now only topic association is supported.
##in the future more as that is able, hence the <topic> is produced.
inset::=<*\ =?@label> = [<?topic> topic ( <*)\ ?@select> )| none].


chapter::= <""?title> [({ id=<*,) ?@id> ?, })]  ##the id produce a hyperlink anchor in the output document for this
  chapter.
\{ { [chapter <chapter>|[<content?>]]}
\}.




content::=
{ p <""?p>
   | inset <inset>
   | topic( <topic> );
   | topictree( <topic?topictree> );
   | freemindtopic( <topic?freemindtopic> );
   | freemindtopictree( <topic?freemindtopictree> );
   | freemindtable(<topic?freemindtable>);
   |<?file> file( <""?@path> [, <""?@from> \.\. [<""?@to> ]]);  ##input from a file, it is able to select a part from ..
     to specified text, exclusive this labels. 
   | picture( <picture> );
   | umlPkg ( <umlPkg> );
   | umlClass ( <umlClass> );
   | umlIfc ( <umlClass?umlIfc> );
   | umlMethod ( <umlMethod> );
   | umlIfcMethod ( <umlMethod?umlIfcMethod> );
   | umlMethodBody ( <umlMethod?umlMethodBody> );
   | umlIfc ( <umlIfc> );
   | umlComment ( <umlComment> );
   | umlSQD ( <umlSQD> );
   | umlStateD ( <umlStateD> );
   | umlStateReport ( <umlStateReport> );
   | umlEnumeration( <umlEnumeration> );
   | umlDatatype( <umlDatatype> );
   | CLASS_C(<*)?CLASS_C/@select>);
   | dataStruct ( <umlClass> );
   | headerCClass(<*)?CLASS_C/@select>);
   | DEFINE_C(<*)?DEFINE_C/@select>);
   | crossRef( <crossRef> );
   | call <call> ;
   }
.

call::=<$?@name> ( <*,)\ ?@select> ).

##The syntax of topic is also used for ?topictree-semantic. It is the same.
topic::=<*,)\ ?@select>
[,{
  divStyle=[<$?@divStyle>|<""?@divStyle>]
| pStyle=[<$?@pStyle>|<""?@pStyle>]
| ulStyle=[<$?@ulStyle>|<""?@ulStyle>]
| olStyle=[<$?@olStyle>|<""?@olStyle>]
| dlStyle=[<$?@dlStyle>|<""?@dlStyle>]
| tableStyle=[<$?@tableStyle>|<""?@tableStyle>]
| style:<styleTransform>
? , }].

?topic/select::="selection string started at root of topics. 
  An /* on end means: Use the topic content without its title.".

picture::=<""?@title> [: <""?@file>] [ , <#?xPx> x <#?yPx> px ]
[ , {
  imgMap=[<$?@imgMap>|<""?@imgMap>]
? , }].



styleTransform::=[<$?@srcStyle>|<""?@srcStyle>]-\>[<$?@dstStyle>|<""?@dstStyle>].

umlClass::=<*,)\ ?@select>
[,{
  title = <""?@title>            ##if a title is given, the umlClass will be placed in an own chapter with this title.
| methods = [<?@methods>all|public-only|withDescription-only|no|body|onlybody]
| methodstyle = [<?@methodstyle>shortdescription|body|onlybody]
| attributes = [<?@attributes>all|public-only|withDescription-only|bytes|no]
| associations = [<?@associations>all|public-only|withDescription-only|no]
| header<?@header>
? , }].


umlMethod::=<*,)\ ?@select> 
[,{
  title = <""?@title> 
| methodstyle=[<?@methodstyle>shortdescription|body|onlybody] 
| methodblock = <""?@methodblock>\.\.<""?@methodblockEnd>
? , }].

umlEnumeration::=<*,)\ ?@select> 
[,{
  title = <""?@title> 
| content = [<?@content>onlydocu] 
? , }].

umlDatatype::=<*,)\ ?@select> 
[,{
  title = <""?@title> 
| content = [<?@content>onlydocu] 
? , }].

umlIfc::=<*,)\ ?@select> [, title = <""?@title> ].

umlPkg::=<*,)\ ?@select>.



umlComment::=<*,)\ ?@select>.


umlSQD::=<*,)\ ?@select>
.


umlStateD::=<*,)\ ?@select>
.

umlStateReport::=<*,)\ ?@select>
.


crossRef::=<*,)\ ?@content>.



HyperlinkAssociations::= \{ {<?Association> <*\ =?@href> = <""?@dst> [: <$?@content>] ; } \}.