private static String readStringValue(Mutable<Integer> index, String option_string) { int eq_index = option_string.indexOf(',', index.get()); if (eq_index == -1) { eq_index = option_string.length(); } String value = option_string.substring(index.get(), eq_index); index.set(eq_index + 1); return value; }
private static KeyType readKey(Mutable<Integer> index, String option_string) { int eq_index = option_string.indexOf('=', index.get()); int co_index = option_string.indexOf(',', index.get()); if (eq_index == -1 || (co_index < eq_index && co_index != -1)) { return KeyType.filename; } String key_string = option_string.substring(index.get(), eq_index); index.set(eq_index + 1); KeyType type = KeyType.valueOf(key_string); return type; }
public static MorphDictionaryOptions parse(String option_string, boolean set_defaults) { MorphDictionaryOptions options = new MorphDictionaryOptions(); if (set_defaults) { options.setDefaultOptions(); } Mutable<Integer> index = new Mutable<Integer>(0); while (index.get() < option_string.length()) { KeyType key = readKey(index, option_string); try { switch (key) { case filename: options.filename_ = readStringValue(index, option_string); break; case type: options.type_ = readTypeValue(index, option_string); break; case indexes: options.indexes_ = readArrayValue(index, option_string); break; case norm: options.norm_ = readModeValue(index, option_string); break; case limit: options.limit_ = readIntValue(index, option_string); break; case reverse: options.reverse_ = readBooleanValue(index, option_string); break; case dense: options.dense_ = readBooleanValue(index, option_string); break; } } catch (Exception e) { System.err.println("Error: Couldn't parse string: " + option_string + " because of:"); throw new RuntimeException(e); } } return options; }
private static int[] readArrayValue(Mutable<Integer> index, String option_string) { String[] array = StringUtils.parseArray(option_string, index); int[] indexes = new int[array.length]; for (int i = 0; i < array.length; i++) { indexes[i] = Integer.parseInt(array[i]); // if (indexes[i] < 1) { // throw new InvalidParameterException("Index must be > 0!"); // } } Arrays.sort(indexes); if (index.get() < option_string.length()) { if (option_string.charAt(index.get()) == ',') { index.set(index.get() + 1); } } return indexes; }