]> err.no Git - sope/blob - sope-appserver/WEExtensions/WExExtElemBuilder.m
added strict OSX bundle dependencies
[sope] / sope-appserver / WEExtensions / WExExtElemBuilder.m
1 /*
2   Copyright (C) 2000-2005 SKYRIX Software AG
3
4   This file is part of SOPE.
5
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
9   later version.
10
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.
15
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
19   02111-1307, USA.
20 */
21
22 #include <NGObjWeb/WOxElemBuilder.h>
23
24 /*
25   This builder builds various elements from the WEExtensions library.
26   Note that there are other builders for WEExtensions elements as well !!
27
28   All tags are mapped into the <var:> namespace (XMLNS_OD_BIND).
29
30   Supported tags:
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
35
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
41     
42     <var:script-datefield/> maps to WEDateFieldScript
43     
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
51     
52     <var:tabview   .../>    maps to WETabView
53     <var:tab       .../>    maps to WETabItem
54
55     <var:pageview  .../>    maps to WEPageView
56     <var:page      .../>    maps to WEPageItem
57     <var:pagelink  .../>    maps to WEPageLink
58     
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
63
64     <var:switch    .../>    maps to WESwitch
65     <var:case      .../>    maps to WECase
66     <var:default   .../>    maps to WEDefaultCase
67
68     <var:treeview  .../>    maps to WETreeView
69     <var:tree-header .../>  maps to WETreeHeader
70     <var:tree-data   .../>  maps to WETreeData
71
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
77
78     <var:if-ctx-key   .../> maps to WEContextConditional
79     <var:ctx-key      .../> maps to WEContextKey
80     <var:if-qualifier .../> maps to WEQualifierConditional
81
82     <var:redirect    .../>  maps to WERedirect
83     
84     WEComponentValue : WODynamicElement
85 */
86
87 @interface WExExtElemBuilder : WOxTagClassElemBuilder
88 {
89 }
90
91 @end
92
93 #include <SaxObjC/XMLNamespaces.h>
94 #include "common.h"
95
96 @implementation WExExtElemBuilder
97
98 - (Class)classForElement:(id<DOMElement>)_element {
99   NSString *tagName;
100   unsigned tl;
101   unichar c1;
102   
103   if (![[_element namespaceURI] isEqualToString:XMLNS_OD_BIND])
104     return Nil;
105   
106   tagName = [_element tagName];
107   if ((tl = [tagName length]) < 2)
108     return Nil;
109
110   c1 = [tagName characterAtIndex:0];
111
112   switch (c1) {
113     case 'c': /* starting with 'c' */
114       if (tl > 8) {
115         if ([tagName isEqualToString:@"cal-field"])
116           return NSClassFromString(@"WECalendarField");
117       }
118       else if (tl > 3) {
119         if ([tagName isEqualToString:@"case"])
120           return NSClassFromString(@"WECase");
121         if ([tagName isEqualToString:@"ctx-key"])
122           return NSClassFromString(@"WEContextKey");
123       }
124       break;
125
126     case 'd':
127       if (tl > 8) {
128         if ([tagName isEqualToString:@"date-field"])
129           return NSClassFromString(@"WEDateField");
130       }
131       else if (tl > 6) {
132         if ([tagName isEqualToString:@"default"])
133           return NSClassFromString(@"WEDefaultCase");
134       }
135       break;
136
137     case 'h':
138       if (tl == 12) {
139         if ([tagName isEqualToString:@"hspan-matrix"])
140           return NSClassFromString(@"WEHSpanTableMatrix");
141       }
142       break;
143
144     case 'i':
145       if (tl == 10) {
146         if ([tagName isEqualToString:@"if-ctx-key"])
147           return NSClassFromString(@"WEContextConditional");
148       }
149       if (tl == 12) {
150         if ([tagName isEqualToString:@"if-qualifier"])
151           return NSClassFromString(@"WEQualifierConditional");
152       }
153       break;
154       
155     case 'j': /* starting with 'j' */
156       if ([tagName hasPrefix:@"js-"]) {
157         if (tl < 6) return Nil;
158         
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");
165         
166         if ([tagName isEqualToString:@"js-shiftclick"])
167           return NSClassFromString(@"JSShiftClick");
168       }
169       break;
170
171     case 'm':
172       if (tl == 11) {
173         if ([tagName isEqualToString:@"matrix-cell"])
174           return NSClassFromString(@"WETableMatrixContent");
175       }
176       else if (tl == 12) {
177         if ([tagName isEqualToString:@"matrix-empty"])
178           return NSClassFromString(@"WETableMatrixNoContent");
179         if ([tagName isEqualToString:@"matrix-label"])
180           return NSClassFromString(@"WETableMatrixLabel");
181       }
182       break;
183       
184     case 'p':
185       if (tl > 3) {
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");
192       }
193       break;
194
195     case 'r': /* starting with 'r' */
196       if (tl > 8) {
197         if ([tagName isEqualToString:@"rich-string"])
198           return NSClassFromString(@"WERichString");
199       }
200       if (tl == 8) {
201         if ([tagName isEqualToString:@"redirect"])
202           return NSClassFromString(@"WERedirect");
203       }
204       break;
205       
206     case 's': /* starting with 's' */
207       if (tl > 10) {
208         if ([tagName isEqualToString:@"script-datefield"])
209           return NSClassFromString(@"WEDateFieldScript");
210       }
211       else if (tl > 5) {
212         if ([tagName isEqualToString:@"switch"])
213           return NSClassFromString(@"WESwitch");
214       }
215       break;
216
217     case 't': { /* starting with 't' */
218       unichar c2;
219       
220       c2 = [tagName characterAtIndex:1];
221       
222       if (tl == 2) {
223         if (c2 == 'd') return NSClassFromString(@"WETableData");
224         if (c2 == 'h') return NSClassFromString(@"WETableHeader");
225       }
226       if (tl == 3 && c2 == 'a') {
227         if ([tagName characterAtIndex:2] == 'b')
228           return NSClassFromString(@"WETabItem");
229       }
230
231       if (tl > 5) {
232         if (c2 == 'a') {
233           if ([tagName isEqualToString:@"tableview"])
234             return NSClassFromString(@"WETableView");
235         
236           if ([tagName isEqualToString:@"tabview"])
237             return NSClassFromString(@"WETabView");
238         }
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");
246         }
247         
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");
256
257         if ([tagName isEqualToString:@"time-field"])
258           return NSClassFromString(@"WETimeField");
259       }
260       break;
261     }
262
263     case 'v':
264       if (tl == 12) {
265         if ([tagName isEqualToString:@"vspan-matrix"])
266           return NSClassFromString(@"WEVSpanTableMatrix");
267       }
268       break;
269
270     case 'w':
271       if (tl > 8) {
272         if ([tagName isEqualToString:@"we-browser"])
273           return NSClassFromString(@"WEBrowser");
274         
275         if ([tagName hasPrefix:@"we-collapsible"]) {
276           if (tl == 14)
277             return NSClassFromString(@"WECollapsibleComponentContent");
278           
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");
285         }
286       }
287       break;
288   }
289   
290   return Nil;
291 }
292
293 @end /* WExExtElemBuilder */