Example #1
0
 /// <summary>
 /// 内部変数を初期値に設定する
 /// </summary>
 public void Clear()
 {
     // 変数クリア
     this._TagType    = enmTagType.UnKnown;
     this._TagString  = string.Empty;
     this._RefineFlag = false;
 }
Example #2
0
 /// <summary>
 /// タグタイプと同じタグのタグリストを取得する
 /// Tag.enmTagType TagType = Tag.enmTagType.UnKnownの場合、全てリスト化する
 /// </summary>
 /// <param name="tagType">タグタイプ</param>
 /// <param name="refine">絞り込み結果の場合true</param>
 /// <returns>リスト</returns>
 internal List <string> GetTagList(
     Tag.enmTagType tagType = Tag.enmTagType.UnKnown,
     bool refine            = true
     )
 {
     // 戻り値生成
     // tagType == UnKnown  全て
     // tagType != UnKnown  x.TagType == tagType
     // refin   == true     x.RefineFlag == true
     return(this.TagToList(
                this._Tags.Where(
                    x => x.TagType == tagType && tagType != Tag.enmTagType.UnKnown &&
                    (!refine || x.RefineFlag) ||
                    tagType == Tag.enmTagType.UnKnown
                    ).ToList()));
 }
Example #3
0
        /// <summary>
        /// HtmlTextを解析してタグコレクションを生成する
        /// 全角を半角に変換後解析する(changeDoubleByteSpace)
        /// </summary>
        /// <param name="changeDoubleByteSpace">全角半角変換</param>
        internal void AnalyseHtml(
            bool changeDoubleByteSpace
            )
        {
            // HtmlTextを取得する
            string thmltext = this._HtmlText;

            // 全角半角変換
            if (changeDoubleByteSpace)
            {
                // HtmlTextの全角を半角に変換する
                thmltext = thmltext.Replace(" ", " ");
            }

            // タグコレクションをクリアする
            this.Tags.Clear();

            // 文字長を取得する
            int length = thmltext.Length;

            // 解析状態をTextにする
            Tag.enmTagType eTTNow  = Tag.enmTagType.Text;
            Tag.enmTagType eTTNext = Tag.enmTagType.Text;

            // 退避用String
            StringBuilder sb = new StringBuilder();

            // 直前の文字
            char before = ' ';

            // 1文字づつ解析してゆく
            for (int i = 0; i < length; i++)
            {
                // 1文字取り出す
                char c = thmltext[i];

                // 無視文字以外の場合
                if (!CheckIgnoreCharacter(
                        c: c,
                        before: before
                        ))
                {
                    // 文字チェック
                    switch (c)
                    {
                    case STAR_TAG:
                        eTTNext = Tag.enmTagType.Tag;
                        break;

                    case END_TAG:
                        eTTNext = Tag.enmTagType.Text;
                        break;

                    default:
                        break;
                    }

                    // 状態が変化した場合
                    if (eTTNow != eTTNext)
                    {
                        // Tagへ変化の場合
                        if (eTTNow == Tag.enmTagType.Tag)
                        {
                            // 文字列退避
                            sb.Append(c);
                        }

                        // 文字が存在する場合
                        if (sb.ToString().Trim().Length > 0)
                        {
                            // タグリストに追加する
                            this.Tags.Add(new Tag
                            {
                                LineNo    = this.Tags.Count,
                                TagString = sb.ToString().Trim(),
                                TagType   = eTTNow
                            });
                        }

                        // 文字退避クリア
                        sb.Clear();

                        // Textへ変化の場合
                        if (eTTNow == Tag.enmTagType.Text)
                        {
                            // 文字列退避
                            sb.Append(c);
                        }

                        // 状態を変更する
                        eTTNow = eTTNext;
                    }
                    else
                    {
                        // 文字列退避
                        sb.Append(c);
                    }
                }

                // 直前の文字設定
                before = c;
            }

            // sbに文字列が残っていた場合
            if (sb.ToString().Trim().Length > 0)
            {
                // 文字としてタグリストに追加する
                this.Tags.Add(new Tag
                {
                    LineNo    = this.Tags.Count,
                    TagString = sb.ToString().Trim(),
                    TagType   = Tag.enmTagType.Text
                });
            }
        }