-/*\r
- * village tag-name\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-/**\r
- * 村名一覧。\r
- */\r
-public enum VillageTag{\r
-\r
- /** 平凡な村。 */\r
- HEIBON ("平凡な村"),\r
- /** 星狩りの村。 */\r
- HOSHIKARI ("星狩りの村"),\r
- /** 日の差さぬ村。 */\r
- HINOSASANU ("日の差さぬ村"),\r
- /** 隠された村。 */\r
- KAKUSARETA ("隠された村"),\r
- /** 日の沈まぬ村。 */\r
- HINOSHIZUMANU ("日の沈まぬ村"),\r
- /** 消え行く村。 */\r
- KIEYUKU ("消え行く村"),\r
- /** 怪しげな村。 */\r
- AYASHIGE ("怪しげな村"),\r
- /** 山影の村。 */\r
- YAMAKAGE ("山影の村"),\r
- /** 平和な村。 */\r
- HEIWA ("平和な村"),\r
- /** 嘘つきの村。 */\r
- USOTSUKI ("嘘つきの村"),\r
- /** 悲しみの村。 */\r
- KANASHIMI ("悲しみの村"),\r
- /** 恐ろしい村。 */\r
- OSOROSHII ("恐ろしい村"),\r
- /** 盆地の村。 */\r
- BONCHI ("盆地の村"),\r
- /** 幻の村。 */\r
- MABOROSHI ("幻の村"),\r
- /** 謀略の村。 */\r
- BOURYAKU ("謀略の村"),\r
- /** 最果ての村。 */\r
- SAIHATE ("最果ての村"),\r
- /** 封印の村。 */\r
- HUUIN ("封印の村"),\r
- /** 海辺の村。 */\r
- UMIBE ("海辺の村"),\r
- /** 開拓者の村。 */\r
- KAITAKUSHA ("開拓者の村"),\r
- /** 断崖の村。 */\r
- DANGAI ("断崖の村"),\r
- /** 出会いの村。 */\r
- DEAI ("出会いの村"),\r
- /** ふもとの村。 */\r
- HUMOTO ("ふもとの村"),\r
- /** 峠の村。 */\r
- TOUGE ("峠の村"),\r
- /** 血塗られた村。 */\r
- CHINURARETA ("血塗られた村"),\r
- /** 僻地の村。 */\r
- HEKICHI ("僻地の村"),\r
- /** 安らぎの村。 */\r
- YASURAGI ("安らぎの村"),\r
- /** 最後の村。 */\r
- SAIGO ("最後の村"),\r
- /** 疑心暗鬼の村。 */\r
- GISHINANKI ("疑心暗鬼の村"),\r
- /** 呪われた村。 */\r
- NOROWARETA ("呪われた村"),\r
- /** 新緑の村。 */\r
- SHINRYOKU ("新緑の村"),\r
- /** 荒地の村。 */\r
- ARECHI ("荒地の村"),\r
- /** 残された村。 */\r
- NOKOSARETA ("残された村"),\r
- /** 小さな村。 */\r
- CHIISANA ("小さな村"),\r
- /** 極寒の村。 */\r
- GOKUKAN ("極寒の村"),\r
- /** 見捨てられた村。 */\r
- MISUTERARETA ("見捨てられた村"),\r
- /** 希望の村。 */\r
- KIBOU ("希望の村"),\r
- /** 裏切りの村。 */\r
- URAGIRI ("裏切りの村"),\r
- /** 沈黙の村。 */\r
- CHINMOKU ("沈黙の村"),\r
- /** 雨の止まぬ村。 */\r
- AMENOYAMANU ("雨の止まぬ村"),\r
- /** 辺境の村。 */\r
- HENKYOU ("辺境の村"),\r
- /** 忘れられた村。 */\r
- WASURERARETA ("忘れられた村"),\r
- /** 谷底の村。 */\r
- TANIZOKO ("谷底の村"),\r
- ;\r
-\r
- private static final Map<String, VillageTag> TAGMAP =\r
- new HashMap<String, VillageTag>();\r
- private static final VillageTag[] VALUES = values();\r
- private static final int VALUE_NUM = values().length;\r
- private static final Pattern VTAG_PATTERN;\r
-\r
- static{\r
- for(VillageTag vtag : VALUES){\r
- String tagName = vtag.getTagName();\r
- TAGMAP.put(tagName, vtag);\r
- }\r
-\r
- StringBuilder vtagRegex = new StringBuilder();\r
- for(VillageTag tag : values()){\r
- if(vtagRegex.length() > 0){\r
- vtagRegex.append('|');\r
- }\r
- vtagRegex.append('(')\r
- .append(Pattern.quote(tag.getTagName()))\r
- .append(')');\r
- }\r
- VTAG_PATTERN = Pattern.compile(vtagRegex.toString());\r
- }\r
-\r
-\r
- private final String tagName;\r
-\r
-\r
- /**\r
- * 隠しコンストラクタ。\r
- * @param tagName 村名\r
- */\r
- private VillageTag(String tagName){\r
- this.tagName = tagName.intern();\r
- return;\r
- }\r
-\r
-\r
- /**\r
- * 村名からEnumメンバを得る。\r
- * @param tagName 村名\r
- * @return Enumメンバ\r
- */\r
- public static VillageTag tagNameToVillageTag(String tagName){\r
- VillageTag result = TAGMAP.get(tagName);\r
- return result;\r
- }\r
-\r
- /**\r
- * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。\r
- * @param matcher マッチャ\r
- * @return 一致した村名。どれにも一致しなければnull。\r
- */\r
- public static VillageTag lookingAtVillageTag(Matcher matcher){\r
- matcher.usePattern(VTAG_PATTERN);\r
-\r
- if( ! matcher.lookingAt() ) return null;\r
- int groupCt = matcher.groupCount();\r
- for(int group = 1; group <= groupCt; group++){\r
- if(matcher.start(group) >= 0){\r
- VillageTag tag = values()[group - 1];\r
- return tag;\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
-\r
- /**\r
- * 村名を得る。\r
- * @return 村名\r
- */\r
- public String getTagName(){\r
- return this.tagName;\r
- }\r
-\r
- /**\r
- * 次のEnumメンバを得る。\r
- * 先頭と末尾は循環する。\r
- * @return 次のEnumメンバ\r
- */\r
- public VillageTag getNextVillageTag(){\r
- int ordinal = ordinal();\r
- ordinal = (ordinal+1) % VALUE_NUM;\r
- VillageTag result = VALUES[ordinal];\r
- return result;\r
- }\r
-\r
- /**\r
- * 前のEnumメンバを得る。\r
- * 先頭と末尾は循環する。\r
- * @return 前のEnumメンバ\r
- */\r
- public VillageTag getPrevVillageTag(){\r
- int ordinal = ordinal();\r
- ordinal--;\r
- if(ordinal < 0) ordinal += VALUE_NUM;\r
- VillageTag result = VALUES[ordinal];\r
- return result;\r
- }\r
-\r
-}\r
+/*
+ * village tag-name
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 村名一覧。
+ */
+public enum VillageTag{
+
+ /** 平凡な村。 */
+ HEIBON ("平凡な村"),
+ /** 星狩りの村。 */
+ HOSHIKARI ("星狩りの村"),
+ /** 日の差さぬ村。 */
+ HINOSASANU ("日の差さぬ村"),
+ /** 隠された村。 */
+ KAKUSARETA ("隠された村"),
+ /** 日の沈まぬ村。 */
+ HINOSHIZUMANU ("日の沈まぬ村"),
+ /** 消え行く村。 */
+ KIEYUKU ("消え行く村"),
+ /** 怪しげな村。 */
+ AYASHIGE ("怪しげな村"),
+ /** 山影の村。 */
+ YAMAKAGE ("山影の村"),
+ /** 平和な村。 */
+ HEIWA ("平和な村"),
+ /** 嘘つきの村。 */
+ USOTSUKI ("嘘つきの村"),
+ /** 悲しみの村。 */
+ KANASHIMI ("悲しみの村"),
+ /** 恐ろしい村。 */
+ OSOROSHII ("恐ろしい村"),
+ /** 盆地の村。 */
+ BONCHI ("盆地の村"),
+ /** 幻の村。 */
+ MABOROSHI ("幻の村"),
+ /** 謀略の村。 */
+ BOURYAKU ("謀略の村"),
+ /** 最果ての村。 */
+ SAIHATE ("最果ての村"),
+ /** 封印の村。 */
+ HUUIN ("封印の村"),
+ /** 海辺の村。 */
+ UMIBE ("海辺の村"),
+ /** 開拓者の村。 */
+ KAITAKUSHA ("開拓者の村"),
+ /** 断崖の村。 */
+ DANGAI ("断崖の村"),
+ /** 出会いの村。 */
+ DEAI ("出会いの村"),
+ /** ふもとの村。 */
+ HUMOTO ("ふもとの村"),
+ /** 峠の村。 */
+ TOUGE ("峠の村"),
+ /** 血塗られた村。 */
+ CHINURARETA ("血塗られた村"),
+ /** 僻地の村。 */
+ HEKICHI ("僻地の村"),
+ /** 安らぎの村。 */
+ YASURAGI ("安らぎの村"),
+ /** 最後の村。 */
+ SAIGO ("最後の村"),
+ /** 疑心暗鬼の村。 */
+ GISHINANKI ("疑心暗鬼の村"),
+ /** 呪われた村。 */
+ NOROWARETA ("呪われた村"),
+ /** 新緑の村。 */
+ SHINRYOKU ("新緑の村"),
+ /** 荒地の村。 */
+ ARECHI ("荒地の村"),
+ /** 残された村。 */
+ NOKOSARETA ("残された村"),
+ /** 小さな村。 */
+ CHIISANA ("小さな村"),
+ /** 極寒の村。 */
+ GOKUKAN ("極寒の村"),
+ /** 見捨てられた村。 */
+ MISUTERARETA ("見捨てられた村"),
+ /** 希望の村。 */
+ KIBOU ("希望の村"),
+ /** 裏切りの村。 */
+ URAGIRI ("裏切りの村"),
+ /** 沈黙の村。 */
+ CHINMOKU ("沈黙の村"),
+ /** 雨の止まぬ村。 */
+ AMENOYAMANU ("雨の止まぬ村"),
+ /** 辺境の村。 */
+ HENKYOU ("辺境の村"),
+ /** 忘れられた村。 */
+ WASURERARETA ("忘れられた村"),
+ /** 谷底の村。 */
+ TANIZOKO ("谷底の村"),
+ ;
+
+ private static final Map<String, VillageTag> TAGMAP =
+ new HashMap<String, VillageTag>();
+ private static final VillageTag[] VALUES = values();
+ private static final int VALUE_NUM = values().length;
+ private static final Pattern VTAG_PATTERN;
+
+ static{
+ for(VillageTag vtag : VALUES){
+ String tagName = vtag.getTagName();
+ TAGMAP.put(tagName, vtag);
+ }
+
+ StringBuilder vtagRegex = new StringBuilder();
+ for(VillageTag tag : values()){
+ if(vtagRegex.length() > 0){
+ vtagRegex.append('|');
+ }
+ vtagRegex.append('(')
+ .append(Pattern.quote(tag.getTagName()))
+ .append(')');
+ }
+ VTAG_PATTERN = Pattern.compile(vtagRegex.toString());
+ }
+
+
+ private final String tagName;
+
+
+ /**
+ * 隠しコンストラクタ。
+ * @param tagName 村名
+ */
+ private VillageTag(String tagName){
+ this.tagName = tagName.intern();
+ return;
+ }
+
+
+ /**
+ * 村名からEnumメンバを得る。
+ * @param tagName 村名
+ * @return Enumメンバ
+ */
+ public static VillageTag tagNameToVillageTag(String tagName){
+ VillageTag result = TAGMAP.get(tagName);
+ return result;
+ }
+
+ /**
+ * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。
+ * @param matcher マッチャ
+ * @return 一致した村名。どれにも一致しなければnull。
+ */
+ public static VillageTag lookingAtVillageTag(Matcher matcher){
+ matcher.usePattern(VTAG_PATTERN);
+
+ if( ! matcher.lookingAt() ) return null;
+ int groupCt = matcher.groupCount();
+ for(int group = 1; group <= groupCt; group++){
+ if(matcher.start(group) >= 0){
+ VillageTag tag = values()[group - 1];
+ return tag;
+ }
+ }
+
+ return null;
+ }
+
+
+ /**
+ * 村名を得る。
+ * @return 村名
+ */
+ public String getTagName(){
+ return this.tagName;
+ }
+
+ /**
+ * 次のEnumメンバを得る。
+ * 先頭と末尾は循環する。
+ * @return 次のEnumメンバ
+ */
+ public VillageTag getNextVillageTag(){
+ int ordinal = ordinal();
+ ordinal = (ordinal+1) % VALUE_NUM;
+ VillageTag result = VALUES[ordinal];
+ return result;
+ }
+
+ /**
+ * 前のEnumメンバを得る。
+ * 先頭と末尾は循環する。
+ * @return 前のEnumメンバ
+ */
+ public VillageTag getPrevVillageTag(){
+ int ordinal = ordinal();
+ ordinal--;
+ if(ordinal < 0) ordinal += VALUE_NUM;
+ VillageTag result = VALUES[ordinal];
+ return result;
+ }
+
+}