1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef X2C_PARSE_HXX 25 #define X2C_PARSE_HXX 26 27 28 29 // USED SERVICES 30 // BASE CLASSES 31 // COMPONENTS 32 #include "filebuff.hxx" 33 #include "../support/sistr.hxx" 34 #include "../support/list.hxx" 35 // PARAMETERS 36 37 38 class XmlElement; 39 class ListElement; 40 41 class X2CParser 42 { 43 public: 44 typedef XmlElement * (*F_CREATE)(const Simstr &); 45 46 X2CParser( 47 XmlElement & o_rDocumentData ); 48 ~X2CParser(); 49 50 bool LoadFile( 51 const char * i_sFilename ); 52 void Parse(); 53 bool Parse( 54 const char * i_sFilename ); 55 56 PureText() const57 const char * PureText() const { return aFile.operator const char*(); } 58 59 void Parse_Sequence( 60 DynamicList<XmlElement> & 61 o_rElements, 62 const Simstr & i_sElementName ); 63 void Parse_FreeChoice( 64 DynamicList<XmlElement> & 65 o_rElements ); 66 void Parse_List( 67 ListElement & o_rListElem ); 68 void Parse_Text( 69 Simstr & o_sText, 70 const Simstr & i_sElementName, 71 bool i_bReverseName ); 72 void Parse_MultipleText( 73 List<Simstr> & o_rTexts, 74 const Simstr & i_sElementName, 75 bool i_bReverseName ); 76 void Parse_SglAttr( 77 Simstr & o_sAttrValue, 78 const Simstr & i_sElementName, 79 const Simstr & i_sAttrName ); 80 void Parse_MultipleAttr( 81 List<Simstr> & o_rAttrValues, 82 const Simstr & i_sElementName, 83 const List<Simstr> & 84 i_rAttrNames ); 85 86 private: 87 void Parse_XmlDeclaration(); 88 void Parse_Doctype(); 89 90 void Get_Attribute( 91 Simstr & o_rAttrValue, 92 Simstr & o_rAttrName ); 93 bool IsText( 94 const char * i_sComparedText ); 95 bool IsBeginTag( 96 const char * i_sTagName ); 97 bool IsEndTag( 98 const char * i_sTagName ); 99 void Goto( 100 char i_cNext ); 101 void Goto_And_Pass( 102 char i_cNext ); 103 void Move( 104 int i_nForward ); 105 void Pass_White(); 106 void GetTextTill( 107 Simstr & o_rText, 108 char i_cEnd, 109 bool i_bReverseName = false ); 110 /// @return false in case of empty tag with no attributes. 111 bool CheckAndPassBeginTag( 112 const char * i_sElementName ); 113 void CheckAndPassEndTag( 114 const char * i_sElementName ); 115 /// @precond IsBeginTag() == true. 116 bool IsAbsoluteEmpty() const; 117 118 119 void SyntaxError( 120 const char * i_sText ); 121 void TestCurChar(); 122 123 // DATA 124 Simstr sFileName; 125 unsigned nFileLine; 126 127 Buffer aFile; 128 XmlElement * pDocumentData; 129 130 char sWord[8192]; 131 const char * text; 132 }; 133 134 135 136 // IMPLEMENTATION 137 138 #endif 139 140