Ticket #5498: patch-i18npool_source_breakiterator_breakiterator_unicode.cxx

File patch-i18npool_source_breakiterator_breakiterator_unicode.cxx, 3.3 kB (added by cokane@..., 7 months ago)

Patch I made to allow OO.o to access setBreakType without rewriting ICU sources

Line 
1 --- i18npool/source/breakiterator/breakiterator_unicode.cxx.orig        2008-04-17 10:25:10.000000000 -0400
2 +++ i18npool/source/breakiterator/breakiterator_unicode.cxx     2008-04-17 10:33:36.000000000 -0400
3 @@ -85,6 +85,21 @@
4          if (line.aBreakIterator) delete line.aBreakIterator;
5  }
6  
7 +/*
8 +       Wrapper class to provide public access to the RuleBasedBreakIterator's
9 +       setbreakType method.
10 +*/
11 +class OOoRuleBasedBreakIterator : public RuleBasedBreakIterator {
12 +       public:
13 +               inline void publicSetBreakType(int32_t type) {
14 +                       setBreakType(type);
15 +               };
16 +               OOoRuleBasedBreakIterator(UDataMemory* image,
17 +                               UErrorCode &status) :
18 +                       RuleBasedBreakIterator(image, status) { };
19 +
20 +};
21 +
22  // loading ICU breakiterator on demand.
23  void SAL_CALL BreakIterator_Unicode::loadICUBreakIterator(const com::sun::star::lang::Locale& rLocale,
24          sal_Int16 rBreakType, sal_Int16 rWordType, const sal_Char *rule, const OUString& rText) throw(uno::RuntimeException)
25 @@ -118,10 +133,10 @@
26              udata_setAppData("OpenOffice", OpenOffice_dat, &status);
27              if ( !U_SUCCESS(status) ) throw ERROR;
28  
29 -            RuleBasedBreakIterator *rbi = NULL;
30 +            OOoRuleBasedBreakIterator *rbi = NULL;
31  
32              if (breakRules.getLength() > 0 && breakRules[breakType].getLength() > 0) {
33 -                rbi = new RuleBasedBreakIterator(udata_open("OpenOffice", "brk",
34 +                rbi = new OOoRuleBasedBreakIterator(udata_open("OpenOffice", "brk",
35                      OUStringToOString(breakRules[breakType], RTL_TEXTENCODING_ASCII_US).getStr(), &status), status);
36              } else {
37                  status = U_ZERO_ERROR;
38 @@ -131,21 +146,21 @@
39                  aUDName.append( OUStringToOString(rLocale.Language, RTL_TEXTENCODING_ASCII_US));
40                  UDataMemory* pUData = udata_open("OpenOffice", "brk", aUDName.getStr(), &status);
41                  if( U_SUCCESS(status) )
42 -                    rbi = new RuleBasedBreakIterator( pUData, status);
43 +                    rbi = new OOoRuleBasedBreakIterator( pUData, status);
44                  if (!U_SUCCESS(status) ) {
45                      status = U_ZERO_ERROR;
46                      pUData = udata_open("OpenOffice", "brk", rule, &status);
47                      if( U_SUCCESS(status) )
48 -                        rbi = new RuleBasedBreakIterator( pUData, status);
49 +                        rbi = new OOoRuleBasedBreakIterator( pUData, status);
50                      if (!U_SUCCESS(status) ) icuBI->aBreakIterator=NULL;
51                  }
52              }
53              if (rbi) {
54                  switch (rBreakType) {
55 -                    case LOAD_CHARACTER_BREAKITERATOR: rbi->setBreakType(UBRK_CHARACTER); break;
56 -                    case LOAD_WORD_BREAKITERATOR: rbi->setBreakType(UBRK_WORD); break;
57 -                    case LOAD_SENTENCE_BREAKITERATOR: rbi->setBreakType(UBRK_SENTENCE); break;
58 -                    case LOAD_LINE_BREAKITERATOR: rbi->setBreakType(UBRK_LINE); break;
59 +                    case LOAD_CHARACTER_BREAKITERATOR: rbi->publicSetBreakType(UBRK_CHARACTER); break;
60 +                    case LOAD_WORD_BREAKITERATOR: rbi->publicSetBreakType(UBRK_WORD); break;
61 +                    case LOAD_SENTENCE_BREAKITERATOR: rbi->publicSetBreakType(UBRK_SENTENCE); break;
62 +                    case LOAD_LINE_BREAKITERATOR: rbi->publicSetBreakType(UBRK_LINE); break;
63                  }
64                  icuBI->aBreakIterator = rbi;
65              }