]> err.no Git - sope/blob - sope-appserver/WEExtensions/WExExtElemBuilder.m
milli => micro
[sope] / sope-appserver / WEExtensions / WExExtElemBuilder.m
1 /*
2   Copyright (C) 2000-2004 SKYRIX Software AG
3
4   This file is part of OpenGroupware.org.
5
6   OGo 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
9   later version.
10
11   OGo 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.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with OGo; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21 // $Id$
22
23 #include <NGObjWeb/WOxElemBuilder.h>
24
25 /*
26   This builder builds various elements from the WEExtensions library.
27   Note that there are other builders for WEExtensions elements as well !!
28
29   All tags are mapped into the <var:> namespace (XMLNS_OD_BIND).
30
31   Supported tags:
32     <var:js-clipboard .../> maps to JSClipboard
33     <var:js-menu .../>      maps to JSMenu
34     <var:js-menu-item .../> maps to JSMenuItem
35     <var:js-shiftclick ../> maps to JSShiftClick
36
37     <var:rich-string .../>  maps to WERichString
38     <var:we-browser .../>   maps to WEBrowser
39     <var:cal-field .../>    maps to WECalendarField
40     <var:date-field .../>   maps to WEDateField
41     <var:time-field .../>   maps to WETimeField
42     
43     <var:script-datefield/> maps to WEDateFieldScript
44     
45     <var:tableview .../>    maps to WETableView
46     <var:tbutton   .../>    maps to WETableViewButtonMode
47     <var:ttitle    .../>    maps to WETableViewTitleMode
48     <var:tfooter   .../>    maps to WETableViewFooterMode
49     <var:tgroup    .../>    maps to WETableViewGroupMode
50     <var:td        .../>    maps to WETableData
51     <var:th        .../>    maps to WETableHeader
52     
53     <var:tabview   .../>    maps to WETabView
54     <var:tab       .../>    maps to WETabItem
55
56     <var:pageview  .../>    maps to WEPageView
57     <var:page      .../>    maps to WEPageItem
58     <var:pagelink  .../>    maps to WEPageLink
59     
60     <var:we-collapsible .../>  maps to WECollapsibleComponentContent
61     <var:we-collapsible-action .../> maps to WECollapsibleAction
62     <var:we-collapsible-title  .../> maps to WECollapsibleTitleMode
63     <var:we-collapsible-content  .../> maps to WECollapsibleContentMode
64
65     <var:switch    .../>    maps to WESwitch
66     <var:case      .../>    maps to WECase
67     <var:default   .../>    maps to WEDefaultCase
68
69     <var:treeview  .../>    maps to WETreeView
70     <var:tree-header .../>  maps to WETreeHeader
71     <var:tree-data   .../>  maps to WETreeData
72
73     <var:hspan-matrix .../> maps to WEHSpanTableMatrix
74     <var:vspan-matrix .../> maps to WEVSpanTableMatrix
75     <var:matrix-cell  .../> maps to WETableMatrixContent
76     <var:matrix-empty .../> maps to WETableMatrixNoContent
77     <var:matrix-label .../> maps to WETableMatrixLabel
78
79     <var:if-ctx-key   .../> maps to WEContextConditional
80     <var:ctx-key      .../> maps to WEContextKey
81     <var:if-qualifier .../> maps to WEQualifierConditional
82
83     <var:redirect    .../>  maps to WERedirect
84     
85     WEComponentValue : WODynamicElement
86 */
87
88 @interface WExExtElemBuilder : WOxTagClassElemBuilder
89 {
90 }
91
92 @end
93
94 #include <SaxObjC/XMLNamespaces.h>
95 #include "common.h"
96
97 @implementation WExExtElemBuilder
98
99 - (Class)classForElement:(id<DOMElement>)_element {
100   NSString *tagName;
101   unsigned tl;
102   unichar c1;
103   
104   if (![[_element namespaceURI] isEqualToString:XMLNS_OD_BIND])
105     return Nil;
106   
107   tagName = [_element tagName];
108   if ((tl = [tagName length]) < 2)
109     return Nil;
110
111   c1 = [tagName characterAtIndex:0];
112
113   switch (c1) {
114     case 'c': /* starting with 'c' */
115       if (tl > 8) {
116         if ([tagName isEqualToString:@"cal-field"])
117           return NSClassFromString(@"WECalendarField");
118       }
119       else if (tl > 3) {
120         if ([tagName isEqualToString:@"case"])
121           return NSClassFromString(@"WECase");
122         if ([tagName isEqualToString:@"ctx-key"])
123           return NSClassFromString(@"WEContextKey");
124       }
125       break;
126
127     case 'd':
128       if (tl > 8) {
129         if ([tagName isEqualToString:@"date-field"])
130           return NSClassFromString(@"WEDateField");
131       }
132       else if (tl > 6) {
133         if ([tagName isEqualToString:@"default"])
134           return NSClassFromString(@"WEDefaultCase");
135       }
136       break;
137
138     case 'h':
139       if (tl == 12) {
140         if ([tagName isEqualToString:@"hspan-matrix"])
141           return NSClassFromString(@"WEHSpanTableMatrix");
142       }
143       break;
144
145     case 'i':
146       if (tl == 10) {
147         if ([tagName isEqualToString:@"if-ctx-key"])
148           return NSClassFromString(@"WEContextConditional");
149       }
150       if (tl == 12) {
151         if ([tagName isEqualToString:@"if-qualifier"])
152           return NSClassFromString(@"WEQualifierConditional");
153       }
154       break;
155       
156     case 'j': /* starting with 'j' */
157       if ([tagName hasPrefix:@"js-"]) {
158         if (tl < 6) return Nil;
159         
160         if ([tagName isEqualToString:@"js-clipboard"])
161           return NSClassFromString(@"JSClipboard");
162         if ([tagName isEqualToString:@"js-menu"])
163           return NSClassFromString(@"JSMenu");
164         if ([tagName isEqualToString:@"js-menu-item"])
165           return NSClassFromString(@"JSMenuItem");
166         
167         if ([tagName isEqualToString:@"js-shiftclick"])
168           return NSClassFromString(@"JSShiftClick");
169       }
170       break;
171
172     case 'm':
173       if (tl == 11) {
174         if ([tagName isEqualToString:@"matrix-cell"])
175           return NSClassFromString(@"WETableMatrixContent");
176       }
177       else if (tl == 12) {
178         if ([tagName isEqualToString:@"matrix-empty"])
179           return NSClassFromString(@"WETableMatrixNoContent");
180         if ([tagName isEqualToString:@"matrix-label"])
181           return NSClassFromString(@"WETableMatrixLabel");
182       }
183       break;
184       
185     case 'p':
186       if (tl > 3) {
187         if (tl == 8 && [tagName isEqualToString:@"pagelink"])
188           return NSClassFromString(@"WEPageLink");
189         if (tl == 4 && [tagName isEqualToString:@"page"])
190           return NSClassFromString(@"WEPageItem");
191         if (tl == 8 && [tagName isEqualToString:@"pageview"])
192           return NSClassFromString(@"WEPageView");
193       }
194       break;
195
196     case 'r': /* starting with 'r' */
197       if (tl > 8) {
198         if ([tagName isEqualToString:@"rich-string"])
199           return NSClassFromString(@"WERichString");
200       }
201       if (tl == 8) {
202         if ([tagName isEqualToString:@"redirect"])
203           return NSClassFromString(@"WERedirect");
204       }
205       break;
206       
207     case 's': /* starting with 's' */
208       if (tl > 10) {
209         if ([tagName isEqualToString:@"script-datefield"])
210           return NSClassFromString(@"WEDateFieldScript");
211       }
212       else if (tl > 5) {
213         if ([tagName isEqualToString:@"switch"])
214           return NSClassFromString(@"WESwitch");
215       }
216       break;
217
218     case 't': { /* starting with 't' */
219       unichar c2;
220       
221       c2 = [tagName characterAtIndex:1];
222       
223       if (tl == 2) {
224         if (c2 == 'd') return NSClassFromString(@"WETableData");
225         if (c2 == 'h') return NSClassFromString(@"WETableHeader");
226       }
227       if (tl == 3 && c2 == 'a') {
228         if ([tagName characterAtIndex:2] == 'b')
229           return NSClassFromString(@"WETabItem");
230       }
231
232       if (tl > 5) {
233         if (c2 == 'a') {
234           if ([tagName isEqualToString:@"tableview"])
235             return NSClassFromString(@"WETableView");
236         
237           if ([tagName isEqualToString:@"tabview"])
238             return NSClassFromString(@"WETabView");
239         }
240         if (c2 == 'r' && tl > 7) {
241           if ([tagName isEqualToString:@"tree-data"])
242             return NSClassFromString(@"WETreeData");
243           if ([tagName isEqualToString:@"treeview"])
244             return NSClassFromString(@"WETreeView");
245           if ([tagName isEqualToString:@"tree-header"])
246             return NSClassFromString(@"WETreeHeader");
247         }
248         
249         if ([tagName isEqualToString:@"tbutton"])
250           return NSClassFromString(@"WETableViewButtonMode");
251         if ([tagName isEqualToString:@"ttitle"])
252           return NSClassFromString(@"WETableViewTitleMode");
253         if ([tagName isEqualToString:@"tfooter"])
254           return NSClassFromString(@"WETableViewFooterMode");
255         if ([tagName isEqualToString:@"tgroup"])
256           return NSClassFromString(@"WETableViewGroupMode");
257
258         if ([tagName isEqualToString:@"time-field"])
259           return NSClassFromString(@"WETimeField");
260       }
261       break;
262     }
263
264     case 'v':
265       if (tl == 12) {
266         if ([tagName isEqualToString:@"vspan-matrix"])
267           return NSClassFromString(@"WEVSpanTableMatrix");
268       }
269       break;
270
271     case 'w':
272       if (tl > 8) {
273         if ([tagName isEqualToString:@"we-browser"])
274           return NSClassFromString(@"WEBrowser");
275         
276         if ([tagName hasPrefix:@"we-collapsible"]) {
277           if (tl == 14)
278             return NSClassFromString(@"WECollapsibleComponentContent");
279           
280           if ([tagName isEqualToString:@"we-collapsible-action"])
281             return NSClassFromString(@"WECollapsibleAction");
282           if ([tagName isEqualToString:@"we-collapsible-title"])
283             return NSClassFromString(@"WECollapsibleTitleMode");
284           if ([tagName isEqualToString:@"we-collapsible-content"])
285             return NSClassFromString(@"WECollapsibleContentMode");
286         }
287       }
288       break;
289   }
290   
291   return Nil;
292 }
293
294 @end /* WExExtElemBuilder */