1 // ================================================================================================
3 // MediaWikiのリダイレクトページを解析するパーサークラスソース</summary>
5 // <copyright file="MediaWikiRedirectParser.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2011 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Parsers
14 using System.Collections.Generic;
15 using Honememo.Parsers;
16 using Honememo.Wptscs.Properties;
17 using Honememo.Wptscs.Websites;
20 /// MediaWikiのリダイレクトページを解析するパーサークラスです。
22 public class MediaWikiRedirectParser : MediaWikiParser
27 /// 指定されたMediaWikiサーバーのページを解析するためのパーサーを作成する。
29 /// <param name="site">このパーサーが対応するMediaWiki。</param>
30 /// <exception cref="ArgumentNullException"><c>null</c>が指定された場合。</exception>
31 public MediaWikiRedirectParser(MediaWiki site)
38 #region ITextParserインタフェース実装メソッド
41 /// 渡されたMediaWikiページをMediaWikiのリダイレクトページとして解析する。
43 /// <param name="s">解析対象のMediaWikiページ本文。</param>
44 /// <param name="condition">解析を終了するかの判定を行うデリゲート。本クラスでは無視されます。</param>
45 /// <param name="result">解析したリダイレクトリンク。</param>
46 /// <returns>解析に成功した場合<c>true</c>。</returns>
48 /// このメソッドへはMediaWikiのページ全体を渡す必要があります。
49 /// また、ページ全体を解析する必要があることから、
50 /// <paramref name="condition"/>が指定されていても無視します。
52 /// <exception cref="ObjectDisposedException"><see cref="MediaWikiParser.Dispose"/>が実行済みの場合。</exception>
53 public override bool TryParseToEndCondition(string s, IsEndCondition condition, out IElement result)
56 if (this.LinkParser == null)
58 // 子パーサーが解放済みの場合Dispose済みで処理不可
59 throw new ObjectDisposedException(this.GetType().Name);
61 else if (String.IsNullOrEmpty(s))
67 // 日本語版みたいに、#REDIRECTと言語固有の#転送みたいなのがあると思われるので、
68 // 翻訳元言語とデフォルトの設定でチェック
69 string lower = s.ToLower();
70 for (int i = 0; i < 2; i++)
72 string format = this.Website.Redirect;
75 format = Settings.Default.MediaWikiRedirect;
78 if (!String.IsNullOrEmpty(format)
79 && lower.StartsWith(format.ToLower()))
81 if (this.LinkParser.TryParse(s.Substring(format.Length).TrimStart(), out result))