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