--- /dev/null
+/*\r
+ * command line options\r
+ *\r
+ * Copyright(c) 2009 olyutorskii\r
+ * $Id: CmdOption.java 928 2009-11-29 16:37:50Z olyutorskii $\r
+ */\r
+\r
+package jp.sourceforge.jindolf;\r
+\r
+import java.io.IOException;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+\r
+/**\r
+ * コマンドラインオプションの列挙。\r
+ */\r
+public enum CmdOption{\r
+\r
+ /** ヘルプ。 */\r
+ OPT_HELP("help", "h", "-help", "?"),\r
+ /** 版数表示。 */\r
+ OPT_VERSION("version"),\r
+ /** UI文字制御。 */\r
+ OPT_BOLDMETAL("boldMetal"),\r
+ /** スプラッシュ制御。 */\r
+ OPT_NOSPLASH("nosplash"),\r
+ /** ウィンドウ位置指定。 */\r
+ OPT_GEOMETRY("geometry"),\r
+ /** 実行環境出力。 */\r
+ OPT_VMINFO("vminfo"),\r
+ /** コンソールログ。 */\r
+ OPT_CONSOLELOG("consolelog"),\r
+ /** フォント指定。 */\r
+ OPT_INITFONT("initfont"),\r
+ /** アンチエイリアス。 */\r
+ OPT_ANTIALIAS("antialias"),\r
+ /** サブピクセル制御。 */\r
+ OPT_FRACTIONAL("fractional"),\r
+ /** 設定格納ディレクトリ指定。 */\r
+ OPT_CONFDIR("confdir"),\r
+ /** 設定格納ディレクトリ不使用。 */\r
+ OPT_NOCONF("noconfdir"),\r
+ ;\r
+\r
+ /**\r
+ * オプション名に合致するEnumを返す。\r
+ * @param seq ハイフン付きオプション名\r
+ * @return 合致したEnum。どれとも合致しなければnull\r
+ */\r
+ public static CmdOption parseCmdOption(CharSequence seq){\r
+ for(CmdOption option : values()){\r
+ if(option.matchHyphened(seq)) return option;\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * 単体で意味をなすオプションか判定する。\r
+ * @param option オプション\r
+ * @return 単体で意味をなすならtrue\r
+ */\r
+ public static boolean isIndepOption(CmdOption option){\r
+ switch(option){\r
+ case OPT_HELP:\r
+ case OPT_VERSION:\r
+ case OPT_VMINFO:\r
+ case OPT_BOLDMETAL:\r
+ case OPT_NOSPLASH:\r
+ case OPT_CONSOLELOG:\r
+ case OPT_NOCONF:\r
+ return true;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * 真偽指定を一つ必要とするオプションか判定する。\r
+ * @param option オプション\r
+ * @return 真偽指定を一つ必要とするオプションならtrue\r
+ */\r
+ public static boolean isBooleanOption(CmdOption option){\r
+ switch(option){\r
+ case OPT_ANTIALIAS:\r
+ case OPT_FRACTIONAL:\r
+ return true;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * ヘルプメッセージ(オプションの説明)を返す。\r
+ * @return ヘルプメッセージ\r
+ */\r
+ public static CharSequence getHelpText(){\r
+ CharSequence helpText;\r
+\r
+ try{\r
+ helpText = Jindolf.loadResourceText("resources/help.txt");\r
+ }catch(IOException e){\r
+ helpText = "";\r
+ }\r
+\r
+ return helpText;\r
+ }\r
+\r
+ private final List<String> nameList = new LinkedList<String>();\r
+\r
+ /**\r
+ * コンストラクタ。\r
+ * @param names 頭のハイフンを除いたオプション名の一覧\r
+ */\r
+ private CmdOption(CharSequence ... names){\r
+ if(names == null) throw new NullPointerException();\r
+ if(names.length <= 0) throw new IllegalArgumentException();\r
+\r
+ for(CharSequence name : names){\r
+ if(name == null) throw new NullPointerException();\r
+ this.nameList.add(name.toString().intern());\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * 頭のハイフンを除いたオプション名を返す。\r
+ * オプション名が複数指定されていた場合は最初のオプション名\r
+ * @return オプション名\r
+ */\r
+ @Override\r
+ public String toString(){\r
+ return this.nameList.get(0);\r
+ }\r
+\r
+ /**\r
+ * 頭のハイフンが付いたオプション名を返す。\r
+ * オプション名が複数指定されていた場合は最初のオプション名\r
+ * @return オプション名\r
+ */\r
+ public String toHyphened(){\r
+ return "-" + toString();\r
+ }\r
+\r
+ /**\r
+ * 任意のオプション文字列がこのオプションに合致するか判定する。\r
+ * @param option ハイフンの付いたオプション文字列\r
+ * @return 合致すればtrue\r
+ */\r
+ public boolean matchHyphened(CharSequence option){\r
+ if(option == null) return false;\r
+\r
+ for(String name : this.nameList){\r
+ String hyphened = "-" + name;\r
+ if(hyphened.equals(option.toString())) return true;\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+}\r