summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--comphelper/inc/comphelper/string.hxx46
-rw-r--r--comphelper/qa/string/test_string.cxx14
-rw-r--r--comphelper/source/misc/string.cxx45
-rw-r--r--l10ntools/source/gsicheck.cxx13
4 files changed, 94 insertions, 24 deletions
diff --git a/comphelper/inc/comphelper/string.hxx b/comphelper/inc/comphelper/string.hxx
index 4daa01b00b6f..627c04c984bf 100644
--- a/comphelper/inc/comphelper/string.hxx
+++ b/comphelper/inc/comphelper/string.hxx
@@ -288,7 +288,7 @@ COMPHELPER_DLLPUBLIC bool isdigitAsciiString(const rtl::OString &rString);
*/
COMPHELPER_DLLPUBLIC bool isdigitAsciiString(const rtl::OUString &rString);
-/** Determine if an OString contains solely ASCII alphanumeric digits
+/** Determine if an OString contains solely ASCII alphanumeric chars/digits
@param rString An OString
@@ -298,7 +298,7 @@ COMPHELPER_DLLPUBLIC bool isdigitAsciiString(const rtl::OUString &rString);
*/
COMPHELPER_DLLPUBLIC bool isalnumAsciiString(const rtl::OString &rString);
-/** Determine if an OUString contains solely ASCII alphanumeric digits
+/** Determine if an OUString contains solely ASCII alphanumeric chars/digits
@param rString An OUString
@@ -306,7 +306,47 @@ COMPHELPER_DLLPUBLIC bool isalnumAsciiString(const rtl::OString &rString);
the ASCII 'a'-'z', 'A'-'Z' and '0'-'9' ranges
true otherwise, including for empty string
*/
-COMPHELPER_DLLPUBLIC bool isalnumAsciiString(const rtl::OString &rString);
+COMPHELPER_DLLPUBLIC bool isalnumAsciiString(const rtl::OUString &rString);
+
+/** Determine if an OString contains solely ASCII lower-case chars
+
+ @param rString An OString
+
+ @return false if string contains any characters outside
+ the ASCII 'a'-'z' ranges
+ true otherwise, including for empty string
+ */
+COMPHELPER_DLLPUBLIC bool islowerAsciiString(const rtl::OString &rString);
+
+/** Determine if an OUString contains solely ASCII lower-case chars
+
+ @param rString An OUString
+
+ @return false if string contains any characters outside
+ the ASCII 'a'-'z' ranges
+ true otherwise, including for empty string
+ */
+COMPHELPER_DLLPUBLIC bool islowerAsciiString(const rtl::OUString &rString);
+
+/** Determine if an OString contains solely ASCII upper-case chars
+
+ @param rString An OString
+
+ @return false if string contains any characters outside
+ the ASCII 'A'-'Z' ranges
+ true otherwise, including for empty string
+ */
+COMPHELPER_DLLPUBLIC bool isupperAsciiString(const rtl::OString &rString);
+
+/** Determine if an OUString contains solely ASCII upper-case chars
+
+ @param rString An OUString
+
+ @return false if string contains any characters outside
+ the ASCII 'A'-'Z' ranges
+ true otherwise, including for empty string
+ */
+COMPHELPER_DLLPUBLIC bool isupperAsciiString(const rtl::OUString &rString);
COMPHELPER_DLLPUBLIC inline bool isdigitAscii(sal_Unicode c)
{
diff --git a/comphelper/qa/string/test_string.cxx b/comphelper/qa/string/test_string.cxx
index d7187e04fd75..21d84c9142fe 100644
--- a/comphelper/qa/string/test_string.cxx
+++ b/comphelper/qa/string/test_string.cxx
@@ -48,6 +48,7 @@ public:
void testDecimalStringToNumber();
void testIsdigitAsciiString();
void testIsalnumAsciiString();
+ void testIsupperAsciiString();
CPPUNIT_TEST_SUITE(TestString);
CPPUNIT_TEST(testSearchAndReplaceAsciiL);
@@ -57,6 +58,7 @@ public:
CPPUNIT_TEST(testDecimalStringToNumber);
CPPUNIT_TEST(testIsdigitAsciiString);
CPPUNIT_TEST(testIsalnumAsciiString);
+ CPPUNIT_TEST(testIsupperAsciiString);
CPPUNIT_TEST_SUITE_END();
};
@@ -129,6 +131,18 @@ void TestString::testIsalnumAsciiString()
CPPUNIT_ASSERT_EQUAL(comphelper::string::isalnumAsciiString(s4), false);
}
+void TestString::testIsupperAsciiString()
+{
+ rtl::OString s1(RTL_CONSTASCII_STRINGPARAM("1234"));
+ CPPUNIT_ASSERT_EQUAL(comphelper::string::isupperAsciiString(s1), false);
+
+ rtl::OString s2(RTL_CONSTASCII_STRINGPARAM("aAbB"));
+ CPPUNIT_ASSERT_EQUAL(comphelper::string::isupperAsciiString(s2), false);
+
+ rtl::OString s3(RTL_CONSTASCII_STRINGPARAM("AABB"));
+ CPPUNIT_ASSERT_EQUAL(comphelper::string::isupperAsciiString(s3), true);
+}
+
using namespace ::com::sun::star;
class testCollator : public cppu::WeakImplHelper1< i18n::XCollator >
diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx
index 0138cc672ed8..873a1ffe34e9 100644
--- a/comphelper/source/misc/string.cxx
+++ b/comphelper/source/misc/string.cxx
@@ -354,21 +354,14 @@ NaturalStringSorter::NaturalStringSorter(
namespace
{
- template <typename T> bool tmpl_isalnumAsciiString(const T &rString)
+ //do OPER on each element of the string, return false
+ //if any OPER is false, true otherwise
+ template <bool (*OPER)(sal_Unicode), typename T>
+ bool tmpl_is_OPER_AsciiString(const T &rString)
{
for (sal_Int32 i = 0; i < rString.getLength(); ++i)
{
- if (!isalnumAscii(rString[i]))
- return false;
- }
- return true;
- }
-
- template <typename T> bool tmpl_isdigitAsciiString(const T &rString)
- {
- for (sal_Int32 i = 0; i < rString.getLength(); ++i)
- {
- if (!isdigitAscii(rString[i]))
+ if (!OPER(rString[i]))
return false;
}
return true;
@@ -377,22 +370,42 @@ namespace
bool isalnumAsciiString(const rtl::OString &rString)
{
- return tmpl_isalnumAsciiString(rString);
+ return tmpl_is_OPER_AsciiString<isalnumAscii>(rString);
}
bool isalnumAsciiString(const rtl::OUString &rString)
{
- return tmpl_isalnumAsciiString(rString);
+ return tmpl_is_OPER_AsciiString<isalnumAscii>(rString);
}
bool isdigitAsciiString(const rtl::OString &rString)
{
- return tmpl_isdigitAsciiString(rString);
+ return tmpl_is_OPER_AsciiString<isdigitAscii>(rString);
}
bool isdigitAsciiString(const rtl::OUString &rString)
{
- return tmpl_isdigitAsciiString(rString);
+ return tmpl_is_OPER_AsciiString<isdigitAscii>(rString);
+}
+
+bool islowerAsciiString(const rtl::OString &rString)
+{
+ return tmpl_is_OPER_AsciiString<islowerAscii>(rString);
+}
+
+bool islowerAsciiString(const rtl::OUString &rString)
+{
+ return tmpl_is_OPER_AsciiString<islowerAscii>(rString);
+}
+
+bool isupperAsciiString(const rtl::OString &rString)
+{
+ return tmpl_is_OPER_AsciiString<isupperAscii>(rString);
+}
+
+bool isupperAsciiString(const rtl::OUString &rString)
+{
+ return tmpl_is_OPER_AsciiString<isupperAscii>(rString);
}
} }
diff --git a/l10ntools/source/gsicheck.cxx b/l10ntools/source/gsicheck.cxx
index 438234ea8e34..0b05de086b83 100644
--- a/l10ntools/source/gsicheck.cxx
+++ b/l10ntools/source/gsicheck.cxx
@@ -67,24 +67,27 @@ sal_Bool LanguageOK( ByteString aLang )
if ( !aLang.Len() )
return sal_False;
- if (comphelper::string::isdigitAsciiString(aLang))
+ using comphelper::string::isdigitAsciiString;
+ using comphelper::string::isupperAsciiString;
+ using comphelper::string::islowerAsciiString;
+
+ if (isdigitAsciiString(aLang))
return sal_True;
if ( aLang.GetTokenCount( '-' ) == 1 )
- return aLang.IsLowerAscii();
+ return islowerAsciiString(aLang);
else if ( aLang.GetTokenCount( '-' ) == 2 )
{
ByteString aTok0( aLang.GetToken( 0, '-' ) );
ByteString aTok1( aLang.GetToken( 1, '-' ) );
- return aTok0.Len() && aTok0.IsLowerAscii()
- && aTok1.Len() && aTok1.IsUpperAscii()
+ return aTok0.Len() && islowerAsciiString(aTok0)
+ && aTok1.Len() && isupperAsciiString(aTok1)
&& !aTok1.EqualsIgnoreCaseAscii( aTok0 );
}
return sal_False;
}
-
//
// class LazySvFileStream
//