add a StringUtils-alike remove (can replace EraseAllChars)
This commit is contained in:
parent
c4927a1b76
commit
dca04e2361
@ -200,6 +200,26 @@ COMPHELPER_DLLPUBLIC rtl::OString replace(const rtl::OString &rIn,
|
||||
COMPHELPER_DLLPUBLIC rtl::OUString replace(const rtl::OUString &rIn,
|
||||
const rtl::OUString &rSearch, const rtl::OUString &rReplace);
|
||||
|
||||
/** Removes all occurrences of a character from within the source string
|
||||
|
||||
@param rIn The input OString
|
||||
@param c The character to be removed
|
||||
|
||||
@return The resulting OString
|
||||
*/
|
||||
COMPHELPER_DLLPUBLIC rtl::OString remove(const rtl::OString &rIn,
|
||||
sal_Char c);
|
||||
|
||||
/** Removes all occurrences of a character from within the source string
|
||||
|
||||
@param rIn The input OUString
|
||||
@param c The character to be removed
|
||||
|
||||
@return The resulting OUString
|
||||
*/
|
||||
COMPHELPER_DLLPUBLIC rtl::OUString remove(const rtl::OUString &rIn,
|
||||
sal_Unicode c);
|
||||
|
||||
/** Returns a token in the OString
|
||||
|
||||
@param token the number of the token to return
|
||||
|
@ -48,6 +48,7 @@ public:
|
||||
void testSearchAndReplaceAsciiL();
|
||||
void testNatural();
|
||||
void testReplace();
|
||||
void testRemove();
|
||||
void testToken();
|
||||
void testDecimalStringToNumber();
|
||||
void testIsdigitAsciiString();
|
||||
@ -59,6 +60,7 @@ public:
|
||||
CPPUNIT_TEST(testSearchAndReplaceAsciiL);
|
||||
CPPUNIT_TEST(testNatural);
|
||||
CPPUNIT_TEST(testReplace);
|
||||
CPPUNIT_TEST(testRemove);
|
||||
CPPUNIT_TEST(testToken);
|
||||
CPPUNIT_TEST(testDecimalStringToNumber);
|
||||
CPPUNIT_TEST(testIsdigitAsciiString);
|
||||
@ -395,6 +397,20 @@ void TestString::testReplace()
|
||||
RTL_CONSTASCII_STRINGPARAM("aaafooaaafoobbb")));
|
||||
}
|
||||
|
||||
void TestString::testRemove()
|
||||
{
|
||||
::rtl::OString aIn(RTL_CONSTASCII_STRINGPARAM("abc"));
|
||||
::rtl::OString aOut;
|
||||
|
||||
aOut = ::comphelper::string::remove(aIn, 'b');
|
||||
CPPUNIT_ASSERT(aOut.equalsL(RTL_CONSTASCII_STRINGPARAM("ac")));
|
||||
|
||||
aIn = rtl::OString(RTL_CONSTASCII_STRINGPARAM("aaa"));
|
||||
|
||||
aOut = ::comphelper::string::remove(aIn, 'a');
|
||||
CPPUNIT_ASSERT(aOut.isEmpty());
|
||||
}
|
||||
|
||||
void TestString::testToken()
|
||||
{
|
||||
::rtl::OString aIn(RTL_CONSTASCII_STRINGPARAM("10.11.12"));
|
||||
|
@ -138,6 +138,37 @@ rtl::OUString replace(const rtl::OUString &rIn, const rtl::OUString &rSearch,
|
||||
rReplace);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
template <typename T, typename C, typename O> T tmpl_remove(const T &rIn,
|
||||
const C cRemove)
|
||||
{
|
||||
if (rIn.isEmpty())
|
||||
return rIn;
|
||||
|
||||
O aRet;
|
||||
|
||||
for (sal_Int32 i = 0; i < rIn.getLength(); ++i)
|
||||
{
|
||||
C cChar = rIn[i];
|
||||
if (cChar != cRemove)
|
||||
aRet.append(cChar);
|
||||
}
|
||||
|
||||
return aRet.makeStringAndClear();
|
||||
}
|
||||
}
|
||||
|
||||
rtl::OString remove(const rtl::OString &rIn, sal_Char c)
|
||||
{
|
||||
return tmpl_remove<rtl::OString, sal_Char, rtl::OStringBuffer>(rIn, c);
|
||||
}
|
||||
|
||||
rtl::OUString remove(const rtl::OUString &rIn, sal_Unicode c)
|
||||
{
|
||||
return tmpl_remove<rtl::OUString, sal_Unicode, rtl::OUStringBuffer>(rIn, c);
|
||||
}
|
||||
|
||||
sal_uInt32 decimalStringToNumber(
|
||||
::rtl::OUString const & str )
|
||||
{
|
||||
|
@ -329,8 +329,8 @@ public:
|
||||
static std::vector<ByteString> GetForcedLanguages();
|
||||
|
||||
static void SetLanguages( std::vector<ByteString> val );
|
||||
static void RemoveUTF8ByteOrderMarker( ByteString &rString );
|
||||
static bool hasUTF8ByteOrderMarker( const ByteString &rString );
|
||||
static void RemoveUTF8ByteOrderMarker( rtl::OString &rString );
|
||||
static bool hasUTF8ByteOrderMarker( const rtl::OString &rString );
|
||||
static void RemoveUTF8ByteOrderMarkerFromFile( const ByteString &rFilename );
|
||||
static bool fileHasUTF8ByteOrderMarker( const ByteString &rString );
|
||||
static void QuotHTML( ByteString &rString );
|
||||
|
@ -192,35 +192,43 @@ void Export::QuotHTML( ByteString &rString )
|
||||
rString = sReturn.makeStringAndClear();
|
||||
}
|
||||
|
||||
void Export::RemoveUTF8ByteOrderMarker( ByteString &rString ){
|
||||
void Export::RemoveUTF8ByteOrderMarker( rtl::OString &rString )
|
||||
{
|
||||
if( hasUTF8ByteOrderMarker( rString ) )
|
||||
rString.Erase( 0 , 3 );
|
||||
rString = rString.copy(3);
|
||||
}
|
||||
|
||||
bool Export::hasUTF8ByteOrderMarker( const ByteString &rString ){
|
||||
return rString.Len() >= 3 &&
|
||||
rString.GetChar( 0 ) == '\xEF' &&
|
||||
rString.GetChar( 1 ) == '\xBB' &&
|
||||
rString.GetChar( 2 ) == '\xBF' ;
|
||||
bool Export::hasUTF8ByteOrderMarker( const rtl::OString &rString )
|
||||
{
|
||||
return rString.getLength() >= 3 && rString[0] == '\xEF' &&
|
||||
rString[1] == '\xBB' && rString[2] == '\xBF' ;
|
||||
}
|
||||
bool Export::fileHasUTF8ByteOrderMarker( const ByteString &rString ){
|
||||
|
||||
bool Export::fileHasUTF8ByteOrderMarker( const ByteString &rString )
|
||||
{
|
||||
SvFileStream aFileIn( String( rString , RTL_TEXTENCODING_ASCII_US ) , STREAM_READ );
|
||||
ByteString sLine;
|
||||
if( !aFileIn.IsEof() ) {
|
||||
rtl::OString sLine;
|
||||
if( !aFileIn.IsEof() )
|
||||
{
|
||||
aFileIn.ReadLine( sLine );
|
||||
if( aFileIn.IsOpen() ) aFileIn.Close();
|
||||
if( aFileIn.IsOpen() )
|
||||
aFileIn.Close();
|
||||
return hasUTF8ByteOrderMarker( sLine );
|
||||
}
|
||||
if( aFileIn.IsOpen() ) aFileIn.Close();
|
||||
return false;
|
||||
}
|
||||
void Export::RemoveUTF8ByteOrderMarkerFromFile( const ByteString &rFilename ){
|
||||
|
||||
void Export::RemoveUTF8ByteOrderMarkerFromFile( const ByteString &rFilename )
|
||||
{
|
||||
SvFileStream aFileIn( String( rFilename , RTL_TEXTENCODING_ASCII_US ) , STREAM_READ );
|
||||
ByteString sLine;
|
||||
if( !aFileIn.IsEof() ) {
|
||||
rtl::OString sLine;
|
||||
if( !aFileIn.IsEof() )
|
||||
{
|
||||
aFileIn.ReadLine( sLine );
|
||||
// Test header
|
||||
if( hasUTF8ByteOrderMarker( sLine ) ){
|
||||
if( hasUTF8ByteOrderMarker( sLine ) )
|
||||
{
|
||||
DirEntry aTempFile = Export::GetTempFile();
|
||||
ByteString sTempFile = ByteString( aTempFile.GetFull() , RTL_TEXTENCODING_ASCII_US );
|
||||
SvFileStream aNewFile( String( sTempFile , RTL_TEXTENCODING_ASCII_US ) , STREAM_WRITE );
|
||||
@ -228,7 +236,8 @@ void Export::RemoveUTF8ByteOrderMarkerFromFile( const ByteString &rFilename ){
|
||||
RemoveUTF8ByteOrderMarker( sLine );
|
||||
aNewFile.WriteLine( sLine );
|
||||
// Copy the rest
|
||||
while( !aFileIn.IsEof() ){
|
||||
while( !aFileIn.IsEof() )
|
||||
{
|
||||
aFileIn.ReadLine( sLine );
|
||||
aNewFile.WriteLine( sLine );
|
||||
}
|
||||
@ -239,7 +248,8 @@ void Export::RemoveUTF8ByteOrderMarkerFromFile( const ByteString &rFilename ){
|
||||
DirEntry( sTempFile ).MoveTo( DirEntry( rFilename.GetBuffer() ) );
|
||||
}
|
||||
}
|
||||
if( aFileIn.IsOpen() ) aFileIn.Close();
|
||||
if( aFileIn.IsOpen() )
|
||||
aFileIn.Close();
|
||||
}
|
||||
|
||||
bool Export::CopyFile( const ByteString& source , const ByteString& dest )
|
||||
@ -398,12 +408,14 @@ sal_Bool Export::ConvertLineEnds(
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
ByteString sLine;
|
||||
rtl::OString sLine;
|
||||
|
||||
while ( !aSource.IsEof()) {
|
||||
while ( !aSource.IsEof())
|
||||
{
|
||||
aSource.ReadLine( sLine );
|
||||
if ( !aSource.IsEof()) {
|
||||
sLine.EraseAllChars( '\r' );
|
||||
if ( !aSource.IsEof())
|
||||
{
|
||||
sLine = comphelper::string::remove(sLine, '\r');
|
||||
aDestination.WriteLine( sLine );
|
||||
}
|
||||
else
|
||||
|
@ -52,15 +52,20 @@ LngParser::LngParser( const ByteString &rLngFile, sal_Bool bUTF8, sal_Bool bULFF
|
||||
{
|
||||
pLines = new LngLineList();
|
||||
DirEntry aEntry( String( sSource, RTL_TEXTENCODING_ASCII_US ));
|
||||
if ( aEntry.Exists()) {
|
||||
if ( aEntry.Exists())
|
||||
{
|
||||
SvFileStream aStream( String( sSource, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_READ );
|
||||
if ( aStream.IsOpen()) {
|
||||
ByteString sLine;
|
||||
if ( aStream.IsOpen())
|
||||
{
|
||||
rtl::OString sLine;
|
||||
bool bFirstLine = true;
|
||||
while ( !aStream.IsEof()) {
|
||||
while ( !aStream.IsEof())
|
||||
{
|
||||
aStream.ReadLine( sLine );
|
||||
|
||||
if( bFirstLine ){ // Always remove UTF8 BOM from the first line
|
||||
if( bFirstLine )
|
||||
{
|
||||
// Always remove UTF8 BOM from the first line
|
||||
Export::RemoveUTF8ByteOrderMarker( sLine );
|
||||
bFirstLine = false;
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
// MARKER(update_precomp.py): autogen include statement, do not remove
|
||||
#include "precompiled_svl.hxx"
|
||||
#include <comphelper/string.hxx>
|
||||
#include <svl/lngmisc.hxx>
|
||||
#include <tools/solar.h>
|
||||
#include <tools/string.hxx>
|
||||
@ -55,22 +56,18 @@ sal_Int32 GetNumControlChars( const OUString &rTxt )
|
||||
return nCnt;
|
||||
}
|
||||
|
||||
|
||||
sal_Bool RemoveHyphens( OUString &rTxt )
|
||||
{
|
||||
sal_Bool bModified = sal_False;
|
||||
if (HasHyphens( rTxt ))
|
||||
if (HasHyphens(rTxt))
|
||||
{
|
||||
String aTmp( rTxt );
|
||||
aTmp.EraseAllChars( SVT_SOFT_HYPHEN );
|
||||
aTmp.EraseAllChars( SVT_HARD_HYPHEN );
|
||||
rTxt = aTmp;
|
||||
rTxt = comphelper::string::remove(rTxt, SVT_SOFT_HYPHEN);
|
||||
rTxt = comphelper::string::remove(rTxt, SVT_HARD_HYPHEN);
|
||||
bModified = sal_True;
|
||||
}
|
||||
return bModified;
|
||||
}
|
||||
|
||||
|
||||
sal_Bool RemoveControlChars( OUString &rTxt )
|
||||
{
|
||||
sal_Bool bModified = sal_False;
|
||||
|
Loading…
x
Reference in New Issue
Block a user