dbertoni 01/03/29 14:22:38
Modified: c/src/XSLT NodeSorter.cpp NodeSortKey.cpp NodeSortKey.hpp
Log:
Implement sort for xsl:sort lang attribute.
Revision Changes Path
1.19 +29 -2 xml-xalan/c/src/XSLT/NodeSorter.cpp
Index: NodeSorter.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/NodeSorter.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- NodeSorter.cpp 2001/01/17 17:00:22 1.18
+++ NodeSorter.cpp 2001/03/29 22:22:38 1.19
@@ -159,6 +159,30 @@
+static inline int
+doCollationCompare(
+ StylesheetExecutionContext&
executionContext,
+ const XalanDOMString& theLHS,
+ const XalanDOMString& theRHS,
+ const XalanDOMString& theLanguage)
+{
+ if (length(theLanguage) == 0)
+ {
+ return executionContext.collationCompare(
+ theLHS,
+ theRHS);
+ }
+ else
+ {
+ return executionContext.collationCompare(
+ theLHS,
+ theRHS,
+ theLanguage);
+ }
+}
+
+
+
NodeSorter::NodeSortKeyCompare::result_type
NodeSorter::NodeSortKeyCompare::operator()(
first_argument_type theLHS,
@@ -209,9 +233,12 @@
// Compare as strings
else
{
- const int theCompareResult =
m_executionContext.collationCompare(
+
+ const int theCompareResult = doCollationCompare(
+ m_executionContext,
getStringResult(theKey, theLHS),
- getStringResult(theKey, theRHS));
+ getStringResult(theKey, theRHS),
+ theKey.getLanguageString());
if(0 == theCompareResult)
{
1.6 +15 -33 xml-xalan/c/src/XSLT/NodeSortKey.cpp
Index: NodeSortKey.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/NodeSortKey.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- NodeSortKey.cpp 2000/08/22 20:21:25 1.5
+++ NodeSortKey.cpp 2001/03/29 22:22:38 1.6
@@ -66,47 +66,24 @@
+static const XalanDOMString s_emptyString;
+
+
NodeSortKey::NodeSortKey(
ExecutionContext& executionContext,
- const XPath& selectPat,
- bool treatAsNumbers,
+ const XPath& selectPat,
+ bool treatAsNumbers,
bool descending,
- const XalanDOMString& /* langValue */,
+ const XalanDOMString& langValue,
const PrefixResolver& resolver) :
m_executionContext(&executionContext),
m_selectPat(&selectPat),
m_treatAsNumbers(treatAsNumbers),
m_descending(descending),
- m_prefixResolver(&resolver)
+ m_prefixResolver(&resolver),
+ m_languageString(&langValue)
{
-#if 0
- // $$$ ToDo: What do we do about this?
- if(0 != length(langValue))
- {
- m_locale = new Locale(langValue.toUpperCase(),
-
Locale.getDefault().getDisplayCountry());
-
- if(null == m_locale)
- {
- // m_processor.warn("Could not find locale for <sort
xml:lang="+langValue);
- m_locale = Locale.getDefault();
- }
- }
- else
- {
- m_locale = Locale.getDefault();
- }
-
- m_col = Collator.getInstance(m_locale);
-
- if(null == m_col)
- {
- executionContext.warn("Could not find Collator for <sort
xml:lang=" + langValue);
-
- m_col = Collator.getInstance();
- }
-#endif
}
@@ -116,7 +93,8 @@
m_selectPat(0),
m_treatAsNumbers(false),
m_descending(false),
- m_prefixResolver(0)
+ m_prefixResolver(0),
+ m_languageString(&s_emptyString)
{
}
@@ -127,7 +105,8 @@
m_selectPat(theSource.m_selectPat),
m_treatAsNumbers(theSource.m_treatAsNumbers),
m_descending(theSource.m_descending),
- m_prefixResolver(theSource.m_prefixResolver)
+ m_prefixResolver(theSource.m_prefixResolver),
+ m_languageString(theSource.m_languageString)
{
}
@@ -149,6 +128,9 @@
m_treatAsNumbers = theRHS.m_treatAsNumbers;
m_descending = theRHS.m_descending;
m_prefixResolver = theRHS.m_prefixResolver;
+ m_languageString = theRHS.m_languageString;
+
+ assert(m_languageString != 0);
}
return *this;
1.9 +7 -4 xml-xalan/c/src/XSLT/NodeSortKey.hpp
Index: NodeSortKey.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/NodeSortKey.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- NodeSortKey.hpp 2000/10/12 17:07:48 1.8
+++ NodeSortKey.hpp 2001/03/29 22:22:38 1.9
@@ -163,6 +163,12 @@
return m_prefixResolver;
}
+ const XalanDOMString&
+ getLanguageString() const
+ {
+ return *m_languageString;
+ }
+
private:
ExecutionContext* m_executionContext; // needed for error
reporting.
@@ -173,11 +179,8 @@
bool m_descending;
const PrefixResolver* m_prefixResolver;
-
- // $$$ ToDo:How do we do this in C++?
-// Collator m_col;
-// Locale m_locale;
+ const XalanDOMString* m_languageString;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]