Changeset 37 for trunk/src/engine.h


Ignore:
Timestamp:
Feb 10, 2008, 6:19:06 AM (11 years ago)
Author:
cameron
Message:

Charset Architecture: Parser Factory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.h

    r19 r37  
    99#define ENGINE_H
    1010
     11#include "xmlparam.h"
     12#include "xmlbuffer.h"
    1113#include "bitlex.h"
    12 
    13 // Information about the character set encoding, XML version and
    14 // standalone status of an XML entity.
    15 struct Entity_Declaration_Info
    16   {bool has_ByteOrderMark;
    17    bool has_version_decl;
    18    bool has_encoding_decl;
    19    bool has_standalone_decl;
    20    int version;
    21    int encoding_start_pos;
    22    int encoding_end_pos;
    23    bool standalone;
    24 };
    2514
    2615
     
    2817data.  */
    2918
    30   class ParsingEngine {
    31           public:
    32                   ParsingEngine(char * filename);
    33                   void ParseContent();
    34                   void InitLexer();
    35                   void ReadXmlInfo (Entity_Declaration_Info& xml_info);
    36                   void ReadTextDeclaration (Entity_Declaration_Info& xml_info);
    37           protected:
     19class Parser_Interface {
     20public:
     21        static Parser_Interface * ParserFactory(char * filename);
     22        virtual void ParseContent() = 0;
     23        unsigned char * GetCodeUnitPtr(int pos);
     24        bool has_ByteOrderMark();
     25        XML_version get_version();
     26        XML_standalone standalone_status();
     27        bool has_EncodingDecl();
     28        int get_Encoding_pos();
     29        int get_Encoding_lgth();
     30protected:
     31        /* Co-classes */
     32        Lexer_Interface * lexer;
     33        XML_Buffer_Interface * xml_buf;
     34        /* Parallel data streams for current buffer full of XML data. */
     35        BytePack * x8data;
     36        LexicalStreamSet * buf;
     37               
     38        int buffer_base_pos;
     39        int buffer_rel_pos;
     40        int buffer_limit_pos;
     41};
    3842
     43template <CodeUnit_Base C>
     44class ParsingEngine : public Parser_Interface {
     45public:
     46        ParsingEngine(XML_Buffer_Interface * b);
     47        void ParseContent();
     48protected:
    3949
    40                   /* Getters for current point/position information. */
    41                   int AbsPos() const;
    42                   int BufferRelPos() const;
    43                   unsigned char * cur() const;
     50        /* Getters for current point/position information. */
     51        int AbsPos() const;
     52        int BufferRelPos() const;
     53        unsigned char * cur() const;
    4454
    45                   bool at_EOF () const;
     55        bool at_EOF () const;
    4656
    47                   /* Mutators that advance the input. */
    48                   void Advance(int n);
    49                   void ASCII_ScanTo(int lex_item);
    50                   void ScanTo(int lex_item);
    51                   void AdvanceToNewBasePosn(int advance_amt);
     57        /* Mutators that advance the input. */
     58        void Advance(int n);
     59        void ScanTo(int lex_item);
    5260
    53                   /* Parsing routines. */
     61        /* Parsing routines. */
    5462
    55                   void Parse_Markup ();
    56                   void Parse_Comment ();
    57                   void Parse_StartTag ();
    58                   void Parse_EndTag ();
    59                   void Parse_CDATA ();
    60                   void Parse_PI ();
    61                   void Parse_Reference ();
     63        void Parse_Markup ();
     64        void Parse_Comment ();
     65        void Parse_StartTag ();
     66        void Parse_EndTag ();
     67        void Parse_CDATA ();
     68        void Parse_PI ();
     69        void Parse_Reference ();
    6270
    63                   /* Co-classes */
    64                   XML_Buffer *xml_buf;
    65                   Lexer *lex;
    66                
    67                   int buffer_base_pos;
    68                   int buffer_rel_pos;
    69                   int avail_code_units;
    70 
    71                  /* Parallel data streams for current buffer full of XML data. */
    72                   ParallelStreamSet buf;
    73 
    74   };
     71};
    7572
    7673
Note: See TracChangeset for help on using the changeset viewer.