/// <summary> /// 内部変数を初期値に設定する /// </summary> public void Clear() { // 変数クリア this._TagType = enmTagType.UnKnown; this._TagString = string.Empty; this._RefineFlag = false; }
/// <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())); }
/// <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 }); } }