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