//---------------------------------------------------------
//               Conversion of the DSL to HTML
//
//
// Highlighting of DSL specifications in HTML (a feature of
// the generative programming called 'source-to-source
// translation').
//
// It reuses the scanning of our tiny DSL and overloads
// some non-terminals to convert them to HTML.
//
// Type:
//   CodeWorker -translate tinyDSL2HTML.cwp
//       <your-specification.txt> <your-specification.html>
//---------------------------------------------------------

#include "tinyDSL_scanning.cwp"

// Function used by the implicit copy for converting characters
// to HTML.
function transformText(sText : value) {
    set sText = composeHTMLLikeString(sText);
    set sText = sText.replaceString('\r', "");
    set sText = sText.replaceString(' ', "&nbsp;");
    set sText = sText.replaceString('\n', "<br/>" + endl());
    set sText = sText.replaceString('\t', "&nbsp;&nbsp;&nbsp;&nbsp;");
    return sText;
}

// The implicit copy will use a function to convert characters
// before writing them in the output
#implicitCopy(transformText)

// Overload the head of the grammar to write some HTML text
#overload tinyDSL    ::=
        => {@<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <header>
        <style>
        </style>
    </header>
    <body>
        <kbd>
        @}
        // call the overloaded non-terminal
        #super::tinyDSL
        => {@</kbd>
        <hr />
        Generated by <a href="http://www.codeworker.org">CodeWorker</a> v@getVersion()@ from <a href="@this.docURL@tinyDSL2HTML.html">tinyDSL2HTML.cwp</a>.
    </body>
</html>
@}
        ;


//-------------- Some lexical tokens appearing in bold ----------------

#overload CLASS    ::= =>{@<B>@} #readIdentifier:"class" =>{@</B>@};
#overload AGGREGATE    ::= =>{@<B>@} #readIdentifier:"aggregate" =>{@</B>@};
#overload DOUBLE    ::= =>{@<B>@} #readIdentifier:"double" =>{@</B>@};
#overload STRING    ::= =>{@<B>@} #readIdentifier:"string" =>{@</B>@};

Generated by v4.2 from CWscript2HTML.cwp.