dbertoni    00/07/09 18:05:00

  Modified:    c/src/ICUBridge ICUBridge.cpp ICUBridge.hpp
  Log:
  New collation function.
  
  Revision  Changes    Path
  1.2       +61 -2     xml-xalan/c/src/ICUBridge/ICUBridge.cpp
  
  Index: ICUBridge.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/ICUBridge/ICUBridge.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ICUBridge.cpp     2000/05/08 17:13:13     1.1
  +++ ICUBridge.cpp     2000/07/10 01:04:59     1.2
  @@ -59,6 +59,11 @@
   
   
   
  +#include <memory>
  +
  +
  +
  +#include <unicode/coll.h>
   #include <unicode/dcfmtsym.h>
   #include <unicode/decimfmt.h>
   
  @@ -70,7 +75,6 @@
                        double                                          
theNumber,
                        UTF16VectorType&                        theResult)
   {
  -
        const UnicodeString             theUnicodePattern(&thePattern[0], 
thePattern.size());
   
        UErrorCode                              theStatus = U_ZERO_ERROR;
  @@ -79,7 +83,8 @@
   
        DecimalFormat                   theFormatter(theUnicodePattern, 
theStatus);
   
  -     if (theStatus == U_ZERO_ERROR)
  +     if (theStatus == U_ZERO_ERROR ||
  +             theStatus == U_USING_DEFAULT_ERROR)
        {
                // Do the format...
                theFormatter.format(theNumber, theUnicodeResult);
  @@ -91,6 +96,8 @@
                theResult.resize(theLength);
   
                theUnicodeResult.extract(0, theLength, &theResult[0]);
  +
  +             theStatus = U_ZERO_ERROR;
        }
   
        return theStatus;
  @@ -161,4 +168,56 @@
        }
   
        return theStatus;
  +}
  +
  +
  +
  +int
  +ICUBridge::strLength(const UnicodeCharType*          theString)
  +{
  +     if (theString == 0)
  +     {
  +             return 0;
  +     }
  +     else
  +     {
  +             const UnicodeCharType*  current = theString;
  +
  +             while(*current)
  +             {
  +                     ++current;
  +             }
  +
  +             return current - theString;
  +     }
  +}
  +
  +
  +
  +int
  +ICUBridge::collationCompare(
  +                     const UnicodeCharType*          theLHS,
  +                     const UnicodeCharType*          theRHS)
  +{
  +#if !defined(XALAN_NO_NAMESPACES)
  +     using std::auto_ptr;
  +#endif
  +
  +     const UnicodeString             theUnicodeLHS(theLHS, 
strLength(theLHS));
  +     const UnicodeString             theUnicodeRHS(theRHS, 
strLength(theRHS));
  +
  +     UErrorCode                              theStatus = U_ZERO_ERROR;
  +
  +     auto_ptr<Collator>      
theCollator(Collator::createInstance(theStatus));
  +
  +     if (theStatus == U_ZERO_ERROR || theStatus == U_USING_DEFAULT_ERROR)
  +     {
  +             return theCollator->compare(
  +                                     theUnicodeLHS,
  +                                     theUnicodeRHS);
  +     }
  +     else
  +     {
  +             return theUnicodeLHS.compare(theUnicodeRHS);
  +     }
   }
  
  
  
  1.2       +10 -0     xml-xalan/c/src/ICUBridge/ICUBridge.hpp
  
  Index: ICUBridge.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/ICUBridge/ICUBridge.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ICUBridge.hpp     2000/05/08 17:13:13     1.1
  +++ ICUBridge.hpp     2000/07/10 01:04:59     1.2
  @@ -72,6 +72,8 @@
   {
   public:
   
  +     typedef wchar_t                                                 
UnicodeCharType;
  +
   #if defined(XALAN_NO_NAMESPACES
        typedef vector<unsigned short>                  UTF16VectorType;
   #else
  @@ -102,6 +104,14 @@
                        unsigned short                          thePerMillChar,
                        unsigned short                          
theZeroDigitChar,
                        UTF16VectorType&                        theResult);
  +
  +     static int
  +     collationCompare(
  +                     const UnicodeCharType*          theLHS,
  +                     const UnicodeCharType*          theRHS);
  +
  +     static int
  +     strLength(const UnicodeCharType*        theString);
   };
   
   
  
  
  

Reply via email to