Overview
Comment: | Add -[xmlParser:foundUnknownEntityNamed:] to OFXMLParserDelegate. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
83c351c9fd8f3e14430ea327b3e06d34 |
User & Date: | js on 2009-07-19 20:39:07 |
Other Links: | manifest | tags |
Context
2009-07-20
| ||
18:39 | Add support for C strings encoded in ISO 8859-15. check-in: 0ea758cd9c user: js tags: trunk | |
2009-07-19
| ||
20:39 | Add -[xmlParser:foundUnknownEntityNamed:] to OFXMLParserDelegate. check-in: 83c351c9fd user: js tags: trunk | |
18:14 | Add support for C strings encoded in ISO 8859-1. check-in: 8216fb9343 user: js tags: trunk | |
Changes
Modified src/OFXMLParser.h from [46733a7e27] to [b01ef202a5].
︙ | ︙ | |||
25 26 27 28 29 30 31 32 33 | attributes: (OFDictionary*)attrs; - (BOOL)xmlParser: (OFXMLParser*)parser didEndTagWithName: (OFString*)name prefix: (OFString*)prefix namespace: (OFString*)ns; - (BOOL)xmlParser: (OFXMLParser*)parser foundString: (OFString*)string; @end | > > > > > > | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | attributes: (OFDictionary*)attrs; - (BOOL)xmlParser: (OFXMLParser*)parser didEndTagWithName: (OFString*)name prefix: (OFString*)prefix namespace: (OFString*)ns; - (BOOL)xmlParser: (OFXMLParser*)parser foundString: (OFString*)string; - (OFString*)xmlParser: (OFXMLParser*)parser foundUnknownEntityNamed: (OFString*)entity; @end @protocol OFXMLUnescapingDelegate - (OFString*)foundUnknownEntityNamed: (OFString*)entitiy; @end @interface OFXMLParser: OFObject <OFXMLUnescapingDelegate> { OFObject <OFXMLParserDelegate> *delegate; enum { OF_XMLPARSER_OUTSIDE_TAG, OF_XMLPARSER_TAG_OPENED, OF_XMLPARSER_IN_TAG_NAME, OF_XMLPARSER_IN_CLOSE_TAG_NAME, |
︙ | ︙ | |||
58 59 60 61 62 63 64 | + xmlParser; - (id)delegate; - setDelegate: (OFObject <OFXMLParserDelegate>*)delegate; - parseBuffer: (const char*)buf withSize: (size_t)size; @end | < < < < | 64 65 66 67 68 69 70 71 72 73 74 | + xmlParser; - (id)delegate; - setDelegate: (OFObject <OFXMLParserDelegate>*)delegate; - parseBuffer: (const char*)buf withSize: (size_t)size; @end @interface OFString (OFXMLUnescaping) - stringByXMLUnescaping; - stringByXMLUnescapingWithHandler: (OFObject <OFXMLUnescapingDelegate>*)h; @end |
Modified src/OFXMLParser.m from [47f877a838] to [8b1f567d63].
︙ | ︙ | |||
86 87 88 89 90 91 92 93 94 95 96 97 98 99 | } return self; } - (void)dealloc { [cache release]; [name release]; [prefix release]; [ns release]; [attrs release]; [attr_name release]; | > > | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | } return self; } - (void)dealloc { [delegate release]; [cache release]; [name release]; [prefix release]; [ns release]; [attrs release]; [attr_name release]; |
︙ | ︙ | |||
132 133 134 135 136 137 138 | [cache appendCString: buf + last withLength: len]; if ([cache length] > 0) { OFString *str; pool = [[OFAutoreleasePool alloc] init]; | | > > | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | [cache appendCString: buf + last withLength: len]; if ([cache length] > 0) { OFString *str; pool = [[OFAutoreleasePool alloc] init]; str = [cache stringByXMLUnescapingWithHandler: self]; [delegate xmlParser: self foundString: str]; [pool release]; } |
︙ | ︙ | |||
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | last = i + 1; state = OF_XMLPARSER_IN_ATTR_VALUE; break; /* Looking for attribute value */ case OF_XMLPARSER_IN_ATTR_VALUE: if (buf[i] == delim) { len = i - last; if (len > 0) [cache appendCString: buf + last withLength: len]; if (attrs == nil) attrs = [[OFMutableDictionary alloc] init]; pool = [[OFAutoreleasePool alloc] init]; | > > > > | | 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 | last = i + 1; state = OF_XMLPARSER_IN_ATTR_VALUE; break; /* Looking for attribute value */ case OF_XMLPARSER_IN_ATTR_VALUE: if (buf[i] == delim) { OFString *attr_val; len = i - last; if (len > 0) [cache appendCString: buf + last withLength: len]; if (attrs == nil) attrs = [[OFMutableDictionary alloc] init]; pool = [[OFAutoreleasePool alloc] init]; attr_val = [cache stringByXMLUnescapingWithHandler: self]; [attrs setObject: attr_val forKey: attr_name]; [pool release]; [cache setToCString: ""]; [attr_name release]; last = i + 1; |
︙ | ︙ | |||
390 391 392 393 394 395 396 397 398 399 400 401 402 403 | /* In OF_XMLPARSER_IN_TAG, there can be only spaces */ if (len > 0 && state != OF_XMLPARSER_IN_TAG) [cache appendCString: buf + last withLength: len]; return self; } @end @implementation OFString (OFXMLUnescaping) - stringByXMLUnescaping { return [self stringByXMLUnescapingWithHandler: nil]; } | > > > > > > | 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 | /* In OF_XMLPARSER_IN_TAG, there can be only spaces */ if (len > 0 && state != OF_XMLPARSER_IN_TAG) [cache appendCString: buf + last withLength: len]; return self; } - (OFString*)foundUnknownEntityNamed: (OFString*)entity { return [delegate xmlParser: self foundUnknownEntityNamed: entity]; } @end @implementation OFString (OFXMLUnescaping) - stringByXMLUnescaping { return [self stringByXMLUnescapingWithHandler: nil]; } |
︙ | ︙ |
Modified tests/OFXMLParser/OFXMLParser.m from [b3f4a79e63] to [5db627fdbd].
︙ | ︙ | |||
64 65 66 67 68 69 70 71 72 73 74 75 76 | - (BOOL)xmlParser: (OFXMLParser*)parser foundString: (OFString*)string { printf("STRING\n\"%s\"\n\n", [string cString]); return YES; } @end int main() { const char *foo = "bar<foo:bar bar='b&az' qux=\"quux\">foo<bar" | > > > > > > > > > | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | - (BOOL)xmlParser: (OFXMLParser*)parser foundString: (OFString*)string { printf("STRING\n\"%s\"\n\n", [string cString]); return YES; } - (OFString*)xmlParser: (OFXMLParser*)parser foundUnknownEntityNamed: (OFString*)entity { if ([entity isEqual: @"foo"]) return @"foobar"; return nil; } @end int main() { const char *foo = "bar<foo:bar bar='b&az' qux=\"quux\">foo<bar" "<qux >bar<baz name='' test='&foo;'/>quxbar</xasd>"; size_t len = strlen(foo); size_t i; OFXMLParser *parser = [OFXMLParser xmlParser]; [parser setDelegate: [[ParserDelegate alloc] init]]; /* Simulate a stream where we only get chunks */ |
︙ | ︙ |