4 * License : The MIT License
5 * Copyright(c) 2009 olyutorskii
8 package jp.sourceforge.jindolf.corelib;
10 import java.util.HashMap;
12 import java.util.regex.Matcher;
13 import java.util.regex.Pattern;
18 public enum VillageTag{
25 HINOSASANU ("日の差さぬ村"),
29 HINOSHIZUMANU ("日の沈まぬ村"),
67 CHINURARETA ("血塗られた村"),
75 GISHINANKI ("疑心暗鬼の村"),
89 MISUTERARETA ("見捨てられた村"),
97 AMENOYAMANU ("雨の止まぬ村"),
101 WASURERARETA ("忘れられた村"),
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;
113 for(VillageTag vtag : VALUES){
114 String tagName = vtag.getTagName();
115 TAGMAP.put(tagName, vtag);
118 StringBuilder vtagRegex = new StringBuilder();
119 for(VillageTag tag : values()){
120 if(vtagRegex.length() > 0){
121 vtagRegex.append('|');
123 vtagRegex.append('(')
124 .append(Pattern.quote(tag.getTagName()))
127 VTAG_PATTERN = Pattern.compile(vtagRegex.toString());
131 private final String tagName;
138 private VillageTag(String tagName){
139 this.tagName = tagName.intern();
149 public static VillageTag tagNameToVillageTag(String tagName){
150 VillageTag result = TAGMAP.get(tagName);
155 * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。
156 * @param matcher マッチャ
157 * @return 一致した村名。どれにも一致しなければnull。
159 public static VillageTag lookingAtVillageTag(Matcher matcher){
160 matcher.usePattern(VTAG_PATTERN);
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];
179 public String getTagName(){
188 public VillageTag getNextVillageTag(){
189 int ordinal = ordinal();
190 ordinal = (ordinal+1) % VALUE_NUM;
191 VillageTag result = VALUES[ordinal];
200 public VillageTag getPrevVillageTag(){
201 int ordinal = ordinal();
203 if(ordinal < 0) ordinal += VALUE_NUM;
204 VillageTag result = VALUES[ordinal];