| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #include "precompiled_comphelper.hxx" |
| #include "sal/config.h" |
| |
| #include <cstddef> |
| #include <string.h> |
| #include <vector> |
| #include <algorithm> |
| |
| #include <rtl/ustring.hxx> |
| #include <rtl/ustrbuf.hxx> |
| #include <sal/types.h> |
| |
| #include <comphelper/string.hxx> |
| #include <comphelper/stlunosequence.hxx> |
| #include <comphelper/stl_types.hxx> |
| |
| |
| namespace comphelper { namespace string { |
| |
| rtl::OUString searchAndReplaceAsciiL( |
| rtl::OUString const & source, char const * from, sal_Int32 fromLength, |
| rtl::OUString const & to, sal_Int32 beginAt, sal_Int32 * replacedAt) |
| { |
| sal_Int32 n = source.indexOfAsciiL(from, fromLength, beginAt); |
| if (replacedAt != NULL) { |
| *replacedAt = n; |
| } |
| return n == -1 ? source : source.replaceAt(n, fromLength, to); |
| } |
| |
| ::rtl::OUString searchAndReplaceAllAsciiWithAscii( |
| const ::rtl::OUString& _source, const sal_Char* _from, const sal_Char* _to, |
| const sal_Int32 _beginAt ) |
| { |
| sal_Int32 fromLength = strlen( _from ); |
| sal_Int32 n = _source.indexOfAsciiL( _from, fromLength, _beginAt ); |
| if ( n == -1 ) |
| return _source; |
| |
| ::rtl::OUString dest( _source ); |
| ::rtl::OUString to( ::rtl::OUString::createFromAscii( _to ) ); |
| do |
| { |
| dest = dest.replaceAt( n, fromLength, to ); |
| n = dest.indexOfAsciiL( _from, fromLength, n + to.getLength() ); |
| } |
| while ( n != -1 ); |
| |
| return dest; |
| } |
| |
| ::rtl::OUString& searchAndReplaceAsciiI( |
| ::rtl::OUString & _source, sal_Char const * _asciiPattern, ::rtl::OUString const & _replace, |
| sal_Int32 _beginAt, sal_Int32 * _replacedAt ) |
| { |
| sal_Int32 fromLength = strlen( _asciiPattern ); |
| sal_Int32 n = _source.indexOfAsciiL( _asciiPattern, fromLength, _beginAt ); |
| if ( _replacedAt != NULL ) |
| *_replacedAt = n; |
| |
| if ( n != -1 ) |
| _source = _source.replaceAt( n, fromLength, _replace ); |
| |
| return _source; |
| } |
| |
| // convert between sequence of string and comma separated string |
| |
| ::rtl::OUString convertCommaSeparated( |
| ::com::sun::star::uno::Sequence< ::rtl::OUString > const& i_rSeq) |
| { |
| ::rtl::OUStringBuffer buf; |
| ::comphelper::intersperse( |
| ::comphelper::stl_begin(i_rSeq), ::comphelper::stl_end(i_rSeq), |
| ::comphelper::OUStringBufferAppender(buf), |
| ::rtl::OUString::createFromAscii(", ")); |
| return buf.makeStringAndClear(); |
| } |
| |
| ::com::sun::star::uno::Sequence< ::rtl::OUString > |
| convertCommaSeparated( ::rtl::OUString const& i_rString ) |
| { |
| std::vector< ::rtl::OUString > vec; |
| sal_Int32 idx = 0; |
| do { |
| ::rtl::OUString kw = |
| i_rString.getToken(0, static_cast<sal_Unicode> (','), idx); |
| kw = kw.trim(); |
| if ( !kw.isEmpty() ) { |
| vec.push_back(kw); |
| } |
| } while (idx >= 0); |
| ::com::sun::star::uno::Sequence< ::rtl::OUString > kws(vec.size()); |
| std::copy(vec.begin(), vec.end(), stl_begin(kws)); |
| return kws; |
| } |
| |
| } } |