/** Parses the last word(s) from the name if it is a suffix. */
  private void parseSuffix(Name name, NameTokenizer tokens) {
    if (tokens.mStartPointer == tokens.mEndPointer) {
      return;
    }

    String lastToken = tokens.mTokens[tokens.mEndPointer - 1];

    // Take care of an explicit comma-separated suffix
    if (tokens.mEndPointer - tokens.mStartPointer > 2 && tokens.hasComma(tokens.mEndPointer - 2)) {
      if (tokens.hasDot(tokens.mEndPointer - 1)) {
        lastToken += '.';
      }
      name.suffix = lastToken;
      tokens.mEndPointer--;
      return;
    }

    if (lastToken.length() > mMaxSuffixLength) {
      return;
    }

    String normalized = lastToken.toUpperCase();
    if (mSuffixesSet.contains(normalized)) {
      name.suffix = lastToken;
      tokens.mEndPointer--;
      return;
    }

    if (tokens.hasDot(tokens.mEndPointer - 1)) {
      lastToken += '.';
    }
    normalized += ".";

    // Take care of suffixes like M.D. and D.D.S.
    int pos = tokens.mEndPointer - 1;
    while (normalized.length() <= mMaxSuffixLength) {

      if (mSuffixesSet.contains(normalized)) {
        name.suffix = lastToken;
        tokens.mEndPointer = pos;
        return;
      }

      if (pos == tokens.mStartPointer) {
        break;
      }

      pos--;
      if (tokens.hasDot(pos)) {
        lastToken = tokens.mTokens[pos] + "." + lastToken;
      } else {
        lastToken = tokens.mTokens[pos] + " " + lastToken;
      }

      normalized = tokens.mTokens[pos].toUpperCase() + "." + normalized;
    }
  }
  public static Name getCommonName(Nation n) {
    List<Unit> primaryMages = new ArrayList<Unit>();
    for (Unit u : n.generateComList())
      if (u.tags.contains("schoolmage 3")) {
        primaryMages.add(u);
      }

    List<Unit> secondaryMages = new ArrayList<Unit>();
    for (Unit u : n.generateComList())
      if (u.tags.contains("schoolmage 2")) {
        secondaryMages.add(u);
      }

    List<Unit> tertiaryMages = new ArrayList<Unit>();
    for (Unit u : n.generateComList())
      if (u.tags.contains("schoolmage 1")) {
        tertiaryMages.add(u);
      }

    List<Unit> compensationMages = new ArrayList<Unit>();
    for (Unit u : n.generateComList())
      if (u.tags.contains("extranmage")) {
        compensationMages.add(u);
      }

    Name common = new Name();
    if (primaryMages.size() > 0) {

      common = primaryMages.get(0).name.getCopy();

      for (Unit u : primaryMages) {

        if (u.name.prefix == null || !u.name.prefix.equals(common.prefix)) common.prefix = null;
        if (u.name.type == null || !u.name.type.equals(common.type)) common.setType("mage");
        if (u.name.suffixprefix == null || !u.name.suffixprefix.equals(common.suffixprefix))
          common.suffixprefix = null;
        if (u.name.suffix == null || !u.name.suffix.equals(common.suffix)) common.suffix = null;
      }

      if (common.suffix == null && common.suffixprefix != null) common.suffixprefix = null;

      if (primaryMages.size() > 1) return common;

      for (Unit u : secondaryMages) {

        if (u.name.prefix == null || !u.name.prefix.equals(common.prefix)) common.prefix = null;
        if (u.name.type == null || !u.name.type.equals(common.type)) common.setType("mage");
        if (u.name.suffixprefix == null || !u.name.suffixprefix.equals(common.suffixprefix))
          common.suffixprefix = null;
        if (u.name.suffix == null || !u.name.suffix.equals(common.suffix)) common.suffix = null;
      }

      for (Unit u : tertiaryMages) {

        if (u.name.prefix == null || !u.name.prefix.equals(common.prefix)) common.prefix = null;
        if (u.name.type == null || !u.name.type.equals(common.type)) common.setType("mage");
        if (u.name.suffixprefix == null || !u.name.suffixprefix.equals(common.suffixprefix))
          common.suffixprefix = null;
        if (u.name.suffix == null || !u.name.suffix.equals(common.suffix)) common.suffix = null;
      }
    }

    if (common.suffix == null && common.suffixprefix != null) common.suffixprefix = null;

    return common;
  }
Exemple #3
0
  /** Import a class name. Subsequent imports override earlier ones */
  public void importClass(String name) {
    if (importedClasses == null) importedClasses = new HashMap<String, String>();

    importedClasses.put(Name.suffix(name, 1), name);
    nameSpaceChanged();
  }