* @param prefix
   * @param suffix
   * @param outputcase
   * @param outputseparator
   * @param translationtable
   * @param useacronymheuristicsP
   * @return String
   */
  public static String composeNamestringFull(Cons strings, String prefix, String suffix, Keyword outputcase, String outputseparator, StringHashTable translationtable, boolean useacronymheuristicsP) {
    { int n = 0;
      int i = 0;
      StringBuffer out = null;
      int separatorLength = ((outputseparator != null) ? outputseparator.length() : 0);
      boolean firsttimeP = true;
      String s = null;
      int sLen = 0;

      if (translationtable != null) {
        { Cons temp = strings;

          strings = Stella.NIL;
          { StringWrapper sw = null;
            Cons iter000 = temp;
            Cons collect000 = null;

            for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
              sw = ((StringWrapper)(iter000.value));
              if (translationtable.lookup(sw.wrapperValue) != null) {
                if (collect000 == null) {
                  {
                    collect000 = Cons.cons(translationtable.lookup(sw.wrapperValue), Stella.NIL);
                    if (strings == Stella.NIL) {
                      strings = collect000;
                    }
                    else {
                      Cons.addConsToEndOfConsList(strings, collect000);
                    }
                  }
                }
                else {
                  {
                    collect000.rest = Cons.cons(translationtable.lookup(sw.wrapperValue), Stella.NIL);
                    collect000 = collect000.rest;
                  }
                }
              }
            }
          }
        }
      }
      if (prefix != null) {
        n = n + prefix.length();
      }
      if (suffix != null) {
        n = n + suffix.length();
      }
      { StringWrapper sw = null;
        Cons iter001 = strings;

        for (;!(iter001 == Stella.NIL); iter001 = iter001.rest) {
          sw = ((StringWrapper)(iter001.value));
          n = n + (sw.wrapperValue).length();
        }
      }
      n = n + ((strings.length() - 1) * separatorLength);
      out = Stella.makeRawMutableString(n);
      if (prefix != null) {
        i = Stella.insertString(prefix, 0, Stella.NULL_INTEGER, out, i, Stella.KWD_PRESERVE);
      }
      { StringWrapper sw = null;
        Cons iter002 = strings;

        for (;!(iter002 == Stella.NIL); iter002 = iter002.rest) {
          sw = ((StringWrapper)(iter002.value));
          s = sw.wrapperValue;
          sLen = s.length();
          if (!(firsttimeP)) {
            if (separatorLength > 0) {
              i = Stella.insertString(outputseparator, 0, separatorLength - 1, out, i, Stella.KWD_PRESERVE);
            }
          }
          if (sLen == 0) {
          }
          else if (useacronymheuristicsP &&
              Stella.heuristicAcronymP(s)) {
            i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_PRESERVE);
          }
          else {
            if ((outputcase == Stella.KWD_ALLCAPS) ||
                (outputcase == Stella.KWD_UPCASE)) {
              i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_UPCASE);
            }
            else if (outputcase == Stella.KWD_DOWNCASE) {
              i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_DOWNCASE);
            }
            else if (outputcase == Stella.KWD_TITLECASE) {
              i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_CAPITALIZE);
            }
            else if (outputcase == Stella.KWD_TITLECASEX) {
              if (firsttimeP) {
                i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_DOWNCASE);
              }
              else {
                i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_CAPITALIZE);
              }
            }
            else if (outputcase == Stella.KWD_CAPITALIZE) {
              if (firsttimeP) {
                i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_CAPITALIZE);
              }
              else {
                i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_DOWNCASE);
              }
            }
            else if (outputcase == Stella.KWD_PRESERVE) {
              i = Stella.insertString(s, 0, sLen - 1, out, i, Stella.KWD_PRESERVE);
            }
            else {
              { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

                stream000.nativeStream.print("`" + outputcase + "' is not a valid case option");
                throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
              }
            }
          }
          firsttimeP = false;
        }
      }
      if (suffix != null) {
        i = Stella.insertString(suffix, 0, Stella.NULL_INTEGER, out, i, Stella.KWD_PRESERVE);
      }
      return (out.toString());
    }
  }