1 // ================================================================================================
3 // MediaWiki翻訳支援処理用のログテキストの生成を行うためのクラスソース</summary>
5 // <copyright file="MediaWikiLogger.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Logics
15 using Honememo.Parsers;
16 using Honememo.Wptscs.Parsers;
17 using Honememo.Wptscs.Properties;
20 /// MediaWiki翻訳支援処理用のログテキストの生成を行うためのクラスです。
22 public class MediaWikiLogger : Logger
24 #region ログ登録メソッド(翻訳支援処理)
29 /// <param name="source">変換元を表す要素。</param>
32 /// <code>AddSource</code>→(<see cref="AddAlias"/>)→<see cref="AddDestination"/>
34 /// 上記以外のメソッドをコールした場合、該当行の変換結果の出力は終了したものとみなす。
36 public override void AddSource(IElement source)
38 if (source is MediaWikiHeading)
40 // 見出しの場合、変換先が無い場合は単に「見出し」として出力するので矢印を出さない
41 // また、見出しの部分でログを一区切りする
43 this.Log += this.FormatElement(source);
47 // それ以外は独自に整形だけ行い、後は親クラスの処理を使用
48 base.AddSource(this.FormatElement(source));
55 /// <param name="alias">リダイレクトを表す要素。</param>
58 /// <see cref="AddSource"/>→(<code>AddAlias</code>)→<see cref="AddDestination"/>
60 /// 上記以外のメソッドをコールした場合、該当行の変換結果の出力は終了したものとみなす。
62 public override void AddAlias(IElement alias)
64 // 直前のログが見出しの場合矢印を出力、その後リダイレクトを出力
65 // ※ 見出しでリダイレクトというのはありえないが、一応AddDestinationとあわせて
66 this.AddRightArrowIfEndWithHeading();
67 ListElement list = new ListElement();
68 list.Add(new TextElement(Resources.LogMessageRedirect + " "));
69 list.Add(this.FormatElement(alias));
76 /// <param name="destination">変換先を表す要素。</param>
77 /// <param name="cacheUsed">対訳表を使用している場合<code>true</code>。デフォルトは<code>false</code>。</param>
80 /// <see cref="AddSource"/>→(<see cref="AddAlias"/>)→<code>AddDestination</code>
82 /// 上記以外のメソッドをコールした場合、該当行の変換結果の出力は終了したものとみなす。
84 public override void AddDestination(IElement destination, bool cacheUsed = false)
86 // 直前のログが見出しの場合矢印を出力、その後独自に整形した変換先を出力
87 this.AddRightArrowIfEndWithHeading();
88 base.AddDestination(this.FormatElement(destination), cacheUsed);
96 /// 渡された要素の種類に応じた翻訳支援処理ログ出力用の書式に変換した要素を返す。
98 /// <param name="element">書式化する要素。</param>
99 /// <returns>書式化した内容で<code>ToString</code>が可能な要素。</returns>
100 private IElement FormatElement(IElement element)
102 // 要素のクラスに応じた書式に変換して返す
103 if (element is MediaWikiTemplate)
105 return this.FormatMediaWikiTemplate((MediaWikiTemplate)element);
107 else if (element is MediaWikiLink)
109 return this.FormatMediaWikiLink((MediaWikiLink)element);
117 /// 翻訳支援処理ログ出力用の書式に変換した要素を返す。
119 /// <param name="element">書式化する要素。</param>
120 /// <returns>書式化した内容で<code>ToString</code>が可能な要素。</returns>
121 private IElement FormatMediaWikiTemplate(MediaWikiTemplate element)
123 // そのままだとログに出すには情報が多すぎるので、必要な部分だけ抜粋
125 return new MediaWikiTemplate(element.Title);
129 /// 翻訳支援処理ログ出力用の書式に変換した要素を返す。
131 /// <param name="element">書式化する要素。</param>
132 /// <returns>書式化した内容で<code>ToString</code>が可能な要素。</returns>
133 private IElement FormatMediaWikiLink(MediaWikiLink element)
135 // そのままだとログに出すには情報が多すぎるので、必要な部分だけ抜粋
137 return new MediaWikiLink(element.Title);
141 /// 最終ログが見出しの場合、<see cref="AddSource"/>で出していない矢印を出力する。
143 private void AddRightArrowIfEndWithHeading()
145 if (this.Log.EndsWith(MediaWikiHeading.DelimiterEnd.ToString()))
147 this.Log += " " + Resources.RightArrow + " ";