/*! @header ECXMLControlDefaultAllocator @abstract Module of Encore @availability OS X, GNUstep @copyright 2004, 2005, 2006 Oliver Langer Author: Oliver Langer This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  -------------------------------------------------------------------------
  Modification history

  27.11.05 ola     initial version
  22.08.06 ola     license changed
  -------------------------------------------------------------------------
  
*/ #include #include #include @implementation ECXMLControlDefaultAllocatorRule - (BOOL) mayActOn: (ECXMLControlContext *) aContext { return [[[aContext event] eventId] isEqual: [ECXMLControlEvent eventId_elementStarted]]; } - (BOOL) actOn: (ECXMLControlContext *) aContext { NSMutableDictionary *attributes; Class classObject = nil; NSAssert( [[[aContext event] eventId] isEqual: [ECXMLControlEvent eventId_elementStarted]], @"ECXMLControlDefaultAllocatorRule::actOn: May only react on \"start "\ "element\" events." ); EC_AUTORELEASEPOOL_BEGIN /* look for attribute class */ attributes = [[aContext event] attributes]; if( nil != attributes ) { NSString *classname = [attributes objectForKey: __CLASS_ATTRIBUTE]; if( nil != classname ) { [attributes removeObjectForKey: classname]; // try to fetch the class object whose name equals "classname" classObject = NSClassFromString( classname ); } } if( nil == classObject ) { // now try to get the classObject = NSClassFromString( [[aContext event] elementName] ); } if( nil != classObject ) { id userObject = [[[classObject alloc] init] autorelease]; [[aContext state] pushUserObject: userObject]; } else { [[[ECIllegalArgumentException alloc] initWithArgumentInfo: [[[NSString alloc] initWithFormat: @"ECXMLControlDefaultAllocatorRule::actOn:"\ " Unable to find class for %@", [[aContext event] elementName]] autorelease]] raise]; } EC_AUTORELEASEPOOL_END return YES; } @end