Exemple #1
0
        private void WritePrefix()
        {
            // write prefix by state
            WritingState currentState = this.state.Peek();

            switch (currentState)
            {
            case WritingState.Value:
                break;

            case WritingState.ArrayStart:
                this.state.Pop();
                this.state.Push(WritingState.Array);
                break;

            case WritingState.ObjectStart:
                this.state.Pop();
                this.state.Push(WritingState.Object);
                break;

            case WritingState.Array:
            case WritingState.Object:
                this.writer.Write(',');
                break;

            case WritingState.ObjectPropertyName:
                this.state.Pop();
                this.writer.Write(':');
                break;

            default:
                break;
            }
        }
    //開始タグ適用(未対応のタグの場合はfalseを返す)
    private bool applyStartTag(TagReader.StartTag aTag)
    {
        switch (aTag.mTagName)
        {
        case "clear":    //表示削除
            clear();
            return(true);

        case "stop":    //停止
            mWritingState = WritingState.stop;
            return(true);

        case "next":    //停止、再開時に表示削除
            mWritingState = WritingState.waiteNext;
            return(true);

        case "waite":    //指定秒数停止
            mWritingState = WritingState.waite;
            this.setTimeout(float.Parse(aTag.mArguments[0]), () => {
                if (mWritingState == WritingState.waite)
                {
                    mWritingState = WritingState.writing;
                }
            });
            return(true);

        default:
            return(false);
        }
    }
    //<summary>表示を停止するところまで表示、もしくは停止を解除し続きを表示</summary>
    public void read()
    {
        switch (mWritingState)
        {
        case WritingState.writing:    //追記中
            //停止するまでスキップ
            while (mWritingState == WritingState.writing)
            {
                next();
            }
            return;

        case WritingState.stop:    //停止中
            //続きを表示
            mElapsedTime  = 0;
            mWritingState = WritingState.writing;
            return;

        case WritingState.waiteNext:    //ページ送り待ち中
            //表示削除してから続きを表示
            clear();
            mElapsedTime  = 0;
            mWritingState = WritingState.writing;
            return;

        case WritingState.waite:    //待ち中
            return;

        case WritingState.end:    //表示完了済み
            return;
        }
    }
 //<summary>次の1文字を表示</summary>
 public void next()
 {
     while (true)  //1文字表示するまでループ
     {
         if (mWritingState != WritingState.writing)
         {
             return;                                       //表示停止中
         }
         if (mReader.isEnd())
         {
             //全て表示終了している
             mWritingState = WritingState.end;
             //読み終わりコールバック
             if (mOnRead != null)
             {
                 mOnRead();
             }
         }
         //次の1文字もしくはタグを読んで表示
         TagReader.Element tElement = mReader.read();
         if (tElement is TagReader.OneChar)
         {
             //文字1文字
             mBoard.addText(((TagReader.OneChar)tElement).mChar);
             return;
         }
         else if (tElement is TagReader.StartTag)
         {
             //開始タグ
             if (!applyStartTag((TagReader.StartTag)tElement))
             {
                 mBoard.addText(((TagReader.StartTag)tElement).mOriginalString);
             }
             continue;
         }
         else if (tElement is TagReader.EndTag)
         {
             //終了タグ
             if (!applyEndTag((TagReader.EndTag)tElement))
             {
                 mBoard.addText(((TagReader.EndTag)tElement).mOriginalString);
             }
             continue;
         }
     }
 }
 public TextEditor(WritingState state) => this.state = state;
 ///<summary>テキストを表示(既に表示されているテキストはそのまま)</summary>
 public void display(string aText)
 {
     mReader       = new TagReader(aText);
     mElapsedTime  = 0;
     mWritingState = WritingState.writing;
 }