20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
-
+
-
+
-
+
-
+
|
OF_ASSUME_NONNULL_BEGIN
@class OFMutableArray OF_GENERIC(ObjectType);
@class OFXMLElement;
@class OFXMLElementBuilder;
/*!
/**
* @protocol OFXMLElementBuilderDelegate
* OFXMLElementBuilder.h ObjFW/OFXMLElementBuilder.h
*
* @brief A protocol that needs to be implemented by delegates for
* OFXMLElementBuilder.
*/
@protocol OFXMLElementBuilderDelegate <OFObject>
/*!
/**
* @brief This callback is called when the OFXMLElementBuilder built an element.
*
* If the OFXMLElementBuilder was used as a delegate for the OFXMLParser since
* parsing started, this will return the complete document as an OFXMLElement
* with all children.
*
* @param builder The builder which built an OFXMLElement
* @param element The OFXMLElement the OFXMLElementBuilder built
*/
- (void)elementBuilder: (OFXMLElementBuilder *)builder
didBuildElement: (OFXMLElement *)element;
@optional
/*!
/**
* @brief This callback is called when the OFXMLElementBuilder built an
* OFXMLNode which is not inside an element.
*
* This is usually called for comments or whitespace character data before the
* root element.
*
* @param builder The builder which built the OFXMLNode without parent
* @param node The OFXMLNode the OFXMLElementBuilder built
*/
- (void)elementBuilder: (OFXMLElementBuilder *)builder
didBuildParentlessNode: (OFXMLNode *)node;
/*!
/**
* @brief This callback is called when the OFXMLElementBuilder gets a close tag
* which does not belong there.
*
* Most likely, the OFXMLElementBuilder was used to build XML only of a child
* of the root element and the root element was closed. Often the delegate is
* set to the OFXMLElementBuilder when a certain element is found, this can be
* used then to set the delegate back after that certain element has been
|
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
-
+
-
+
-
+
-
+
-
+
|
* @param namespace_ The namespace of the close tag
*/
- (void)elementBuilder: (OFXMLElementBuilder *)builder
didNotExpectCloseTag: (OFString *)name
prefix: (nullable OFString *)prefix
namespace: (nullable OFString *)namespace_;
/*!
/**
* @brief This callback is called when the XML parser for the element builder
* found an unknown entity.
*
* @param builder The element builder which found an unknown entity
* @param entity The name of the entity
* @return The substitution for the entity
*/
- (OFString *)elementBuilder: (OFXMLElementBuilder *)builder
foundUnknownEntityNamed: (OFString *)entity;
@end
/*!
/**
* @class OFXMLElementBuilder OFXMLElementBuilder.h ObjFW/OFXMLElementBuilder.h
*
* @brief A class implementing the OFXMLParserDelegate protocol that can build
* OFXMLElements from the document parsed by the OFXMLParser.
*
* It can also be used to build OFXMLElements from parts of the document by
* first parsing stuff using the OFXMLParser with another delegate and then
* setting the OFXMLElementBuilder as delegate for the parser.
*/
@interface OFXMLElementBuilder: OFObject <OFXMLParserDelegate>
{
OFMutableArray OF_GENERIC(OFXMLElement *) *_stack;
id <OFXMLElementBuilderDelegate> _Nullable _delegate;
OF_RESERVE_IVARS(4)
OF_RESERVE_IVARS(OFXMLElementBuilder, 4)
}
/*!
/**
* @brief The delegate for the OFXMLElementBuilder.
*/
@property OF_NULLABLE_PROPERTY (assign, nonatomic)
id <OFXMLElementBuilderDelegate> delegate;
/*!
/**
* @brief Creates a new element builder.
*
* @return A new, autoreleased OFXMLElementBuilder
*/
+ (instancetype)elementBuilder;
@end
OF_ASSUME_NONNULL_END
|