// ================================================================================================ // // MediaWikiページのテンプレート要素をあらわすモデルクラスソース // // // Copyright (C) 2012 Honeplus. All rights reserved. // // Honeplus // ================================================================================================ namespace Honememo.Wptscs.Parsers { using System; using System.Collections.Generic; using System.Text; using Honememo.Parsers; using Honememo.Utilities; /// /// MediaWikiページのテンプレート要素をあらわすモデルクラスです。 /// public class MediaWikiTemplate : MediaWikiLink { #region 定数 /// /// テンプレートの開始タグ。 /// public static readonly new string DelimiterStart = "{{"; /// /// テンプレートの閉じタグ。 /// public static readonly new string DelimiterEnd = "}}"; /// /// msgnwの書式。 /// public static readonly string Msgnw = "msgnw:"; #endregion #region private変数 /// /// テンプレートの記事名。 /// private string title; #endregion #region コンストラクタ /// /// 指定されたタイトルのテンプレート要素をあらわすインスタンスを生成する。 /// /// テンプレート名。 public MediaWikiTemplate(string title) : base(title) { } #endregion #region プロパティ /// /// テンプレートの記事名。 /// /// 記事名がnullの場合。 /// 記事名が空の場合。 /// テンプレートに記載されていた記事名であり、名前空間の情報などは含まない可能性があるため注意。 public override string Title { get { return this.title; } set { this.title = Validate.NotBlank(value); } } /// /// テンプレートのソースをそのまま出力することを示す msgnw: が付加されているか? /// public virtual bool IsMsgnw { get; set; } /// /// 記事名の後で改行が入るか? /// public virtual bool NewLine { get; set; } #endregion #region 実装支援用抽象メソッド実装 /// /// この要素を書式化したテンプレートテキストを返す。 /// /// テンプレートテキスト。 protected override string ToStringImpl() { // 戻り値初期化 StringBuilder b = new StringBuilder(); // 開始タグの付加 b.Append(MediaWikiTemplate.DelimiterStart); // 先頭の : の付加(テンプレート名前空間ではなく標準名前空間となる) if (this.IsColon) { b.Append(':'); } // msgnw: (テンプレートをタグで挟む)の付加 if (this.IsMsgnw) { b.Append(MediaWikiTemplate.Msgnw); } // 言語コード・他プロジェクトコードの付加 if (!string.IsNullOrEmpty(this.Interwiki)) { b.Append(this.Interwiki); b.Append(':'); } // テンプレート名の付加 if (!string.IsNullOrEmpty(this.Title)) { b.Append(this.Title); } // セクション名の付加 if (this.Section != null) { b.Append('#'); b.Append(this.Section); } // 改行の付加 if (this.NewLine) { b.Append('\n'); } // パイプ後の文字列の付加 if (this.PipeTexts != null) { foreach (IElement p in this.PipeTexts) { b.Append('|'); b.Append(p.ToString()); } } // 閉じタグの付加 b.Append(MediaWikiTemplate.DelimiterEnd); return b.ToString(); } #endregion } }