OSDN Git Service

#30244 Visual Studio 2012 Express for Windows Desktop, StyleCop 4.7, WiX 3.6 に合わせたソース...
[wptscs/wpts.git] / Wptscs / Parsers / MediaWikiTemplate.cs
1 // ================================================================================================
2 // <summary>
3 //      MediaWikiページのテンプレート要素をあらわすモデルクラスソース</summary>
4 //
5 // <copyright file="MediaWikiTemplate.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
7 // <author>
8 //      Honeplus</author>
9 // ================================================================================================
10
11 namespace Honememo.Wptscs.Parsers
12 {
13     using System;
14     using System.Collections.Generic;
15     using System.Text;
16     using Honememo.Parsers;
17     using Honememo.Utilities;
18
19     /// <summary>
20     /// MediaWikiページのテンプレート要素をあらわすモデルクラスです。
21     /// </summary>
22     public class MediaWikiTemplate : MediaWikiLink
23     {
24         #region 定数
25
26         /// <summary>
27         /// テンプレートの開始タグ。
28         /// </summary>
29         public static readonly new string DelimiterStart = "{{";
30
31         /// <summary>
32         /// テンプレートの閉じタグ。
33         /// </summary>
34         public static readonly new string DelimiterEnd = "}}";
35
36         /// <summary>
37         /// msgnwの書式。
38         /// </summary>
39         public static readonly string Msgnw = "msgnw:";
40
41         #endregion
42
43         #region private変数
44
45         /// <summary>
46         /// テンプレートの記事名。
47         /// </summary>
48         private string title;
49
50         #endregion
51
52         #region コンストラクタ
53
54         /// <summary>
55         /// 指定されたタイトルのテンプレート要素をあらわすインスタンスを生成する。
56         /// </summary>
57         /// <param name="title">テンプレート名。</param>
58         public MediaWikiTemplate(string title) : base(title)
59         {
60         }
61
62         #endregion
63
64         #region プロパティ
65
66         /// <summary>
67         /// テンプレートの記事名。
68         /// </summary>
69         /// <exception cref="ArgumentNullException">記事名がnullの場合。</exception>
70         /// <exception cref="ArgumentException">記事名が空の場合。</exception>
71         /// <remarks>テンプレートに記載されていた記事名であり、名前空間の情報などは含まない可能性があるため注意。</remarks>
72         public override string Title
73         {
74             get
75             {
76                 return this.title;
77             }
78
79             set
80             {
81                 this.title = Validate.NotBlank(value);
82             }
83         }
84
85         /// <summary>
86         /// テンプレートのソースをそのまま出力することを示す msgnw: が付加されているか?
87         /// </summary>
88         public virtual bool IsMsgnw
89         {
90             get;
91             set;
92         }
93
94         /// <summary>
95         /// 記事名の後で改行が入るか?
96         /// </summary>
97         public virtual bool NewLine
98         {
99             get;
100             set;
101         }
102
103         #endregion
104
105         #region 実装支援用抽象メソッド実装
106
107         /// <summary>
108         /// この要素を書式化したテンプレートテキストを返す。
109         /// </summary>
110         /// <returns>テンプレートテキスト。</returns>
111         protected override string ToStringImpl()
112         {
113             // 戻り値初期化
114             StringBuilder b = new StringBuilder();
115             
116             // 開始タグの付加
117             b.Append(MediaWikiTemplate.DelimiterStart);
118
119             // 先頭の : の付加(テンプレート名前空間ではなく標準名前空間となる)
120             if (this.IsColon)
121             {
122                 b.Append(':');
123             }
124
125             // msgnw: (テンプレートを<nowiki>タグで挟む)の付加
126             if (this.IsMsgnw)
127             {
128                 b.Append(MediaWikiTemplate.Msgnw);
129             }
130
131             // 言語コード・他プロジェクトコードの付加
132             if (!string.IsNullOrEmpty(this.Interwiki))
133             {
134                 b.Append(this.Interwiki);
135                 b.Append(':');
136             }
137
138             // テンプレート名の付加
139             if (!string.IsNullOrEmpty(this.Title))
140             {
141                 b.Append(this.Title);
142             }
143
144             // セクション名の付加
145             if (this.Section != null)
146             {
147                 b.Append('#');
148                 b.Append(this.Section);
149             }
150
151             // 改行の付加
152             if (this.NewLine)
153             {
154                 b.Append('\n');
155             }
156
157             // パイプ後の文字列の付加
158             if (this.PipeTexts != null)
159             {
160                 foreach (IElement p in this.PipeTexts)
161                 {
162                     b.Append('|');
163                     b.Append(p.ToString());
164                 }
165             }
166
167             // 閉じタグの付加
168             b.Append(MediaWikiTemplate.DelimiterEnd);
169             return b.ToString();
170         }
171
172         #endregion
173     }
174 }