diff options
| author | fschmid <fschmid@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-28 09:10:04 +0000 |
|---|---|---|
| committer | fschmid <fschmid@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-28 09:10:04 +0000 |
| commit | 80db955537db5b700231469e8b30e5ddede6374b (patch) | |
| tree | 02a0e46c76d17113c8793d12688ec712939ec54a /scribus/text/specialchars.cpp | |
| parent | c5990e3852c989374af8f81ce9ea0141e9b1942c (diff) | |
| download | scribus-80db955537db5b700231469e8b30e5ddede6374b.tar.gz scribus-80db955537db5b700231469e8b30e5ddede6374b.tar.xz scribus-80db955537db5b700231469e8b30e5ddede6374b.zip | |
Applied Patch from Bug 10547: "Japanese text line composition rule is not supported."
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17253 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/text/specialchars.cpp')
| -rw-r--r-- | scribus/text/specialchars.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/scribus/text/specialchars.cpp b/scribus/text/specialchars.cpp index 0f23a32..9cf46fc 100644 --- a/scribus/text/specialchars.cpp +++ b/scribus/text/specialchars.cpp @@ -59,3 +59,122 @@ bool SpecialChars::isBreak(QChar c, bool includeColBreak) || (includeColBreak && c == COLBREAK)); } +int SpecialChars::getCJKAttr(QChar c) +{ + static uchar attr_3000[0x100] = { + // 0x3000 - 0x3007 + CJK_SPACE,CJK_COMMA,CJK_PERIOD,CJK_NOTOP,CJK_KANJI,CJK_NOTOP,CJK_KANJI,CJK_KANJI, + // 0x3008 - 0x300f + CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_FENCE_BEGIN,CJK_FENCE_END, + // 0x3010 - 0x3017 + CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_KANJI,CJK_KANJI,CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_FENCE_BEGIN,CJK_FENCE_END, + // 0x3018 - 0x301f + CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_HYPHEN,CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_FENCE_END, + // 0x3020 - 0x3027 + CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0x3028 - 0x302f + CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0x3030 - 0x3037 + CJK_BETWEEN,CJK_BETWEEN,CJK_BETWEEN,CJK_BETWEEN,CJK_BETWEEN,CJK_BETWEEN,CJK_KANJI,CJK_KANJI, + // 0x3038 - 0x303f + CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0x3040 - 0x3047 + CJK_KANJI,CJK_NOTOP,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP, + // 0x3048 - 0x304f + CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3050 - 0x3057 + CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3058 - 0x305f + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3060 - 0x3067 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3068 - 0x306f + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3070 - 0x3077 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3078 - 0x307f + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x3080 - 0x3087 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP, + // 0x3088 - 0x308f + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_KANA, + // 0x3090 - 0x3097 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_NOTOP,CJK_KANJI, + // 0x3098 - 0x309f + CJK_KANJI,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_NOTOP,CJK_KANA, + + // 0x30a0 - 0x30a7 + CJK_KANJI,CJK_NOTOP,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP, + // 0x30a8 - 0x30af + CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30b0 - 0x30b7 + CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30b8 - 0x30bf + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30c0 - 0x30c7 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30c8 - 0x30cf + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30d0 - 0x30d7 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30d8 - 0x30df + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA, + // 0x30e0 - 0x30e7 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP,CJK_KANA,CJK_NOTOP, + // 0x30e8 - 0x30ef + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_KANA, + // 0x30f0 - 0x30f7 + CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_KANA,CJK_NOTOP,CJK_NOTOP,CJK_KANA, + // 0x30f8 - 0x30ff + CJK_KANA,CJK_KANA,CJK_KANA,CJK_MIDPOINT,CJK_NOTOP,CJK_NOTOP,CJK_NOTOP,CJK_KANA + }; + + static uchar attr_ff00[0x61] = { + // 0xff00 - 0xff07 + CJK_SPACE,CJK_DELMITER,CJK_KANJI,CJK_PREFIX,CJK_PREFIX,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff08 - 0xff0f + CJK_FENCE_BEGIN,CJK_FENCE_END,CJK_KANJI,CJK_KANJI,CJK_COMMA,CJK_BETWEEN,CJK_PERIOD,CJK_KANJI, + // 0xff10 - 0xff17 + CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff18 - 0xff1f + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff20 - 0xff27 + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff28 - 0xff2f + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff30 - 0xff37 + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff38 - 0xff3f + CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_FENCE_BEGIN,CJK_KANJI,CJK_FENCE_END,CJK_KANJI,CJK_KANJI, + // 0xff40 - 0xff47 + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff48 - 0xff4f + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff50 - 0xff57 + CJK_KANJI,CJK_KANJI,CJK_MIDPOINT,CJK_MIDPOINT,CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_KANJI, + // 0xff58 - 0xff5f + CJK_KANJI,CJK_KANJI,CJK_KANJI,CJK_FENCE_BEGIN,CJK_KANJI,CJK_FENCE_END,CJK_BETWEEN,CJK_FENCE_BEGIN, + // 0xff60 + CJK_FENCE_END + }; + ushort code = c.unicode(); + if(code >= 0x3100 && code < 0xa000){ + return CJK_KANJI; + } + + int attr = 0; + if(code >= 0x3000 && code < 0x3100){ + attr = attr_3000[code - 0x3000]; + } else if( code >= 0xff00 && code <= 0xff60 ){ + attr = attr_ff00[code - 0xff00]; + } + if( attr != 0 ){ + if(attr == CJK_COMMA || attr == CJK_PERIOD || attr == CJK_NOTOP || attr == CJK_FENCE_END ) + attr |= CJK_NOBREAK_BEFORE; + else if(attr == CJK_FENCE_BEGIN ) + attr |= CJK_NOBREAK_AFTER; + else if(attr == CJK_MIDPOINT || attr == CJK_HYPHEN || attr == CJK_DELMITER ) + attr |= CJK_NOBREAK_BEFORE; + } + return attr; +} |
