Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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.