зеркало из https://github.com/mozilla/pjs.git
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.
This commit is contained in:
Родитель
c67a9803a7
Коммит
853dfbd0cf
|
@ -34,10 +34,10 @@ void CommandLineUtils::getOptions
|
||||||
arg.clear();
|
arg.clear();
|
||||||
arg.append(argv[i]);
|
arg.append(argv[i]);
|
||||||
|
|
||||||
if ((arg.length()>0) && (arg.charAt(0) == '-')) {
|
if (!arg.isEmpty() && (arg.charAt(0) == '-')) {
|
||||||
|
|
||||||
// clean up previous flag
|
// clean up previous flag
|
||||||
if (flag.length()>0) {
|
if (!flag.isEmpty()) {
|
||||||
options.put(flag, new String(arg));
|
options.put(flag, new String(arg));
|
||||||
flag.clear();
|
flag.clear();
|
||||||
}
|
}
|
||||||
|
@ -68,11 +68,13 @@ void CommandLineUtils::getOptions
|
||||||
}// if flag char '-'
|
}// if flag char '-'
|
||||||
else {
|
else {
|
||||||
// Store both flag key and number key
|
// 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();
|
flag.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
}// end for
|
}// end for
|
||||||
if (flag.length()>0) options.put(flag, new String("no value"));
|
if (!flag.isEmpty())
|
||||||
|
options.put(flag, new String("no value"));
|
||||||
} //-- getOptions
|
} //-- getOptions
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ void String::append(const char* source)
|
||||||
//
|
//
|
||||||
void String::append(const UNICODE_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)
|
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);
|
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() )
|
//Return the length of this string ( PRInt32 nsString::Length() )
|
||||||
|
//
|
||||||
PRInt32 String::length() const
|
PRInt32 String::length() const
|
||||||
{
|
{
|
||||||
if (ptrNSString){
|
if (ptrNSString){
|
||||||
|
@ -815,10 +825,3 @@ const nsString& String::getConstNSString() const
|
||||||
{
|
{
|
||||||
return *ptrNSString;
|
return *ptrNSString;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
//String copies itself to the destination
|
|
||||||
//
|
|
||||||
//void String::copyString(SPECIAL_CHAR* dest)
|
|
||||||
//{
|
|
||||||
//}
|
|
||||||
|
|
|
@ -143,18 +143,6 @@ void NamedMap::dumpMap() {
|
||||||
#endif
|
#endif
|
||||||
} //-- dumpMap
|
} //-- 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
|
* Returns the object reference in this Map associated with the given name
|
||||||
* @return the object reference in this Map associated with the given name
|
* @return the object reference in this Map associated with the given name
|
||||||
|
|
|
@ -96,24 +96,6 @@ public:
|
||||||
|
|
||||||
void clear(MBool doObjectDeletion);
|
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.
|
* Returns true if there are no Nodes in the NodeSet.
|
||||||
* @return true if there are no Nodes in the NodeSet.
|
* @return true if there are no Nodes in the NodeSet.
|
||||||
|
|
|
@ -15,12 +15,12 @@
|
||||||
* The Original Code is mozilla.org code.
|
* The Original Code is mozilla.org code.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is
|
* The Initial Developer of the Original Code is
|
||||||
* Axel Hecht. Portions.
|
* Axel Hecht.
|
||||||
* Portions created by the Initial Developer are Copyright (C) 2001
|
* Portions created by the Initial Developer are Copyright (C) 2001
|
||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
* Axel Hecht <axel@pike.org> (Original Author)
|
* Axel Hecht <axel@pike.org>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
|
|
@ -905,6 +905,14 @@ PRInt32 String::lastIndexOf(const String& data, PRInt32 offset) const
|
||||||
return NOT_FOUND;
|
return NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//Checks whether the string is empty
|
||||||
|
//
|
||||||
|
MBool String::isEmpty() const
|
||||||
|
{
|
||||||
|
return (strLength == 0);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//Returns the length of the String
|
//Returns the length of the String
|
||||||
//
|
//
|
||||||
|
|
|
@ -131,6 +131,9 @@ class String : public TxObject
|
||||||
virtual PRInt32 lastIndexOf(const String& data) const;
|
virtual PRInt32 lastIndexOf(const String& data) const;
|
||||||
virtual PRInt32 lastIndexOf(const String& data, PRInt32 offset) 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
|
virtual PRInt32 length() const; //Returns the length
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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<nsIURI> 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
|
|
|
@ -187,7 +187,7 @@ MBool XMLDOMUtils::getNameSpace
|
||||||
(const String& prefix, Element* element, String& dest)
|
(const String& prefix, Element* element, String& dest)
|
||||||
{
|
{
|
||||||
String attName("xmlns");
|
String attName("xmlns");
|
||||||
if (prefix.length() > 0) {
|
if (!prefix.isEmpty()) {
|
||||||
attName.append(':');
|
attName.append(':');
|
||||||
attName.append(prefix);
|
attName.append(prefix);
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,13 +102,16 @@ MBool XMLUtils::isQNameChar(PRInt32 ch) {
|
||||||
**/
|
**/
|
||||||
MBool XMLUtils::isValidQName(String& name) {
|
MBool XMLUtils::isValidQName(String& name) {
|
||||||
|
|
||||||
|
if (name.isEmpty())
|
||||||
|
return MB_FALSE;
|
||||||
|
|
||||||
|
if (!isAlphaChar(name.charAt(0)))
|
||||||
|
return MB_FALSE;
|
||||||
|
|
||||||
int size = name.length();
|
int size = name.length();
|
||||||
if ( size == 0 ) return MB_FALSE;
|
for (int i = 1; i < size; i++) {
|
||||||
else if ( !isAlphaChar(name.charAt(0))) return MB_FALSE;
|
if (!isQNameChar(name.charAt(i)))
|
||||||
else {
|
return MB_FALSE;
|
||||||
for ( int i = 1; i < size; i++) {
|
|
||||||
if ( ! isQNameChar(name.charAt(i))) return MB_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return MB_TRUE;
|
return MB_TRUE;
|
||||||
} //-- isValidQName
|
} //-- isValidQName
|
||||||
|
@ -149,7 +152,8 @@ void XMLUtils::normalizeAttributeValue(String& attValue) {
|
||||||
UNICODE_CHAR ch = chars[cc++];
|
UNICODE_CHAR ch = chars[cc++];
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case ' ':
|
case ' ':
|
||||||
if ( attValue.length() > 0) addSpace = MB_TRUE;
|
if (!attValue.isEmpty())
|
||||||
|
addSpace = MB_TRUE;
|
||||||
break;
|
break;
|
||||||
case '\r':
|
case '\r':
|
||||||
break;
|
break;
|
||||||
|
@ -214,14 +218,14 @@ MBool XMLUtils::shouldStripTextnode (const String& data){
|
||||||
MBool toStrip = MB_TRUE;
|
MBool toStrip = MB_TRUE;
|
||||||
for (PRInt32 i=0;toStrip && i<data.length();i++){
|
for (PRInt32 i=0;toStrip && i<data.length();i++){
|
||||||
switch(data.charAt(i)) {
|
switch(data.charAt(i)) {
|
||||||
case 0x0020: // space
|
case 0x0020: // space
|
||||||
case 0x0009: // tab
|
case 0x0009: // tab
|
||||||
case 0x000A: // LF
|
case 0x000A: // LF
|
||||||
case 0x000D: // CR
|
case 0x000D: // CR
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
toStrip = MB_FALSE;
|
toStrip = MB_FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return toStrip;
|
return toStrip;
|
||||||
|
|
|
@ -71,11 +71,10 @@ const String& Element::getTagName()
|
||||||
*/
|
*/
|
||||||
const String& Element::getAttribute(const String& aName)
|
const String& Element::getAttribute(const String& aName)
|
||||||
{
|
{
|
||||||
Node* tempNode = getAttributeNode(aName);
|
Node* tempNode = getAttributeNode(aName);
|
||||||
|
|
||||||
if (tempNode)
|
if (tempNode)
|
||||||
return tempNode->getNodeValue();
|
return tempNode->getNodeValue();
|
||||||
else
|
|
||||||
return NULL_STRING;
|
return NULL_STRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,10 +155,9 @@ Attr* Element::getAttributeNode(const String& aName)
|
||||||
nsCOMPtr<nsIDOMAttr> attr;
|
nsCOMPtr<nsIDOMAttr> attr;
|
||||||
|
|
||||||
if (NS_SUCCEEDED(nsElement->GetAttributeNode(aName.getConstNSString(),
|
if (NS_SUCCEEDED(nsElement->GetAttributeNode(aName.getConstNSString(),
|
||||||
getter_AddRefs(attr))))
|
getter_AddRefs(attr))) && attr)
|
||||||
return (Attr*)ownerDocument->createWrapper(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,
|
if (NS_SUCCEEDED(nsElement->SetAttributeNode(newAttr,
|
||||||
getter_AddRefs(returnAttr))))
|
getter_AddRefs(returnAttr))))
|
||||||
return (Attr*)ownerDocument->createWrapper(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);
|
attrWrapper = new Attr(removedAttr, ownerDocument);
|
||||||
return attrWrapper;
|
return attrWrapper;
|
||||||
}
|
}
|
||||||
else
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -227,8 +223,7 @@ NodeList* Element::getElementsByTagName(const String& aName)
|
||||||
if (NS_SUCCEEDED(nsElement->GetElementsByTagName(aName.getConstNSString(),
|
if (NS_SUCCEEDED(nsElement->GetElementsByTagName(aName.getConstNSString(),
|
||||||
getter_AddRefs(list))))
|
getter_AddRefs(list))))
|
||||||
return ownerDocument->createNodeList(list);
|
return ownerDocument->createNodeList(list);
|
||||||
else
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -135,7 +135,7 @@ MBool AttributeExpr::matches(Node* node, Node* context, ContextState* cs) {
|
||||||
XMLDOMUtils::getNameSpace(prefixForNode, (Element*)parent,
|
XMLDOMUtils::getNameSpace(prefixForNode, (Element*)parent,
|
||||||
nsForNode);
|
nsForNode);
|
||||||
String nsForTest;
|
String nsForTest;
|
||||||
if (prefix.length())
|
if (!prefix.isEmpty())
|
||||||
cs->getNameSpaceURIFromPrefix(prefix, nsForTest);
|
cs->getNameSpaceURIFromPrefix(prefix, nsForTest);
|
||||||
if (!nsForTest.isEqual(nsForNode)) return MB_FALSE;
|
if (!nsForTest.isEqual(nsForNode)) return MB_FALSE;
|
||||||
return localName.isEqual(this->name);
|
return localName.isEqual(this->name);
|
||||||
|
@ -143,9 +143,10 @@ MBool AttributeExpr::matches(Node* node, Node* context, ContextState* cs) {
|
||||||
else {
|
else {
|
||||||
if (isNamespaceWild) return nodeName.isEqual(this->name);
|
if (isNamespaceWild) return nodeName.isEqual(this->name);
|
||||||
String nsForTest;
|
String nsForTest;
|
||||||
if (prefix.length())
|
if (!prefix.isEmpty())
|
||||||
cs->getNameSpaceURIFromPrefix(prefix, nsForTest);
|
cs->getNameSpaceURIFromPrefix(prefix, nsForTest);
|
||||||
if (nsForTest.length() > 0) return MB_FALSE;
|
if (!nsForTest.isEmpty())
|
||||||
|
return MB_FALSE;
|
||||||
return nodeName.isEqual(this->name);
|
return nodeName.isEqual(this->name);
|
||||||
}
|
}
|
||||||
return MB_FALSE;
|
return MB_FALSE;
|
||||||
|
|
|
@ -48,7 +48,7 @@ ElementExpr::ElementExpr(String& name)
|
||||||
|
|
||||||
//-- set flags
|
//-- set flags
|
||||||
isNameWild = this->name.isEqual(WILD_CARD);
|
isNameWild = this->name.isEqual(WILD_CARD);
|
||||||
isNamespaceWild = (isNameWild && (prefix.length() == 0));
|
isNamespaceWild = (isNameWild && prefix.isEmpty());
|
||||||
} //-- ElementExpr
|
} //-- ElementExpr
|
||||||
|
|
||||||
//------------------/
|
//------------------/
|
||||||
|
@ -112,7 +112,7 @@ MBool ElementExpr::matches(Node* node, Node* context, ContextState* cs) {
|
||||||
//-- compare namespaces
|
//-- compare namespaces
|
||||||
String nsURI;
|
String nsURI;
|
||||||
// use context to get namespace for testing against
|
// use context to get namespace for testing against
|
||||||
if (prefix.length())
|
if (!prefix.isEmpty())
|
||||||
cs->getNameSpaceURIFromPrefix(prefix, nsURI);
|
cs->getNameSpaceURIFromPrefix(prefix, nsURI);
|
||||||
|
|
||||||
String nsURI2;
|
String nsURI2;
|
||||||
|
|
|
@ -233,13 +233,14 @@ MBool ExprLexer::nextIsOperatorToken(Token* token)
|
||||||
**/
|
**/
|
||||||
void ExprLexer::parse(const String& pattern)
|
void ExprLexer::parse(const String& pattern)
|
||||||
{
|
{
|
||||||
|
if (pattern.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
String tokenBuffer;
|
String tokenBuffer;
|
||||||
PRInt32 iter = 0, start;
|
PRInt32 iter = 0, start;
|
||||||
PRInt32 size = pattern.length();
|
PRInt32 size = pattern.length();
|
||||||
short defType;
|
short defType;
|
||||||
UNICODE_CHAR ch;
|
UNICODE_CHAR ch;
|
||||||
if (size==0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//-- initialize previous token, this will automatically get
|
//-- initialize previous token, this will automatically get
|
||||||
//-- deleted when it goes out of scope
|
//-- deleted when it goes out of scope
|
||||||
|
|
|
@ -62,10 +62,10 @@ AttributeValueTemplate* ExprParser::createAttributeValueTemplate
|
||||||
|
|
||||||
AttributeValueTemplate* avt = new AttributeValueTemplate();
|
AttributeValueTemplate* avt = new AttributeValueTemplate();
|
||||||
|
|
||||||
PRInt32 size = attValue.length();
|
if (attValue.isEmpty())
|
||||||
if (size == 0)
|
|
||||||
return avt; //XXX should return 0, but that causes crash in lre12
|
return avt; //XXX should return 0, but that causes crash in lre12
|
||||||
|
|
||||||
|
PRInt32 size = attValue.length();
|
||||||
int cc = 0;
|
int cc = 0;
|
||||||
UNICODE_CHAR nextCh;
|
UNICODE_CHAR nextCh;
|
||||||
UNICODE_CHAR ch;
|
UNICODE_CHAR ch;
|
||||||
|
@ -104,7 +104,7 @@ AttributeValueTemplate* ExprParser::createAttributeValueTemplate
|
||||||
nextCh = cc != size ? attValue.charAt(cc) : 0;
|
nextCh = cc != size ? attValue.charAt(cc) : 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (buffer.length() > 0)
|
if (!buffer.isEmpty())
|
||||||
avt->addExpr(new StringExpr(buffer));
|
avt->addExpr(new StringExpr(buffer));
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
inExpr = MB_TRUE;
|
inExpr = MB_TRUE;
|
||||||
|
@ -147,7 +147,7 @@ AttributeValueTemplate* ExprParser::createAttributeValueTemplate
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer.length() > 0)
|
if (!buffer.isEmpty())
|
||||||
avt->addExpr(new StringExpr(buffer));
|
avt->addExpr(new StringExpr(buffer));
|
||||||
|
|
||||||
return avt;
|
return avt;
|
||||||
|
|
|
@ -234,8 +234,15 @@ ExprResult* StringFunctionCall::evaluate(Node* context, ContextState* cs) {
|
||||||
break;
|
break;
|
||||||
case TRANSLATE:
|
case TRANSLATE:
|
||||||
if ( requireParams(3, 3, cs) ) {
|
if ( requireParams(3, 3, cs) ) {
|
||||||
String src, oldChars, newChars;
|
String src;
|
||||||
evaluateToString((Expr*)iter->next(),context, cs, 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, oldChars);
|
||||||
evaluateToString((Expr*)iter->next(),context, cs, newChars);
|
evaluateToString((Expr*)iter->next(),context, cs, newChars);
|
||||||
PRInt32 size = src.length();
|
PRInt32 size = src.length();
|
||||||
|
@ -245,10 +252,12 @@ ExprResult* StringFunctionCall::evaluate(Node* context, ContextState* cs) {
|
||||||
for (i = 0; i < size; i++) {
|
for (i = 0; i < size; i++) {
|
||||||
PRInt32 idx = oldChars.indexOf(chars[i]);
|
PRInt32 idx = oldChars.indexOf(chars[i]);
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
if (idx<newChars.length())
|
if (idx < newChars.length())
|
||||||
src.append(newChars.charAt(idx));
|
src.append(newChars.charAt(idx));
|
||||||
}
|
}
|
||||||
else src.append(chars[i]);
|
else {
|
||||||
|
src.append(chars[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
delete chars;
|
delete chars;
|
||||||
result = new StringResult(src);
|
result = new StringResult(src);
|
||||||
|
|
|
@ -66,7 +66,7 @@ void StringResult::stringValue(String& str) {
|
||||||
} //-- stringValue
|
} //-- stringValue
|
||||||
|
|
||||||
MBool StringResult::booleanValue() {
|
MBool StringResult::booleanValue() {
|
||||||
return value.length() > 0;
|
return !value.isEmpty();
|
||||||
} //-- booleanValue
|
} //-- booleanValue
|
||||||
|
|
||||||
double StringResult::numberValue() {
|
double StringResult::numberValue() {
|
||||||
|
|
|
@ -95,7 +95,8 @@ ExprResult* UnionExpr::evaluate(Node* context, ContextState* cs) {
|
||||||
* context Node, and ContextState.
|
* context Node, and ContextState.
|
||||||
**/
|
**/
|
||||||
double UnionExpr::getDefaultPriority(Node* node, Node* context,
|
double UnionExpr::getDefaultPriority(Node* node, Node* context,
|
||||||
ContextState* cs) {
|
ContextState* cs)
|
||||||
|
{
|
||||||
//-- find highest priority
|
//-- find highest priority
|
||||||
double priority = Double::NEGATIVE_INFINITY;
|
double priority = Double::NEGATIVE_INFINITY;
|
||||||
ListIterator iter(&expressions);
|
ListIterator iter(&expressions);
|
||||||
|
|
|
@ -41,7 +41,7 @@ void Numbering::doNumbering
|
||||||
|
|
||||||
String valueAttr = xslNumber->getAttribute(VALUE_ATTR);
|
String valueAttr = xslNumber->getAttribute(VALUE_ATTR);
|
||||||
//-- check for expr
|
//-- check for expr
|
||||||
if (valueAttr.length() > 0) {
|
if (!valueAttr.isEmpty()) {
|
||||||
Expr* expr = ps->getExpr(valueAttr);
|
Expr* expr = ps->getExpr(valueAttr);
|
||||||
nbrOfCounts = 1;
|
nbrOfCounts = 1;
|
||||||
counts = new int[1];
|
counts = new int[1];
|
||||||
|
@ -57,7 +57,9 @@ void Numbering::doNumbering
|
||||||
String countAttr = xslNumber->getAttribute(COUNT_ATTR);
|
String countAttr = xslNumber->getAttribute(COUNT_ATTR);
|
||||||
|
|
||||||
PatternExpr* countExpr = 0;
|
PatternExpr* countExpr = 0;
|
||||||
if (countAttr.length() > 0) countExpr = ps->getPatternExpr(countAttr);
|
if (!countAttr.isEmpty()) {
|
||||||
|
countExpr = ps->getPatternExpr(countAttr);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
switch(context->getNodeType()) {
|
switch(context->getNodeType()) {
|
||||||
case Node::ATTRIBUTE_NODE:
|
case Node::ATTRIBUTE_NODE:
|
||||||
|
|
|
@ -129,7 +129,7 @@ void ProcessorState::addAttributeSet(Element* aAttributeSet,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const String& name = aAttributeSet->getAttribute(NAME_ATTR);
|
const String& name = aAttributeSet->getAttribute(NAME_ATTR);
|
||||||
if (name.length() == 0) {
|
if (name.isEmpty()) {
|
||||||
String err("missing required name attribute for xsl:attribute-set");
|
String err("missing required name attribute for xsl:attribute-set");
|
||||||
recieveError(err);
|
recieveError(err);
|
||||||
return;
|
return;
|
||||||
|
@ -176,7 +176,7 @@ void ProcessorState::addTemplate(Element* aXslTemplate,
|
||||||
NS_ASSERTION(aXslTemplate, "missing template");
|
NS_ASSERTION(aXslTemplate, "missing template");
|
||||||
|
|
||||||
const String& name = aXslTemplate->getAttribute(NAME_ATTR);
|
const String& name = aXslTemplate->getAttribute(NAME_ATTR);
|
||||||
if (name.length() > 0) {
|
if (!name.isEmpty()) {
|
||||||
// check for duplicates
|
// check for duplicates
|
||||||
Element* tmp = (Element*)aImportFrame->mNamedTemplates.get(name);
|
Element* tmp = (Element*)aImportFrame->mNamedTemplates.get(name);
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
|
@ -189,7 +189,7 @@ void ProcessorState::addTemplate(Element* aXslTemplate,
|
||||||
}
|
}
|
||||||
|
|
||||||
const String& match = aXslTemplate->getAttribute(MATCH_ATTR);
|
const String& match = aXslTemplate->getAttribute(MATCH_ATTR);
|
||||||
if (match.length() > 0) {
|
if (!match.isEmpty()) {
|
||||||
// get the txList for the right mode
|
// get the txList for the right mode
|
||||||
const String& mode = aXslTemplate->getAttribute(MODE_ATTR);
|
const String& mode = aXslTemplate->getAttribute(MODE_ATTR);
|
||||||
txList* templates =
|
txList* templates =
|
||||||
|
@ -374,7 +374,7 @@ Node* ProcessorState::retrieveDocument(const String& uri, const String& baseUri)
|
||||||
}
|
}
|
||||||
|
|
||||||
// return element with supplied id if supplied
|
// return element with supplied id if supplied
|
||||||
if (frag.length())
|
if (!frag.isEmpty())
|
||||||
return xmlDoc->getElementById(frag);
|
return xmlDoc->getElementById(frag);
|
||||||
|
|
||||||
return xmlDoc;
|
return xmlDoc;
|
||||||
|
@ -426,7 +426,7 @@ Element* ProcessorState::findTemplate(Node* aNode,
|
||||||
templ->mTemplate->getAttribute(PRIORITY_ATTR);
|
templ->mTemplate->getAttribute(PRIORITY_ATTR);
|
||||||
|
|
||||||
double tmpPriority;
|
double tmpPriority;
|
||||||
if (priorityAttr.length() > 0) {
|
if (!priorityAttr.isEmpty()) {
|
||||||
Double dbl(priorityAttr);
|
Double dbl(priorityAttr);
|
||||||
tmpPriority = dbl.doubleValue();
|
tmpPriority = dbl.doubleValue();
|
||||||
}
|
}
|
||||||
|
@ -495,7 +495,7 @@ Expr* ProcessorState::getExpr(const String& pattern) {
|
||||||
if ( !expr ) {
|
if ( !expr ) {
|
||||||
expr = exprParser.createExpr(pattern);
|
expr = exprParser.createExpr(pattern);
|
||||||
if ( !expr ) {
|
if ( !expr ) {
|
||||||
String err = "invalid expression: ";
|
String err = "Error in parsing XPath expression: ";
|
||||||
err.append(pattern);
|
err.append(pattern);
|
||||||
expr = new ErrorFunctionCall(err);
|
expr = new ErrorFunctionCall(err);
|
||||||
}
|
}
|
||||||
|
@ -592,7 +592,7 @@ Document* ProcessorState::getResultDocument() {
|
||||||
void ProcessorState::getResultNameSpaceURI(const String& name, String& nameSpaceURI) {
|
void ProcessorState::getResultNameSpaceURI(const String& name, String& nameSpaceURI) {
|
||||||
String prefix;
|
String prefix;
|
||||||
XMLUtils::getNameSpace(name, prefix);
|
XMLUtils::getNameSpace(name, prefix);
|
||||||
if (prefix.length() == 0) {
|
if (prefix.isEmpty()) {
|
||||||
nameSpaceURI.clear();
|
nameSpaceURI.clear();
|
||||||
nameSpaceURI.append(*(String*)defaultNameSpaceURIStack.peek());
|
nameSpaceURI.append(*(String*)defaultNameSpaceURIStack.peek());
|
||||||
}
|
}
|
||||||
|
@ -815,57 +815,57 @@ MBool ProcessorState::addDecimalFormat(Element* element)
|
||||||
attValue = element->getAttribute(DECIMAL_SEPARATOR_ATTR);
|
attValue = element->getAttribute(DECIMAL_SEPARATOR_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mDecimalSeparator = attValue.charAt(0);
|
format->mDecimalSeparator = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(GROUPING_SEPARATOR_ATTR);
|
attValue = element->getAttribute(GROUPING_SEPARATOR_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mGroupingSeparator = attValue.charAt(0);
|
format->mGroupingSeparator = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(INFINITY_ATTR);
|
attValue = element->getAttribute(INFINITY_ATTR);
|
||||||
if (attValue.length() > 0)
|
if (!attValue.isEmpty())
|
||||||
format->mInfinity=attValue;
|
format->mInfinity=attValue;
|
||||||
|
|
||||||
attValue = element->getAttribute(MINUS_SIGN_ATTR);
|
attValue = element->getAttribute(MINUS_SIGN_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mMinusSign = attValue.charAt(0);
|
format->mMinusSign = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(NAN_ATTR);
|
attValue = element->getAttribute(NAN_ATTR);
|
||||||
if (attValue.length() > 0)
|
if (!attValue.isEmpty())
|
||||||
format->mNaN=attValue;
|
format->mNaN=attValue;
|
||||||
|
|
||||||
attValue = element->getAttribute(PERCENT_ATTR);
|
attValue = element->getAttribute(PERCENT_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mPercent = attValue.charAt(0);
|
format->mPercent = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(PER_MILLE_ATTR);
|
attValue = element->getAttribute(PER_MILLE_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mPerMille = attValue.charAt(0);
|
format->mPerMille = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(ZERO_DIGIT_ATTR);
|
attValue = element->getAttribute(ZERO_DIGIT_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mZeroDigit = attValue.charAt(0);
|
format->mZeroDigit = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(DIGIT_ATTR);
|
attValue = element->getAttribute(DIGIT_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mDigit = attValue.charAt(0);
|
format->mDigit = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
attValue = element->getAttribute(PATTERN_SEPARATOR_ATTR);
|
attValue = element->getAttribute(PATTERN_SEPARATOR_ATTR);
|
||||||
if (attValue.length() == 1)
|
if (attValue.length() == 1)
|
||||||
format->mPatternSeparator = attValue.charAt(0);
|
format->mPatternSeparator = attValue.charAt(0);
|
||||||
else if (attValue.length() > 1)
|
else if (!attValue.isEmpty())
|
||||||
success = MB_FALSE;
|
success = MB_FALSE;
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
|
@ -878,7 +878,7 @@ MBool ProcessorState::addDecimalFormat(Element* element)
|
||||||
|
|
||||||
txDecimalFormat* existing = NULL;
|
txDecimalFormat* existing = NULL;
|
||||||
|
|
||||||
if (defaultDecimalFormatSet || formatName.length() > 0) {
|
if (defaultDecimalFormatSet || !formatName.isEmpty()) {
|
||||||
existing = (txDecimalFormat*)decimalFormats.get(formatName);
|
existing = (txDecimalFormat*)decimalFormats.get(formatName);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1205,7 +1205,7 @@ void ProcessorState::initialize() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( attName.isEqual(RESULT_NS_ATTR) ) {
|
else if ( attName.isEqual(RESULT_NS_ATTR) ) {
|
||||||
if (attValue.length() > 0) {
|
if (!attValue.isEmpty()) {
|
||||||
if ( attValue.indexOf(HTML_NS) == 0 ) {
|
if ( attValue.indexOf(HTML_NS) == 0 ) {
|
||||||
setOutputMethod("html");
|
setOutputMethod("html");
|
||||||
}
|
}
|
||||||
|
@ -1213,7 +1213,7 @@ void ProcessorState::initialize() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( attName.isEqual(INDENT_RESULT_ATTR) ) {
|
else if ( attName.isEqual(INDENT_RESULT_ATTR) ) {
|
||||||
if ( attValue.length() > 0 ) {
|
if (!attValue.isEmpty()) {
|
||||||
format.setIndent(attValue.isEqual(YES_VALUE));
|
format.setIndent(attValue.isEqual(YES_VALUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,7 @@ void XSLTProcessor::parseStylesheetPI(String& data, String& type, String& href)
|
||||||
bufferMap.put("href", &href);
|
bufferMap.put("href", &href);
|
||||||
int ccount = 0;
|
int ccount = 0;
|
||||||
MBool inLiteral = MB_FALSE;
|
MBool inLiteral = MB_FALSE;
|
||||||
char matchQuote = '"';
|
UNICODE_CHAR matchQuote = '"';
|
||||||
String sink;
|
String sink;
|
||||||
String* buffer = &sink;
|
String* buffer = &sink;
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ void XSLTProcessor::parseStylesheetPI(String& data, String& type, String& href)
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
if ( inLiteral ) buffer->append(ch);
|
if ( inLiteral ) buffer->append(ch);
|
||||||
else if ( buffer->length() > 0 ) {
|
else if (!buffer->isEmpty()) {
|
||||||
buffer = (String*)bufferMap.get(*buffer);
|
buffer = (String*)bufferMap.get(*buffer);
|
||||||
if ( !buffer ) {
|
if ( !buffer ) {
|
||||||
sink.clear();
|
sink.clear();
|
||||||
|
@ -478,7 +478,7 @@ void XSLTProcessor::processTopLevel(Document* aSource,
|
||||||
// Add error to ErrorObserver
|
// Add error to ErrorObserver
|
||||||
String fName = element->getAttribute(NAME_ATTR);
|
String fName = element->getAttribute(NAME_ATTR);
|
||||||
String err("unable to add ");
|
String err("unable to add ");
|
||||||
if (fName.length() == 0)
|
if (fName.isEmpty())
|
||||||
err.append("default");
|
err.append("default");
|
||||||
else {
|
else {
|
||||||
err.append("\"");
|
err.append("\"");
|
||||||
|
@ -493,7 +493,7 @@ void XSLTProcessor::processTopLevel(Document* aSource,
|
||||||
case XSLType::PARAM :
|
case XSLType::PARAM :
|
||||||
{
|
{
|
||||||
String name = element->getAttribute(NAME_ATTR);
|
String name = element->getAttribute(NAME_ATTR);
|
||||||
if ( name.length() == 0 ) {
|
if (name.isEmpty()) {
|
||||||
notifyError("missing required name attribute for xsl:param");
|
notifyError("missing required name attribute for xsl:param");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -534,26 +534,26 @@ void XSLTProcessor::processTopLevel(Document* aSource,
|
||||||
OutputFormat* format = aPs->getOutputFormat();
|
OutputFormat* format = aPs->getOutputFormat();
|
||||||
|
|
||||||
String attValue = element->getAttribute(METHOD_ATTR);
|
String attValue = element->getAttribute(METHOD_ATTR);
|
||||||
if (attValue.length() > 0) aPs->setOutputMethod(attValue);
|
if (!attValue.isEmpty()) aPs->setOutputMethod(attValue);
|
||||||
|
|
||||||
attValue = element->getAttribute(VERSION_ATTR);
|
attValue = element->getAttribute(VERSION_ATTR);
|
||||||
if (attValue.length() > 0) format->setVersion(attValue);
|
if (!attValue.isEmpty()) format->setVersion(attValue);
|
||||||
|
|
||||||
attValue = element->getAttribute(ENCODING_ATTR);
|
attValue = element->getAttribute(ENCODING_ATTR);
|
||||||
if (attValue.length() > 0) format->setEncoding(attValue);
|
if (!attValue.isEmpty()) format->setEncoding(attValue);
|
||||||
|
|
||||||
attValue = element->getAttribute(INDENT_ATTR);
|
attValue = element->getAttribute(INDENT_ATTR);
|
||||||
if (attValue.length() > 0) {
|
if (!attValue.isEmpty()) {
|
||||||
MBool allowIndent = attValue.isEqual(YES_VALUE);
|
MBool allowIndent = attValue.isEqual(YES_VALUE);
|
||||||
format->setIndent(allowIndent);
|
format->setIndent(allowIndent);
|
||||||
}
|
}
|
||||||
|
|
||||||
attValue = element->getAttribute(DOCTYPE_PUBLIC_ATTR);
|
attValue = element->getAttribute(DOCTYPE_PUBLIC_ATTR);
|
||||||
if (attValue.length() > 0)
|
if (!attValue.isEmpty())
|
||||||
format->setDoctypePublic(attValue);
|
format->setDoctypePublic(attValue);
|
||||||
|
|
||||||
attValue = element->getAttribute(DOCTYPE_SYSTEM_ATTR);
|
attValue = element->getAttribute(DOCTYPE_SYSTEM_ATTR);
|
||||||
if (attValue.length() > 0)
|
if (!attValue.isEmpty())
|
||||||
format->setDoctypeSystem(attValue);
|
format->setDoctypeSystem(attValue);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -564,7 +564,7 @@ void XSLTProcessor::processTopLevel(Document* aSource,
|
||||||
case XSLType::VARIABLE :
|
case XSLType::VARIABLE :
|
||||||
{
|
{
|
||||||
String name = element->getAttribute(NAME_ATTR);
|
String name = element->getAttribute(NAME_ATTR);
|
||||||
if ( name.length() == 0 ) {
|
if (name.isEmpty()) {
|
||||||
notifyError("missing required name attribute for xsl:variable");
|
notifyError("missing required name attribute for xsl:variable");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -575,7 +575,7 @@ void XSLTProcessor::processTopLevel(Document* aSource,
|
||||||
case XSLType::PRESERVE_SPACE :
|
case XSLType::PRESERVE_SPACE :
|
||||||
{
|
{
|
||||||
String elements = element->getAttribute(ELEMENTS_ATTR);
|
String elements = element->getAttribute(ELEMENTS_ATTR);
|
||||||
if ( elements.length() == 0 ) {
|
if (elements.isEmpty()) {
|
||||||
//-- add error to ErrorObserver
|
//-- add error to ErrorObserver
|
||||||
String err("missing required 'elements' attribute for ");
|
String err("missing required 'elements' attribute for ");
|
||||||
err.append("xsl:preserve-space");
|
err.append("xsl:preserve-space");
|
||||||
|
@ -591,7 +591,7 @@ void XSLTProcessor::processTopLevel(Document* aSource,
|
||||||
case XSLType::STRIP_SPACE :
|
case XSLType::STRIP_SPACE :
|
||||||
{
|
{
|
||||||
String elements = element->getAttribute(ELEMENTS_ATTR);
|
String elements = element->getAttribute(ELEMENTS_ATTR);
|
||||||
if ( elements.length() == 0 ) {
|
if (elements.isEmpty()) {
|
||||||
//-- add error to ErrorObserver
|
//-- add error to ErrorObserver
|
||||||
String err("missing required 'elements' attribute for ");
|
String err("missing required 'elements' attribute for ");
|
||||||
err.append("xsl:strip-space");
|
err.append("xsl:strip-space");
|
||||||
|
@ -1021,7 +1021,7 @@ void XSLTProcessor::processAction
|
||||||
}
|
}
|
||||||
//-- create new text node and add it to the result tree
|
//-- create new text node and add it to the result tree
|
||||||
//-- if necessary
|
//-- if necessary
|
||||||
if ( textValue.length() > 0)
|
if (!textValue.isEmpty())
|
||||||
ps->addToResultTree(resultDoc->createTextNode(textValue));
|
ps->addToResultTree(resultDoc->createTextNode(textValue));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1043,9 +1043,14 @@ void XSLTProcessor::processAction
|
||||||
const String& mode =
|
const String& mode =
|
||||||
actionElement->getAttribute(MODE_ATTR);
|
actionElement->getAttribute(MODE_ATTR);
|
||||||
String selectAtt = actionElement->getAttribute(SELECT_ATTR);
|
String selectAtt = actionElement->getAttribute(SELECT_ATTR);
|
||||||
if ( selectAtt.length() == 0 ) selectAtt = "node()";
|
if (selectAtt.isEmpty())
|
||||||
pExpr = ps->getPatternExpr(selectAtt);
|
selectAtt = "node()";
|
||||||
ExprResult* exprResult = pExpr->evaluate(node, ps);
|
expr = ps->getExpr(selectAtt);
|
||||||
|
if (!expr) {
|
||||||
|
// XXX ErrorReport: out of memory
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ExprResult* exprResult = expr->evaluate(node, ps);
|
||||||
NodeSet* nodeSet = 0;
|
NodeSet* nodeSet = 0;
|
||||||
if ( exprResult->getResultType() == ExprResult::NODESET ) {
|
if ( exprResult->getResultType() == ExprResult::NODESET ) {
|
||||||
nodeSet = (NodeSet*)exprResult;
|
nodeSet = (NodeSet*)exprResult;
|
||||||
|
@ -1138,7 +1143,7 @@ void XSLTProcessor::processAction
|
||||||
case XSLType::CALL_TEMPLATE :
|
case XSLType::CALL_TEMPLATE :
|
||||||
{
|
{
|
||||||
String templateName = actionElement->getAttribute(NAME_ATTR);
|
String templateName = actionElement->getAttribute(NAME_ATTR);
|
||||||
if ( templateName.length() > 0 ) {
|
if (!templateName.isEmpty()) {
|
||||||
Element* xslTemplate = ps->getNamedTemplate(templateName);
|
Element* xslTemplate = ps->getNamedTemplate(templateName);
|
||||||
if ( xslTemplate ) {
|
if ( xslTemplate ) {
|
||||||
//-- new code from OG
|
//-- new code from OG
|
||||||
|
@ -1281,7 +1286,7 @@ void XSLTProcessor::processAction
|
||||||
{
|
{
|
||||||
String selectAtt = actionElement->getAttribute(SELECT_ATTR);
|
String selectAtt = actionElement->getAttribute(SELECT_ATTR);
|
||||||
|
|
||||||
if (selectAtt.length() == 0)
|
if (selectAtt.isEmpty())
|
||||||
{
|
{
|
||||||
notifyError("missing required select attribute for xsl:for-each");
|
notifyError("missing required select attribute for xsl:for-each");
|
||||||
break;
|
break;
|
||||||
|
@ -1505,7 +1510,7 @@ void XSLTProcessor::processAction
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
exprResult->stringValue(value);
|
exprResult->stringValue(value);
|
||||||
if (value.length()>0)
|
if (!value.isEmpty())
|
||||||
ps->addToResultTree(resultDoc->createTextNode(value));
|
ps->addToResultTree(resultDoc->createTextNode(value));
|
||||||
delete exprResult;
|
delete exprResult;
|
||||||
break;
|
break;
|
||||||
|
@ -1513,7 +1518,7 @@ void XSLTProcessor::processAction
|
||||||
case XSLType::VARIABLE :
|
case XSLType::VARIABLE :
|
||||||
{
|
{
|
||||||
String name = actionElement->getAttribute(NAME_ATTR);
|
String name = actionElement->getAttribute(NAME_ATTR);
|
||||||
if ( name.length() == 0 ) {
|
if (name.isEmpty()) {
|
||||||
notifyError("missing required name attribute for xsl:variable");
|
notifyError("missing required name attribute for xsl:variable");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1527,7 +1532,7 @@ void XSLTProcessor::processAction
|
||||||
// Find out if we have a new default namespace
|
// Find out if we have a new default namespace
|
||||||
MBool newDefaultNS = MB_FALSE;
|
MBool newDefaultNS = MB_FALSE;
|
||||||
String nsURI = actionElement->getAttribute(XMLUtils::XMLNS);
|
String nsURI = actionElement->getAttribute(XMLUtils::XMLNS);
|
||||||
if ( nsURI.length() != 0 ) {
|
if (!nsURI.isEmpty()) {
|
||||||
// Set the default namespace
|
// Set the default namespace
|
||||||
ps->setDefaultNameSpaceURIForResult(nsURI);
|
ps->setDefaultNameSpaceURIForResult(nsURI);
|
||||||
newDefaultNS = MB_TRUE;
|
newDefaultNS = MB_TRUE;
|
||||||
|
@ -1602,7 +1607,7 @@ void XSLTProcessor::processAction
|
||||||
void XSLTProcessor::processAttributeSets
|
void XSLTProcessor::processAttributeSets
|
||||||
(const String& names, Node* node, ProcessorState* ps)
|
(const String& names, Node* node, ProcessorState* ps)
|
||||||
{
|
{
|
||||||
if (names.length() == 0) return;
|
if (names.isEmpty()) return;
|
||||||
|
|
||||||
//-- split names
|
//-- split names
|
||||||
Tokenizer tokenizer(names);
|
Tokenizer tokenizer(names);
|
||||||
|
@ -1662,7 +1667,7 @@ NamedMap* XSLTProcessor::processParameters(Element* xslAction, Node* context, Pr
|
||||||
short xslType = getElementType(actionName, ps);
|
short xslType = getElementType(actionName, ps);
|
||||||
if ( xslType == XSLType::WITH_PARAM ) {
|
if ( xslType == XSLType::WITH_PARAM ) {
|
||||||
String name = action->getAttribute(NAME_ATTR);
|
String name = action->getAttribute(NAME_ATTR);
|
||||||
if ( name.length() == 0 ) {
|
if (name.isEmpty()) {
|
||||||
notifyError("missing required name attribute for xsl:with-param");
|
notifyError("missing required name attribute for xsl:with-param");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1840,7 +1845,7 @@ void XSLTProcessor::processTemplateParams
|
||||||
short xslType = getElementType(actionName, ps);
|
short xslType = getElementType(actionName, ps);
|
||||||
if ( xslType == XSLType::PARAM ) {
|
if ( xslType == XSLType::PARAM ) {
|
||||||
String name = action->getAttribute(NAME_ATTR);
|
String name = action->getAttribute(NAME_ATTR);
|
||||||
if ( name.length() == 0 ) {
|
if (name.isEmpty()) {
|
||||||
notifyError("missing required name attribute for xsl:param");
|
notifyError("missing required name attribute for xsl:param");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1932,7 +1937,7 @@ void XSLTProcessor::xslCopy(Node* node, Element* action, ProcessorState* ps) {
|
||||||
// Find out if we have a new default namespace
|
// Find out if we have a new default namespace
|
||||||
MBool newDefaultNS = MB_FALSE;
|
MBool newDefaultNS = MB_FALSE;
|
||||||
String nsURI = element->getAttribute(XMLUtils::XMLNS);
|
String nsURI = element->getAttribute(XMLUtils::XMLNS);
|
||||||
if ( nsURI.length() != 0 ) {
|
if (!nsURI.isEmpty()) {
|
||||||
// Set the default namespace
|
// Set the default namespace
|
||||||
ps->setDefaultNameSpaceURIForResult(nsURI);
|
ps->setDefaultNameSpaceURIForResult(nsURI);
|
||||||
newDefaultNS = MB_TRUE;
|
newDefaultNS = MB_TRUE;
|
||||||
|
|
|
@ -75,7 +75,7 @@ ExprResult* ElementAvailableFunctionCall::evaluate(Node* context, ContextState*
|
||||||
if (XMLUtils::isValidQName(property)) {
|
if (XMLUtils::isValidQName(property)) {
|
||||||
String prefix, propertyNsURI;
|
String prefix, propertyNsURI;
|
||||||
XMLUtils::getNameSpace(property, prefix);
|
XMLUtils::getNameSpace(property, prefix);
|
||||||
if (prefix.length() > 0) {
|
if (!prefix.isEmpty()) {
|
||||||
cs->getNameSpaceURIFromPrefix(property, propertyNsURI);
|
cs->getNameSpaceURIFromPrefix(property, propertyNsURI);
|
||||||
}
|
}
|
||||||
if (propertyNsURI.isEqual(XSLT_NS)) {
|
if (propertyNsURI.isEqual(XSLT_NS)) {
|
||||||
|
|
|
@ -76,7 +76,7 @@ ExprResult* FunctionAvailableFunctionCall::evaluate(Node* context, ContextState*
|
||||||
if (XMLUtils::isValidQName(property)) {
|
if (XMLUtils::isValidQName(property)) {
|
||||||
String prefix;
|
String prefix;
|
||||||
XMLUtils::getNameSpace(property, prefix);
|
XMLUtils::getNameSpace(property, prefix);
|
||||||
if ((prefix.length() == 0) &&
|
if (prefix.isEmpty() &&
|
||||||
(property.isEqual(XPathNames::BOOLEAN_FN) ||
|
(property.isEqual(XPathNames::BOOLEAN_FN) ||
|
||||||
property.isEqual(XPathNames::CONCAT_FN) ||
|
property.isEqual(XPathNames::CONCAT_FN) ||
|
||||||
property.isEqual(XPathNames::CONTAINS_FN) ||
|
property.isEqual(XPathNames::CONTAINS_FN) ||
|
||||||
|
|
|
@ -49,8 +49,8 @@
|
||||||
|
|
||||||
#define DEFAULT_LANG "en"
|
#define DEFAULT_LANG "en"
|
||||||
|
|
||||||
txNodeSorter::txNodeSorter(ProcessorState* aPs) : mNKeys(0),
|
txNodeSorter::txNodeSorter(ProcessorState* aPs) : mPs(aPs),
|
||||||
mPs(aPs)
|
mNKeys(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,7 @@ int txResultStringComparator::compareValues(TxObject* aVal1, TxObject* aVal2)
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
return ((mSorting & kAscending) ? 1 : -1) * result;
|
return ((mSorting & kAscending) ? 1 : -1) * result;
|
||||||
|
|
||||||
if (strval1->mCaseLength < 0) {
|
if ((strval1->mCaseLength == 0) && (strval1->mLength != 0)) {
|
||||||
String* caseString = (String *)strval1->mCaseKey;
|
String* caseString = (String *)strval1->mCaseKey;
|
||||||
rv = createRawSortKey(kCollationCaseSensitive,
|
rv = createRawSortKey(kCollationCaseSensitive,
|
||||||
caseString->getConstNSString(),
|
caseString->getConstNSString(),
|
||||||
|
@ -196,11 +196,13 @@ int txResultStringComparator::compareValues(TxObject* aVal1, TxObject* aVal2)
|
||||||
&strval1->mCaseLength);
|
&strval1->mCaseLength);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
// XXX ErrorReport
|
// XXX ErrorReport
|
||||||
|
strval1->mCaseKey = caseString;
|
||||||
|
strval1->mCaseLength = 0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
delete caseString;
|
delete caseString;
|
||||||
}
|
}
|
||||||
if (strval2->mCaseLength < 0) {
|
if ((strval2->mCaseLength == 0) && (strval2->mLength != 0)) {
|
||||||
String* caseString = (String *)strval2->mCaseKey;
|
String* caseString = (String *)strval2->mCaseKey;
|
||||||
rv = createRawSortKey(kCollationCaseSensitive,
|
rv = createRawSortKey(kCollationCaseSensitive,
|
||||||
caseString->getConstNSString(),
|
caseString->getConstNSString(),
|
||||||
|
@ -208,6 +210,8 @@ int txResultStringComparator::compareValues(TxObject* aVal1, TxObject* aVal2)
|
||||||
&strval2->mCaseLength);
|
&strval2->mCaseLength);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
// XXX ErrorReport
|
// XXX ErrorReport
|
||||||
|
strval2->mCaseKey = caseString;
|
||||||
|
strval2->mCaseLength = 0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
delete caseString;
|
delete caseString;
|
||||||
|
@ -241,16 +245,16 @@ nsresult txResultStringComparator::createRawSortKey(const nsCollationStrength aS
|
||||||
}
|
}
|
||||||
|
|
||||||
txResultStringComparator::StringValue::StringValue() : mKey(0),
|
txResultStringComparator::StringValue::StringValue() : mKey(0),
|
||||||
mLength(0),
|
|
||||||
mCaseKey(0),
|
mCaseKey(0),
|
||||||
mCaseLength(-1)
|
mLength(0),
|
||||||
|
mCaseLength(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
txResultStringComparator::StringValue::~StringValue()
|
txResultStringComparator::StringValue::~StringValue()
|
||||||
{
|
{
|
||||||
PR_Free(mKey);
|
PR_Free(mKey);
|
||||||
if (mCaseLength >= 0)
|
if (mCaseLength > 0)
|
||||||
PR_Free((PRUint8*)mCaseKey);
|
PR_Free((PRUint8*)mCaseKey);
|
||||||
else
|
else
|
||||||
delete (String*)mCaseKey;
|
delete (String*)mCaseKey;
|
||||||
|
@ -262,6 +266,10 @@ txResultNumberComparator::txResultNumberComparator(MBool aAscending)
|
||||||
mAscending = aAscending ? 1 : -1;
|
mAscending = aAscending ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
txResultNumberComparator::~txResultNumberComparator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
TxObject* txResultNumberComparator::createSortableValue(ExprResult* aExprRes)
|
TxObject* txResultNumberComparator::createSortableValue(ExprResult* aExprRes)
|
||||||
{
|
{
|
||||||
NumberValue* numval = new NumberValue;
|
NumberValue* numval = new NumberValue;
|
||||||
|
|
|
@ -75,7 +75,7 @@ class txResultStringComparator : public txXPathResultComparator
|
||||||
public:
|
public:
|
||||||
txResultStringComparator(MBool aAscending, MBool aUpperFirst,
|
txResultStringComparator(MBool aAscending, MBool aUpperFirst,
|
||||||
const String& aLanguage);
|
const String& aLanguage);
|
||||||
~txResultStringComparator();
|
virtual ~txResultStringComparator();
|
||||||
|
|
||||||
int compareValues(TxObject* aVal1, TxObject* aVal2);
|
int compareValues(TxObject* aVal1, TxObject* aVal2);
|
||||||
TxObject* createSortableValue(ExprResult* aExprRes);
|
TxObject* createSortableValue(ExprResult* aExprRes);
|
||||||
|
@ -113,6 +113,7 @@ class txResultNumberComparator : public txXPathResultComparator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
txResultNumberComparator(MBool aAscending);
|
txResultNumberComparator(MBool aAscending);
|
||||||
|
virtual ~txResultNumberComparator();
|
||||||
|
|
||||||
int compareValues(TxObject* aVal1, TxObject* aVal2);
|
int compareValues(TxObject* aVal1, TxObject* aVal2);
|
||||||
TxObject* createSortableValue(ExprResult* aExprRes);
|
TxObject* createSortableValue(ExprResult* aExprRes);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче