void *NclStructureConverter::createBody( DOMElement *parentElement, void *objGrandParent) { // criar composicao a partir do elemento body do documento ncl // fazer uso do nome da composicao body que foi atribuido pelo // compilador NclDocument *document; ContextNode *context; document = (NclDocument*) getDocumentParser()-> getObject("return", "document"); if (!parentElement->hasAttribute(XMLString::transcode("id"))) { parentElement->setAttribute(XMLString::transcode("id"), XMLString::transcode(document->getId().c_str())); context = (ContextNode*)((NclComponentsConverter*) getComponentsParser())->createContext( parentElement, objGrandParent); parentElement->removeAttribute(XMLString::transcode("id")); } else { context = (ContextNode*)((NclComponentsConverter*) getComponentsParser())->createContext( parentElement, objGrandParent); } document->setBody(context); return context; }
void *NclPresentationControlParser::parseSwitch( DOMElement *parentElement, void *objGrandParent) { void *parentObject; DOMNodeList *elementNodeList; int i, size; DOMNode *node; DOMElement *element; string elementTagName; void *elementObject; parentObject = createSwitch(parentElement, objGrandParent); if (parentObject == NULL) { return NULL; } elementNodeList = parentElement->getChildNodes(); size = elementNodeList->getLength(); for (i = 0; i < size; i++) { node = elementNodeList->item(i); if (node->getNodeType()==DOMNode::ELEMENT_NODE) { element = (DOMElement*)node; elementTagName = XMLString::transcode(element->getTagName()); if (XMLString::compareIString(elementTagName.c_str(), "media") == 0) { elementObject = ((NclComponentsParser*) getComponentsParser())->parseMedia( element, parentObject); if (elementObject != NULL) { addMediaToSwitch(parentObject, elementObject); } } else if (XMLString::compareIString(elementTagName.c_str(), "context") == 0) { elementObject = ((NclComponentsParser*) getComponentsParser())->parseContext( element, parentObject); if (elementObject != NULL) { addContextToSwitch(parentObject, elementObject); } } else if (XMLString::compareIString(elementTagName.c_str(), "switch") == 0) { elementObject = parseSwitch(element, parentObject); if (elementObject != NULL) { addSwitchToSwitch(parentObject, elementObject); } } } } for (i = 0; i < size; i++) { node = elementNodeList->item(i); if (node->getNodeType() == DOMNode::ELEMENT_NODE) { element = (DOMElement*)node; elementTagName = XMLString::transcode(element->getTagName()); if (XMLString::compareIString(elementTagName.c_str(), "bindRule") == 0) { elementObject = parseBindRule((DOMElement*)node, parentObject); if (elementObject != NULL) { addBindRuleToSwitch(parentObject, elementObject); } } else if (XMLString::compareIString(elementTagName.c_str(), "defaultComponent") == 0) { elementObject = parseDefaultComponent((DOMElement*)node, parentObject); if (elementObject != NULL) { addDefaultComponentToSwitch( parentObject, elementObject); } } } } return parentObject; }
void NclStructureConverter::addSwitchToBody( void *parentObject, void *childObject) { getComponentsParser()->addSwitchToContext(parentObject, childObject); }
void *NclStructureParser::parseBody( DOMElement *parentElement, void *objGrandParent) { void *parentObject; DOMNodeList *elementNodeList; int i, size; DOMNode *node; DOMElement *element; string elementTagName; void *elementObject; parentObject = createBody(parentElement, objGrandParent); if (parentObject == NULL) { return NULL; } elementNodeList = parentElement->getChildNodes(); size = elementNodeList->getLength(); for (i = 0; i < size; i++) { node = elementNodeList->item(i); if(node->getNodeType()==DOMNode::ELEMENT_NODE){ element = (DOMElement*)node; elementTagName = XMLString::transcode(element->getTagName()); if (XMLString::compareIString( elementTagName.c_str(), "media")==0) { elementObject = getComponentsParser()->parseMedia( element, parentObject); if (elementObject != NULL) { addMediaToBody(parentObject, elementObject); } } else if (XMLString::compareIString( elementTagName.c_str(), "context")==0) { elementObject = getComponentsParser()->parseContext( element, parentObject); if (elementObject != NULL) { addContextToBody(parentObject, elementObject); } } else if (XMLString::compareIString( elementTagName.c_str(), "switch")==0) { elementObject = getPresentationControlParser()-> parseSwitch(element, parentObject); if (elementObject != NULL) { addSwitchToBody(parentObject, elementObject); } } } } for (i = 0; i < size; i++) { node = elementNodeList->item(i); if (node->getNodeType()==DOMNode::ELEMENT_NODE && XMLString::compareIString(((DOMElement*)node)-> getTagName(), XMLString::transcode("property"))==0) { elementObject = getInterfacesParser()->parseProperty( (DOMElement*)node, parentObject); if (elementObject != NULL) { addPropertyToBody(parentObject, elementObject); } } } return parentObject; }
void *NclStructureParser::posCompileBody( DOMElement *parentElement, void *parentObject) { return getComponentsParser()->posCompileContext( parentElement, parentObject); }