Esempio n. 1
0
        public void BreakWords(char[] charBuff, int startAt)
        {
            //conver to char buffer
            int j = charBuff.Length;

            textLength = j;
            visitor.LoadText(charBuff, 0);
            //----------------------------------------
            BreakingEngine currentEngine = breakingEngine = SelectEngine(charBuff[startAt]);

            //----------------------------------------
            //select breaking engine
            for (; ;)
            {
                //----------------------------------------
                currentEngine.BreakWord(visitor, charBuff, startAt, charBuff.Length - startAt);
                switch (visitor.State)
                {
                default: throw new NotSupportedException();

                case VisitorState.End:
                    //ok
                    return;

                case VisitorState.OutOfRangeChar:
                {
                    //find proper breaking engine for current char

                    BreakingEngine anotherEngine = SelectEngine(visitor.Char);
                    if (anotherEngine == currentEngine)
                    {
                        throw new NotSupportedException();
                    }
                    else
                    {
                        currentEngine = anotherEngine;
                        startAt       = visitor.CurrentIndex;
                    }
                }
                break;
                }
            }
        }
Esempio n. 2
0
        public void BreakWords(char[] charBuff, int startAt)
        {
            //conver to char buffer 
            int j = charBuff.Length;
            textLength = j;
            visitor.LoadText(charBuff, 0);
            //---------------------------------------- 
            BreakingEngine currentEngine = breakingEngine = SelectEngine(charBuff[startAt]);
            //----------------------------------------
            //select breaking engine
            for (; ; )
            {
                //----------------------------------------
                currentEngine.BreakWord(visitor, charBuff, startAt, charBuff.Length - startAt);
                switch (visitor.State)
                {
                    default: throw new NotSupportedException();

                    case VisitorState.End:
                        //ok
                        return;
                    case VisitorState.OutOfRangeChar:
                        {
                            //find proper breaking engine for current char

                            BreakingEngine anotherEngine = SelectEngine(visitor.Char);
                            if (anotherEngine == currentEngine)
                            {
                                throw new NotSupportedException();
                            }
                            else
                            {
                                currentEngine = anotherEngine;
                                startAt = visitor.CurrentIndex;
                            }
                        }
                        break;
                }
            }
        }
Esempio n. 3
0
        BreakingEngine SelectEngine(char c)
        {
            if (breakingEngine.CanHandle(c))
            {
                return(breakingEngine);
            }
            else
            {
                //find other engine
                for (int i = otherEngines.Count - 1; i >= 0; --i)
                {
                    //not the current engine
                    //and can handle the character
                    BreakingEngine engine = otherEngines[i];
                    if (engine != breakingEngine && engine.CanHandle(c))
                    {
                        return(engine);
                    }
                }

                return(engBreakingEngine);
            }
        }
Esempio n. 4
0
 public void AddBreakingEngine(BreakingEngine engine)
 {
     //TODO: make this accept more than 1 engine
     otherEngines.Add(engine);
     breakingEngine = engine;
 }
Esempio n. 5
0
 public void AddBreakingEngine(BreakingEngine engine)
 {
     //TODO: make this accept more than 1 engine
     otherEngines.Add(engine);
     breakingEngine = engine;
 }