Example #1
0
        public override void DoBreak(char[] input, int start, int len, OnBreak onbreak)
        {
            //1.
            UBreakIteratorType type = UBreakIteratorType.WORD;

            switch (BreakKind)
            {
            default:
            case TextBreakKind.Word:
                type = UBreakIteratorType.WORD;
                break;

            case TextBreakKind.Sentence:
                type = UBreakIteratorType.SENTENCE;
                break;
            }
            //------------------------
            int errCode = 0;

            //break all string
            unsafe
            {
                fixed(char *h = &input[start])
                {
                    IntPtr nativeIter = NativeTextBreakerLib.MtFt_UbrkOpen(type, localebuff, h, len, out errCode);
                    int    cur        = NativeTextBreakerLib.MtFt_UbrkFirst(nativeIter);

                    while (cur != DONE)
                    {
                        int next   = NativeTextBreakerLib.MtFt_UbrkNext(nativeIter);
                        int status = NativeTextBreakerLib.MtFt_UbrkGetRuleStatus(nativeIter);
                        if (next != DONE && AddToken(type, status))
                        {
                            onbreak(new SplitBound(cur, next - cur));
                        }
                        cur = next;
                    }
                    NativeTextBreakerLib.MtFt_UbrkClose(nativeIter);
                }
            }
        }