diff options
author | Oliver Bolte <obo@openoffice.org> | 2005-11-16 09:19:15 +0000 |
---|---|---|
committer | Oliver Bolte <obo@openoffice.org> | 2005-11-16 09:19:15 +0000 |
commit | 56dad432009302bdb35388607fb2765111287875 (patch) | |
tree | 2e1c2ab1d44fb6e4060d5a56ca79d39eaf617362 /i18npool | |
parent | 2dc627781a8155fcc2bd65c2a6ceb259c6bf09a1 (diff) |
INTEGRATION: CWS thaiissues (1.2.240); FILE MERGED
2005/09/29 12:00:18 os 1.2.240.5: RESYNC: (1.2-1.3); FILE MERGED
2005/09/19 22:50:24 khong 1.2.240.4: #i42661# update input sequence correction rule from James
2005/08/29 19:39:57 khong 1.2.240.3: #i42661# add input sequence correction
2005/08/29 18:59:34 khong 1.2.240.2: #i42661# add input sequence correction
2005/08/27 00:18:44 khong 1.2.240.1: #i42661# add input sequence correction, #i52055# apply input sequence checking patch
Diffstat (limited to 'i18npool')
-rw-r--r-- | i18npool/source/inputchecker/inputsequencechecker_th.cxx | 77 |
1 files changed, 69 insertions, 8 deletions
diff --git a/i18npool/source/inputchecker/inputsequencechecker_th.cxx b/i18npool/source/inputchecker/inputsequencechecker_th.cxx index 4cd6d166be87..300e0719bf5a 100644 --- a/i18npool/source/inputchecker/inputsequencechecker_th.cxx +++ b/i18npool/source/inputchecker/inputsequencechecker_th.cxx @@ -4,9 +4,9 @@ * * $RCSfile: inputsequencechecker_th.cxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: rt $ $Date: 2005-09-07 17:17:48 $ + * last change: $Author: obo $ $Date: 2005-11-16 10:19:15 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -56,7 +56,7 @@ sal_Char _TAC_celltype_inputcheck[17][17] = { /* 10 */ 'X', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', /* 20 */ 'X', 'A', 'A', 'A', 'A', 'S', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', /* 30 */ 'X', 'S', 'A', 'S', 'S', 'S', 'S', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', - /* 40 */ 'X', 'S', 'A', 'S', 'A', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', + /* 40 */ 'X', 'A', 'A', 'A', 'A', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', /* 50 */ 'X', 'A', 'A', 'A', 'A', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', /* 60 */ 'X', 'A', 'A', 'A', 'S', 'A', 'S', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', /* 70 */ 'X', 'A', 'A', 'A', 'A', 'S', 'A', 'R', 'R', 'R', 'C', 'C', 'R', 'R', 'R', 'R', 'R', @@ -78,13 +78,10 @@ sal_Bool _TAC_Composible[3][5] = { /* Mode 2 */ {sal_True, sal_True, sal_False, sal_False, sal_True} // STRICT = 2 }; -sal_Bool SAL_CALL -InputSequenceChecker_th::checkInputSequence(const OUString& Text, sal_Int32 nStartPos, - sal_Unicode inputChar, sal_Int16 inputCheckMode) throw(com::sun::star::uno::RuntimeException) +static sal_Bool SAL_CALL check(sal_Unicode ch1, sal_Unicode ch2, sal_Int16 inputCheckMode) { sal_Int16 composible_class; - sal_Unicode currentChar = Text[nStartPos]; - switch (_TAC_celltype_inputcheck[getCharType(currentChar)][getCharType(inputChar)]) { + switch (_TAC_celltype_inputcheck[getCharType(ch1)][getCharType(ch2)]) { case 'A': composible_class = 0; break; case 'C': composible_class = 1; break; case 'S': composible_class = 2; break; @@ -95,4 +92,68 @@ InputSequenceChecker_th::checkInputSequence(const OUString& Text, sal_Int32 nSta return (_TAC_Composible[inputCheckMode][composible_class]); } +sal_Bool SAL_CALL +InputSequenceChecker_th::checkInputSequence(const OUString& Text, sal_Int32 nStartPos, + sal_Unicode inputChar, sal_Int16 inputCheckMode) throw(com::sun::star::uno::RuntimeException) +{ + return check(Text[nStartPos], inputChar, inputCheckMode); +} + +sal_Int32 SAL_CALL +InputSequenceChecker_th::correctInputSequence(OUString& Text, + sal_Int32 nStartPos, + sal_Unicode inputChar, + sal_Int16 inputCheckMode) + throw(com::sun::star::uno::RuntimeException) +{ +/* 9 rules for input sequence correction, see issue i42661 for detail, + +http://www.openoffice.org/issues/show_bug.cgi?id=42661 + +<abv> = <av1>|<av2>|<av3>|<bv1>|<bv2> +<abv1> = <av1>|<bv1> +<thanthakhat> = 0E4C (karan) + +1. <cons> <abv>_x + <abv>_y => <cons> <abv>_y (replace) +2. <cons> <tone>_x + <tone>_y => <cons> <tone>_y (replace) +3. <cons> <abv> <tone>_x + <tone>_y => <cons> <abv> <tone>_y (replace) +4. <cons> <abv>_x <tone> + <abv>_y => <cons> <abv>_y <tone> (replace, reorder) +5. <cons> <tone> + <abv> => <cons> <abv> <tone> (reorder) +6. <cons> <fv1> + <tone> => <cons> <tone> <fv1> (reorder) +7. <cons> <tone>_x <fv1> + <tone>_y => <cons> <tone>_y <fv1> (replace, reorder) +8. <cons> <thanthakhat> + <abv1> => <cons> <abv1> <thanthakhat> (reorder) +9. <cons> <abv1>_x <thanthakhat> + <abv1>_y => <cons> <abv1>_y <thanthakhat>(reorder, replace) +*/ +#define CT_ABV(t) (t>=CT_AV1 && t<=CT_AV3 || t==CT_BV1 || t==CT_BV2) +#define CT_ABV1(t) (t==CT_AV1 || t==CT_BV1) + + if (check(Text[nStartPos], inputChar, inputCheckMode)) + Text = Text.replaceAt(++nStartPos, 0, OUString(inputChar)); + else if (nStartPos > 0 && getCharType(Text[nStartPos-1]) == CT_CONS) { + sal_uInt16 t1=getCharType(Text[nStartPos]), t2=getCharType(inputChar); + if (CT_ABV(t1) && CT_ABV(t2) || // 1. + t1==CT_TONE && t2==CT_TONE) // 2. + Text = Text.replaceAt(nStartPos, 1, OUString(inputChar)); + else if (t1==CT_TONE && CT_ABV(t2) || // 5. + t1==CT_FV1 && t2==CT_TONE || // 6. + Text[nStartPos]==0x0E4C && CT_ABV1(t2)) // 8. + Text = Text.replaceAt(nStartPos++, 0, OUString(inputChar)); + else + nStartPos=Text.getLength(); + } else if (nStartPos > 1 && getCharType(Text[nStartPos-2]) == CT_CONS) { + sal_uInt16 t1=getCharType(Text[nStartPos-1]), t2=getCharType(Text[nStartPos]), t3=getCharType(inputChar); + if (CT_ABV(t1) && t2==CT_TONE && t3==CT_TONE) // 3. + Text = Text.replaceAt(nStartPos, 1, OUString(inputChar)); + else if (CT_ABV(t1) && t2==CT_TONE && CT_ABV(t3) || // 4. + t1==CT_TONE && t2==CT_FV1 && t3==CT_TONE || // 7. + CT_ABV1(t1) && Text[nStartPos]==0x0E4C && CT_ABV1(t3)) // 9. + Text = Text.replaceAt(nStartPos-1, 1, OUString(inputChar)); + else + nStartPos=Text.getLength(); + } else + nStartPos=Text.getLength(); + + return nStartPos; +} + } } } } |