OSDN Git Service

5951c97ac51579efcb485a1046337ef88bc8f23f
[jindolf/JinParser.git] / src / main / java / jp / sourceforge / jindolf / parser / BasicHandler.java
1 /*\r
2  * basic handler for XHTML\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2009 olyutorskii\r
6  */\r
7 \r
8 package jp.sourceforge.jindolf.parser;\r
9 \r
10 import jp.sourceforge.jindolf.corelib.PeriodType;\r
11 import jp.sourceforge.jindolf.corelib.VillageState;\r
12 \r
13 /**\r
14  * 人狼BBSの各種XHTMLの基本的な構造をパースするためのハンドラ。\r
15  * このハンドラの全メソッドはパーサ{@link HtmlParser}により呼ばれる。\r
16  *\r
17  * パーサはパース開始時に{@link #startParse(DecodedContent)}を呼び、\r
18  * パース終了直前に{@link #endParse()}を呼ぶ。\r
19  * その間に他の様々なメソッドが呼び出される。\r
20  *\r
21  * 一部のメソッドに渡される{@link DecodedContent}文字列オブジェクトは\r
22  * mutableである。\r
23  * 後々で内容が必要になるならば、ハンドラはSeqRangeで示されたこの内容の\r
24  * 必要な箇所をコピーして保存しなければならない。\r
25  *\r
26  * フラグメントや属性値中の文字参照記号列の解釈はハンドラ側の責務とする。\r
27  *\r
28  * 各メソッドは、各々の判断で{@link HtmlParseException}をスローする\r
29  * ことにより、パース作業を中断させることができる。\r
30  */\r
31 public interface BasicHandler{\r
32 \r
33     /**\r
34      * パース開始の通知を受け取る。\r
35      * @param content これからパースを始めるXHTML文字列\r
36      * @throws HtmlParseException パースエラー\r
37      */\r
38     void startParse(DecodedContent content) throws HtmlParseException;\r
39 \r
40     /**\r
41      * titleタグの内容の通知を受け取る。\r
42      * 例:「人狼BBS:F F2019 新緑の村」。\r
43      * @param content パース対象文字列\r
44      * @param titleRange タイトルの範囲\r
45      * @throws HtmlParseException パースエラー\r
46      */\r
47     void pageTitle(DecodedContent content, SeqRange titleRange)\r
48             throws HtmlParseException;\r
49 \r
50     /**\r
51      * ログイン名(ID)の通知を受け取る。\r
52      * ログインせずに得られたページがパース対象であるなら、呼ばれない。\r
53      * F国のみで動作確認。\r
54      * @param content パース対象文字列\r
55      * @param loginRange ログイン名の範囲\r
56      * @throws HtmlParseException パースエラー\r
57      */\r
58     void loginName(DecodedContent content, SeqRange loginRange)\r
59             throws HtmlParseException;\r
60 \r
61     /**\r
62      * 読み込んだページ種別を自動認識した結果を伝える。\r
63      * ページタイトルもしくはログイン名の通知の後に呼ばれうる。\r
64      * @param type ページ種別\r
65      * @throws HtmlParseException パースエラー\r
66      */\r
67     void pageType(PageType type)\r
68             throws HtmlParseException;\r
69 \r
70     /**\r
71      * 村の名前の通知を受け取る。\r
72      * 国名と番号と愛称に分解するのはハンドラ側の責務。\r
73      * 例:「F2019 新緑の村」。\r
74      * @param content パース対象文字列\r
75      * @param villageRange 村名の範囲\r
76      * @throws HtmlParseException パースエラー\r
77      */\r
78     void villageName(DecodedContent content, SeqRange villageRange)\r
79             throws HtmlParseException;\r
80 \r
81     /**\r
82      * 次回更新時刻の通知を受け取る。\r
83      * 既に終了した村がパース対象の場合、あまり月日に意味はないかも。\r
84      * @param month 更新月\r
85      * @param day 更新日\r
86      * @param hour 更新時\r
87      * @param minute 更新分\r
88      * @throws HtmlParseException パースエラー\r
89      */\r
90     void commitTime(int month, int day, int hour, int minute)\r
91             throws HtmlParseException;\r
92 \r
93     /**\r
94      * 他の日へのリンクの通知を受け取る。\r
95      * 複数回呼ばれる場合がある。\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
101      */\r
102     void periodLink(DecodedContent content,\r
103                      SeqRange anchorRange,\r
104                      PeriodType periodType, int day)\r
105             throws HtmlParseException;\r
106 \r
107     /**\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
116      */\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
123 \r
124     /**\r
125      * パースの終了の通知を受け取る。\r
126      * @throws HtmlParseException パースエラー\r
127      */\r
128     void endParse() throws HtmlParseException;\r
129 \r
130 }\r