sw/source/core/text/porlay.cxx | 64 ++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 14 deletions(-)
New commits: commit 0b9298bf50eb104b684207e10987144c058421ea Author: Khaled Hosny <khaledho...@eglug.org> Date: Mon Nov 7 00:41:44 2016 +0200 Extend joining groups with new Unicode additions Change-Id: I14d65d59794fdf9ed4dce05a8f734d9400f85927 diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx index 62b8024f..61e9226 100644 --- a/sw/source/core/text/porlay.cxx +++ b/sw/source/core/text/porlay.cxx @@ -62,25 +62,59 @@ using namespace i18n::ScriptType; #define IS_JOINING_GROUP(c, g) ( u_getIntPropertyValue( (c), UCHAR_JOINING_GROUP ) == U_JG_##g ) #define isAinChar(c) IS_JOINING_GROUP((c), AIN) #define isAlefChar(c) IS_JOINING_GROUP((c), ALEF) -#define isBehChar(c) IS_JOINING_GROUP((c), BEH) #define isDalChar(c) IS_JOINING_GROUP((c), DAL) -#define isFehChar(c) IS_JOINING_GROUP((c), FEH) +#define isFehChar(c) (IS_JOINING_GROUP((c), FEH) || IS_JOINING_GROUP((c), AFRICAN_FEH)) #define isGafChar(c) IS_JOINING_GROUP((c), GAF) #define isHehChar(c) IS_JOINING_GROUP((c), HEH) #define isKafChar(c) IS_JOINING_GROUP((c), KAF) #define isLamChar(c) IS_JOINING_GROUP((c), LAM) -#define isQafChar(c) IS_JOINING_GROUP((c), QAF) +#define isQafChar(c) (IS_JOINING_GROUP((c), QAF) || IS_JOINING_GROUP((c), AFRICAN_QAF)) #define isRehChar(c) IS_JOINING_GROUP((c), REH) #define isTahChar(c) IS_JOINING_GROUP((c), TAH) #define isTehMarbutaChar(c) IS_JOINING_GROUP((c), TEH_MARBUTA) #define isWawChar(c) IS_JOINING_GROUP((c), WAW) -#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 4) -#define isYehChar(c) (IS_JOINING_GROUP((c), YEH) || IS_JOINING_GROUP((c), FARSI_YEH)) -#else -#define isYehChar(c) IS_JOINING_GROUP((c), YEH) -#endif #define isSeenOrSadChar(c) (IS_JOINING_GROUP((c), SAD) || IS_JOINING_GROUP((c), SEEN)) +// Beh and charters that behave like Beh in medial form. +bool isBehChar(sal_Unicode cCh) +{ + bool bRet = false; + switch (u_getIntPropertyValue(cCh, UCHAR_JOINING_GROUP)) + { + case U_JG_BEH: + case U_JG_NOON: + case U_JG_AFRICAN_NOON: + case U_JG_NYA: + case U_JG_YEH: + case U_JG_FARSI_YEH: + case U_JG_BURUSHASKI_YEH_BARREE: + bRet = true; + default: + bRet = false; + } + + return bRet; +} + +// Yeh and charters that behave like Yeh in final form. +bool isYehChar(sal_Unicode cCh) +{ + bool bRet = false; + switch (u_getIntPropertyValue(cCh, UCHAR_JOINING_GROUP)) + { + case U_JG_YEH: + case U_JG_FARSI_YEH: + case U_JG_YEH_BARREE: + case U_JG_BURUSHASKI_YEH_BARREE: + case U_JG_YEH_WITH_TAIL: + bRet = true; + default: + bRet = false; + } + + return bRet; +} + bool isTransparentChar ( sal_Unicode cCh ) { return u_getIntPropertyValue( cCh, UCHAR_JOINING_TYPE ) == U_JT_TRANSPARENT; @@ -1012,12 +1046,12 @@ void SwScriptInfo::InitScriptInfo( const SwTextNode& rNode, bool bRTL ) } // 5. Priority: - // before medial Beh + // before medial Beh-like if ( nPriorityLevel >= 4 && nIdx > 0 && nIdx < nWordLen - 1 ) { - if ( isBehChar ( cCh )) // Beh + if ( isBehChar ( cCh ) ) { - // check if next character is Reh, Yeh or Alef Maksura + // check if next character is Reh or Yeh-like sal_Unicode cNextCh = rWord[ nIdx + 1 ]; if ( isRehChar ( cNextCh ) || isYehChar ( cNextCh )) { commit 979029ee6532791e39adea3b7078ab88386f0ecf Author: Khaled Hosny <khaledho...@eglug.org> Date: Sun Nov 6 23:07:31 2016 +0200 Insert Kashida before final Tah Looks like it was missing from the original code, though described here: https://www.microsoft.com/middleeast/msdn/JustifyingText-CSS.aspx Change-Id: Iab283cd8e9cc5aee37836ddb06d5e9b8ce8c18e4 diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx index ff2f4b8..62b8024f 100644 --- a/sw/source/core/text/porlay.cxx +++ b/sw/source/core/text/porlay.cxx @@ -71,6 +71,7 @@ using namespace i18n::ScriptType; #define isLamChar(c) IS_JOINING_GROUP((c), LAM) #define isQafChar(c) IS_JOINING_GROUP((c), QAF) #define isRehChar(c) IS_JOINING_GROUP((c), REH) +#define isTahChar(c) IS_JOINING_GROUP((c), TAH) #define isTehMarbutaChar(c) IS_JOINING_GROUP((c), TEH_MARBUTA) #define isWawChar(c) IS_JOINING_GROUP((c), WAW) #if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 4) @@ -990,12 +991,13 @@ void SwScriptInfo::InitScriptInfo( const SwTextNode& rNode, bool bRTL ) } // 4. Priority: - // before final form of Alef, Lam or Kaf + // before final form of Alef, Tah, Lam, Kaf or Gaf if ( nPriorityLevel >= 3 && nIdx > 0 ) { if ( isAlefChar ( cCh ) || // Alef (right joining) final form may appear in the middle of word - (( isLamChar ( cCh ) || // Lam - isKafChar ( cCh ) || // Kaf (both dual joining) + (( isLamChar ( cCh ) || // Lam, + isTahChar ( cCh ) || // Tah, + isKafChar ( cCh ) || // Kaf (all dual joining) isGafChar ( cCh ) ) && nIdx == nWordLen - 1)) // only at end of word { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits