#include "CodeWorker_grammar.cwp"
#overload #ignore    ::=
        [
                ' ' | '\t' | '\r' | '\n'
            |
                "/*"
                => insertText($getOutputLocation() - 2$, "<span class=\"comment\">");
                ignoreEmbeddedComment
                => {@</span>@}
            |
                "//"
                => insertText($getOutputLocation() - 2$, "<span class=\"comment\">");
                [~[['\r']? '\n']]*
                #explicitCopy
                ['\r']? '\n'
                => {@</span><br/>
        @}
        ]*;
function transformChar(cChar : value) {
    if cChar == ' ' return " ";
    if cChar == '\t' return "    ";
    if cChar == '\n' return "<br/>" + endl();
    if cChar != '\r' return composeHTMLLikeString(cChar);
}
#implicitCopy(transformChar)
#overload translation_unit    ::=
        => {@<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="@this.docURL@CodeWorker.css" />
    </head>
    <body class="script">
        @}
        script<this>
        => {@<hr />
        Generated by <I class="CodeWorker">CodeWorker</I> v@getVersion()@ from <a href="@this.docURL@CWscript2HTML.html">CWscript2HTML.cws</a>.
    </body>
</html>
@}
        ;
#overload script<"template-based">    ::=
        #continue
        [
            => {@<span class="raw_text">@}
            ->['@' | "<%"]
            => {@</span>@}
            #continue
            #ignore
            [
                    expression
                    => {@<span class="raw_text">@}
                    ['@' | "%>" | #empty]
                |
                    [instruction]*
                    => {@<span class="raw_text">@}
                    ['@' | "%>" | #empty]
            ]
            => {@</span>@}
        ]+
        => {@</span>@}
        ;
#overload instruction    ::=
        '{' #continue [instruction]* '}'
    |
        #readIdentifier:sKeyword
        => local iLocation = getOutputLocation();
        [
                instruction<sKeyword>
                => insertText(iLocation, "</A>");
                => insertText($iLocation - sKeyword.length()$, "<A class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#" + sKeyword + "\">");
            |
                predefined_function_call<sKeyword> ';'
                => insertText(iLocation, "</A>");
                => insertText($iLocation - sKeyword.length()$, "<A class=\"function\" href=\"" + this.docURL + "manual_The_scripting_language.html#" + sKeyword + "\">");
            |
                predefined_procedure_call<sKeyword> ';'
                => insertText(iLocation, "</A>");
                => insertText($iLocation - sKeyword.length()$, "<A class=\"procedure\" href=\"" + this.docURL + "manual_The_scripting_language.html#" + sKeyword + "\">");
            |
                user_function_call ';'
        ]
    |
        => local iLocation = getOutputLocation();
        '#'
        #readIdentifier:sKeyword
        => insertText(iLocation, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#_" + sKeyword + "\">");
        => {@</a>@}
        preprocessor<sKeyword>
    |
        #check(this != "procedural")
        => {@<span class="raw_text">@}
        ['@' | "%>"]
        #!ignore
        #continue ->['@' | "<%" | #empty]
        =>{@</span>@}
        #ignore
        [expression ![!'@' !"%>" !#empty]]?
        ;
#overload literal_expression<bNumeric>    ::=
        => local iLocation = getOutputLocation();
        [
                CONSTANT_STRING
            |
                '(' #continue expression<bNumeric> ')'
            |
                '$'
                => insertText(iLocation, "<a class=\"constant\" href=\"" + this.docURL + "manual_The_scripting_language.html#$\">");
                => {@</a>@}
                #continue #check(!bNumeric) expression<true>
                => {@<a class="constant" href="@this.docURL@manual_The_scripting_language.html#$">@}
                '$'
                => {@</a>@}
            |
                '~'
                => insertText(iLocation, "<a class=\"constant\" href=\"" + this.docURL + "manual_The_scripting_language.html#numeric_expression\">");
                => {@</a>@}
                #continue #check(bNumeric) literal_expression<true>
            |
                CONSTANT_CHAR
            |
                '!'
                => insertText(iLocation, "<a class=\"constant\" href=\"" + this.docURL + "manual_The_scripting_language.html#boolean_expression\">");
                => {@</a>@}
                #continue literal_expression<bNumeric>
            |
                #readNumeric
                => insertText(iLocation, "<span class=\"numeric\">");
                => {@</span>@}
            |
                #readIdentifier:{"true", "false"}
                => insertText(iLocation, "<a class=\"constant\" href=\"" + this.docURL + "manual_The_scripting_language.html#boolean_literals\">");
                => {@</a>@}
            |
                function_call
            |
                variable_expression ['.' #continue method_call]?
        ]
        ;
#overload function_call    ::=
        #readIdentifier:sFunctionName
        => local iLocation = getOutputLocation();
        [
                predefined_function_call<sFunctionName>
                => insertText(iLocation, "</A>");
                => insertText($iLocation - sFunctionName.length()$, "<A class=\"function\" href=\"" + this.docURL + "manual_The_scripting_language.html#" + sFunctionName + "\">");
            |
                user_function_call
        ];
#overload method_call    ::=
        #readIdentifier:sMethodName
        => local iLocation = getOutputLocation();
        [
                predefined_method_call<sMethodName>:sFunctionName
                => insertText(iLocation, "</A>");
                => insertText($iLocation - sMethodName.length()$, "<A class=\"function\" href=\"" + this.docURL + "manual_The_scripting_language.html#" + sFunctionName + "\">");
            |
                user_method_call<sMethodName>
        ];
#overload variable_expression<sIdentifier> : #!ignore    ::=
        => if sIdentifier == "project" || sIdentifier == "this" {
            insertText($getOutputLocation() - sIdentifier.length()$, "<a class = \"constant\" href=\"" + this.docURL + "manual_The_scripting_language.html#" + sIdentifier + "\">");
            @</a>@
        }
        #super::variable_expression<sIdentifier>
        ;
#overload DEFAULT    ::=
        => {@<B>@}
        #readIdentifier:"default"
        => {@</B>@};
#overload CASE    ::=
        => {@<B>@}
        #readIdentifier:"case"
        => {@</B>@};
#overload START    ::=
        => {@<B>@}
        #readIdentifier:"start"
        => {@</B>@};
#overload CASCADING    ::=
        => {@<B>@}
        #readIdentifier:"cascading"
        => {@</B>@};
#overload ELSE    ::=
        => {@<B>@}
        #readIdentifier:"else"
        => {@</B>@};
#overload IN        ::=
        => {@<B>@}
        #readIdentifier:"in"
        => {@</B>@};
#overload NO_CASE    ::=
        => {@<B>@}
        #readIdentifier:"no_case"
        => {@</B>@};
#overload SORTED    ::=
        => {@<B>@}
        #readIdentifier:"sorted"
        => {@</B>@};
#overload WHILE    ::=
        => {@<B>@}
        #readIdentifier:"while"
        => {@</B>@};
#overload CONSTANT_STRING    ::=
        => local iLocation = getOutputLocation();
        #readCString
        => insertText(iLocation, "<span class=\"string\">");
        => {@</span>@}
        ;
#overload CONSTANT_CHAR    ::=
        => local iLocation = getOutputLocation();
        '\'' #!ignore #continue ['\\']? #readChar '\''
        => insertText(iLocation, "<span class=\"string\">");
        => {@</span>@}
        ;
#overload PRULE_SYMBOL    ::=
        => {@<a class="constant" href="@this.docURL@manual_The_scripting_language.html#parsing_BNF_syntax">@}
        "::="
        => {@</a>@}
        ;
#overload NON_TERMINAL    ::=
        => {@<i>@}
        #readIdentifier
        => {@</i>@}
        ;
#overload ALTERNATION    ::=
        => local iLocation = getOutputLocation();
        '|'
        => insertText(iLocation, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#parsing_alternation\">");
        => {@</a>@}
        ;
#overload TR_BEGIN        ::=
        => local iLocation = getOutputLocation();
        '<'
        => insertText(iLocation, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_declaring_a_clause\">");
        => {@</a>@}
        ;
#overload TR_END        ::=
        => local iLocation = getOutputLocation();
        '>'
        => insertText(iLocation, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_declaring_a_clause\">");
        => {@</a>@}
        ;
#overload BNF_general_directive    ::=
        => local iLocation = getOutputLocation();
        '#'
        #readIdentifier:sKeyword
        => insertText(iLocation, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#_" + sKeyword + "\">");
        => {@</a>@}
        BNF_general_directive<sKeyword>
        ;
#overload BNF_general_directive<"overload">    ::=
        '#'
        => insertText($getOutputLocation() - 1$, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#_ignore\">");
        #continue #readIdentifier:"ignore"
        => {@</a>@}
        BNF_general_directive<"ignore">
    |
        production_rule;
#overload BNF_catch    ::=
        '#'
        => insertText($getOutputLocation() - 1$, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#_try\">");
        #continue
        "catch"
        => {@</a>@}
        '(' variable_expression ')';
#overload BNF_clause_preprocessing    ::=
        ':' '#'
        => insertText($getOutputLocation() - 1$, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_preprocessing_of_a_clause\">");
        #continue
        [
                '!'
                #continue
                #readIdentifier:"ignore"
            |
                #readIdentifier:"ignore"
        ]
        => {@</a>@};
#overload BNF_literal<bTokenCondition>    ::=
        CONSTANT_STRING
        [#check(bTokenCondition) ':' #continue variable_expression]?
    |
        CONSTANT_CHAR
        [
                ".." #continue CONSTANT_CHAR
                [#check(bTokenCondition) BNF_token_post_processing]?
            |
                [#check(bTokenCondition) ':' #continue variable_expression]?
        ]
    |
        [
                '~'
                => insertText($getOutputLocation() - 1$, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_token_complementary\">");
                => {@</a>@}
            |
                '^'
                => insertText($getOutputLocation() - 1$, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_token_complementary\">");
                => {@</a>@}
            |
                '!'
                => insertText($getOutputLocation() - 1$, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_token_negation\">");
                => {@</a>@}
            |
                "->"
                => insertText($getOutputLocation() - 10$, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#-_amp_gt_\">");
                => {@</a>@}
        ]
        #continue BNF_literal<false>
        [#check(bTokenCondition) BNF_token_post_processing]?
    |
        '['
        => insertText($getOutputLocation() - 1$, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_token_repeating_a_token\">");
        => {@</a>@}
        #continue BNF_sequence [ALTERNATION #continue BNF_sequence]*
        => {@<a class="instruction" href="@this.docURL@manual_The_scripting_language.html#BNF_token_repeating_a_token">@}
        ']'
        [
            '?' | '+' | '*' | #readInteger
            [".." #continue [#readInteger | '*']]?
        ]?
        => {@</a>@}
        [#check(bTokenCondition) BNF_token_post_processing]?
    |
        '#'
        => local iLocation = $getOutputLocation() - 1$;
        #continue
        [
                '!'
                #continue
                #readIdentifier:"ignore"
                => insertText(iLocation, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#_ignore\">");
                => {@</a>@}
            |
                #readIdentifier:sDirective
                => insertText(iLocation, "<a class=\"directive\" href=\"" + this.docURL + "manual_The_scripting_language.html#_" + sDirective + "\">");
                => {@</a>@}
                BNF_directive<sDirective>:bTokenConditionAllowed
                [
                    #check(bTokenCondition && bTokenConditionAllowed)
                    BNF_token_post_processing
                ]?
        ]
    |
        "=>"
        => insertText($getOutputLocation() - 5$, "<a class=\"instruction\" href=\"" + this.docURL + "manual_The_scripting_language.html#BNF_operator__eq__amp_gt_\">");
        => {@</a>@}
        #continue instruction
    |
        BNF_clause_call
        [#check(bTokenCondition) BNF_token_post_processing]?
    ;