From 853dfbd0cf572745a03c77dd10532e4cfa0d214e Mon Sep 17 00:00:00 2001 From: "peterv%netscape.com" Date: Tue, 16 Oct 2001 09:26:59 +0000 Subject: [PATCH] Fix for bug 88623 (Cleanup Transformiix code). Removing some warnings, fixing txResultStringComparator::compareValues, adding isEmpty to our string class. r=sicking, r=Pike, sr=jst. --- .../source/base/CommandLineUtils.cpp | 10 +- .../source/base/MozillaString.cpp | 21 +- .../transformiix/source/base/NamedMap.cpp | 12 - .../transformiix/source/base/NamedMap.h | 18 - extensions/transformiix/source/base/TxLog.h | 4 +- .../transformiix/source/base/TxString.cpp | 8 + .../transformiix/source/base/TxString.h | 3 + .../transformiix/source/net/URIUtils.cpp | 314 ------------------ .../transformiix/source/xml/XMLDOMUtils.cpp | 2 +- .../transformiix/source/xml/XMLUtils.cpp | 34 +- .../source/xml/dom/mozImpl/MozillaElement.cpp | 21 +- .../source/xpath/AttributeExpr.cpp | 7 +- .../transformiix/source/xpath/ElementExpr.cpp | 4 +- .../transformiix/source/xpath/ExprLexer.cpp | 5 +- .../transformiix/source/xpath/ExprParser.cpp | 8 +- .../source/xpath/StringFunctionCall.cpp | 15 +- .../source/xpath/StringResult.cpp | 2 +- .../transformiix/source/xpath/UnionExpr.cpp | 3 +- .../transformiix/source/xslt/Numbering.cpp | 6 +- .../source/xslt/ProcessorState.cpp | 40 +-- .../source/xslt/XSLTProcessor.cpp | 57 ++-- .../xslt/functions/ElementAvailableFnCall.cpp | 2 +- .../functions/FunctionAvailableFnCall.cpp | 2 +- .../source/xslt/util/txNodeSorter.cpp | 4 +- .../xslt/util/txXPathResultComparator.cpp | 18 +- .../xslt/util/txXPathResultComparator.h | 3 +- 26 files changed, 161 insertions(+), 462 deletions(-) diff --git a/extensions/transformiix/source/base/CommandLineUtils.cpp b/extensions/transformiix/source/base/CommandLineUtils.cpp index f4b8006b529..77ff00c5b9b 100644 --- a/extensions/transformiix/source/base/CommandLineUtils.cpp +++ b/extensions/transformiix/source/base/CommandLineUtils.cpp @@ -34,10 +34,10 @@ void CommandLineUtils::getOptions arg.clear(); arg.append(argv[i]); - if ((arg.length()>0) && (arg.charAt(0) == '-')) { + if (!arg.isEmpty() && (arg.charAt(0) == '-')) { // clean up previous flag - if (flag.length()>0) { + if (!flag.isEmpty()) { options.put(flag, new String(arg)); flag.clear(); } @@ -68,11 +68,13 @@ void CommandLineUtils::getOptions }// if flag char '-' else { // Store both flag key and number key - if (flag.length() > 0) options.put(flag, new String(arg)); + if (!flag.isEmpty()) + options.put(flag, new String(arg)); flag.clear(); } }// end for - if (flag.length()>0) options.put(flag, new String("no value")); + if (!flag.isEmpty()) + options.put(flag, new String("no value")); } //-- getOptions diff --git a/extensions/transformiix/source/base/MozillaString.cpp b/extensions/transformiix/source/base/MozillaString.cpp index c8fb510fc2c..dd7e56565a8 100644 --- a/extensions/transformiix/source/base/MozillaString.cpp +++ b/extensions/transformiix/source/base/MozillaString.cpp @@ -222,7 +222,7 @@ void String::append(const char* source) // void String::append(const UNICODE_CHAR* source) { - ptrNSString->Append((PRUnichar *)source, UnicodeLength(source)); + ptrNSString->Append(source); } // @@ -296,7 +296,7 @@ void String::insert(PRInt32 offset, const char* source) // void String::insert(PRInt32 offset, const UNICODE_CHAR* source) { - ptrNSString->Insert((PRUnichar *)source, offset, UnicodeLength(source)); + ptrNSString->Insert((PRUnichar *)source, offset); } // @@ -599,7 +599,17 @@ PRInt32 String::lastIndexOf(const String& data, PRInt32 offset) const return ptrNSString->RFind(nsData, PR_FALSE, offset); } +// +//Checks whether the string is empty +// +MBool String::isEmpty() const +{ + return ptrNSString->IsEmpty(); +} + +// //Return the length of this string ( PRInt32 nsString::Length() ) +// PRInt32 String::length() const { if (ptrNSString){ @@ -815,10 +825,3 @@ const nsString& String::getConstNSString() const { return *ptrNSString; } - -// -//String copies itself to the destination -// -//void String::copyString(SPECIAL_CHAR* dest) -//{ -//} diff --git a/extensions/transformiix/source/base/NamedMap.cpp b/extensions/transformiix/source/base/NamedMap.cpp index 7390f312c57..a88ece6ddb0 100644 --- a/extensions/transformiix/source/base/NamedMap.cpp +++ b/extensions/transformiix/source/base/NamedMap.cpp @@ -143,18 +143,6 @@ void NamedMap::dumpMap() { #endif } //-- dumpMap -/** - * Compares the specified object with this NamedMap for equality. - * Returns true if and only if the specified Object is a NamedMap - * that hashes to the same value as this NamedMap - * @return true if and only if the specified Object is a NamedMap - * that hashes to the same value as this NamedMap -**/ -MBool NamedMap::equals(NamedMap* namedMap) { - //-- currently does nothing - return MB_FALSE; -} //-- equals - /** * Returns the object reference in this Map associated with the given name * @return the object reference in this Map associated with the given name diff --git a/extensions/transformiix/source/base/NamedMap.h b/extensions/transformiix/source/base/NamedMap.h index 47c862ad1b1..289faddf510 100644 --- a/extensions/transformiix/source/base/NamedMap.h +++ b/extensions/transformiix/source/base/NamedMap.h @@ -96,24 +96,6 @@ public: void clear(MBool doObjectDeletion); - /** - * Returns true if the specified Node is contained in the set. - * if the specfied Node is null, then if the NodeSet contains a null - * value, true will be returned. - * @param node the element to search the NodeSet for - * @return true if specified Node is contained in the NodeSet - **/ - //MBool contains(Node* node); - - /** - * Compares the specified object with this NamedMap for equality. - * Returns true if and only if the specified Object is a NamedMap - * that hashes to the same value as this NamedMap - * @return true if and only if the specified Object is a NamedMap - * that hashes to the same value as this NamedMap - **/ - MBool equals(NamedMap* namedMap); - /** * Returns true if there are no Nodes in the NodeSet. * @return true if there are no Nodes in the NodeSet. diff --git a/extensions/transformiix/source/base/TxLog.h b/extensions/transformiix/source/base/TxLog.h index 0fb3f37bdae..84e4e4a36e9 100644 --- a/extensions/transformiix/source/base/TxLog.h +++ b/extensions/transformiix/source/base/TxLog.h @@ -15,12 +15,12 @@ * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is - * Axel Hecht. Portions. + * Axel Hecht. * Portions created by the Initial Developer are Copyright (C) 2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): - * Axel Hecht (Original Author) + * Axel Hecht * * * Alternatively, the contents of this file may be used under the terms of diff --git a/extensions/transformiix/source/base/TxString.cpp b/extensions/transformiix/source/base/TxString.cpp index 6cc06c971d0..9c340d0f4e4 100644 --- a/extensions/transformiix/source/base/TxString.cpp +++ b/extensions/transformiix/source/base/TxString.cpp @@ -905,6 +905,14 @@ PRInt32 String::lastIndexOf(const String& data, PRInt32 offset) const return NOT_FOUND; } +// +//Checks whether the string is empty +// +MBool String::isEmpty() const +{ + return (strLength == 0); +} + // //Returns the length of the String // diff --git a/extensions/transformiix/source/base/TxString.h b/extensions/transformiix/source/base/TxString.h index 1721e8e7e42..f38aa2ea41d 100644 --- a/extensions/transformiix/source/base/TxString.h +++ b/extensions/transformiix/source/base/TxString.h @@ -131,6 +131,9 @@ class String : public TxObject virtual PRInt32 lastIndexOf(const String& data) const; virtual PRInt32 lastIndexOf(const String& data, PRInt32 offset) const; + //Checks whether the string is empty + virtual MBool isEmpty() const; + virtual PRInt32 length() const; //Returns the length /** diff --git a/extensions/transformiix/source/net/URIUtils.cpp b/extensions/transformiix/source/net/URIUtils.cpp index 6e7f195e3be..e69de29bb2d 100644 --- a/extensions/transformiix/source/net/URIUtils.cpp +++ b/extensions/transformiix/source/net/URIUtils.cpp @@ -1,314 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Mozilla Public - * License Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code is TransforMiiX XSLT processor. - * - * The Initial Developer of the Original Code is The MITRE Corporation. - * Portions created by MITRE are Copyright (C) 1999 The MITRE Corporation. - * - * Portions created by Keith Visco as a Non MITRE employee, - * (C) 1999 Keith Visco. All Rights Reserved. - * - * Contributor(s): - * Keith Visco, kvisco@ziplink.net - * -- original author. - * Larry Fitzpatrick, OpenText, lef@opentext.com - * -- 19990806 - * -- moved initialization of constant shorts and chars from - * URIUtils.cpp to here - * - * Peter Van der Beken - * - */ - -#include "URIUtils.h" - -#ifndef TX_EXE -#include "nsNetUtil.h" -#endif - -/** - * URIUtils - * A set of utilities for handling URIs -**/ - -#ifdef TX_EXE -//- Constants -/ - -const String URIUtils::HTTP_PROTOCOL = "http"; -const String URIUtils::FILE_PROTOCOL = "file"; -const char URIUtils::HREF_PATH_SEP = '/'; -const char URIUtils::DEVICE_SEP = '|'; -const char URIUtils::PORT_SEP = ':'; -const char URIUtils::PROTOCOL_SEP = ':'; -const short URIUtils::PROTOCOL_MODE = 1; -const short URIUtils::HOST_MODE = 2; -const short URIUtils::PORT_MODE = 3; -const short URIUtils::PATH_MODE = 4; - - -/** - * Returns an InputStream for the file represented by the href - * argument - * @param href the href of the file to get the input stream for. - * @return an InputStream to the desired resource - * @exception java.io.FileNotFoundException when the file could not be - * found -**/ -istream* URIUtils::getInputStream - (const String& href, String& errMsg) -{ - - istream* inStream = 0; - - ParsedURI* uri = parseURI(href); - if ( !uri->isMalformed ) { - inStream = openStream(uri); - } - else { - // Try local files - char* fchars = new char[href.length()+1]; - inStream = new ifstream(href.toCharArray(fchars), ios::in); - delete fchars; - } - delete uri; - - return inStream; - -} //-- getInputStream - -/** - * Returns the document base of the href argument - * @return the document base of the given href -**/ -void URIUtils::getDocumentBase(const String& href, String& dest) { - //-- use temp str so the subString method doesn't destroy dest - String docBase(""); - - if (href.length() != 0) { - - int idx = -1; - //-- check for URL - ParsedURI* uri = parseURI(href); - if ( !uri->isMalformed ) { - idx = href.lastIndexOf(HREF_PATH_SEP); - } - else { - //-- The following contains a fix from Shane Hathaway - //-- to handle the case when both "\" and "/" appear in filename - int idx2 = href.lastIndexOf(HREF_PATH_SEP); - //idx = href.lastIndexOf(File.separator); - idx = -1; //-- hack change later - if (idx2 > idx) idx = idx2; - } - if (idx >= 0) href.subString(0,idx, docBase); - delete uri; - } - dest.append(docBase); -} //-- getDocumentBase -#endif - -/** - * Resolves the given href argument, using the given documentBase - * if necessary. - * The new resolved href will be appended to the given dest String -**/ -void URIUtils::resolveHref(const String& href, const String& base, - String& dest) { - if (base.length() == 0) { - dest.append(href); - return; - } - if (href.length() == 0) { - dest.append(base); - return; - } - -#ifndef TX_EXE - nsCOMPtr pURL; - String resultHref; - nsresult result = NS_NewURI(getter_AddRefs(pURL), base.getConstNSString()); - if (NS_SUCCEEDED(result)) { - NS_MakeAbsoluteURI(resultHref.getNSString(), href.getConstNSString(), pURL); - dest.append(resultHref); - } -#else - String documentBase; - getDocumentBase(base, documentBase); - - //-- check for URL - ParsedURI* uri = parseURI(href); - if ( !uri->isMalformed ) { - dest.append(href); - delete uri; - return; - } - - - //-- join document base + href - String xHref; - if (documentBase.length() > 0) { - xHref.append(documentBase); - if (documentBase.charAt(documentBase.length()-1) != HREF_PATH_SEP) - xHref.append(HREF_PATH_SEP); - } - xHref.append(href); - - //-- check new href - ParsedURI* newUri = parseURI(xHref); - if ( !newUri->isMalformed ) { - dest.append(xHref); - } - else { - // Try local files - char* xHrefChars = new char[xHref.length()+1]; - ifstream inFile(xHref.toCharArray(xHrefChars), ios::in); - if ( inFile ) dest.append(xHref); - else dest.append(href); - inFile.close(); - delete xHrefChars; - } - delete uri; - delete newUri; - //cout << "\n---\nhref='" << href << "', base='" << base << "'\ndocumentBase='" << documentBase << "', dest='" << dest << "'\n---\n"; -#endif -} //-- resolveHref - -void URIUtils::getFragmentIdentifier(const String& href, String& frag) { - PRInt32 pos; - pos = href.lastIndexOf('#'); - if(pos != NOT_FOUND) - href.subString(pos+1, frag); - else - frag.clear(); -} //-- getFragmentIdentifier - -void URIUtils::getDocumentURI(const String& href, String& docUri) { - PRInt32 pos; - pos = href.lastIndexOf('#'); - if(pos != NOT_FOUND) - href.subString(0,pos,docUri); - else - docUri = href; -} //-- getDocumentURI - -#ifdef TX_EXE -istream* URIUtils::openStream(ParsedURI* uri) { - if ( !uri ) return 0; - // check protocol - - istream* inStream = 0; - if ( FILE_PROTOCOL.isEqual(uri->protocol) ) { - char* fchars = new char[uri->path.length()+1]; - ifstream* inFile = new ifstream(uri->path.toCharArray(fchars), ios::in); - delete fchars; - inStream = inFile; - } - - return inStream; -} //-- openStream - -URIUtils::ParsedURI* URIUtils::parseURI(const String& uri) { - - ParsedURI* uriTokens = new ParsedURI; - if (!uriTokens) - return NULL; - uriTokens->isMalformed = MB_FALSE; - - short mode = PROTOCOL_MODE; - - // look for protocol - int totalCount = uri.length(); - int charCount = 0; - UNICODE_CHAR prevCh = '\0'; - int fslash = 0; - String buffer(uri.length()); - while ( charCount < totalCount ) { - UNICODE_CHAR ch = uri.charAt(charCount++); - switch(ch) { - case '.' : - if ( mode == PROTOCOL_MODE ) { - uriTokens->isMalformed = MB_TRUE; - mode = HOST_MODE; - } - buffer.append(ch); - break; - case ':' : - { - switch ( mode ) { - case PROTOCOL_MODE : - uriTokens->protocol = buffer; - buffer.clear(); - mode = HOST_MODE; - break; - case HOST_MODE : - uriTokens->host = buffer; - buffer.clear(); - mode = PORT_MODE; - break; - default: - break; - } - break; - } - case '/' : - switch ( mode ) { - case HOST_MODE : - if ( buffer.length() != 0 ) { - mode = PATH_MODE; - buffer.append(ch); - } - else if ( fslash == 2 ) mode = PATH_MODE; - else ++fslash; - break; - case PORT_MODE : - mode = PATH_MODE; - uriTokens->port.append(buffer); - buffer.clear(); - break; - default: - buffer.append(ch); - break; - } - break; - default: - buffer.append(ch); - } - prevCh = ch; - } - - if ( mode == PROTOCOL_MODE ) { - uriTokens->isMalformed = MB_TRUE; - } - //-- finish remaining mode - if ( buffer.length() > 0 ) { - switch ( mode ) { - case PROTOCOL_MODE : - uriTokens->protocol.append(buffer); - break; - case HOST_MODE : - uriTokens->host.append(buffer); - break; - case PORT_MODE : - uriTokens->port.append(buffer); - break; - case PATH_MODE : - uriTokens->path.append(buffer); - break; - default: - break; - } - } - return uriTokens; -} //-- parseURI - -#endif diff --git a/extensions/transformiix/source/xml/XMLDOMUtils.cpp b/extensions/transformiix/source/xml/XMLDOMUtils.cpp index b580ff59e2a..f47b669b146 100644 --- a/extensions/transformiix/source/xml/XMLDOMUtils.cpp +++ b/extensions/transformiix/source/xml/XMLDOMUtils.cpp @@ -187,7 +187,7 @@ MBool XMLDOMUtils::getNameSpace (const String& prefix, Element* element, String& dest) { String attName("xmlns"); - if (prefix.length() > 0) { + if (!prefix.isEmpty()) { attName.append(':'); attName.append(prefix); } diff --git a/extensions/transformiix/source/xml/XMLUtils.cpp b/extensions/transformiix/source/xml/XMLUtils.cpp index bcbd9548c3d..7b8fc56ab5e 100644 --- a/extensions/transformiix/source/xml/XMLUtils.cpp +++ b/extensions/transformiix/source/xml/XMLUtils.cpp @@ -102,13 +102,16 @@ MBool XMLUtils::isQNameChar(PRInt32 ch) { **/ MBool XMLUtils::isValidQName(String& name) { + if (name.isEmpty()) + return MB_FALSE; + + if (!isAlphaChar(name.charAt(0))) + return MB_FALSE; + int size = name.length(); - if ( size == 0 ) return MB_FALSE; - else if ( !isAlphaChar(name.charAt(0))) return MB_FALSE; - else { - for ( int i = 1; i < size; i++) { - if ( ! isQNameChar(name.charAt(i))) return MB_FALSE; - } + for (int i = 1; i < size; i++) { + if (!isQNameChar(name.charAt(i))) + return MB_FALSE; } return MB_TRUE; } //-- isValidQName @@ -149,7 +152,8 @@ void XMLUtils::normalizeAttributeValue(String& attValue) { UNICODE_CHAR ch = chars[cc++]; switch (ch) { case ' ': - if ( attValue.length() > 0) addSpace = MB_TRUE; + if (!attValue.isEmpty()) + addSpace = MB_TRUE; break; case '\r': break; @@ -214,14 +218,14 @@ MBool XMLUtils::shouldStripTextnode (const String& data){ MBool toStrip = MB_TRUE; for (PRInt32 i=0;toStrip && igetNodeValue(); - else + if (tempNode) + return tempNode->getNodeValue(); return NULL_STRING; } @@ -156,10 +155,9 @@ Attr* Element::getAttributeNode(const String& aName) nsCOMPtr attr; if (NS_SUCCEEDED(nsElement->GetAttributeNode(aName.getConstNSString(), - getter_AddRefs(attr)))) + getter_AddRefs(attr))) && attr) return (Attr*)ownerDocument->createWrapper(attr); - else - return NULL; + return NULL; } /** @@ -179,8 +177,7 @@ Attr* Element::setAttributeNode(Attr* aNewAttr) if (NS_SUCCEEDED(nsElement->SetAttributeNode(newAttr, getter_AddRefs(returnAttr)))) return (Attr*)ownerDocument->createWrapper(returnAttr); - else - return NULL; + return NULL; } /** @@ -207,8 +204,7 @@ Attr* Element::removeAttributeNode(Attr* aOldAttr) attrWrapper = new Attr(removedAttr, ownerDocument); return attrWrapper; } - else - return NULL; + return NULL; } /** @@ -227,8 +223,7 @@ NodeList* Element::getElementsByTagName(const String& aName) if (NS_SUCCEEDED(nsElement->GetElementsByTagName(aName.getConstNSString(), getter_AddRefs(list)))) return ownerDocument->createNodeList(list); - else - return NULL; + return NULL; } /** diff --git a/extensions/transformiix/source/xpath/AttributeExpr.cpp b/extensions/transformiix/source/xpath/AttributeExpr.cpp index 1d3917d4bb5..d1086ebac12 100644 --- a/extensions/transformiix/source/xpath/AttributeExpr.cpp +++ b/extensions/transformiix/source/xpath/AttributeExpr.cpp @@ -135,7 +135,7 @@ MBool AttributeExpr::matches(Node* node, Node* context, ContextState* cs) { XMLDOMUtils::getNameSpace(prefixForNode, (Element*)parent, nsForNode); String nsForTest; - if (prefix.length()) + if (!prefix.isEmpty()) cs->getNameSpaceURIFromPrefix(prefix, nsForTest); if (!nsForTest.isEqual(nsForNode)) return MB_FALSE; return localName.isEqual(this->name); @@ -143,9 +143,10 @@ MBool AttributeExpr::matches(Node* node, Node* context, ContextState* cs) { else { if (isNamespaceWild) return nodeName.isEqual(this->name); String nsForTest; - if (prefix.length()) + if (!prefix.isEmpty()) cs->getNameSpaceURIFromPrefix(prefix, nsForTest); - if (nsForTest.length() > 0) return MB_FALSE; + if (!nsForTest.isEmpty()) + return MB_FALSE; return nodeName.isEqual(this->name); } return MB_FALSE; diff --git a/extensions/transformiix/source/xpath/ElementExpr.cpp b/extensions/transformiix/source/xpath/ElementExpr.cpp index 7e636d3f1b1..8d8802ad074 100644 --- a/extensions/transformiix/source/xpath/ElementExpr.cpp +++ b/extensions/transformiix/source/xpath/ElementExpr.cpp @@ -48,7 +48,7 @@ ElementExpr::ElementExpr(String& name) //-- set flags isNameWild = this->name.isEqual(WILD_CARD); - isNamespaceWild = (isNameWild && (prefix.length() == 0)); + isNamespaceWild = (isNameWild && prefix.isEmpty()); } //-- ElementExpr //------------------/ @@ -112,7 +112,7 @@ MBool ElementExpr::matches(Node* node, Node* context, ContextState* cs) { //-- compare namespaces String nsURI; // use context to get namespace for testing against - if (prefix.length()) + if (!prefix.isEmpty()) cs->getNameSpaceURIFromPrefix(prefix, nsURI); String nsURI2; diff --git a/extensions/transformiix/source/xpath/ExprLexer.cpp b/extensions/transformiix/source/xpath/ExprLexer.cpp index 069418977fe..fc30262fb8d 100644 --- a/extensions/transformiix/source/xpath/ExprLexer.cpp +++ b/extensions/transformiix/source/xpath/ExprLexer.cpp @@ -233,13 +233,14 @@ MBool ExprLexer::nextIsOperatorToken(Token* token) **/ void ExprLexer::parse(const String& pattern) { + if (pattern.isEmpty()) + return; + String tokenBuffer; PRInt32 iter = 0, start; PRInt32 size = pattern.length(); short defType; UNICODE_CHAR ch; - if (size==0) - return; //-- initialize previous token, this will automatically get //-- deleted when it goes out of scope diff --git a/extensions/transformiix/source/xpath/ExprParser.cpp b/extensions/transformiix/source/xpath/ExprParser.cpp index b674979bf6d..23f1102ac84 100644 --- a/extensions/transformiix/source/xpath/ExprParser.cpp +++ b/extensions/transformiix/source/xpath/ExprParser.cpp @@ -62,10 +62,10 @@ AttributeValueTemplate* ExprParser::createAttributeValueTemplate AttributeValueTemplate* avt = new AttributeValueTemplate(); - PRInt32 size = attValue.length(); - if (size == 0) + if (attValue.isEmpty()) return avt; //XXX should return 0, but that causes crash in lre12 + PRInt32 size = attValue.length(); int cc = 0; UNICODE_CHAR nextCh; UNICODE_CHAR ch; @@ -104,7 +104,7 @@ AttributeValueTemplate* ExprParser::createAttributeValueTemplate nextCh = cc != size ? attValue.charAt(cc) : 0; } else { - if (buffer.length() > 0) + if (!buffer.isEmpty()) avt->addExpr(new StringExpr(buffer)); buffer.clear(); inExpr = MB_TRUE; @@ -147,7 +147,7 @@ AttributeValueTemplate* ExprParser::createAttributeValueTemplate return 0; } - if (buffer.length() > 0) + if (!buffer.isEmpty()) avt->addExpr(new StringExpr(buffer)); return avt; diff --git a/extensions/transformiix/source/xpath/StringFunctionCall.cpp b/extensions/transformiix/source/xpath/StringFunctionCall.cpp index 45d5805e6c7..33b0facec89 100644 --- a/extensions/transformiix/source/xpath/StringFunctionCall.cpp +++ b/extensions/transformiix/source/xpath/StringFunctionCall.cpp @@ -234,8 +234,15 @@ ExprResult* StringFunctionCall::evaluate(Node* context, ContextState* cs) { break; case TRANSLATE: if ( requireParams(3, 3, cs) ) { - String src, oldChars, newChars; + String src; evaluateToString((Expr*)iter->next(),context, cs, src); + + if (src.isEmpty()) { + result = new StringResult(""); + break; + } + + String oldChars, newChars; evaluateToString((Expr*)iter->next(),context, cs, oldChars); evaluateToString((Expr*)iter->next(),context, cs, newChars); PRInt32 size = src.length(); @@ -245,10 +252,12 @@ ExprResult* StringFunctionCall::evaluate(Node* context, ContextState* cs) { for (i = 0; i < size; i++) { PRInt32 idx = oldChars.indexOf(chars[i]); if (idx >= 0) { - if (idx 0; + return !value.isEmpty(); } //-- booleanValue double StringResult::numberValue() { diff --git a/extensions/transformiix/source/xpath/UnionExpr.cpp b/extensions/transformiix/source/xpath/UnionExpr.cpp index 229c952b685..fefd5497824 100644 --- a/extensions/transformiix/source/xpath/UnionExpr.cpp +++ b/extensions/transformiix/source/xpath/UnionExpr.cpp @@ -95,7 +95,8 @@ ExprResult* UnionExpr::evaluate(Node* context, ContextState* cs) { * context Node, and ContextState. **/ double UnionExpr::getDefaultPriority(Node* node, Node* context, - ContextState* cs) { + ContextState* cs) +{ //-- find highest priority double priority = Double::NEGATIVE_INFINITY; ListIterator iter(&expressions); diff --git a/extensions/transformiix/source/xslt/Numbering.cpp b/extensions/transformiix/source/xslt/Numbering.cpp index 3fda85ae8a4..eb17c356fa8 100644 --- a/extensions/transformiix/source/xslt/Numbering.cpp +++ b/extensions/transformiix/source/xslt/Numbering.cpp @@ -41,7 +41,7 @@ void Numbering::doNumbering String valueAttr = xslNumber->getAttribute(VALUE_ATTR); //-- check for expr - if (valueAttr.length() > 0) { + if (!valueAttr.isEmpty()) { Expr* expr = ps->getExpr(valueAttr); nbrOfCounts = 1; counts = new int[1]; @@ -57,7 +57,9 @@ void Numbering::doNumbering String countAttr = xslNumber->getAttribute(COUNT_ATTR); PatternExpr* countExpr = 0; - if (countAttr.length() > 0) countExpr = ps->getPatternExpr(countAttr); + if (!countAttr.isEmpty()) { + countExpr = ps->getPatternExpr(countAttr); + } else { switch(context->getNodeType()) { case Node::ATTRIBUTE_NODE: diff --git a/extensions/transformiix/source/xslt/ProcessorState.cpp b/extensions/transformiix/source/xslt/ProcessorState.cpp index 2bce02b0d86..3b201f16a7b 100644 --- a/extensions/transformiix/source/xslt/ProcessorState.cpp +++ b/extensions/transformiix/source/xslt/ProcessorState.cpp @@ -129,7 +129,7 @@ void ProcessorState::addAttributeSet(Element* aAttributeSet, return; const String& name = aAttributeSet->getAttribute(NAME_ATTR); - if (name.length() == 0) { + if (name.isEmpty()) { String err("missing required name attribute for xsl:attribute-set"); recieveError(err); return; @@ -176,7 +176,7 @@ void ProcessorState::addTemplate(Element* aXslTemplate, NS_ASSERTION(aXslTemplate, "missing template"); const String& name = aXslTemplate->getAttribute(NAME_ATTR); - if (name.length() > 0) { + if (!name.isEmpty()) { // check for duplicates Element* tmp = (Element*)aImportFrame->mNamedTemplates.get(name); if (tmp) { @@ -189,7 +189,7 @@ void ProcessorState::addTemplate(Element* aXslTemplate, } const String& match = aXslTemplate->getAttribute(MATCH_ATTR); - if (match.length() > 0) { + if (!match.isEmpty()) { // get the txList for the right mode const String& mode = aXslTemplate->getAttribute(MODE_ATTR); txList* templates = @@ -374,7 +374,7 @@ Node* ProcessorState::retrieveDocument(const String& uri, const String& baseUri) } // return element with supplied id if supplied - if (frag.length()) + if (!frag.isEmpty()) return xmlDoc->getElementById(frag); return xmlDoc; @@ -426,7 +426,7 @@ Element* ProcessorState::findTemplate(Node* aNode, templ->mTemplate->getAttribute(PRIORITY_ATTR); double tmpPriority; - if (priorityAttr.length() > 0) { + if (!priorityAttr.isEmpty()) { Double dbl(priorityAttr); tmpPriority = dbl.doubleValue(); } @@ -495,7 +495,7 @@ Expr* ProcessorState::getExpr(const String& pattern) { if ( !expr ) { expr = exprParser.createExpr(pattern); if ( !expr ) { - String err = "invalid expression: "; + String err = "Error in parsing XPath expression: "; err.append(pattern); expr = new ErrorFunctionCall(err); } @@ -592,7 +592,7 @@ Document* ProcessorState::getResultDocument() { void ProcessorState::getResultNameSpaceURI(const String& name, String& nameSpaceURI) { String prefix; XMLUtils::getNameSpace(name, prefix); - if (prefix.length() == 0) { + if (prefix.isEmpty()) { nameSpaceURI.clear(); nameSpaceURI.append(*(String*)defaultNameSpaceURIStack.peek()); } @@ -815,57 +815,57 @@ MBool ProcessorState::addDecimalFormat(Element* element) attValue = element->getAttribute(DECIMAL_SEPARATOR_ATTR); if (attValue.length() == 1) format->mDecimalSeparator = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(GROUPING_SEPARATOR_ATTR); if (attValue.length() == 1) format->mGroupingSeparator = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(INFINITY_ATTR); - if (attValue.length() > 0) + if (!attValue.isEmpty()) format->mInfinity=attValue; attValue = element->getAttribute(MINUS_SIGN_ATTR); if (attValue.length() == 1) format->mMinusSign = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(NAN_ATTR); - if (attValue.length() > 0) + if (!attValue.isEmpty()) format->mNaN=attValue; attValue = element->getAttribute(PERCENT_ATTR); if (attValue.length() == 1) format->mPercent = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(PER_MILLE_ATTR); if (attValue.length() == 1) format->mPerMille = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(ZERO_DIGIT_ATTR); if (attValue.length() == 1) format->mZeroDigit = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(DIGIT_ATTR); if (attValue.length() == 1) format->mDigit = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; attValue = element->getAttribute(PATTERN_SEPARATOR_ATTR); if (attValue.length() == 1) format->mPatternSeparator = attValue.charAt(0); - else if (attValue.length() > 1) + else if (!attValue.isEmpty()) success = MB_FALSE; if (!success) { @@ -878,7 +878,7 @@ MBool ProcessorState::addDecimalFormat(Element* element) txDecimalFormat* existing = NULL; - if (defaultDecimalFormatSet || formatName.length() > 0) { + if (defaultDecimalFormatSet || !formatName.isEmpty()) { existing = (txDecimalFormat*)decimalFormats.get(formatName); } else { @@ -1205,7 +1205,7 @@ void ProcessorState::initialize() { } } else if ( attName.isEqual(RESULT_NS_ATTR) ) { - if (attValue.length() > 0) { + if (!attValue.isEmpty()) { if ( attValue.indexOf(HTML_NS) == 0 ) { setOutputMethod("html"); } @@ -1213,7 +1213,7 @@ void ProcessorState::initialize() { } } else if ( attName.isEqual(INDENT_RESULT_ATTR) ) { - if ( attValue.length() > 0 ) { + if (!attValue.isEmpty()) { format.setIndent(attValue.isEqual(YES_VALUE)); } } diff --git a/extensions/transformiix/source/xslt/XSLTProcessor.cpp b/extensions/transformiix/source/xslt/XSLTProcessor.cpp index 9464a6f2173..3d8c4b8df2d 100644 --- a/extensions/transformiix/source/xslt/XSLTProcessor.cpp +++ b/extensions/transformiix/source/xslt/XSLTProcessor.cpp @@ -254,7 +254,7 @@ void XSLTProcessor::parseStylesheetPI(String& data, String& type, String& href) bufferMap.put("href", &href); int ccount = 0; MBool inLiteral = MB_FALSE; - char matchQuote = '"'; + UNICODE_CHAR matchQuote = '"'; String sink; String* buffer = &sink; @@ -268,7 +268,7 @@ void XSLTProcessor::parseStylesheetPI(String& data, String& type, String& href) break; case '=': if ( inLiteral ) buffer->append(ch); - else if ( buffer->length() > 0 ) { + else if (!buffer->isEmpty()) { buffer = (String*)bufferMap.get(*buffer); if ( !buffer ) { sink.clear(); @@ -478,7 +478,7 @@ void XSLTProcessor::processTopLevel(Document* aSource, // Add error to ErrorObserver String fName = element->getAttribute(NAME_ATTR); String err("unable to add "); - if (fName.length() == 0) + if (fName.isEmpty()) err.append("default"); else { err.append("\""); @@ -493,7 +493,7 @@ void XSLTProcessor::processTopLevel(Document* aSource, case XSLType::PARAM : { String name = element->getAttribute(NAME_ATTR); - if ( name.length() == 0 ) { + if (name.isEmpty()) { notifyError("missing required name attribute for xsl:param"); break; } @@ -534,26 +534,26 @@ void XSLTProcessor::processTopLevel(Document* aSource, OutputFormat* format = aPs->getOutputFormat(); String attValue = element->getAttribute(METHOD_ATTR); - if (attValue.length() > 0) aPs->setOutputMethod(attValue); + if (!attValue.isEmpty()) aPs->setOutputMethod(attValue); attValue = element->getAttribute(VERSION_ATTR); - if (attValue.length() > 0) format->setVersion(attValue); + if (!attValue.isEmpty()) format->setVersion(attValue); attValue = element->getAttribute(ENCODING_ATTR); - if (attValue.length() > 0) format->setEncoding(attValue); + if (!attValue.isEmpty()) format->setEncoding(attValue); attValue = element->getAttribute(INDENT_ATTR); - if (attValue.length() > 0) { + if (!attValue.isEmpty()) { MBool allowIndent = attValue.isEqual(YES_VALUE); format->setIndent(allowIndent); } attValue = element->getAttribute(DOCTYPE_PUBLIC_ATTR); - if (attValue.length() > 0) + if (!attValue.isEmpty()) format->setDoctypePublic(attValue); attValue = element->getAttribute(DOCTYPE_SYSTEM_ATTR); - if (attValue.length() > 0) + if (!attValue.isEmpty()) format->setDoctypeSystem(attValue); break; @@ -564,7 +564,7 @@ void XSLTProcessor::processTopLevel(Document* aSource, case XSLType::VARIABLE : { String name = element->getAttribute(NAME_ATTR); - if ( name.length() == 0 ) { + if (name.isEmpty()) { notifyError("missing required name attribute for xsl:variable"); break; } @@ -575,7 +575,7 @@ void XSLTProcessor::processTopLevel(Document* aSource, case XSLType::PRESERVE_SPACE : { String elements = element->getAttribute(ELEMENTS_ATTR); - if ( elements.length() == 0 ) { + if (elements.isEmpty()) { //-- add error to ErrorObserver String err("missing required 'elements' attribute for "); err.append("xsl:preserve-space"); @@ -591,7 +591,7 @@ void XSLTProcessor::processTopLevel(Document* aSource, case XSLType::STRIP_SPACE : { String elements = element->getAttribute(ELEMENTS_ATTR); - if ( elements.length() == 0 ) { + if (elements.isEmpty()) { //-- add error to ErrorObserver String err("missing required 'elements' attribute for "); err.append("xsl:strip-space"); @@ -1021,7 +1021,7 @@ void XSLTProcessor::processAction } //-- create new text node and add it to the result tree //-- if necessary - if ( textValue.length() > 0) + if (!textValue.isEmpty()) ps->addToResultTree(resultDoc->createTextNode(textValue)); return; } @@ -1043,9 +1043,14 @@ void XSLTProcessor::processAction const String& mode = actionElement->getAttribute(MODE_ATTR); String selectAtt = actionElement->getAttribute(SELECT_ATTR); - if ( selectAtt.length() == 0 ) selectAtt = "node()"; - pExpr = ps->getPatternExpr(selectAtt); - ExprResult* exprResult = pExpr->evaluate(node, ps); + if (selectAtt.isEmpty()) + selectAtt = "node()"; + expr = ps->getExpr(selectAtt); + if (!expr) { + // XXX ErrorReport: out of memory + break; + } + ExprResult* exprResult = expr->evaluate(node, ps); NodeSet* nodeSet = 0; if ( exprResult->getResultType() == ExprResult::NODESET ) { nodeSet = (NodeSet*)exprResult; @@ -1138,7 +1143,7 @@ void XSLTProcessor::processAction case XSLType::CALL_TEMPLATE : { String templateName = actionElement->getAttribute(NAME_ATTR); - if ( templateName.length() > 0 ) { + if (!templateName.isEmpty()) { Element* xslTemplate = ps->getNamedTemplate(templateName); if ( xslTemplate ) { //-- new code from OG @@ -1281,7 +1286,7 @@ void XSLTProcessor::processAction { String selectAtt = actionElement->getAttribute(SELECT_ATTR); - if (selectAtt.length() == 0) + if (selectAtt.isEmpty()) { notifyError("missing required select attribute for xsl:for-each"); break; @@ -1505,7 +1510,7 @@ void XSLTProcessor::processAction break; } exprResult->stringValue(value); - if (value.length()>0) + if (!value.isEmpty()) ps->addToResultTree(resultDoc->createTextNode(value)); delete exprResult; break; @@ -1513,7 +1518,7 @@ void XSLTProcessor::processAction case XSLType::VARIABLE : { String name = actionElement->getAttribute(NAME_ATTR); - if ( name.length() == 0 ) { + if (name.isEmpty()) { notifyError("missing required name attribute for xsl:variable"); break; } @@ -1527,7 +1532,7 @@ void XSLTProcessor::processAction // Find out if we have a new default namespace MBool newDefaultNS = MB_FALSE; String nsURI = actionElement->getAttribute(XMLUtils::XMLNS); - if ( nsURI.length() != 0 ) { + if (!nsURI.isEmpty()) { // Set the default namespace ps->setDefaultNameSpaceURIForResult(nsURI); newDefaultNS = MB_TRUE; @@ -1602,7 +1607,7 @@ void XSLTProcessor::processAction void XSLTProcessor::processAttributeSets (const String& names, Node* node, ProcessorState* ps) { - if (names.length() == 0) return; + if (names.isEmpty()) return; //-- split names Tokenizer tokenizer(names); @@ -1662,7 +1667,7 @@ NamedMap* XSLTProcessor::processParameters(Element* xslAction, Node* context, Pr short xslType = getElementType(actionName, ps); if ( xslType == XSLType::WITH_PARAM ) { String name = action->getAttribute(NAME_ATTR); - if ( name.length() == 0 ) { + if (name.isEmpty()) { notifyError("missing required name attribute for xsl:with-param"); } else { @@ -1840,7 +1845,7 @@ void XSLTProcessor::processTemplateParams short xslType = getElementType(actionName, ps); if ( xslType == XSLType::PARAM ) { String name = action->getAttribute(NAME_ATTR); - if ( name.length() == 0 ) { + if (name.isEmpty()) { notifyError("missing required name attribute for xsl:param"); } else { @@ -1932,7 +1937,7 @@ void XSLTProcessor::xslCopy(Node* node, Element* action, ProcessorState* ps) { // Find out if we have a new default namespace MBool newDefaultNS = MB_FALSE; String nsURI = element->getAttribute(XMLUtils::XMLNS); - if ( nsURI.length() != 0 ) { + if (!nsURI.isEmpty()) { // Set the default namespace ps->setDefaultNameSpaceURIForResult(nsURI); newDefaultNS = MB_TRUE; diff --git a/extensions/transformiix/source/xslt/functions/ElementAvailableFnCall.cpp b/extensions/transformiix/source/xslt/functions/ElementAvailableFnCall.cpp index 5308975009b..599b3ab6b7e 100644 --- a/extensions/transformiix/source/xslt/functions/ElementAvailableFnCall.cpp +++ b/extensions/transformiix/source/xslt/functions/ElementAvailableFnCall.cpp @@ -75,7 +75,7 @@ ExprResult* ElementAvailableFunctionCall::evaluate(Node* context, ContextState* if (XMLUtils::isValidQName(property)) { String prefix, propertyNsURI; XMLUtils::getNameSpace(property, prefix); - if (prefix.length() > 0) { + if (!prefix.isEmpty()) { cs->getNameSpaceURIFromPrefix(property, propertyNsURI); } if (propertyNsURI.isEqual(XSLT_NS)) { diff --git a/extensions/transformiix/source/xslt/functions/FunctionAvailableFnCall.cpp b/extensions/transformiix/source/xslt/functions/FunctionAvailableFnCall.cpp index 5568192f006..f06a57d81b5 100644 --- a/extensions/transformiix/source/xslt/functions/FunctionAvailableFnCall.cpp +++ b/extensions/transformiix/source/xslt/functions/FunctionAvailableFnCall.cpp @@ -76,7 +76,7 @@ ExprResult* FunctionAvailableFunctionCall::evaluate(Node* context, ContextState* if (XMLUtils::isValidQName(property)) { String prefix; XMLUtils::getNameSpace(property, prefix); - if ((prefix.length() == 0) && + if (prefix.isEmpty() && (property.isEqual(XPathNames::BOOLEAN_FN) || property.isEqual(XPathNames::CONCAT_FN) || property.isEqual(XPathNames::CONTAINS_FN) || diff --git a/extensions/transformiix/source/xslt/util/txNodeSorter.cpp b/extensions/transformiix/source/xslt/util/txNodeSorter.cpp index c4081f869ba..7979429c948 100644 --- a/extensions/transformiix/source/xslt/util/txNodeSorter.cpp +++ b/extensions/transformiix/source/xslt/util/txNodeSorter.cpp @@ -49,8 +49,8 @@ #define DEFAULT_LANG "en" -txNodeSorter::txNodeSorter(ProcessorState* aPs) : mNKeys(0), - mPs(aPs) +txNodeSorter::txNodeSorter(ProcessorState* aPs) : mPs(aPs), + mNKeys(0) { } diff --git a/extensions/transformiix/source/xslt/util/txXPathResultComparator.cpp b/extensions/transformiix/source/xslt/util/txXPathResultComparator.cpp index efbb37a3408..ec9b3cab142 100644 --- a/extensions/transformiix/source/xslt/util/txXPathResultComparator.cpp +++ b/extensions/transformiix/source/xslt/util/txXPathResultComparator.cpp @@ -188,7 +188,7 @@ int txResultStringComparator::compareValues(TxObject* aVal1, TxObject* aVal2) if (result != 0) return ((mSorting & kAscending) ? 1 : -1) * result; - if (strval1->mCaseLength < 0) { + if ((strval1->mCaseLength == 0) && (strval1->mLength != 0)) { String* caseString = (String *)strval1->mCaseKey; rv = createRawSortKey(kCollationCaseSensitive, caseString->getConstNSString(), @@ -196,11 +196,13 @@ int txResultStringComparator::compareValues(TxObject* aVal1, TxObject* aVal2) &strval1->mCaseLength); if (NS_FAILED(rv)) { // XXX ErrorReport + strval1->mCaseKey = caseString; + strval1->mCaseLength = 0; return -1; } delete caseString; } - if (strval2->mCaseLength < 0) { + if ((strval2->mCaseLength == 0) && (strval2->mLength != 0)) { String* caseString = (String *)strval2->mCaseKey; rv = createRawSortKey(kCollationCaseSensitive, caseString->getConstNSString(), @@ -208,6 +210,8 @@ int txResultStringComparator::compareValues(TxObject* aVal1, TxObject* aVal2) &strval2->mCaseLength); if (NS_FAILED(rv)) { // XXX ErrorReport + strval2->mCaseKey = caseString; + strval2->mCaseLength = 0; return -1; } delete caseString; @@ -241,16 +245,16 @@ nsresult txResultStringComparator::createRawSortKey(const nsCollationStrength aS } txResultStringComparator::StringValue::StringValue() : mKey(0), - mLength(0), mCaseKey(0), - mCaseLength(-1) + mLength(0), + mCaseLength(0) { } txResultStringComparator::StringValue::~StringValue() { PR_Free(mKey); - if (mCaseLength >= 0) + if (mCaseLength > 0) PR_Free((PRUint8*)mCaseKey); else delete (String*)mCaseKey; @@ -262,6 +266,10 @@ txResultNumberComparator::txResultNumberComparator(MBool aAscending) mAscending = aAscending ? 1 : -1; } +txResultNumberComparator::~txResultNumberComparator() +{ +} + TxObject* txResultNumberComparator::createSortableValue(ExprResult* aExprRes) { NumberValue* numval = new NumberValue; diff --git a/extensions/transformiix/source/xslt/util/txXPathResultComparator.h b/extensions/transformiix/source/xslt/util/txXPathResultComparator.h index de74c8d1817..c481e564073 100644 --- a/extensions/transformiix/source/xslt/util/txXPathResultComparator.h +++ b/extensions/transformiix/source/xslt/util/txXPathResultComparator.h @@ -75,7 +75,7 @@ class txResultStringComparator : public txXPathResultComparator public: txResultStringComparator(MBool aAscending, MBool aUpperFirst, const String& aLanguage); - ~txResultStringComparator(); + virtual ~txResultStringComparator(); int compareValues(TxObject* aVal1, TxObject* aVal2); TxObject* createSortableValue(ExprResult* aExprRes); @@ -113,6 +113,7 @@ class txResultNumberComparator : public txXPathResultComparator { public: txResultNumberComparator(MBool aAscending); + virtual ~txResultNumberComparator(); int compareValues(TxObject* aVal1, TxObject* aVal2); TxObject* createSortableValue(ExprResult* aExprRes);