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]

Reply via email to