27#include <com/sun/star/i18n/Calendar2.hpp>
36 const OUString& mrName;
39 FindByName(
const OUString& rName,
bool bUpper) : mrName(rName), mbUpper(bUpper) {}
49 maReal(
std::move(aReal)), maUpper(
std::move(aUpper)) {}
59 for (sal_Int32
i = 0,
n =
aStr.getLength();
i <
n; ++
i, ++
p, ++nLen)
72 OUString aSub(p0, nLen);
82 OUString aSub(p0, nLen);
118 SubStringsType::const_iterator itr = ::std::find_if(
129 itr = ::std::find_if(
151 sal_uInt16 nIndex1, nIndex2;
153 bool bFound1 =
GetSubIndex(rSubStr1, nIndex1, bMatchCase);
154 bool bFound2 =
GetSubIndex(rSubStr2, nIndex2, bMatchCase);
159 if (nIndex1 < nIndex2)
161 else if (nIndex1 > nIndex2)
177 sal_uInt16 nIndex1, nIndex2;
179 bool bFound1 =
GetSubIndex(rSubStr1, nIndex1, bMatchCase);
180 bool bFound2 =
GetSubIndex(rSubStr2, nIndex2, bMatchCase);
185 if (nIndex1 < nIndex2)
187 else if (nIndex1 > nIndex2)
206 uno::Sequence< i18n::CalendarItem2 > xCal;
208 const uno::Sequence< i18n::Calendar2 > xCalendars(
211 for (
const auto& rCalendar : xCalendars )
213 xCal = rCalendar.Days;
214 if ( xCal.hasElements() )
216 OUStringBuffer aDayShortBuf(32), aDayLongBuf(64);
218 sal_Int32 nLen = xCal.getLength();
219 sal_Int16 nStart = sal::static_int_cast<sal_Int16>(nLen);
222 if (xCal[--nStart].
ID == rCalendar.StartOfWeek)
225 sal_Int16 nLast = sal::static_int_cast<sal_Int16>( (nStart + nLen - 1) % nLen );
226 for (
i = nStart;
i != nLast;
i = (
i+1) % nLen)
228 aDayShortBuf.append(xCal[
i].AbbrevName);
233 aDayShortBuf.append(xCal[
i].AbbrevName);
236 OUString aDayShort = aDayShortBuf.makeStringAndClear();
237 OUString aDayLong = aDayLongBuf.makeStringAndClear();
240 maData.push_back( std::make_unique<ScUserListData>( aDayShort ));
242 maData.push_back( std::make_unique<ScUserListData>( aDayLong ));
245 xCal = rCalendar.Months;
246 if ( xCal.hasElements() )
248 OUStringBuffer aMonthShortBuf(128), aMonthLongBuf(128);
250 sal_Int32 nLen = xCal.getLength() - 1;
251 for (
i = 0;
i < nLen;
i++)
253 aMonthShortBuf.append(xCal[
i].AbbrevName);
258 aMonthShortBuf.append(xCal[
i].AbbrevName);
261 OUString aMonthShort = aMonthShortBuf.makeStringAndClear();
262 OUString aMonthLong = aMonthLongBuf.makeStringAndClear();
265 maData.push_back( std::make_unique<ScUserListData>( aMonthShort ));
267 maData.push_back( std::make_unique<ScUserListData>( aMonthLong ));
274 for (
const std::unique_ptr<ScUserListData>& rData : rOther.
maData)
275 maData.push_back(std::make_unique<ScUserListData>(*rData));
282 bool bMatchCase =
false;
284 for (
const auto& rxItem :
maData)
286 if (rxItem->GetSubIndex(rSubStr,
nIndex, bMatchCase))
290 if (!pFirstCaseInsensitive)
291 pFirstCaseInsensitive = rxItem.get();
295 return pFirstCaseInsensitive;
311 for (
const std::unique_ptr<ScUserListData>& rData : rOther.
maData)
312 maData.push_back(std::make_unique<ScUserListData>(*rData));
319 [](
const std::unique_ptr<ScUserListData>& lhs,
const std::unique_ptr<ScUserListData>& rhs) {
320 return (lhs->GetString() == rhs->GetString()) && (lhs->GetSubCount() == rhs->GetSubCount());
332 [&] (std::unique_ptr<ScUserListData>
const&
pData)
333 { return pData->GetString() == rStr; } );
353 maData.push_back(std::unique_ptr<ScUserListData>(
p));
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
static constexpr sal_Unicode cListDelimiter
::utl::TransliterationWrapper & GetCaseTransliteration()
static SC_DLLPUBLIC ::utl::TransliterationWrapper & GetTransliteration()
static SC_DLLPUBLIC const LocaleDataWrapper & getLocaleData()
static SC_DLLPUBLIC const CharClass & getCharClass()
Stores individual user-defined sort list.
SubStringsType maSubStrings
OUString GetSubStr(sal_uInt16 nIndex) const
sal_Int32 Compare(const OUString &rSubStr1, const OUString &rSubStr2) const
sal_Int32 ICompare(const OUString &rSubStr1, const OUString &rSubStr2) const
size_t GetSubCount() const
SAL_DLLPRIVATE void InitTokens()
void SetString(const OUString &rStr)
bool GetSubIndex(const OUString &rSubStr, sal_uInt16 &rIndex, bool &bMatchCase) const
ScUserListData(OUString aStr)
Collection of user-defined sort lists.
void erase(const iterator &itr)
void push_back(ScUserListData *p)
bool operator!=(const ScUserList &r) const
bool HasEntry(std::u16string_view rStr) const
If the list in rStr is already inserted.
const ScUserListData & operator[](size_t nIndex) const
DataType::iterator iterator
bool operator==(const ScUserList &r) const
ScUserList & operator=(const ScUserList &r)
const ScUserListData * GetData(const OUString &rSubStr) const
sal_Int32 compareString(const OUString &rStr1, const OUString &rStr2) const
std::unique_ptr< sal_Int32[]> pData
SubStr(OUString aReal, OUString aUpper)
const sal_Unicode cDelimiter