docs: private static String wordShapeChris1(String s) {
      int length = s.length();
      if (length == 0) {
        return "SYMBOL"; // unclear if this is sensible, but it's what a length 0 String becomes....
      }
  
      boolean cardinal = false;
      boolean number = true;
      boolean seenDigit = false;
      boolean seenNonDigit = false;
  
      for (int i = 0; i < length; i++) {
        char ch = s.charAt(i);
        boolean digit = Character.isDigit(ch);
        if (digit) {
          seenDigit = true;
        } else {
          seenNonDigit = true;
        }
        // allow commas, decimals, and negative numbers
        digit = digit || ch == '.' || ch == ',' || (i == 0 && (ch == '-' || ch == '+'));
        if (!digit) {
          number = false;
        }
      }
  
      if ( ! seenDigit) {
        number = false;
      } else if ( ! seenNonDigit) {
        cardinal = true;
      }
  
      if (cardinal) {
        if (length < 4) {
          return "CARDINAL13";
        } else if (length == 4) {
          return "CARDINAL4";
        } else {
          return "CARDINAL5PLUS";
        }
      } else if (number) {
        return "NUMBER";
      }
  
      boolean seenLower = false;
      boolean seenUpper = false;
      boolean allCaps = true;
      boolean allLower = true;
      boolean initCap = false;
      boolean dash = false;
      boolean period = false;
  
      for (int i = 0; i < length; i++) {
        char ch = s.charAt(i);
        boolean up = Character.isUpperCase(ch);
        boolean let = Character.isLetter(ch);
        boolean tit = Character.isTitleCase(ch);
        if (ch == '-') {
          dash = true;
        } else if (ch == '.') {
          period = true;
        }
  
        if (tit) {
          seenUpper = true;
          allLower = false;
          seenLower = true;
          allCaps = false;
        } else if (up) {
          seenUpper = true;
          allLower = false;
        } else if (let) {
          seenLower = true;
          allCaps = false;
        }
        if (i == 0 && (up || tit)) {
          initCap = true;
        }
      }
  
      if (length == 2 && initCap && period) {
        return "ACRONYM1";
      } else if (seenUpper && allCaps && !seenDigit && period) {
        return "ACRONYM";
      } else if (seenDigit && dash && !seenUpper && !seenLower) {
        return "DIGIT-DASH";
      } else if (initCap && seenLower && seenDigit && dash) {
        return "CAPITALIZED-DIGIT-DASH";
      } else if (initCap && seenLower && seenDigit) {
        return "CAPITALIZED-DIGIT";
      } else if (initCap && seenLower && dash) {
        return "CAPITALIZED-DASH";
      } else if (initCap && seenLower) {
        return "CAPITALIZED";
      } else if (seenUpper && allCaps && seenDigit && dash) {
        return "ALLCAPS-DIGIT-DASH";
      } else if (seenUpper && allCaps && seenDigit) {
        return "ALLCAPS-DIGIT";
      } else if (seenUpper && allCaps && dash) {
        return "ALLCAPS";
      } else if (seenUpper && allCaps) {
        return "ALLCAPS";
      } else if (seenLower && allLower && seenDigit && dash) {
        return "LOWERCASE-DIGIT-DASH";
      } else if (seenLower && allLower && seenDigit) {
        return "LOWERCASE-DIGIT";
      } else if (seenLower && allLower && dash) {
        return "LOWERCASE-DASH";
      } else if (seenLower && allLower) {
        return "LOWERCASE";
      } else if (seenLower && seenDigit) {
        return "MIXEDCASE-DIGIT";
      } else if (seenLower) {
        return "MIXEDCASE";
      } else if (seenDigit) {
        return "SYMBOL-DIGIT";
      } else {
        return "SYMBOL";
      }
    }