OSDN Git Service

start v1.207.7-SNAPSHOT
[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 = new HashMap<>();
107     private static final VillageTag[] VALUES = values();
108     private static final int VALUE_NUM = values().length;
109     private static final Pattern VTAG_PATTERN;
110
111     static{
112         for(VillageTag vtag : VALUES){
113             String tagName = vtag.getTagName();
114             TAGMAP.put(tagName, vtag);
115         }
116
117         StringBuilder vtagRegex = new StringBuilder();
118         for(VillageTag tag : values()){
119             if(vtagRegex.length() > 0){
120                 vtagRegex.append('|');
121             }
122             vtagRegex.append('(')
123                      .append(Pattern.quote(tag.getTagName()))
124                      .append(')');
125         }
126         VTAG_PATTERN = Pattern.compile(vtagRegex.toString());
127     }
128
129
130     private final String tagName;
131
132
133     /**
134      * 隠しコンストラクタ。
135      * @param tagName 村名
136      */
137     VillageTag(String tagName){
138         this.tagName = tagName.intern();
139         return;
140     }
141
142
143     /**
144      * 村名からEnumメンバを得る。
145      * @param tagName 村名
146      * @return Enumメンバ
147      */
148     public static VillageTag tagNameToVillageTag(String tagName){
149         VillageTag result = TAGMAP.get(tagName);
150         return result;
151     }
152
153     /**
154      * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。
155      * @param matcher マッチャ
156      * @return 一致した村名。どれにも一致しなければnull。
157      */
158     public static VillageTag lookingAtVillageTag(Matcher matcher){
159         matcher.usePattern(VTAG_PATTERN);
160
161         if( ! matcher.lookingAt() ) return null;
162         int groupCt = matcher.groupCount();
163         for(int group = 1; group <= groupCt; group++){
164             if(matcher.start(group) >= 0){
165                 VillageTag tag = values()[group - 1];
166                 return tag;
167             }
168         }
169
170         return null;
171     }
172
173
174     /**
175      * 村名を得る。
176      * @return 村名
177      */
178     public String getTagName(){
179         return this.tagName;
180     }
181
182     /**
183      * 次のEnumメンバを得る。
184      * 先頭と末尾は循環する。
185      * @return 次のEnumメンバ
186      */
187     public VillageTag getNextVillageTag(){
188         int ordinal = ordinal();
189         ordinal = (ordinal+1) % VALUE_NUM;
190         VillageTag result = VALUES[ordinal];
191         return result;
192     }
193
194     /**
195      * 前のEnumメンバを得る。
196      * 先頭と末尾は循環する。
197      * @return 前のEnumメンバ
198      */
199     public VillageTag getPrevVillageTag(){
200         int ordinal = ordinal();
201         ordinal--;
202         if(ordinal < 0) ordinal += VALUE_NUM;
203         VillageTag result = VALUES[ordinal];
204         return result;
205     }
206
207 }