2 Copyright (C) 2000-2003 SKYRIX Software AG
4 This file is part of OGo
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
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.
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
23 #include "ODXHTMLNodeRenderFactory.h"
24 #include "ODRDynamicXHTMLTag.h"
25 #include <NGObjDOM/ODNamespaces.h>
26 #include <NGObjDOM/ODNodeRenderer.h>
29 @implementation ODXHTMLNodeRenderFactory
31 - (ODNodeRenderer *)rendererForNode:(id)_domNode
32 inContext:(WOContext *)_ctx
34 static NSMutableDictionary *tagToRenderer = nil; /* cache, THREAD */
35 ODNodeRenderer *renderer;
36 NSString *rendererName;
40 if (!([[_domNode namespaceURI] isEqualToString:XMLNS_XHTML] ||
41 [[_domNode namespaceURI] isEqualToString:XMLNS_HTML40]))
44 /* lookup renderer in cache */
46 if ((renderer = [tagToRenderer objectForKey:[_domNode tagName]]))
49 /* lookup renderer by classname */
51 rendererName = [@"ODR_XHTML_" stringByAppendingString:[_domNode tagName]];
53 renderer = [[[NSClassFromString(rendererName) alloc] init] autorelease];
55 /* did not find special renderer, use default renderer */
57 if (renderer == nil) {
58 static ODRDynamicXHTMLTag *defRenderer = nil;
59 if (defRenderer == nil)
60 defRenderer = [[ODRDynamicXHTMLTag alloc] init];
61 renderer = defRenderer;
64 /* place renderer in cache */
67 if (tagToRenderer == nil)
68 tagToRenderer = [[NSMutableDictionary alloc] initWithCapacity:64];
69 [tagToRenderer setObject:renderer forKey:[_domNode tagName]];
75 @end /* ODXHTMLNodeRenderFactory */