1 // ================================================================================================
3 // MediaWikiページの内部リンク要素をあらわすモデルクラスソース</summary>
5 // <copyright file="MediaWikiLink.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Parsers
14 using System.Collections.Generic;
16 using Honememo.Parsers;
19 /// MediaWikiページの内部リンク要素をあらわすモデルクラスです。
21 public class MediaWikiLink : AbstractElement
28 public static readonly string DelimiterStart = "[[";
33 public static readonly string DelimiterEnd = "]]";
40 /// 指定されたタイトルの内部リンク要素をあらわすインスタンスを生成する。
42 /// <param name="title">記事名。</param>
43 public MediaWikiLink(string title) : this()
49 /// 内部リンク要素をあらわす空のインスタンスを生成する。
51 public MediaWikiLink()
53 this.PipeTexts = new List<IElement>();
63 /// <remarks>リンクに記載されていた記事名であり、名前空間の情報などは含まない可能性があるため注意。</remarks>
64 public virtual string Title
73 public virtual string Section
82 public virtual IList<IElement> PipeTexts
91 public virtual string Interwiki
98 /// リンクの先頭が : で始まるかを示すフラグ。
100 public virtual bool IsColon
113 /// <returns>サブページ形式の場合<c>true</c>。</returns>
114 public virtual bool IsSubpage()
116 // 記事名部分が / または ../ で始まる場合サブページ形式と判定
117 return this.Title != null && (this.Title.StartsWith("/") || this.Title.StartsWith("../"));
121 /// この要素を書式化したリンク先部分のテキスト(先頭の:から言語コード, 記事名, セクションまで)を返す。
123 /// <returns>記事名部分のテキスト。</returns>
124 public virtual string GetLinkString()
126 StringBuilder b = new StringBuilder();
134 // 言語コード・他プロジェクトコードの付加
135 if (!string.IsNullOrEmpty(this.Interwiki))
137 b.Append(this.Interwiki);
142 if (!string.IsNullOrEmpty(this.Title))
144 b.Append(this.Title);
148 if (this.Section != null)
151 b.Append(this.Section);
159 #region 実装支援用抽象メソッド実装
162 /// この要素を書式化した内部リンクテキストを返す。
164 /// <returns>内部リンクテキスト。</returns>
165 protected override string ToStringImpl()
168 StringBuilder b = new StringBuilder();
171 b.Append(MediaWikiLink.DelimiterStart);
173 // リンク先部分のテキスト(先頭の:から言語コード, 記事名, セクションまで)を設定
174 b.Append(this.GetLinkString());
177 if (this.PipeTexts != null)
179 foreach (IElement p in this.PipeTexts)
182 b.Append(p.ToString());
187 b.Append(MediaWikiLink.DelimiterEnd);