2 * basic handler for XHTML
4 * License : The MIT License
5 * Copyright(c) 2009 olyutorskii
8 package jp.sourceforge.jindolf.parser;
10 import jp.sourceforge.jindolf.corelib.PeriodType;
11 import jp.sourceforge.jindolf.corelib.VillageState;
14 * 人狼BBSの各種XHTMLの基本的な構造をパースするためのハンドラ。
15 * このハンドラの全メソッドはパーサ{@link HtmlParser}により呼ばれる。
18 * パーサはパース開始時に{@link #startParse(DecodedContent)}を呼び、
19 * パース終了直前に{@link #endParse()}を呼ぶ。
20 * その間に他の様々なメソッドが呼び出される。
24 * 一部のメソッドに渡される{@link DecodedContent}文字列オブジェクトは
26 * 後々で内容が必要になるならば、ハンドラはSeqRangeで示されたこの内容の
27 * 必要な箇所をコピーして保存しなければならない。
31 * フラグメントや属性値中の文字参照記号列の解釈はハンドラ側の責務とする。
35 * 各メソッドは、各々の判断で{@link HtmlParseException}をスローする
36 * ことにより、パース作業を中断させることができる。
39 public interface BasicHandler{
43 * @param content これからパースを始めるXHTML文字列
44 * @throws HtmlParseException パースエラー
46 void startParse(DecodedContent content) throws HtmlParseException;
50 * 例:「人狼BBS:F F2019 新緑の村」。
51 * @param content パース対象文字列
52 * @param titleRange タイトルの範囲
53 * @throws HtmlParseException パースエラー
55 void pageTitle(DecodedContent content, SeqRange titleRange)
56 throws HtmlParseException;
60 * ログインせずに得られたページがパース対象であるなら、呼ばれない。
62 * @param content パース対象文字列
63 * @param loginRange ログイン名の範囲
64 * @throws HtmlParseException パースエラー
66 void loginName(DecodedContent content, SeqRange loginRange)
67 throws HtmlParseException;
70 * 読み込んだページ種別を自動認識した結果を伝える。
71 * ページタイトルもしくはログイン名の通知の後に呼ばれうる。
73 * @throws HtmlParseException パースエラー
75 void pageType(PageType type)
76 throws HtmlParseException;
80 * 国名と番号と愛称に分解するのはハンドラ側の責務。
82 * @param content パース対象文字列
83 * @param villageRange 村名の範囲
84 * @throws HtmlParseException パースエラー
86 void villageName(DecodedContent content, SeqRange villageRange)
87 throws HtmlParseException;
91 * 既に終了した村がパース対象の場合、あまり月日に意味はないかも。
96 * @throws HtmlParseException パースエラー
98 void commitTime(int month, int day, int hour, int minute)
99 throws HtmlParseException;
104 * @param content パース対象文字列
105 * @param anchorRange aタグhref属性値の範囲
106 * @param periodType 日のタイプ。「終了」ならnull。
107 * @param day 日にち。「プロローグ」、「エピローグ」、「終了」では-1。
108 * @throws HtmlParseException パースエラー
110 void periodLink(DecodedContent content,
111 SeqRange anchorRange,
112 PeriodType periodType, int day)
113 throws HtmlParseException;
116 * 村一覧リスト内の個別の村情報の通知を受け取る。
117 * @param content パース対象文字列
118 * @param anchorRange URLの範囲
119 * @param villageRange 村名の範囲
120 * @param hour 更新時。不明なら負の数。
121 * @param minute 更新分。不明なら負の数。
123 * @throws HtmlParseException パースエラー
125 void villageRecord(DecodedContent content,
126 SeqRange anchorRange,
127 SeqRange villageRange,
128 int hour, int minute,
130 throws HtmlParseException;
134 * @throws HtmlParseException パースエラー
136 void endParse() throws HtmlParseException;