webengine/wmlengine/src/htmlp/include/CHtmlpParser.h
changeset 74 91031d3aab7d
parent 68 92a765b5b3e7
child 85 e358f2276d3f
equal deleted inserted replaced
68:92a765b5b3e7 74:91031d3aab7d
     1 /*
       
     2 * Copyright (c) 2000 - 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 /** ----------------------------------------------------------------------- **
       
    21     @package:     NW_HTMLP
       
    22 
       
    23     @synopsis:    default
       
    24 
       
    25     @description: HTML Parser  
       
    26 
       
    27  ** ----------------------------------------------------------------------- **/
       
    28 #ifndef CHTMLP_PARSER_H
       
    29 #define CHTMLP_PARSER_H
       
    30 
       
    31 #include <e32base.h>
       
    32 #include "nw_htmlp_lexer.h"
       
    33 #include "BrsrStatusCodes.h"
       
    34 #include "nwx_buffer.h"
       
    35 #include "nw_encoder_wbxmlwriter.h"
       
    36 
       
    37 #ifdef __cplusplus
       
    38 extern "C" {
       
    39 #endif /* __cplusplus */
       
    40 
       
    41 /* Next two govern allocation/reallocation of the open element stack. */
       
    42 #ifndef NW_HTMLP_OPEN_ELEMENT_INITIAL_STACK_CAPACITY
       
    43 #define NW_HTMLP_OPEN_ELEMENT_INITIAL_STACK_CAPACITY 16
       
    44 #endif
       
    45 #ifndef NW_HTMLP_OPEN_ELEMENT_STACK_GROW_BY
       
    46 #define NW_HTMLP_OPEN_ELEMENT_STACK_GROW_BY 8
       
    47 #endif
       
    48 
       
    49 //Non DTD elements are not found in the HTMLP dictionary and index is stored in
       
    50 //the upper 16 bits.
       
    51 
       
    52 #ifndef NW_HTMLP_DTD_ElementTableMask
       
    53 #define NW_HTMLP_DTD_ElementTableMask 0xffff0000
       
    54 #endif
       
    55 
       
    56 //Initialize the Non DTD value as actual index will always be greated than this.
       
    57 
       
    58 #ifndef NW_HTMLP_DTD_ElementTableInit
       
    59 #define NW_HTMLP_DTD_ElementTableInit 0x00009999
       
    60 #endif
       
    61 
       
    62   typedef struct {
       
    63   void* contentHandler;
       
    64   void* response;
       
    65 } NW_Htmlp_CharsetConvContext;
       
    66 
       
    67 
       
    68 /* RME Documentation tools do not support callback syntax. */
       
    69 /* * ----------------------------------------------------------------------- **
       
    70     @struct:      NW_HTMLP_EventCallbacks
       
    71 
       
    72     @synopsis:    default
       
    73 
       
    74     @scope:       public
       
    75     @variables:
       
    76        TBrowserStatusCode (*beginDocumentCB) (NW_HTMLP_Lexer_t*, void*)
       
    77                   default
       
    78 
       
    79        TBrowserStatusCode (*endDocumentCB) (NW_HTMLP_Lexer_t*, NW_Bool failed, void*)
       
    80                   default
       
    81 
       
    82        TBrowserStatusCode (*startTagCB) (NW_Uint8 asciiCharCount, const NW_Uint8* pBuf,
       
    83                                   void*)
       
    84                   default
       
    85 
       
    86        TBrowserStatusCode (*endTagCB) (NW_Uint8 asciiCharCount, const NW_Uint8* pBuf,
       
    87                                 NW_Bool emptyTag, void*)
       
    88                   default
       
    89 
       
    90        TBrowserStatusCode (*contentCB) (NW_HTMLP_Lexer_t*, const NW_HTMLP_Interval_t*,
       
    91                                  void*)
       
    92                   default
       
    93 
       
    94        TBrowserStatusCode (*cdataCB) (NW_HTMLP_Lexer_t*, const NW_HTMLP_Interval_t*,
       
    95                                void*)
       
    96                   default
       
    97 
       
    98        TBrowserStatusCode (*attributeStartCB) (void*)
       
    99                   default
       
   100 
       
   101        TBrowserStatusCode (*attributeNameAndValueCB) (NW_HTMLP_Lexer_t*,
       
   102                                                const NW_HTMLP_Interval_t* pName,
       
   103                                                NW_Bool missingValue,
       
   104                                                const NW_HTMLP_Interval_t* pValue,
       
   105                                                void*)
       
   106                   default
       
   107 
       
   108        TBrowserStatusCode (*attributesEndCB) (NW_Uint32 attributeCount, void*)
       
   109                   default
       
   110 
       
   111        void* pClientPointer
       
   112                   Passed back in each callback.
       
   113 
       
   114     @description: default
       
   115  ** ----------------------------------------------------------------------- **/
       
   116 typedef struct NW_HTMLP_EventCallbacks_s {
       
   117   TBrowserStatusCode (*beginDocumentCB) (NW_HTMLP_Lexer_t*, void*);
       
   118   
       
   119   TBrowserStatusCode (*endDocumentCB) (NW_HTMLP_Lexer_t*, TBrowserStatusCode e, void*);
       
   120   TBrowserStatusCode (*startTagCB) (NW_Uint8 byteCount, const NW_Uint8* pBuf,
       
   121                              void*, NW_Bool isLiteral);
       
   122   TBrowserStatusCode (*endTagCB) (NW_Uint8 asciiCharCount, const NW_Uint8* pBuf,
       
   123                            NW_Bool emptyTag, void*);
       
   124   TBrowserStatusCode (*contentCB) (NW_HTMLP_Lexer_t*, const NW_HTMLP_Interval_t*,
       
   125                             void*);
       
   126   TBrowserStatusCode (*cdataCB) (NW_HTMLP_Lexer_t*, const NW_HTMLP_Interval_t*,
       
   127                           void*);
       
   128   TBrowserStatusCode (*attributeStartCB) (void*);
       
   129   // cp_count to track the attribute code page switch count.
       
   130   TBrowserStatusCode (*attributeNameAndValueCB) (NW_HTMLP_Lexer_t*,
       
   131                                           const NW_HTMLP_Interval_t* pName,
       
   132                                           NW_Bool missingValue,
       
   133                                           const NW_HTMLP_Interval_t* pValue,
       
   134                                           void*,
       
   135                                           NW_Uint32* cp_count);
       
   136   TBrowserStatusCode (*attributesEndCB) (NW_Uint32 attributeCount, void*);
       
   137   // cp_count to track the attribute code page switch count.
       
   138   TBrowserStatusCode (*piFormCB) (NW_HTMLP_Lexer_t*,
       
   139                            const NW_HTMLP_Interval_t* pPITarget,
       
   140                            const NW_HTMLP_Interval_t* pArguments,
       
   141                            void*,
       
   142                            NW_Uint32* cp_count);
       
   143   void* pClientPointer; /* passed back in each callback */
       
   144 
       
   145   
       
   146   TBrowserStatusCode (*charsetConvertCallback) (void* context,
       
   147                                                 NW_Uint32 charsetLength,
       
   148                                                  NW_Uint32 charsetOffset,
       
   149                                                  NW_Buffer_t* body, 
       
   150                                                  NW_Int32* numUnconvertible, 
       
   151                                                  NW_Int32* indexFirstUnconvertible, 
       
   152                                                  NW_Buffer_t** outBuf,
       
   153                                                  NW_Uint32 *selectedCharset);
       
   154   void* charsetContext;
       
   155 
       
   156 } NW_HTMLP_EventCallbacks_t;
       
   157 
       
   158 /* Added for handling special cases for  elements. It is good idea to document 
       
   159  * each special case here. In other words, this is small state machine to handle 
       
   160  * all such cases.
       
   161  *
       
   162 
       
   163  * 
       
   164  * 1) <script> : Consume all the contents inside the <script> element as it is.
       
   165  *               
       
   166  *
       
   167  * 2) <a>       : The <a> can have "href" and other attributes. If "href" attribute is
       
   168  *                present then allow different formats of attributes 
       
   169  *                e.g. href="www.nokia.com/" or 'www.nokia.com/' or www.nokia.com/ as 
       
   170  *                part of the attribute value. Note, when no quotes are there then also
       
   171  *                '/' is part of the attribute value.
       
   172  * 3) <title>    : If <title> is closed by the mis-spelled end tag. The syntax of the
       
   173  *                 <title> tag is "<title> contents </title>". If there is start tag
       
   174  *                 <title> is found then any closing tag after this can be assumed as
       
   175  *                 end </title> tag.
       
   176  *
       
   177  * 4) <base>     : The <base> tag has the "href" attribute only. If the value of the
       
   178  *                 "href" attribute is not enclosed in the quotes then in case of 
       
   179  *                  realtive URLs 
       
   180  *                 (e.g. <base href=http://uk.dir.yahoo.com/Product_Information_and_Reviews/>
       
   181  *                 The last "/" forword slash is treated as EMPTY end tag but this is not 
       
   182  *                 true. If "/" is dropped then relative URLs are not formed correctly
       
   183  *                 and page displaying error is obtained. For this case look for ">" 
       
   184  *                 only for end of tag.
       
   185  *
       
   186  *
       
   187  */
       
   188 
       
   189 /** ----------------------------------------------------------------------- **
       
   190     @enum:        NW_HTMLP_ElementContentType
       
   191 
       
   192     @synopsis:    Special case handling cases
       
   193 
       
   194     @scope:       public
       
   195 
       
   196  ** ----------------------------------------------------------------------- **/
       
   197 typedef enum NW_HTMLP_SPL_Elem_Type_e {
       
   198    NW_HTMLP_SPL_NONE,           //No special handling required
       
   199    NW_HTMLP_SPL_SCRIPT,         //To handle script
       
   200    NW_HTMLP_SPL_NOSCRIPT,       //To handle noscript
       
   201    NW_HTMLP_SPL_ANCHOR_ATTR,    //To handle attr val inside <a>
       
   202    NW_HTMLP_SPL_META,           //To handle meta element
       
   203    NW_HTMLP_SPL_BODY,           //To handle body start  
       
   204    NW_HTMLP_SPL_TITLE,          //To handle mis-spelled </title>
       
   205    NW_HTMLP_SPL_BASE_ATTR       //To handle "href" attr val inside <base>
       
   206 } NW_HTMLP_SPL_Elem_Type_t;
       
   207 
       
   208 
       
   209 /** ----------------------------------------------------------------------- **
       
   210     @struct:    NW_HTMLP_SPL_Elem_Handling
       
   211 
       
   212     @synopsis:    Handles special cases for the element tags
       
   213 
       
   214     @scope:       public
       
   215 
       
   216     @description: Handles special cases for the element tags
       
   217  ** ----------------------------------------------------------------------- **/
       
   218 
       
   219 typedef struct NW_HTMLP_SPL_Elem_Handling_s
       
   220 {
       
   221 	NW_Bool splHandle; 
       
   222     NW_Ucs2 tagName[128];
       
   223 	NW_HTMLP_SPL_Elem_Type_t type;
       
   224 }NW_HTMLP_SPL_Elem_Handling_t;
       
   225 
       
   226 typedef struct NW_HTMLP_ElementParseState_s {
       
   227   NW_HTMLP_ElementTableIndex_t* pOpenElementStack;
       
   228 
       
   229   /* points to stack top, needs to be int so -1 indicates empty */
       
   230   NW_Int32 openElementStackPointer;
       
   231 
       
   232   /* size in entries when originally malloc'ed, int32 like SP */
       
   233   NW_Int32 openElementStackCapacity;
       
   234 
       
   235   /* true only when in open element with content type tag PCDATA */
       
   236   NW_Bool inPCDATA;
       
   237 
       
   238   /* read position at end of element start, used to skip over newlines
       
   239      after element start */
       
   240   NW_Uint32 readPosition;
       
   241 
       
   242 } NW_HTMLP_ElementParseState_t;
       
   243 
       
   244 
       
   245 /** ----------------------------------------------------------------------- **
       
   246     @class:       CHtmlpParser
       
   247 
       
   248     @synopsis:    parser of a document or segment of a document.
       
   249 
       
   250     @description: parser of a document or segment of a document.
       
   251  ** ----------------------------------------------------------------------- **/
       
   252 class CHtmlpParser : public CBase
       
   253 {
       
   254 public:
       
   255 
       
   256   /** ----------------------------------------------------------------------- **
       
   257     @function:    NewL
       
   258     @synopsis:    public constructor to create a new CHtmlpParser object.
       
   259     @description: public constructor to create a new CHtmlpParser object.
       
   260     @returns:     newly created CHtmlpParser object.
       
   261   ** ----------------------------------------------------------------------- **/
       
   262   static CHtmlpParser* NewL(
       
   263     NW_Uint32 inputByteCount, 
       
   264     NW_Uint8* pInputBuf, 
       
   265     NW_HTMLP_ElementTableIndex_t elementCount,
       
   266     NW_HTMLP_ElementDescriptionConst_t* pElementDictionary,
       
   267     NW_Uint32 encoding,
       
   268     NW_Bool consumeSpaces,
       
   269     void * parser,
       
   270     NW_Bool isScript);
       
   271 
       
   272   /** ----------------------------------------------------------------------- **
       
   273     @function:    ~CHtmlpParser
       
   274     @synopsis:    public destructor.
       
   275     @description: public destructor.
       
   276   ** ----------------------------------------------------------------------- **/
       
   277   ~CHtmlpParser();
       
   278 
       
   279   /** ----------------------------------------------------------------------- **
       
   280     @function:    NW_HTMLP_Parse
       
   281     @synopsis:    Initiates parse of document.
       
   282     @description: Initiates parse of document.
       
   283     @returns:     TBrowserStatusCode
       
   284                   Status of operation.
       
   285                    [KBrsrSuccess] Buffer parsed.
       
   286                    [KBrsrFailure] Parse failed.
       
   287                    [KBrsrOutOfMemory] Ran out of memory parsing the document.
       
   288   ** ----------------------------------------------------------------------- **/
       
   289   TBrowserStatusCode NW_HTMLP_Parse(NW_Bool isFirstSegment, NW_Bool docComplete, NW_Bool needCharsetDetect);
       
   290 
       
   291   NW_Buffer_t* getLastTextBuf();
       
   292 
       
   293   NW_Int32 getLastValid();
       
   294 
       
   295   NW_Uint32 getCodePageSwitchCount();
       
   296 
       
   297   NW_Uint32 getElementCount();
       
   298 
       
   299   NW_Buffer_t* getPreviousValidOutput();
       
   300 
       
   301   NW_HTMLP_EventCallbacks_t * getEventCallbacks();
       
   302 
       
   303   NW_HTMLP_Lexer_t* getLexer();
       
   304 
       
   305   TBrowserStatusCode appendVisitedHeadText(NW_Byte* new_data, NW_Uint32 new_len);
       
   306 
       
   307   NW_Buffer_t* getVisitedHeadText();
       
   308 
       
   309 // For WML purposes, return the status of checking the attribute or element name
       
   310 // in the appropriate dictionary.
       
   311   TBrowserStatusCode NW_HTMLP_ValidateWMLAttribute(NW_HTMLP_Lexer_t* pL,const NW_HTMLP_Interval_t* pI_name,void* pV);
       
   312 
       
   313   NW_Bool iRestarted;
       
   314   NW_Bool iIsHtml;
       
   315   NW_WBXML_Writer_t * iWbxmlWriter; 
       
   316   NW_Int32 iOrigEncoding;
       
   317   NW_Buffer_t* iLeftBytes; // single byte left from last chunk, for (multibyte encodings) 
       
   318   NW_Bool iIsScript;
       
   319 
       
   320   NW_Bool iTrackingUnTerminatedComment;
       
   321 
       
   322 private: 
       
   323 
       
   324   /* the lexer */
       
   325   NW_HTMLP_Lexer_t* iLexer;
       
   326 
       
   327   /* Callback structure and parser state.*/
       
   328   NW_HTMLP_EventCallbacks_t* iCBs;
       
   329 
       
   330   NW_HTMLP_SPL_Elem_Handling_t* iSPLElemHandling;
       
   331 
       
   332   NW_HTMLP_ElementParseState_t* iElementParseState;
       
   333 
       
   334   NW_HTMLP_ElementParseState_t* iLastValidStack;
       
   335 
       
   336   /* last text content parsed by parser for previous segment */
       
   337   NW_Buffer_t* iLastTextBuf;
       
   338 
       
   339   /* point to right after the last trustable item in the generated output WBXML buffer */
       
   340   NW_Int32 iLastValid;
       
   341 
       
   342   /* previously processed segements */
       
   343  /* NW_Uint8* iPreviousOutputBuffer;*/
       
   344 
       
   345   NW_Buffer_t* iPreviousValidOutput;
       
   346 
       
   347   NW_Bool iConsumeSpaces;
       
   348 
       
   349   NW_Int32 iLastTextBegin;   /* offset of '<' within consumeContent or begining of the last piece text if there is no '<' */
       
   350 
       
   351   // members related to code page switches
       
   352   // iCurrentXX records the current state that wbxml writer passed, incld those that may be discarded from wbxml buffer later
       
   353   // iValidXX records the state that is valid, never includes those cp switches that may be discarded later  
       
   354   NW_Uint8 iCurrentTagCP;
       
   355   NW_Uint8 iValidTagCP;
       
   356 
       
   357   NW_Uint8 iCurrentAttrCP;
       
   358   NW_Uint8 iValidAttrCP;
       
   359 
       
   360   NW_Uint32 iValidCPCount;  
       
   361   NW_Uint32 iCurrentCPCount; 
       
   362   // end of code page switch members
       
   363 
       
   364   NW_Buffer_t* iVisitedHeadText;
       
   365 
       
   366   NW_Int32 iLastScriptStart;
       
   367 
       
   368   NW_Bool iNeedCharsetDetect;
       
   369 
       
   370   NW_Bool iHasForm;
       
   371   NW_Bool iWithinNoscript;
       
   372 
       
   373   NW_Bool firstSegment;
       
   374   NW_Bool htmlTagFound;
       
   375   NW_Bool iDocComplete;
       
   376 
       
   377   /* private constructor, called from NewL*/
       
   378   CHtmlpParser( NW_Bool consumeSpaces);
       
   379   void ConstructL(NW_Uint32 inputByteCount, 
       
   380                   NW_Uint8* pInputBuf, 
       
   381                   NW_HTMLP_ElementTableIndex_t elementCount,
       
   382                   NW_HTMLP_ElementDescriptionConst_t* pElementDictionary,
       
   383                   NW_Uint32 encoding, 
       
   384                   NW_Bool isScript);
       
   385 
       
   386   TBrowserStatusCode NW_HTMLP_IfExistsConsumeKeywordCase(
       
   387     NW_HTMLP_Interval_t* pI,
       
   388     NW_Uint32 asciiCharCount,
       
   389     const NW_Uint8* pKeyword,
       
   390     NW_Bool CaseSensitive,
       
   391     NW_Bool* pMatch);
       
   392   
       
   393   TBrowserStatusCode NW_HTMLP_IfExistsConsumeKeyword(
       
   394     NW_HTMLP_Interval_t* pI,
       
   395     NW_Uint32 asciiCharCount,
       
   396     const NW_Uint8* pKeyword,
       
   397     NW_Bool* pMatch);
       
   398   
       
   399   TBrowserStatusCode NW_HTMLP_SkipSpace();
       
   400 
       
   401   TBrowserStatusCode NW_HTMLP_SkipJunk();
       
   402 
       
   403   TBrowserStatusCode NW_HTMLP_SkipCRLF();
       
   404   
       
   405   TBrowserStatusCode NW_HTMLP_ParseName(NW_Bool* pMatch, NW_HTMLP_Interval_t* pI);
       
   406   
       
   407   TBrowserStatusCode NW_HTMLP_FinishComment(NW_Bool* pMatch, NW_Bool imodeComment,
       
   408     NW_Bool looseComment);
       
   409   
       
   410   TBrowserStatusCode NW_HTMLP_FinishCdata(NW_HTMLP_Interval_t* pInterval, NW_Bool* pMatch);
       
   411   
       
   412   TBrowserStatusCode NW_HTMLP_FinishDoctype(NW_Bool* pMatch, NW_HTMLP_Interval_t* doctypeInterval);
       
   413   
       
   414   TBrowserStatusCode NW_HTMLP_IfLegalConsumeComment(NW_Bool* pMatch);
       
   415   
       
   416   TBrowserStatusCode NW_HTMLP_IfLegalConsumePi(NW_Bool* pMatch);
       
   417   
       
   418   TBrowserStatusCode NW_HTMLP_IfLegalConsumeCdata(NW_Bool* pMatch);
       
   419   
       
   420   TBrowserStatusCode NW_HTMLP_HandleSpecialCases(NW_Bool* pMatch);
       
   421   
       
   422   TBrowserStatusCode NW_HTMLP_IfLegalConsumeDoctype(NW_Bool* pMatch);
       
   423   
       
   424   TBrowserStatusCode NW_HTMLP_ConsumeContent(NW_Bool* pMatch);
       
   425 
       
   426   
       
   427   /* handle attributes */
       
   428   void NW_HTMLP_SPL_Elem_Handle_Attr(NW_HTMLP_Interval_t* pI_name, NW_Bool* splAttrFound);
       
   429   
       
   430   TBrowserStatusCode NW_HTMLP_CheckTagEndOrSpace (NW_Bool* aMatch);
       
   431 
       
   432   TBrowserStatusCode NW_HTMLP_CheckTagEnd (NW_Bool* aMatch);
       
   433 
       
   434   TBrowserStatusCode NW_HTMLP_AttributeValueConsume(NW_Bool* pMissingValue,
       
   435     NW_HTMLP_Interval_t* pI,
       
   436     NW_Bool* pMatch,NW_Bool splAttrFound);
       
   437 
       
   438   TBrowserStatusCode NW_HTMLP_AttributeNameAndValueConsume(NW_HTMLP_Interval_t* pI_name,
       
   439     NW_Bool* pMissingValue,
       
   440     NW_HTMLP_Interval_t* pI_attvalue,
       
   441     NW_Bool* pMatch,
       
   442     NW_HTMLP_SPL_Elem_Handling_t* splElem);
       
   443 
       
   444   
       
   445   TBrowserStatusCode NW_HTMLP_IfExistsConsumeMinEmptyElementSyntax(NW_Bool* pMatch);
       
   446   
       
   447   TBrowserStatusCode NW_HTMLP_IfLegalConsumeAttributes(
       
   448     NW_Bool* pMatch,
       
   449     NW_Bool* pIsEmptyTagEnd,
       
   450     const struct NW_HTMLP_EventCallbacks_s* pCB,
       
   451     NW_HTMLP_SPL_Elem_Handling_t* splElem);
       
   452   
       
   453   NW_HTMLP_ElementDescriptionConst_t* NW_HTMLP_ElementFindTagFromDoc(
       
   454     NW_HTMLP_Interval_t* pI,
       
   455     NW_HTMLP_ElementTableIndex_t* pIndex);
       
   456   
       
   457   TBrowserStatusCode NW_HTMLP_IfLegalConsumeElementEnd(NW_Bool* pMatch);
       
   458   
       
   459   TBrowserStatusCode NW_HTMLP_IfLegalConsumeElementStart(NW_Bool* pMatch);
       
   460 
       
   461   TBrowserStatusCode NW_HTMLP_ElementParseState_ExplicitClosing(
       
   462     NW_HTMLP_ElementTableIndex_t index,
       
   463     NW_HTMLP_ElementDescriptionConst_t* pElement);
       
   464   
       
   465   TBrowserStatusCode NW_HTMLP_ElementParseState_ImpliedClosings(NW_HTMLP_ElementDescriptionConst_t* pElement);
       
   466 
       
   467   TBrowserStatusCode NW_HTMLP_ElementParseState_CloseAll();
       
   468   
       
   469   void NW_HTMLP_SPL_Elem_Initialize();
       
   470 
       
   471   void NW_HTMLP_SPL_Elem_Setup(NW_HTMLP_ElementTableIndex_t elementIndex, NW_Bool findCharset);
       
   472   /* element stack operations */
       
   473   
       
   474   TBrowserStatusCode NW_HTMLP_ElementParseState_New();
       
   475   
       
   476   TBrowserStatusCode NW_HTMLP_ElementParseState_Push(NW_HTMLP_ElementTableIndex_t index);
       
   477   
       
   478   NW_HTMLP_ElementTableIndex_t NW_HTMLP_ElementParseState_Pop();
       
   479   
       
   480   void NW_HTMLP_ElementParseState_Delete(NW_HTMLP_ElementParseState_t** ppS);
       
   481 
       
   482   TBrowserStatusCode NW_HTMLP_BR_SPL_Handle();
       
   483 
       
   484   TBrowserStatusCode NW_HTMLP_ElementParseState_Clone(NW_HTMLP_ElementParseState_t** ppS);
       
   485 
       
   486   TBrowserStatusCode setValidMarks();
       
   487 
       
   488   TBrowserStatusCode commitValidMarks();
       
   489   
       
   490   TBrowserStatusCode NW_HTMLP_SPL_Elem_Handle_xml_charset();
       
   491 
       
   492   TBrowserStatusCode NW_HTMLP_SPL_Elem_Handle_Meta(NW_HTMLP_Interval_t* pI_name, 
       
   493 										                               NW_HTMLP_Interval_t* pI_attvalue,
       
   494                                                    NW_HTMLP_SPL_Elem_Handling_t* splElem);
       
   495 
       
   496   TBrowserStatusCode NW_HTMLP_SPL_Elem_Handle_BodyStart(NW_HTMLP_ElementDescriptionConst_t* pElement);
       
   497 
       
   498   TBrowserStatusCode NW_HTMLP_SPL_Elem_Before_HTML_tag(NW_HTMLP_Lexer_t* pL, const NW_HTMLP_Interval_t* pI_content, 
       
   499                                                      NW_Bool* onlySplChar);
       
   500 
       
   501   void updateCurrentCP();
       
   502   void updateCurrentCP(NW_Uint32 switches);
       
   503 };
       
   504 
       
   505 
       
   506 #ifdef __cplusplus
       
   507 } // extern "C" {
       
   508 #endif /* __cplusplus */
       
   509 
       
   510 /* CHTMLP_PARSER_H */
       
   511 #endif