2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
6 SOPE is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with SOPE; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 #include <NGObjWeb/WOxElemBuilder.h>
25 This builder builds various elements from the WEExtensions library.
26 Note that there are other builders for WEExtensions elements as well !!
28 All tags are mapped into the <var:> namespace (XMLNS_OD_BIND).
31 <var:js-clipboard .../> maps to JSClipboard
32 <var:js-menu .../> maps to JSMenu
33 <var:js-menu-item .../> maps to JSMenuItem
34 <var:js-shiftclick ../> maps to JSShiftClick
36 <var:rich-string .../> maps to WERichString
37 <var:we-browser .../> maps to WEBrowser
38 <var:cal-field .../> maps to WECalendarField
39 <var:date-field .../> maps to WEDateField
40 <var:time-field .../> maps to WETimeField
42 <var:script-datefield/> maps to WEDateFieldScript
44 <var:tableview .../> maps to WETableView
45 <var:tbutton .../> maps to WETableViewButtonMode
46 <var:ttitle .../> maps to WETableViewTitleMode
47 <var:tfooter .../> maps to WETableViewFooterMode
48 <var:tgroup .../> maps to WETableViewGroupMode
49 <var:td .../> maps to WETableData
50 <var:th .../> maps to WETableHeader
52 <var:tabview .../> maps to WETabView
53 <var:tab .../> maps to WETabItem
55 <var:pageview .../> maps to WEPageView
56 <var:page .../> maps to WEPageItem
57 <var:pagelink .../> maps to WEPageLink
59 <var:we-collapsible .../> maps to WECollapsibleComponentContent
60 <var:we-collapsible-action .../> maps to WECollapsibleAction
61 <var:we-collapsible-title .../> maps to WECollapsibleTitleMode
62 <var:we-collapsible-content .../> maps to WECollapsibleContentMode
64 <var:switch .../> maps to WESwitch
65 <var:case .../> maps to WECase
66 <var:default .../> maps to WEDefaultCase
68 <var:treeview .../> maps to WETreeView
69 <var:tree-header .../> maps to WETreeHeader
70 <var:tree-data .../> maps to WETreeData
72 <var:hspan-matrix .../> maps to WEHSpanTableMatrix
73 <var:vspan-matrix .../> maps to WEVSpanTableMatrix
74 <var:matrix-cell .../> maps to WETableMatrixContent
75 <var:matrix-empty .../> maps to WETableMatrixNoContent
76 <var:matrix-label .../> maps to WETableMatrixLabel
78 <var:if-ctx-key .../> maps to WEContextConditional
79 <var:ctx-key .../> maps to WEContextKey
80 <var:if-qualifier .../> maps to WEQualifierConditional
82 <var:redirect .../> maps to WERedirect
84 WEComponentValue : WODynamicElement
87 @interface WExExtElemBuilder : WOxTagClassElemBuilder
93 #include <SaxObjC/XMLNamespaces.h>
96 @implementation WExExtElemBuilder
98 - (Class)classForElement:(id<DOMElement>)_element {
103 if (![[_element namespaceURI] isEqualToString:XMLNS_OD_BIND])
106 tagName = [_element tagName];
107 if ((tl = [tagName length]) < 2)
110 c1 = [tagName characterAtIndex:0];
113 case 'c': /* starting with 'c' */
115 if ([tagName isEqualToString:@"cal-field"])
116 return NSClassFromString(@"WECalendarField");
119 if ([tagName isEqualToString:@"case"])
120 return NSClassFromString(@"WECase");
121 if ([tagName isEqualToString:@"ctx-key"])
122 return NSClassFromString(@"WEContextKey");
128 if ([tagName isEqualToString:@"date-field"])
129 return NSClassFromString(@"WEDateField");
132 if ([tagName isEqualToString:@"default"])
133 return NSClassFromString(@"WEDefaultCase");
139 if ([tagName isEqualToString:@"hspan-matrix"])
140 return NSClassFromString(@"WEHSpanTableMatrix");
146 if ([tagName isEqualToString:@"if-ctx-key"])
147 return NSClassFromString(@"WEContextConditional");
150 if ([tagName isEqualToString:@"if-qualifier"])
151 return NSClassFromString(@"WEQualifierConditional");
155 case 'j': /* starting with 'j' */
156 if ([tagName hasPrefix:@"js-"]) {
157 if (tl < 6) return Nil;
159 if ([tagName isEqualToString:@"js-clipboard"])
160 return NSClassFromString(@"JSClipboard");
161 if ([tagName isEqualToString:@"js-menu"])
162 return NSClassFromString(@"JSMenu");
163 if ([tagName isEqualToString:@"js-menu-item"])
164 return NSClassFromString(@"JSMenuItem");
166 if ([tagName isEqualToString:@"js-shiftclick"])
167 return NSClassFromString(@"JSShiftClick");
173 if ([tagName isEqualToString:@"matrix-cell"])
174 return NSClassFromString(@"WETableMatrixContent");
177 if ([tagName isEqualToString:@"matrix-empty"])
178 return NSClassFromString(@"WETableMatrixNoContent");
179 if ([tagName isEqualToString:@"matrix-label"])
180 return NSClassFromString(@"WETableMatrixLabel");
186 if (tl == 8 && [tagName isEqualToString:@"pagelink"])
187 return NSClassFromString(@"WEPageLink");
188 if (tl == 4 && [tagName isEqualToString:@"page"])
189 return NSClassFromString(@"WEPageItem");
190 if (tl == 8 && [tagName isEqualToString:@"pageview"])
191 return NSClassFromString(@"WEPageView");
195 case 'r': /* starting with 'r' */
197 if ([tagName isEqualToString:@"rich-string"])
198 return NSClassFromString(@"WERichString");
201 if ([tagName isEqualToString:@"redirect"])
202 return NSClassFromString(@"WERedirect");
206 case 's': /* starting with 's' */
208 if ([tagName isEqualToString:@"script-datefield"])
209 return NSClassFromString(@"WEDateFieldScript");
212 if ([tagName isEqualToString:@"switch"])
213 return NSClassFromString(@"WESwitch");
217 case 't': { /* starting with 't' */
220 c2 = [tagName characterAtIndex:1];
223 if (c2 == 'd') return NSClassFromString(@"WETableData");
224 if (c2 == 'h') return NSClassFromString(@"WETableHeader");
226 if (tl == 3 && c2 == 'a') {
227 if ([tagName characterAtIndex:2] == 'b')
228 return NSClassFromString(@"WETabItem");
233 if ([tagName isEqualToString:@"tableview"])
234 return NSClassFromString(@"WETableView");
236 if ([tagName isEqualToString:@"tabview"])
237 return NSClassFromString(@"WETabView");
239 if (c2 == 'r' && tl > 7) {
240 if ([tagName isEqualToString:@"tree-data"])
241 return NSClassFromString(@"WETreeData");
242 if ([tagName isEqualToString:@"treeview"])
243 return NSClassFromString(@"WETreeView");
244 if ([tagName isEqualToString:@"tree-header"])
245 return NSClassFromString(@"WETreeHeader");
248 if ([tagName isEqualToString:@"tbutton"])
249 return NSClassFromString(@"WETableViewButtonMode");
250 if ([tagName isEqualToString:@"ttitle"])
251 return NSClassFromString(@"WETableViewTitleMode");
252 if ([tagName isEqualToString:@"tfooter"])
253 return NSClassFromString(@"WETableViewFooterMode");
254 if ([tagName isEqualToString:@"tgroup"])
255 return NSClassFromString(@"WETableViewGroupMode");
257 if ([tagName isEqualToString:@"time-field"])
258 return NSClassFromString(@"WETimeField");
265 if ([tagName isEqualToString:@"vspan-matrix"])
266 return NSClassFromString(@"WEVSpanTableMatrix");
272 if ([tagName isEqualToString:@"we-browser"])
273 return NSClassFromString(@"WEBrowser");
275 if ([tagName hasPrefix:@"we-collapsible"]) {
277 return NSClassFromString(@"WECollapsibleComponentContent");
279 if ([tagName isEqualToString:@"we-collapsible-action"])
280 return NSClassFromString(@"WECollapsibleAction");
281 if ([tagName isEqualToString:@"we-collapsible-title"])
282 return NSClassFromString(@"WECollapsibleTitleMode");
283 if ([tagName isEqualToString:@"we-collapsible-content"])
284 return NSClassFromString(@"WECollapsibleContentMode");
293 @end /* WExExtElemBuilder */