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 = 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;
112 for(VillageTag vtag : VALUES){
113 String tagName = vtag.getTagName();
114 TAGMAP.put(tagName, vtag);
117 StringBuilder vtagRegex = new StringBuilder();
118 for(VillageTag tag : values()){
119 if(vtagRegex.length() > 0){
120 vtagRegex.append('|');
122 vtagRegex.append('(')
123 .append(Pattern.quote(tag.getTagName()))
126 VTAG_PATTERN = Pattern.compile(vtagRegex.toString());
130 private final String tagName;
137 VillageTag(String tagName){
138 this.tagName = tagName.intern();
148 public static VillageTag tagNameToVillageTag(String tagName){
149 VillageTag result = TAGMAP.get(tagName);
154 * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。
155 * @param matcher マッチャ
156 * @return 一致した村名。どれにも一致しなければnull。
158 public static VillageTag lookingAtVillageTag(Matcher matcher){
159 matcher.usePattern(VTAG_PATTERN);
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];
178 public String getTagName(){
187 public VillageTag getNextVillageTag(){
188 int ordinal = ordinal();
189 ordinal = (ordinal+1) % VALUE_NUM;
190 VillageTag result = VALUES[ordinal];
199 public VillageTag getPrevVillageTag(){
200 int ordinal = ordinal();
202 if(ordinal < 0) ordinal += VALUE_NUM;
203 VillageTag result = VALUES[ordinal];