зеркало из https://github.com/mozilla/pjs.git
Backing out last change because of test failures on tinderbox.
This commit is contained in:
Родитель
e53da56cd5
Коммит
9c629f6331
|
@ -73,6 +73,11 @@ public:
|
||||||
NS_IMETHOD ToTitle( const PRUnichar* anArray, PRUnichar* aReturn,
|
NS_IMETHOD ToTitle( const PRUnichar* anArray, PRUnichar* aReturn,
|
||||||
PRUint32 aLen, PRBool aStartInWordBundary=PR_TRUE) = 0;
|
PRUint32 aLen, PRBool aStartInWordBundary=PR_TRUE) = 0;
|
||||||
|
|
||||||
|
// The following nsString flavor one know how to handle special casing
|
||||||
|
NS_IMETHOD ToUpper(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale=nsnull) = 0;
|
||||||
|
NS_IMETHOD ToLower(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale=nsnull ) = 0;
|
||||||
|
NS_IMETHOD ToTitle(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale=nsnull, PRBool aStartInWordBoundary=PR_TRUE) = 0;
|
||||||
|
|
||||||
// case-insensitive PRUnichar* comparison - aResult returns similar
|
// case-insensitive PRUnichar* comparison - aResult returns similar
|
||||||
// to strcasecmp
|
// to strcasecmp
|
||||||
NS_IMETHOD CaseInsensitiveCompare(const PRUnichar* aLeft, const PRUnichar* aRight, PRUint32 aLength, PRInt32* aResult) = 0;
|
NS_IMETHOD CaseInsensitiveCompare(const PRUnichar* aLeft, const PRUnichar* aRight, PRUint32 aLength, PRInt32* aResult) = 0;
|
||||||
|
|
|
@ -340,6 +340,96 @@ nsresult nsCaseConversionImp2::ToTitle(
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define k_ss 0x00df
|
||||||
|
#define kDot_I 0x0130
|
||||||
|
#define kDot_i PRUnichar('i')
|
||||||
|
#define kDotLess_I PRUnichar('I')
|
||||||
|
#define kDotLess_i 0x0131
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsCaseConversionImp2::ToUpper
|
||||||
|
(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale)
|
||||||
|
{
|
||||||
|
anOut.Assign(anIn,aLen);
|
||||||
|
|
||||||
|
// Special casing - Turkish dotless I
|
||||||
|
if((nsnull != aLocale ) && (PRUnichar('t')==aLocale[0]) && (PRUnichar('r') == aLocale[1]))
|
||||||
|
{
|
||||||
|
for(PRUnichar* s=(PRUnichar*)anOut.get(); *s ; s++)
|
||||||
|
{
|
||||||
|
if(kDot_i == *s)
|
||||||
|
*s = kDot_I;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ToUpper(anOut.get(), (PRUnichar*)anOut.get(), anOut.Length());
|
||||||
|
|
||||||
|
// Special casing - SS
|
||||||
|
PRInt32 idx=0;
|
||||||
|
for(PRUnichar* s=(PRUnichar*)anOut.get(); *s ; s++,idx++)
|
||||||
|
{
|
||||||
|
if(k_ss == *s) {
|
||||||
|
*s = PRUnichar('S') ;
|
||||||
|
anOut.Insert(PRUnichar('S'),idx);
|
||||||
|
// Insert may cause reallocate, so we need to get() again
|
||||||
|
s = (PRUnichar*)anOut.get() + idx;
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
NS_IMETHODIMP nsCaseConversionImp2::ToLower
|
||||||
|
(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale)
|
||||||
|
{
|
||||||
|
anOut.Assign(anIn,aLen);
|
||||||
|
|
||||||
|
// Special casing - Turkish dotless I
|
||||||
|
if((nsnull != aLocale ) && (PRUnichar('t')==aLocale[0]) && (PRUnichar('r') == aLocale[1]))
|
||||||
|
{
|
||||||
|
for(PRUnichar* s=(PRUnichar*)anOut.get(); *s ; s++)
|
||||||
|
{
|
||||||
|
if(kDot_I == *s)
|
||||||
|
*s = kDot_I;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ToLower(anOut.get(), (PRUnichar*)anOut.get(), anOut.Length());
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
NS_IMETHODIMP nsCaseConversionImp2::ToTitle
|
||||||
|
(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale,
|
||||||
|
PRBool aStartInWordBoundary)
|
||||||
|
{
|
||||||
|
anOut.Assign(anIn,aLen);
|
||||||
|
|
||||||
|
// Special casing - Turkish dotless I
|
||||||
|
if((nsnull != aLocale ) && (PRUnichar('t')==aLocale[0]) && (PRUnichar('r') == aLocale[1]))
|
||||||
|
{
|
||||||
|
for(PRUnichar* s=(PRUnichar*)anOut.get(); *s ; s++)
|
||||||
|
{
|
||||||
|
if(kDot_i == *s)
|
||||||
|
*s = kDot_I;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ToTitle(anOut.get(), (PRUnichar*)anOut.get(), anOut.Length(),
|
||||||
|
aStartInWordBoundary);
|
||||||
|
|
||||||
|
// Special casing - SS
|
||||||
|
PRInt32 idx=0;
|
||||||
|
for(PRUnichar* s=(PRUnichar*)anOut.get(); *s ; s++,idx++)
|
||||||
|
{
|
||||||
|
if(k_ss == *s) {
|
||||||
|
*s = PRUnichar('S') ;
|
||||||
|
anOut.Insert(PRUnichar('S'),idx);
|
||||||
|
// Insert may cause reallocate, so we need to get() again
|
||||||
|
s = (PRUnichar*)anOut.get() + idx;
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// implementation moved from the old nsCRT routine
|
// implementation moved from the old nsCRT routine
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsCaseConversionImp2::CaseInsensitiveCompare(const PRUnichar *aLeft,
|
nsCaseConversionImp2::CaseInsensitiveCompare(const PRUnichar *aLeft,
|
||||||
|
|
|
@ -67,6 +67,9 @@ public:
|
||||||
NS_IMETHOD ToTitle(const PRUnichar* anArray, PRUnichar* aReturn,
|
NS_IMETHOD ToTitle(const PRUnichar* anArray, PRUnichar* aReturn,
|
||||||
PRUint32 aLen, PRBool aStartInWordBoundary = PR_TRUE);
|
PRUint32 aLen, PRBool aStartInWordBoundary = PR_TRUE);
|
||||||
|
|
||||||
|
NS_IMETHOD ToUpper(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale=nsnull) ;
|
||||||
|
NS_IMETHOD ToLower(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale=nsnull );
|
||||||
|
NS_IMETHOD ToTitle(const PRUnichar* anIn, PRUint32 aLen, nsString& anOut, const PRUnichar* aLocale=nsnull, PRBool aStartInWordBoundary=PR_TRUE) ;
|
||||||
NS_IMETHOD CaseInsensitiveCompare(const PRUnichar* aLeft, const PRUnichar* aRight, PRUint32 aLength, PRInt32 *aResult);
|
NS_IMETHOD CaseInsensitiveCompare(const PRUnichar* aLeft, const PRUnichar* aRight, PRUint32 aLength, PRInt32 *aResult);
|
||||||
private:
|
private:
|
||||||
static nsrefcnt gInit;
|
static nsrefcnt gInit;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче