1 // ================================================================================================
3 // ログテキストの生成を行うためのクラスソース</summary>
5 // <copyright file="Logger.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Logics
16 using Honememo.Parsers;
17 using Honememo.Utilities;
18 using Honememo.Wptscs.Properties;
21 /// ログテキストの生成を行うためのクラスです。
30 private string log = string.Empty;
39 public event EventHandler LogUpdate;
48 protected virtual string Log
57 this.log = StringUtils.DefaultString(value);
58 if (this.LogUpdate != null)
60 this.LogUpdate(this, EventArgs.Empty);
72 /// <param name="message">ログメッセージ。</param>
73 public virtual void AddMessage(string message)
75 // 直前のログが改行されていない場合、改行して出力
76 this.AddNewLineIfNotEndWithNewLine();
77 this.Log += message + Environment.NewLine;
81 /// ログメッセージを書式化して登録する。
83 /// <param name="format">書式項目を含んだログメッセージ。</param>
84 /// <param name="args">書式設定対象オブジェクト配列。</param>
85 public virtual void AddMessage(string format, params object[] args)
87 // 書式化してオーバーロードメソッドをコール
88 this.AddMessage(string.Format(format, args));
92 /// 応答メッセージ(「→ ~しました」のようなメッセージ)を登録する。
94 /// <param name="response">ログメッセージ。</param>
95 public virtual void AddResponse(string response)
97 // 右矢印の後に半角スペースを空けてメッセージ出力
98 this.AddMessage(Resources.RightArrow + " " + response);
102 /// 応答メッセージ(「→ ~しました」のようなメッセージ)を登録する。
104 /// <param name="format">書式項目を含んだログメッセージ。</param>
105 /// <param name="args">書式設定対象オブジェクト配列。</param>
106 public virtual void AddResponse(string format, params object[] args)
108 // 書式化してオーバーロードメソッドをコール
109 this.AddResponse(string.Format(format, args));
113 /// 例外メッセージ(「→ 通信エラー」のようなメッセージ)を登録する。
115 /// <param name="e">例外。</param>
116 public virtual void AddError(Exception e)
119 this.AddResponse(e.Message);
120 if (e is WebException && ((WebException)e).Response != null)
122 // 出せるならエラーとなったURLも出力
123 this.AddResponse(Resources.LogMessageErrorURL, ((WebException)e).Response.ResponseUri);
130 public virtual void AddSeparator()
132 // この実装では、区切りは余分な空行で表す
133 this.AddMessage(string.Empty);
138 #region ログ登録メソッド(翻訳支援処理)
143 /// <param name="source">変換元を表す要素。</param>
146 /// <code>AddSource</code>→(<see cref="AddAlias"/>)→<see cref="AddDestination"/>
147 /// の順で一連のメソッドをコールする。
148 /// 上記以外のメソッドをコールした場合、該当行の変換結果の出力は終了したものとみなす。
150 public virtual void AddSource(IElement source)
152 // 直前のログが改行されていない場合、改行して出力
153 this.AddNewLineIfNotEndWithNewLine();
154 this.Log += source.ToString() + " " + Resources.RightArrow + " ";
158 /// 変換元の別名を表すログを追加する。
160 /// <param name="alias">変換元の別名を表す要素。</param>
163 /// <see cref="AddSource"/>→(<code>AddAlias</code>)→<see cref="AddDestination"/>
164 /// の順で一連のメソッドをコールする。
165 /// 上記以外のメソッドをコールした場合、該当行の変換結果の出力は終了したものとみなす。
167 public virtual void AddAlias(IElement alias)
169 this.Log += alias.ToString() + " " + Resources.RightArrow + " ";
175 /// <param name="destination">変換先を表す要素。</param>
176 /// <param name="cacheUsed">対訳表を使用している場合<code>true</code>。デフォルトは<code>false</code>。</param>
179 /// <see cref="AddSource"/>→(<see cref="AddAlias"/>)→<code>AddDestination</code>
180 /// の順で一連のメソッドをコールする。
181 /// 上記以外のメソッドをコールした場合、該当行の変換結果の出力は終了したものとみなす。
183 public virtual void AddDestination(IElement destination, bool cacheUsed = false)
185 StringBuilder b = new StringBuilder(destination.ToString());
188 b.Append(Resources.LogMessageNoteTranslation);
191 b.Append(Environment.NewLine);
192 this.Log += b.ToString();
200 /// このロガーが保持するログテキストを返す。
202 /// <returns>ログテキスト。<c>null</c>は返さない。</returns>
203 public override string ToString()
213 /// このロガーが保持する内容を初期状態に戻す。
215 public virtual void Clear()
225 /// 直前のログが改行されていない場合、改行する。
227 protected void AddNewLineIfNotEndWithNewLine()
229 // ログが空以外で最後が改行ではない場合
230 if (!string.IsNullOrEmpty(this.Log) && !this.Log.EndsWith(Environment.NewLine))
232 this.Log += Environment.NewLine;