static int processCharacters (const wchar_t *characters, size_t count, wchar_t end, void *data) { if (opt_reformatText && count) { if (iswspace(characters[0])) if (!flushCharacters('\n', data)) return 0; { unsigned int spaces = !inputLength? 0: 1; size_t newLength = inputLength + spaces + count; if (newLength > inputSize) { size_t newSize = newLength | 0XFF; wchar_t *newBuffer = calloc(newSize, sizeof(*newBuffer)); if (!newBuffer) { noMemory(data); return 0; } wmemcpy(newBuffer, inputBuffer, inputLength); free(inputBuffer); inputBuffer = newBuffer; inputSize = newSize; } while (spaces) { inputBuffer[inputLength++] = WC_C(' '); spaces -= 1; } wmemcpy(&inputBuffer[inputLength], characters, count); inputLength += count; } if (end != '\n') { if (!flushCharacters(0, data)) return 0; if (!putCharacter(end, data)) return 0; } } else { if (!flushCharacters('\n', data)) return 0; if (!writeCharacters(characters, count, data)) return 0; if (!putCharacter(end, data)) return 0; } return 1; }
bool FBXMLHandler::endElement( const QString & /*namespaceURI*/, const QString & /*localName*/, const QString & /*qName*/ ) { flushCharacters(); QVariant c = iStack [iStack.count() - 1] ; QString name = topName(); iStack.removeLast(); iNameStack.removeLast(); if (!iStack.count()) { iRootObject = c; iRootName = name; } else { QVariant tC = iStack[iStack.count() - 1] ; if (tC.isNull()) { tC = QVariantHash(); iStack.replace(iStack.count() - 1, tC); } if (tC.type() == QVariant::List) { QVariantList list = tC.toList(); list.append( c.toHash() ); iStack.replace( iStack.count() - 1 , list); } else if (tC.type() == QVariant::Hash) { QVariantHash hash = tC.toHash(); if (c.isNull()) { c = QString(""); } hash.insert( name, c ); iStack.replace( iStack.count() - 1 , hash); } } return true; }
nsresult txStylesheetCompiler::startElement(PRInt32 aNamespaceID, nsIAtom* aLocalName, nsIAtom* aPrefix, txStylesheetAttr* aAttributes, PRInt32 aAttrCount) { if (NS_FAILED(mStatus)) { // ignore content after failure // XXX reevaluate once expat stops on failure return NS_OK; } nsresult rv = flushCharacters(); NS_ENSURE_SUCCESS(rv, rv); // look for new namespace mappings PRBool hasOwnNamespaceMap = PR_FALSE; PRInt32 i; for (i = 0; i < aAttrCount; ++i) { txStylesheetAttr* attr = aAttributes + i; if (attr->mNamespaceID == kNameSpaceID_XMLNS) { rv = ensureNewElementContext(); NS_ENSURE_SUCCESS(rv, rv); if (!hasOwnNamespaceMap) { mElementContext->mMappings = new txNamespaceMap(*mElementContext->mMappings); NS_ENSURE_TRUE(mElementContext->mMappings, NS_ERROR_OUT_OF_MEMORY); hasOwnNamespaceMap = PR_TRUE; } if (attr->mLocalName == nsGkAtoms::xmlns) { mElementContext->mMappings->mapNamespace(nsnull, attr->mValue); } else { mElementContext->mMappings-> mapNamespace(attr->mLocalName, attr->mValue); } } } return startElementInternal(aNamespaceID, aLocalName, aPrefix, aAttributes, aAttrCount); }
/* methods from QXmlDefaultHandler */ bool FBXMLHandler::startElement( const QString & /*namespaceURI*/, const QString & localName, const QString & /*qName*/, const QXmlAttributes & atts) { flushCharacters(); QVariant item ; if (atts.value("list").compare("true")==0) { item = QVariantList(); } iStack.append(item); iNameStack.append(localName); return true; }
nsresult txStylesheetCompiler::endElement() { if (NS_FAILED(mStatus)) { // ignore content after failure // XXX reevaluate once expat stops on failure return NS_OK; } nsresult rv = flushCharacters(); NS_ENSURE_SUCCESS(rv, rv); PRInt32 i; for (i = mInScopeVariables.Length() - 1; i >= 0; --i) { txInScopeVariable* var = mInScopeVariables[i]; if (!--(var->mLevel)) { nsAutoPtr<txInstruction> instr(new txRemoveVariable(var->mName)); NS_ENSURE_TRUE(instr, NS_ERROR_OUT_OF_MEMORY); rv = addInstruction(instr); NS_ENSURE_SUCCESS(rv, rv); mInScopeVariables.RemoveElementAt(i); delete var; } } const txElementHandler* handler = const_cast<const txElementHandler*> (static_cast<txElementHandler*>(popPtr())); rv = (handler->mEndFunction)(*this); NS_ENSURE_SUCCESS(rv, rv); if (!--mElementContext->mDepth) { // this will delete the old object mElementContext = static_cast<txElementContext*>(popObject()); } return NS_OK; }
nsresult txStylesheetCompiler::startElement(const PRUnichar *aName, const PRUnichar **aAttrs, PRInt32 aAttrCount, PRInt32 aIDOffset) { if (NS_FAILED(mStatus)) { // ignore content after failure // XXX reevaluate once expat stops on failure return NS_OK; } nsresult rv = flushCharacters(); NS_ENSURE_SUCCESS(rv, rv); nsAutoArrayPtr<txStylesheetAttr> atts; if (aAttrCount > 0) { atts = new txStylesheetAttr[aAttrCount]; NS_ENSURE_TRUE(atts, NS_ERROR_OUT_OF_MEMORY); } PRBool hasOwnNamespaceMap = PR_FALSE; PRInt32 i; for (i = 0; i < aAttrCount; ++i) { rv = XMLUtils::splitExpatName(aAttrs[i * 2], getter_AddRefs(atts[i].mPrefix), getter_AddRefs(atts[i].mLocalName), &atts[i].mNamespaceID); NS_ENSURE_SUCCESS(rv, rv); atts[i].mValue.Append(aAttrs[i * 2 + 1]); nsCOMPtr<nsIAtom> prefixToBind; if (atts[i].mPrefix == nsGkAtoms::xmlns) { prefixToBind = atts[i].mLocalName; } else if (atts[i].mNamespaceID == kNameSpaceID_XMLNS) { prefixToBind = nsGkAtoms::_empty; } if (prefixToBind) { rv = ensureNewElementContext(); NS_ENSURE_SUCCESS(rv, rv); if (!hasOwnNamespaceMap) { mElementContext->mMappings = new txNamespaceMap(*mElementContext->mMappings); NS_ENSURE_TRUE(mElementContext->mMappings, NS_ERROR_OUT_OF_MEMORY); hasOwnNamespaceMap = PR_TRUE; } rv = mElementContext->mMappings-> mapNamespace(prefixToBind, atts[i].mValue); NS_ENSURE_SUCCESS(rv, rv); } } nsCOMPtr<nsIAtom> prefix, localname; PRInt32 namespaceID; rv = XMLUtils::splitExpatName(aName, getter_AddRefs(prefix), getter_AddRefs(localname), &namespaceID); NS_ENSURE_SUCCESS(rv, rv); PRInt32 idOffset = aIDOffset; if (idOffset > 0) { idOffset /= 2; } return startElementInternal(namespaceID, localname, prefix, atts, aAttrCount, idOffset); }