OSDN Git Service

改行コード指定
[jindolf/JinCore.git] / src / main / java / jp / sourceforge / jindolf / corelib / VillageTag.java
1 /*
2  * village tag-name
3  *
4  * License : The MIT License
5  * Copyright(c) 2009 olyutorskii
6  */
7
8 package jp.sourceforge.jindolf.corelib;
9
10 import java.util.HashMap;
11 import java.util.Map;
12 import java.util.regex.Matcher;
13 import java.util.regex.Pattern;
14
15 /**
16  * 村名一覧。
17  */
18 public enum VillageTag{
19
20     /** 平凡な村。 */
21     HEIBON        ("平凡な村"),
22     /** 星狩りの村。 */
23     HOSHIKARI     ("星狩りの村"),
24     /** 日の差さぬ村。 */
25     HINOSASANU    ("日の差さぬ村"),
26     /** 隠された村。 */
27     KAKUSARETA    ("隠された村"),
28     /** 日の沈まぬ村。 */
29     HINOSHIZUMANU ("日の沈まぬ村"),
30     /** 消え行く村。 */
31     KIEYUKU       ("消え行く村"),
32     /** 怪しげな村。 */
33     AYASHIGE      ("怪しげな村"),
34     /** 山影の村。 */
35     YAMAKAGE      ("山影の村"),
36     /** 平和な村。 */
37     HEIWA         ("平和な村"),
38     /** 嘘つきの村。 */
39     USOTSUKI      ("嘘つきの村"),
40     /** 悲しみの村。 */
41     KANASHIMI     ("悲しみの村"),
42     /** 恐ろしい村。 */
43     OSOROSHII     ("恐ろしい村"),
44     /** 盆地の村。 */
45     BONCHI        ("盆地の村"),
46     /** 幻の村。 */
47     MABOROSHI     ("幻の村"),
48     /** 謀略の村。 */
49     BOURYAKU      ("謀略の村"),
50     /** 最果ての村。 */
51     SAIHATE       ("最果ての村"),
52     /** 封印の村。 */
53     HUUIN         ("封印の村"),
54     /** 海辺の村。 */
55     UMIBE         ("海辺の村"),
56     /** 開拓者の村。 */
57     KAITAKUSHA    ("開拓者の村"),
58     /** 断崖の村。 */
59     DANGAI        ("断崖の村"),
60     /** 出会いの村。 */
61     DEAI          ("出会いの村"),
62     /** ふもとの村。 */
63     HUMOTO        ("ふもとの村"),
64     /** 峠の村。 */
65     TOUGE         ("峠の村"),
66     /** 血塗られた村。 */
67     CHINURARETA   ("血塗られた村"),
68     /** 僻地の村。 */
69     HEKICHI       ("僻地の村"),
70     /** 安らぎの村。 */
71     YASURAGI      ("安らぎの村"),
72     /** 最後の村。 */
73     SAIGO         ("最後の村"),
74     /** 疑心暗鬼の村。 */
75     GISHINANKI    ("疑心暗鬼の村"),
76     /** 呪われた村。 */
77     NOROWARETA    ("呪われた村"),
78     /** 新緑の村。 */
79     SHINRYOKU     ("新緑の村"),
80     /** 荒地の村。 */
81     ARECHI        ("荒地の村"),
82     /** 残された村。 */
83     NOKOSARETA    ("残された村"),
84     /** 小さな村。 */
85     CHIISANA      ("小さな村"),
86     /** 極寒の村。 */
87     GOKUKAN       ("極寒の村"),
88     /** 見捨てられた村。 */
89     MISUTERARETA  ("見捨てられた村"),
90     /** 希望の村。 */
91     KIBOU         ("希望の村"),
92     /** 裏切りの村。 */
93     URAGIRI       ("裏切りの村"),
94     /** 沈黙の村。 */
95     CHINMOKU      ("沈黙の村"),
96     /** 雨の止まぬ村。 */
97     AMENOYAMANU   ("雨の止まぬ村"),
98     /** 辺境の村。 */
99     HENKYOU       ("辺境の村"),
100     /** 忘れられた村。 */
101     WASURERARETA  ("忘れられた村"),
102     /** 谷底の村。 */
103     TANIZOKO      ("谷底の村"),
104     ;
105
106     private static final Map<String, VillageTag> TAGMAP =
107             new HashMap<String, VillageTag>();
108     private static final VillageTag[] VALUES = values();
109     private static final int VALUE_NUM = values().length;
110     private static final Pattern VTAG_PATTERN;
111
112     static{
113         for(VillageTag vtag : VALUES){
114             String tagName = vtag.getTagName();
115             TAGMAP.put(tagName, vtag);
116         }
117
118         StringBuilder vtagRegex = new StringBuilder();
119         for(VillageTag tag : values()){
120             if(vtagRegex.length() > 0){
121                 vtagRegex.append('|');
122             }
123             vtagRegex.append('(')
124                      .append(Pattern.quote(tag.getTagName()))
125                      .append(')');
126         }
127         VTAG_PATTERN = Pattern.compile(vtagRegex.toString());
128     }
129
130
131     private final String tagName;
132
133
134     /**
135      * 隠しコンストラクタ。
136      * @param tagName 村名
137      */
138     private VillageTag(String tagName){
139         this.tagName = tagName.intern();
140         return;
141     }
142
143
144     /**
145      * 村名からEnumメンバを得る。
146      * @param tagName 村名
147      * @return Enumメンバ
148      */
149     public static VillageTag tagNameToVillageTag(String tagName){
150         VillageTag result = TAGMAP.get(tagName);
151         return result;
152     }
153
154     /**
155      * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。
156      * @param matcher マッチャ
157      * @return 一致した村名。どれにも一致しなければnull。
158      */
159     public static VillageTag lookingAtVillageTag(Matcher matcher){
160         matcher.usePattern(VTAG_PATTERN);
161
162         if( ! matcher.lookingAt() ) return null;
163         int groupCt = matcher.groupCount();
164         for(int group = 1; group <= groupCt; group++){
165             if(matcher.start(group) >= 0){
166                 VillageTag tag = values()[group - 1];
167                 return tag;
168             }
169         }
170
171         return null;
172     }
173
174
175     /**
176      * 村名を得る。
177      * @return 村名
178      */
179     public String getTagName(){
180         return this.tagName;
181     }
182
183     /**
184      * 次のEnumメンバを得る。
185      * 先頭と末尾は循環する。
186      * @return 次のEnumメンバ
187      */
188     public VillageTag getNextVillageTag(){
189         int ordinal = ordinal();
190         ordinal = (ordinal+1) % VALUE_NUM;
191         VillageTag result = VALUES[ordinal];
192         return result;
193     }
194
195     /**
196      * 前のEnumメンバを得る。
197      * 先頭と末尾は循環する。
198      * @return 前のEnumメンバ
199      */
200     public VillageTag getPrevVillageTag(){
201         int ordinal = ordinal();
202         ordinal--;
203         if(ordinal < 0) ordinal += VALUE_NUM;
204         VillageTag result = VALUES[ordinal];
205         return result;
206     }
207
208 }