int brk = LINEBREAK_UNDEFINED;
assert((lbpCtx->lbcCur > 0) && (lbpCtx->lbcCur <= LBP_RI));
assert((lbpCtx->lbcNew > 0) && (lbpCtx->lbcNew <= LBP_RI));
- switch (baTable[lbpCtx->lbcCur - 1][lbpCtx->lbcNew - 1])
+
+ enum LineBreakClass lbcCur, lbcNew;
+
+ switch (lbpCtx->lbcCur)
+ {
+ case LBP_H2: /**< Hangul LV */
+ case LBP_H3: /**< Hangul LVT */
+ case LBP_JL: /**< Hangul L Jamo */
+ case LBP_JV: /**< Hangul V Jamo */
+ case LBP_JT: /**< Hangul T Jamo */
+ lbcCur = LBP_AL;
+ break;
+ default:
+ lbcCur = lbpCtx->lbcCur;
+ break;
+ }
+
+ switch (lbpCtx->lbcNew)
+ {
+ case LBP_H2: /**< Hangul LV */
+ case LBP_H3: /**< Hangul LVT */
+ case LBP_JL: /**< Hangul L Jamo */
+ case LBP_JV: /**< Hangul V Jamo */
+ case LBP_JT: /**< Hangul T Jamo */
+ lbcNew = LBP_AL;
+ break;
+ default:
+ lbcNew = lbpCtx->lbcNew;
+ break;
+ }
+
+ switch (baTable[lbcCur - 1][lbcNew - 1])
{
case DIR_BRK:
brk = LINEBREAK_ALLOWBREAK;
brk = LINEBREAK_NOBREAK;
break;
}
+
lbpCtx->lbcCur = lbpCtx->lbcNew;
return brk;
}