00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #import "OFObject.h"
00018 #import "OFString.h"
00019 #import "OFXMLAttribute.h"
00020
00021 @class OFXMLParser;
00022 @class OFArray;
00023 @class OFMutableArray;
00024 @class OFStream;
00025
00026 #if defined(OF_HAVE_PROPERTIES) && defined(OF_HAVE_BLOCKS)
00027 typedef void (^of_xml_parser_processing_instructions_block_t)(
00028 OFXMLParser *parser, OFString *pi);
00029 typedef void (^of_xml_parser_element_start_block_t)(OFXMLParser *parser,
00030 OFString *name, OFString *prefix, OFString *ns, OFArray *attrs);
00031 typedef void (^of_xml_parser_element_end_block_t)(OFXMLParser *parser,
00032 OFString *name, OFString *prefix, OFString *ns);
00033 typedef void (^of_xml_parser_string_block_t)(OFXMLParser *parser,
00034 OFString *string);
00035 typedef OFString* (^of_xml_parser_unknown_entity_block_t)(OFXMLParser *parser,
00036 OFString *entity);
00037 #endif
00038
00042 @protocol OFXMLParserDelegate
00049 - (void)parser: (OFXMLParser*)parser
00050 foundProcessingInstructions: (OFString*)pi;
00051
00061 - (void)parser: (OFXMLParser*)parser
00062 didStartElement: (OFString*)name
00063 withPrefix: (OFString*)prefix
00064 namespace: (OFString*)ns
00065 attributes: (OFArray*)attrs;
00066
00075 - (void)parser: (OFXMLParser*)parser
00076 didEndElement: (OFString*)name
00077 withPrefix: (OFString*)prefix
00078 namespace: (OFString*)ns;
00079
00089 - (void)parser: (OFXMLParser*)parser
00090 foundCharacters: (OFString*)string;
00091
00098 - (void)parser: (OFXMLParser*)parser
00099 foundCDATA: (OFString*)cdata;
00100
00107 - (void)parser: (OFXMLParser*)parser
00108 foundComment: (OFString*)comment;
00109
00120 - (OFString*)parser: (OFXMLParser*)parser
00121 foundUnknownEntityNamed: (OFString*)entity;
00122 @end
00123
00130 @interface OFXMLParser: OFObject <OFStringXMLUnescapingDelegate>
00131 {
00132 id <OFXMLParserDelegate> delegate;
00133 enum {
00134 OF_XMLPARSER_OUTSIDE_TAG,
00135 OF_XMLPARSER_TAG_OPENED,
00136 OF_XMLPARSER_IN_PROCESSING_INSTRUCTIONS,
00137 OF_XMLPARSER_IN_TAG_NAME,
00138 OF_XMLPARSER_IN_CLOSE_TAG_NAME,
00139 OF_XMLPARSER_IN_TAG,
00140 OF_XMLPARSER_IN_ATTR_NAME,
00141 OF_XMLPARSER_EXPECT_DELIM,
00142 OF_XMLPARSER_IN_ATTR_VALUE,
00143 OF_XMLPARSER_EXPECT_CLOSE,
00144 OF_XMLPARSER_EXPECT_SPACE_OR_CLOSE,
00145 OF_XMLPARSER_IN_EXCLAMATIONMARK,
00146 OF_XMLPARSER_IN_CDATA_OPENING,
00147 OF_XMLPARSER_IN_CDATA_1,
00148 OF_XMLPARSER_IN_CDATA_2,
00149 OF_XMLPARSER_IN_COMMENT_OPENING,
00150 OF_XMLPARSER_IN_COMMENT_1,
00151 OF_XMLPARSER_IN_COMMENT_2,
00152 OF_XMLPARSER_IN_DOCTYPE,
00153 OF_XMLPARSER_NUM_STATES
00154 } state;
00155 OFMutableString *cache;
00156 OFString *name;
00157 OFString *prefix;
00158 OFMutableArray *namespaces;
00159 OFMutableArray *attrs;
00160 OFString *attrName;
00161 OFString *attrPrefix;
00162 char delim;
00163 OFMutableArray *previous;
00164 #if defined(OF_HAVE_PROPERTIES) && defined(OF_HAVE_BLOCKS)
00165 of_xml_parser_processing_instructions_block_t
00166 processingInstructionsHandler;
00167 of_xml_parser_element_start_block_t elementStartHandler;
00168 of_xml_parser_element_end_block_t elementEndHandler;
00169 of_xml_parser_string_block_t charactersHandler;
00170 of_xml_parser_string_block_t CDATAHandler;
00171 of_xml_parser_string_block_t commentHandler;
00172 of_xml_parser_unknown_entity_block_t unknownEntityHandler;
00173 #endif
00174 size_t level;
00175 size_t lineNumber;
00176 BOOL lastCarriageReturn;
00177 BOOL finishedParsing;
00178 }
00179
00180 #ifdef OF_HAVE_PROPERTIES
00181 @property (retain) id <OFXMLParserDelegate> delegate;
00182 # ifdef OF_HAVE_BLOCKS
00183 @property (copy) of_xml_parser_processing_instructions_block_t
00184 processingInstructionsHandler;
00185 @property (copy) of_xml_parser_element_start_block_t elementStartHandler;
00186 @property (copy) of_xml_parser_element_end_block_t elementEndHandler;
00187 @property (copy) of_xml_parser_string_block_t charactersHandler;
00188 @property (copy) of_xml_parser_string_block_t CDATAHandler;
00189 @property (copy) of_xml_parser_string_block_t commentHandler;
00190 @property (copy) of_xml_parser_unknown_entity_block_t unknownEntityHandler;
00191 # endif
00192 #endif
00193
00197 + parser;
00198
00202 - (id <OFXMLParserDelegate>)delegate;
00203
00209 - (void)setDelegate: (id <OFXMLParserDelegate>)delegate;
00210
00211 #if defined(OF_HAVE_PROPERTIES) && defined(OF_HAVE_BLOCKS)
00212
00215 - (of_xml_parser_processing_instructions_block_t)processingInstructionsHandler;
00216
00222 - (void)setProcessingInstructionsHandler:
00223 (of_xml_parser_processing_instructions_block_t)block;
00224
00228 - (of_xml_parser_element_start_block_t)elementStartHandler;
00229
00235 - (void)setElementStartHandler: (of_xml_parser_element_start_block_t)block;
00236
00240 - (of_xml_parser_element_end_block_t)elementEndHandler;
00241
00247 - (void)setElementEndHandler: (of_xml_parser_element_end_block_t)block;
00248
00252 - (of_xml_parser_string_block_t)charactersHandler;
00253
00259 - (void)setCharactersHandler: (of_xml_parser_string_block_t)block;
00260
00264 - (of_xml_parser_string_block_t)CDATAHandler;
00265
00271 - (void)setCDATAHandler: (of_xml_parser_string_block_t)block;
00272
00276 - (of_xml_parser_string_block_t)commentHandler;
00277
00283 - (void)setCommentHandler: (of_xml_parser_string_block_t)block;
00284
00288 - (of_xml_parser_unknown_entity_block_t)unknownEntityHandler;
00289
00295 - (void)setUnknownEntityHandler: (of_xml_parser_unknown_entity_block_t)block;
00296 #endif
00297
00304 - (void)parseBuffer: (const char*)buf
00305 withSize: (size_t)size;
00306
00312 - (void)parseString: (OFString*)str;
00313
00319 - (void)parseStream: (OFStream*)stream;
00320
00326 - (void)parseFile: (OFString*)path;
00327
00331 - (size_t)lineNumber;
00332
00336 - (BOOL)finishedParsing;
00337 @end
00338
00339 @interface OFObject (OFXMLParserDelegate) <OFXMLParserDelegate>
00340 @end