code: @Nonnull
      static String decodeUTF16(@Nonnull final String mapcode) {
          String result;
          final StringBuilder asciiBuf = new StringBuilder();
          for (final char ch : mapcode.toCharArray()) {
              if (ch == '.') {
                  asciiBuf.append(ch);
              } else if ((ch >= 1) && (ch <= 'z')) {
                  // normal ascii
                  asciiBuf.append(ch);
              } else {
                  boolean found = false;
                  for (final Unicode2Ascii unicode2Ascii : UNICODE2ASCII) {
                      if ((ch >= unicode2Ascii.min) && (ch <= unicode2Ascii.max)) {
                          final int pos = ((int) ch) - (int) unicode2Ascii.min;
                          asciiBuf.append(unicode2Ascii.convert.charAt(pos));
                          found = true;
                          break;
                      }
                  }
                  if (!found) {
                      asciiBuf.append('?');
                      break;
                  }
              }
          }
          result = asciiBuf.toString();
  
          // Repack if this was a Greek 'alpha' code. This will have been converted to a regular 'A' after one iteration.
          if (mapcode.startsWith(String.valueOf(GREEK_CAPITAL_ALPHA))) {
              final String unpacked = aeuUnpack(result);
              if (unpacked.isEmpty()) {
                  throw new AssertionError("decodeUTF16: cannot decode " + mapcode);
              }
              result = Encoder.aeuPack(unpacked, false);
          }
  
          if (isAbjadScript(mapcode)) {
              return convertFromAbjad(result);
          } else {
              return result;
          }
      }
docs: This method decodes a Unicode string to ASCII. Package private for access by other modules.
  
  @param mapcode Unicode string.
  @return ASCII string.