Hi Caolán,
* Sidenote - Initially I tried using CharClass::titlecase() but
discovered this doesn't actually work.
What did you try and what went wrong ?
There appears to be an issue with
class cclass_Unicode where "trans" is only ever set to
"Transliteration_casemapping" and there is no mechanism to set it to
"Transliteration_titlecase".
I believe that the casemapping thing there knows about upper, lower and
title case and uses setMappingType to MappingTypeToTitle to toggle which
one to return
e.g. I added this test
http://cgit.freedesktop.org/libreoffice/core/commit/?id=eb9b8ebca49291797e655b50f64af2c2fa03434c
to confirm to myself that its working like I think its supposed to.
When I called CharClass::titlecase() I expected "ORAN" to be changed to
"Oran" but from memory the returned string was still "ORAN". Attached is
the back trace I took at the time.
Looking again in cclass_Unicode::toTitle()
http://opengrok.libreoffice.org/xref/core/i18npool/source/characterclassification/cclass_unicode.cxx#92
I see only the first character in each word is Title cased and the rest
are left untouched. Oh!
105 for (sal_Int32 i = nPos; i < nCount + nPos; i++, out++) {
106 if (i >= bdy.endPos)
107 bdy = brk.nextWord(Text, bdy.endPos, rLocale,
108 WordType::ANYWORD_IGNOREWHITESPACES);
109 *out = (i == bdy.startPos) ?
110 trans->transliterateChar2Char(Text[i]) : Text[i];
111 }
I just checked and your test case passes when sTest = "Some text" but if
I change it to sTest = "Some tExt" it fails (assuming "Some Text" is the
right result).
The following function appears to do what I originally wanted (i.e.
Title case the first character and Lower case subsequent characters) but
using opengrok I can't find anywhere that actually instantiates this class.
rtl::OUString SAL_CALL Transliteration_titlecase::transliterate()
http://opengrok.libreoffice.org/xref/core/i18npool/source/transliteration/transliteration_body.cxx#329
Anyway, I think the solution I used in my patch is better as I actually
wanted Sentence case rather than Title case for the overall string.
Cheers,
Brad
#0 com::sun::star::i18n::casefolding::getValue (str=0x7fffffffaa9c, pos=0, len=1, aLocale=...,
nMappingType=16 '\020') at /home/brad/git/libo/i18nutil/source/utility/casefolding.cxx:94
#1 0x00007fffe5a02b03 in com::sun::star::i18n::Transliteration_body::transliterateChar2Char (
this=<optimized out>, inChar=79)
at /home/brad/git/libo/i18npool/source/transliteration/transliteration_body.cxx:215
#2 0x00007fffe59c3cf3 in com::sun::star::i18n::cclass_Unicode::toTitle (this=0x1d0d240,
Text="ORAN", nPos=<optimized out>, nCount=<optimized out>, rLocale=...)
at /home/brad/git/libo/i18npool/source/characterclassification/cclass_unicode.cxx:110
#3 0x00007fffe59c7b6f in com::sun::star::i18n::CharacterClassificationImpl::toTitle (
this=<optimized out>, Text="ORAN", nPos=0, nCount=<optimized out>, rLocale=<optimized out>)
at
/home/brad/git/libo/i18npool/source/characterclassification/characterclassificationImpl.cxx:74
#4 0x00007ffff4d5ff4b in CharClass::titlecase (this=<optimized out>, rStr="ORAN", nPos=0,
nCount=4) at /home/brad/git/libo/unotools/source/i18n/charclass.cxx:284
#5 0x00007fffe1dc5c31 in titlecase (_rStr="ORAN", this=0x1d0b2a0)
at /home/brad/git/libo/solver/unxlngx6.pro/inc/unotools/charclass.hxx:187
#6 QuickHelpData::FillStrArr (this=0x160fce0, rSh=..., rWord="ORAN")
at /home/brad/git/libo/sw/source/ui/docvw/edtwin.cxx:5589
#7 0x00007fffe1dc7040 in SwEditWin::ShowAutoTextCorrectQuickHelp (this=<optimized out>,
rWord="ORAN", pACfg=0x7fffe0e7c320, pACorr=0x15feab0, bFromIME=0 '\000')
at /home/brad/git/libo/sw/source/ui/docvw/edtwin.cxx:5701
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.