*/\r
public class HtmlParser extends AbstractParser{\r
\r
+ private static final String SP = "\u0020";\r
+\r
+\r
private BasicHandler basicHandler;\r
private final TalkParser talkParser = new TalkParser(this);\r
private final SysEventParser sysEventParser = new SysEventParser(this);\r
compile(\r
"("\r
+"<form"\r
- +"\u0020" + "action=\"index\\.rb\""\r
- +"\u0020" + "method=\"post\""\r
- +"\u0020" + "class=\"login_form\""\r
+ +SP + "action=\"index\\.rb\""\r
+ +SP + "method=\"post\""\r
+ +SP + "class=\"login_form\""\r
+">"\r
+ ")|("\r
+"<div"\r
- +"\u0020" + "class=\"login_form\""\r
+ +SP + "class=\"login_form\""\r
+">"\r
+ ")"\r
);\r
private static final Pattern USERID_PATTERN =\r
compile(\r
"name=\"user_id\""\r
- + "\u0020"\r
+ + SP\r
+ "value=\"([^\"]*)\""\r
);\r
private static final Pattern C_FORM_PATTERN =\r
+"([0-9]+)" // 月\r
+"/"\r
+"([0-9]+)" // 日\r
- +"\u0020"\r
+ +SP\r
+"(?:(?:(午前)|(午後))\u0020)?" // AMPM\r
+"([0-9]+)" // 時\r
+"(?:時\u0020|\\:)"\r
private void parseMessage() throws HtmlParseException{\r
setContextErrorMessage("lost message");\r
\r
- SeqRange nameRange = this.rangepool_1;\r
-\r
boolean skipGarbage = true;\r
\r
for(;;){\r
}\r
shrinkRegion();\r
\r
- sweepSpace();\r
-\r
- lookingAtAffirm(O_MSGKIND_PATTERN);\r
- if(isGroupMatched(1)){\r
- shrinkRegion();\r
- this.sysEventParser.parseAnnounce();\r
- }else if(isGroupMatched(2)){\r
- shrinkRegion();\r
- this.sysEventParser.parseOrder();\r
- }else if(isGroupMatched(3)){\r
- shrinkRegion();\r
- this.sysEventParser.parseExtra();\r
- }else if(isGroupMatched(5)){\r
- nameRange.setLastMatchedGroupRange(getMatcher(), 5);\r
- int talkNo = -1;\r
- if(isGroupMatched(4)){\r
- talkNo = parseGroupedInt(4);\r
- }\r
- shrinkRegion();\r
- this.talkParser.parseTalk(talkNo, nameRange);\r
- }else{\r
- assert false;\r
- throw buildParseException();\r
- }\r
+ dispatchFamily();\r
\r
lookingAtAffirm(C_DIV_PATTERN);\r
shrinkRegion();\r
return;\r
}\r
\r
+ /**\r
+ * イベント種別によって処理を振り分ける。\r
+ * @throws HtmlParseException パースエラー\r
+ */\r
+ private void dispatchFamily() throws HtmlParseException{\r
+ sweepSpace();\r
+\r
+ SeqRange nameRange = this.rangepool_1;\r
+\r
+ lookingAtAffirm(O_MSGKIND_PATTERN);\r
+ if(isGroupMatched(1)){\r
+ shrinkRegion();\r
+ this.sysEventParser.parseAnnounce();\r
+ }else if(isGroupMatched(2)){\r
+ shrinkRegion();\r
+ this.sysEventParser.parseOrder();\r
+ }else if(isGroupMatched(3)){\r
+ shrinkRegion();\r
+ this.sysEventParser.parseExtra();\r
+ }else if(isGroupMatched(5)){\r
+ nameRange.setLastMatchedGroupRange(getMatcher(), 5);\r
+ int talkNo = -1;\r
+ if(isGroupMatched(4)){\r
+ talkNo = parseGroupedInt(4);\r
+ }\r
+ shrinkRegion();\r
+ this.talkParser.parseTalk(talkNo, nameRange);\r
+ }else{\r
+ assert false;\r
+ throw buildParseException();\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
private static final Pattern O_LISTTABLE_PATTERN =\r
compile("<table\u0020class=\"list\">");\r
private static final Pattern ACTIVEVILLAGE =\r