//-------------------------------------------------------------------------
// Copyright 1995 SandStone Technology Inc. All rights reserved.
//
// WARNING: The demo version will not compile this rule file, it is limited
// to very small files.
//
// NOTE: Set tabs at 6 to view this file.
//
// This is an HTML rule file for use with Visual Parse++. It should parse
// just about any HTML file, even ones with errors, ommisions, etc. The
// rule file recogizes all the HTML 2.0 tags.
//
// It also recoginzes unknown tags, you can handle the action in your
// code (or add to this rule file).
//
//-------------------------------------------------------------------------
%expression Main
'[^<&]+' Text, 'text';
'[0-9]{2,3};' NumEnt, '';
'&' Amp, '&';
'&[A-Za-z]+;' CharEnt, '&c';
'', %push Unknown;
'[a-zA-Z0-9]+>' UnknownEnd, '';
'[a-zA-Z0-9]+' UnknownEnd1,'', %push Attrs;
'[Aa]>' AEnd, '';
'<[Aa][Dd][Dd][Rr][Ee][Ss][Ss]' Address, '
', %push Attrs;
'[Aa][Dd][Dd][Rr][Ee][Ss][Ss]>' AddressEnd, ' ';
'<[Bb]' B, '', %push Attrs;
'[Bb]>' BEnd, ' ';
'<[Bb][Aa][Ss][Ee]' Base, ' ', %push Attrs;
'<[Bb][Ll][Oo][Cc][Kk][Qq][Uu][Oo][Tt][Ee]' BlockQuote, '', %push Attrs;
'[Bb][Ll][Oo][Cc][Kk][Qq][Uu][Oo][Tt][Ee]>' BlockQuoteEnd, ' ';
'<[Bb][Oo][Dd][Yy]' Body, '', %push Attrs;
'[Bb][Oo][Dd][Yy]>' BodyEnd, '';
'<[Bb][Rr]' Br, ' ', %push Attrs;
'<[Cc][Ii][Tt][Ee]' Cite, '', %push Attrs;
'[Cc][Ii][Tt][Ee]>' CiteEnd, ' ';
'<[Cc][Oo][Dd][Ee]' Code, '', %push Attrs;
'[Cc][Oo][Dd][Ee]>' CodeEnd, '
';
'<[Dd][Ff][Nn]' Dfn, '', %push Attrs;
'[Dd][Ff][Nn]>' DfnEnd, ' ';
'<[Dd][Ii][Rr]' Dir, '', %push Attrs;
'[Dd][Ii][Rr]>' DirEnd, ' ';
'<[Dd][Dd]' Dd, '', %push Attrs;
'<[Dd][Ll]' Dl, '', %push Attrs;
'[Dd][Ll]>' DlEnd, ' ';
'<[Dd][Tt]' Dt, ' ', %push Attrs;
'<[Ee][Mm]' Em, '', %push Attrs;
'[Ee][Mm]>' EmEnd, ' ';
'<[Ff][Oo][Rr][Mm]' Form, '';
'<[Hh]1' H1, '', %push Attrs;
'[Hh]1>' H1End, ' ';
'<[Hh]2' H2, '', %push Attrs;
'[Hh]2>' H2End, ' ';
'<[Hh]3' H3, '', %push Attrs;
'[Hh]3>' H3End, ' ';
'<[Hh]4' H4, '', %push Attrs;
'[Hh]4>' H4End, ' ';
'<[Hh]5' H5, '', %push Attrs;
'[Hh]5>' H5End, ' ';
'<[Hh]6' H6, '', %push Attrs;
'[Hh]6>' H6End, ' ';
'<[Hh][Ee][Aa][Dd]' Head, '', %push Attrs;
'[Hh][Ee][Aa][Dd]>' HeadEnd, '';
'<[Hh][Ee][Aa][Dd][Ee][Rr]' Header, '', %push Attrs;
'[Hh][Ee][Aa][Dd][Ee][Rr]>' HeaderEnd, ' ';
'<[Hh][Rr]' Hr, ' ', %push Attrs;
'<[Hh][Tt][Mm][Ll]' Html, '', %push Attrs;
'[Hh][Tt][Mm][Ll]>' HtmlEnd, '';
'<[Ii]' I, '', %push Attrs;
'[Ii]>' IEnd, ' ';
'<[Ii][Mm][Gg]' Img, ' ', %push Attrs;
'<[Ii][Nn][Pp][Uu][Tt]' Input, ' ', %push Attrs;
'<[Ii][Ss][Ii][Nn][Dd][Ee][Xx]' Isindex, ' ', %push Attrs;
'<[Kk][Bb][Dd]' Kbd, '', %push Attrs;
'[Kk][Bb][Dd]>' KbdEnd, ' ';
'<[Ll][Ii]' Li, '', %push Attrs;
'<[Ll][Ii][Nn][Kk]' Link, ' ', %push Attrs;
'<[Mm][Ee][Nn][Uu]' Menu, '', %push Attrs;
'[Mm][Ee][Nn][Uu]>' MenuEnd, ' ';
'<[Nn][Ee][Xx][Tt][Ii][Dd]' NextId, '', %push Attrs;
'<[Oo][Pp][Tt][Ii][Oo][Nn]' Option, '', %push Attrs;
'<[Oo][Ll]' Ol, '', %push Attrs;
'[Oo][Ll]>' OlEnd, ' ';
'<[Pp]' P, '', %push Attrs;
'[Pp]>' PEnd, '
';
'<[Pp][Rr][Ee]' Pre, '', %push Attrs;
'[Pp][Rr][Ee]>' PreEnd, ' ';
'<[Ss][Aa][Mm][Pp]' Samp, '', %push Attrs;
'[Ss][Aa][Mm][Pp]>' SampEnd, ' ';
'<[Ss][Ee][Ll][Ee][Cc][Tt]' Select, '', %push Attrs;
'[Ss][Ee][Ll][Ee][Cc][Tt]>' SelectEnd, ' ';
'<[Ss][Tt][Rr][Oo][Nn][Gg]' Strong, '', %push Attrs;
'[Ss][Tt][Rr][Oo][Nn][Gg]>' StrongEnd, ' ';
'<[Tt][Ee][Xx][Tt][Aa][Rr][Ee][Aa]' TextArea, '';
'<[Tt][Ii][Tt][Ll][Ee]' Title, '', %push Attrs;
'[Tt][Ii][Tt][Ll][Ee]>' TitleEnd, ' ';
'<[Tt][Tt]' Tt, '', %push Attrs;
'[Tt][Tt]>' TtEnd, ' ';
'<[Uu][Ll]' Ul, '', %push Attrs;
'[Uu][Ll]>' UlEnd, ' ';
'<[Vv][Aa][Rr]' Var, '', %push Attrs;
'[Vv][Aa][Rr]>' VarEnd, ' ';
%expression Attrs
'[ \t\n]+' %ignore;
'=' Equal, '=', %push AttrParm;
'>' EndTag, '>', %pop;
'[Aa][Cc][Tt][Ii][Oo][Nn]' Action, 'ACTION';
'[Aa][Ll][Ii][Gg][Nn]' Align, 'ALIGN';
'[Aa][Ll][Tt]' Alt, 'ALT';
'[Cc][Oo][Ll][Ss]' Cols, 'COLS';
'[Cc][Oo][Mm][Pp][Aa][Cc][Tt]' Compact, 'COMPACT';
'[Cc][Hh][Ee][Cc][Kk][Ee][Dd]' Checked, 'CHECKED';
'[Ee][Nn][Cc][Tt][Yy][Pp][Ee]' Enctype, 'ENCTYPE';
'[Hh][Rr][Ee][Ff]' Href, 'HREF';
'[Ii][Ss][Mm][Aa][Pp]' Ismap, 'ISMAP';
'[Mm][Aa][Xx][Ll][Ee][Nn][Gg][Tt][Hh]' Maxlength, 'MAXLENGTH';
'[Mm][Ee][Tt][Hh][Oo][Dd][Ss]' Methods, 'METHODS';
'[Mm][Ee][Tt][Hh][Oo][Dd]' Method, 'METHOD';
'[Mm][Uu][Ll][Tt][Ii][Pp][Ll][Ee]' Multiple, 'MULTIPLE';
'[Nn]' N, 'N';
'[Nn][Aa][Mm][Ee]' Name, 'NAME';
'[Rr][Ee][Ff]' Ref, 'REF';
'[Rr][Ee][Ll]' Rel, 'REL';
'[Rr][Ee][Vv]' Rev, 'REV';
'[Rr][Oo][Ww][Ss]' Rows, 'ROWS';
'[Ss][Ee][Ll][Ee][Cc][Tt][Ee][Dd]' Selected, 'SELECTED';
'[Ss][Ii][Zz][Ee]' Size, 'SIZE';
'[Ss][Rr][Cc]' Src, 'SRC';
'[Tt][Ii][Tt][Ll][Ee]' TitleParm, 'TITLE';
'[Tt][Yy][Pp][Ee]' Type, 'TYPE';
'[Uu][Rr][Nn]' Urn, 'URN';
'[Vv][Aa][Ll][Uu][Ee]' Value, 'VALUE';
'[Ww][Ii][Dd][Tt][Hh]' Width, 'WIDTH';
%expression AttrParm
'[ \t\n]+' %ignore;
'[^ ">\t\n]+' NameParm, 'name', %pop;
'[0-9]+' Num, 'n', %pop;
'[0-9]+%' NumPercent, 'n%', %pop;
'\"[^>"]+\"?' String, 'string', %pop;
'\"\"' NullString, 'nullstring', %pop;
'[Bb][Oo][Tt][Tt][Oo][Mm]' Bottom, 'BOTTOM', %pop;
'[Cc][Hh][Ee][Cc][Kk][Bb][Oo][Xx]' Checkbox, 'CHECKBOX', %pop;
'[Gg][Ee][Tt]' Get, 'GET', %pop;
'[Hh][Ii][Dd][Dd][Ee][Nn]' Hidden, 'HIDDEN', %pop;
'[Ii][Mm][Aa][Gg][Ee]' Image, 'IMAGE', %pop;
'[Ll][Ee][Ff][Tt]' Left, 'LEFT', %pop;
'[Mm][Ii][Dd][Dd][Ll][Ee]' Middle, 'MIDDLE', %pop;
'[Pp][Oo][Ss][Tt]' Post, 'POST', %pop;
'[Rr][Aa][Dd][Ii][Oo]' Radio, 'RADIO', %pop;
'[Rr][Ee][Ss][Ee][Tt]' Reset, 'RESET', %pop;
'[Rr][Ii][Gg][Hh][Tt]' Right, 'RIGHT', %pop;
'[Ss][Uu][Bb][Mm][Ii][Tt]' Submit, 'SUBMIT', %pop;
'[Tt][Ee][Xx][Tt]' TextParm, 'TEXT', %pop;
'[Tt][Oo][Pp]' Top, 'TOP', %pop;
%expression Comment
'[^>]+' %ignore;
'>' %ignore, %pop;
%expression Unknown
'[^>]+' UnknownAttr, 'UNKNOWN';
'>' EndTag, '>', %pop;
%production start
Start start -> chunks;
Chunks chunks -> chunks chunk;
ChunkOne chunks -> chunk;
ChunkTag chunk -> tag;
ChunkText chunk -> 'text';
ChunkAmp chunk -> '&';
ChunkCharEnt chunk -> '&c';
ChunkNumEnt chunk -> '';
TagUnknown tag -> '' unAttr '>';
TagUnknownAttrNull unAttr -> ;
TagUnknownAttr unAttr -> 'UNKNOWN';
TagUnknownEnd tag -> ' ';
TagUnknownEnd1 tag -> ' '' '>';
TagHtmlEnd tag -> '';
TagHead tag -> '' '>';
TagHeadEnd tag -> '';
TagHeader tag -> '' '>';
TagHeaderEnd tag -> ' ';
TagBody tag -> '' '>';
TagBodyEnd tag -> '';
TagBase tag -> ' ' baseAttrs '>';
TagBaseAttrHref baseAttrs -> 'HREF' '=' anyParm;
TagIsIndex tag -> ' ' '>';
TagLink tag -> ' ' linkAttrs '>';
TagLinkAttrs linkAttrs -> linkAttrs linkAttr;
TagLinkAttrsOne linkAttrs -> linkAttr;
TagLinkAttrHref linkAttr -> 'HREF' '=' anyParm;
TagLinkAttrRel linkAttr -> 'REL' '=' anyParm;
TagLinkAttrRev linkAttr -> 'REV' '=' anyParm;
TagLinkAttrUrn linkAttr -> 'URN' '=' anyParm;
TagLinkAttrTitle linkAttr -> 'TITLE' '=' anyParm;
TagLinkAttrMethods linkAttr -> 'METHODS' '=' anyParm;
TagNextId tag -> '' nextAttrs '>';
TagNextAttrN nextAttrs -> 'N' '=' anyParm;
TagTitle tag -> '' '>';
TagTitleEnd tag -> ' ';
TagH1 tag -> '' '>';
TagH1End tag -> ' ';
TagH2 tag -> '' '>';
TagH2End tag -> ' ';
TagH3 tag -> '' '>';
TagH3End tag -> ' ';
TagH4 tag -> '' '>';
TagH4End tag -> ' ';
TagH5 tag -> '' '>';
TagH5End tag -> ' ';
TagH6 tag -> '' '>';
TagH6End tag -> ' ';
TagParagraph tag -> '' '>';
TagParagraphEnd tag -> '
';
TagPre tag -> '' '>';
TagPreEnd tag -> ' ';
TagA tag -> '' aAttrs '>';
TagAEnd tag -> ' ';
TagAAttrs aAttrs -> aAttrs aAttr;
TagAAttrsOne aAttrs -> aAttr;
TagAAttrRef aAttr -> 'REF' '=' anyParm;
TagAAttrHref aAttr -> 'HREF' '=' anyParm;
TagAName aAttr -> 'NAME' '=' anyParm;
TagATitle aAttr -> 'TITLE' '=' anyParm;
TagDir tag -> '' '>';
TagDirEnd tag -> ' ';
TagDd tag -> '' '>';
TagDlEnd tag -> '' dlAttrs '>';
TagDlAttrsNull dlAttrs -> ;
TagDlAttrsCompact dlAttrs -> 'COMPACT';
TagDl tag -> ' ';
TagDtEnd tag -> ' ' '>';
TagMenu tag -> '' '>';
TagMenuEnd tag -> ' ';
TagOl tag -> '' '>';
TagOlEnd tag -> ' ';
TagUl tag -> '';
TagList tag -> '' '>';
TagEm tag -> '' '>';
TagEmEnd tag -> ' ';
TagStrong tag -> '' '>';
TagStrongEnd tag -> ' ';
TagCode tag -> '' '>';
TagCodeEnd tag -> '
';
TagKbd tag -> '' '>';
TagKbdEnd tag -> ' ';
TagVar tag -> '' '>';
TagVarEnd tag -> ' ';
TagSamp tag -> '' '>';
TagSampEnd tag -> ' ';
TagDfn tag -> '' '>';
TagDfnEnd tag -> ' ';
TagCite tag -> '' '>';
TagCiteEnd tag -> ' ';
TagB tag -> '' '>';
TagBEnd tag -> ' ';
TagI tag -> '' '>';
TagIEnd tag -> ' ';
TagTt tag -> '' '>';
TagTtEnd tag -> ' ';
TagHr tag -> ' ' hrAttrs '>';
TagHrAttrs hrAttrs -> hrAttrs hrAttr;
TagHrAttr hrAttrs -> ;
TagHrAttrWidth hrAttr -> 'WIDTH' '=' anyParm;
TagHrAttrAlign hrAttr -> 'ALIGN' '=' align;
TagHrAttrSize hrAttr -> 'SIZE' '=' anyParm;
TagBr tag -> ' ' '>';
TagBlockQuote tag -> '' '>';
TagBlockQuoteEnd tag -> ' ';
TagAddress tag -> '' '>';
TagAddressEnd tag -> ' ';
TagImg tag -> ' ' imgAttrs '>';
TagImgAttrs imgAttrs -> imgAttrs imgAttr;
TagImgAttr imgAttrs -> imgAttr;
TagImgAttrSrc imgAttr -> 'SRC' '=' anyParm;
TagImgAttrAlt imgAttr -> 'ALT' '=' anyParm;
TagImgAttrAlign imgAttr -> 'ALIGN' '=' align;
TagImgAttrIsMap imgAttr -> 'ISMAP';
TagForm tag -> '';
TagFormAttrs formAttrs -> formAttrs formAttr;
TagFormAttrNull formAttrs -> ;
TagFormAttrAction formAttr -> 'ACTION' '=' anyParm;
TagFormAttrMethod formAttr -> 'METHOD' '=' method;
TagFormAttrEncType formAttr -> 'ENCTYPE' '=' anyParm;
TagInput tag -> ' ' inputAttrs '>';
TagInputAttrs inputAttrs -> inputAttrs inputAttr;
TagInputAttr inputAttrs -> inputAttr;
TagInputAttrType inputAttr -> 'TYPE' '=' input;
TagInputAttrName inputAttr -> 'NAME' '=' anyParm;
TagInputAttrValue inputAttr -> 'VALUE' '=' anyParm;
TagInputAttrSrc inputAttr -> 'SRC' '=' anyParm;
TagInputAttrSize inputAttr -> 'SIZE' '=' 'n';
TagInputAttrMaxLength inputAttr -> 'MAXLENGTH' '=' 'n';
TagInputAttrAlign inputAttr -> 'ALIGN' '=' align;
TagTextArea tag -> '';
TagTextAttrs textAttrs -> textAttrs textAttr;
TagTextAttrNull textAttrs -> ;
TagTextAttrName textAttr -> 'NAME' '=' anyParm;
TagTextAttrRows textAttr -> 'ROWS' '=' 'n';
TagTextAttrCols textAttr -> 'COLS' '=' 'n';
TagSelect tag -> '' selAttrs '>';
TagSelectEnd tag -> ' ';
TagSelAttrs selAttrs -> selAttrs selAttr;
TagSelAttrNull selAttrs -> ;
TagSelAttrName selAttr -> 'NAME' '=' anyParm;
TagSelAttrSize selAttr -> 'SIZE' '=' 'n';
TagSelAttrMultiple selAttr -> 'MULTIPLE';
TagOption tag -> '' optAttrs '>';
TagOptionAttrs optAttrs -> optAttrs optAttr;
TagOptionAttrNull optAttrs -> ;
TagOptionAttrSelected optAttr -> 'SELECTED';
TagOptionAttrValue optAttr -> 'VALUE' '=' anyParm;
InputCheckBox input -> 'CHECKBOX';
InputHidden input -> 'HIDDEN';
InputRadio input -> 'RADIO';
InputReset input -> 'RESET';
InputSubmit input -> 'SUBMIT';
InputText input -> 'TEXT';
Input input -> 'IMAGE';
MethodGet method -> 'GET';
MethodPost method -> 'POST';
AlignTop align -> 'TOP';
AlignLeft align -> 'LEFT';
AlignRight align -> 'RIGHT';
AlignMiddle align -> 'MIDDLE';
AlignBottom align -> 'BOTTOM';
AnyParmN anyParm -> 'n';
AnyParmNPercent anyParm -> 'n%';
AnyParmName anyParm -> 'name';
AnyParmString anyParm -> 'string';
AnyParmNullString anyParm -> 'nullstring';
AnyParmBottom anyParm -> 'BOTTOM';
AnyParmCheckbox anyParm -> 'CHECKBOX';
AnyParmGet anyParm -> 'GET';
AnyParmHidden anyParm -> 'HIDDEN';
AnyParmImage anyParm -> 'IMAGE';
AnyParmLeft anyParm -> 'LEFT';
AnyParmMiddle anyParm -> 'MIDDLE';
AnyParmPost anyParm -> 'POST';
AnyParmRadio anyParm -> 'RADIO';
AnyParmRight anyParm -> 'RIGHT';
AnyParmReset anyParm -> 'RESET';
AnyParmSubmit anyParm -> 'SUBMIT';
AnyParmText anyParm -> 'TEXT';
AnyParmTop anyParm -> 'TOP';