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