docs: private static Mode decodeAsciiSegment(BitSource bits,
                                           StringBuilder result,
                                           StringBuilder resultTrailer) throws FormatException {
      boolean upperShift = false;
      do {
        int oneByte = bits.readBits(8);
        if (oneByte == 0) {
          throw FormatException.getFormatInstance();
        } else if (oneByte <= 128) {  // ASCII data (ASCII value + 1)
          if (upperShift) {
            oneByte += 128;
            //upperShift = false;
          }
          result.append((char) (oneByte - 1));
          return Mode.ASCII_ENCODE;
        } else if (oneByte == 129) {  // Pad
          return Mode.PAD_ENCODE;
        } else if (oneByte <= 229) {  // 2-digit data 00-99 (Numeric Value + 130)
          int value = oneByte - 130;
          if (value < 10) { // pad with '0' for single digit values
            result.append('0');
          }
          result.append(value);
        } else {
          switch (oneByte) {
            case 230: // Latch to C40 encodation
              return Mode.C40_ENCODE;
            case 231: // Latch to Base 256 encodation
              return Mode.BASE256_ENCODE;
            case 232: // FNC1
              result.append((char) 29); // translate as ASCII 29
              break;
            case 233: // Structured Append
            case 234: // Reader Programming
              // Ignore these symbols for now
              //throw ReaderException.getInstance();
              break;
            case 235: // Upper Shift (shift to Extended ASCII)
              upperShift = true;
              break;
            case 236: // 05 Macro
              result.append("[)>\u001E05\u001D");
              resultTrailer.insert(0, "\u001E\u0004");
              break;
            case 237: // 06 Macro
              result.append("[)>\u001E06\u001D");
              resultTrailer.insert(0, "\u001E\u0004");
              break;
            case 238: // Latch to ANSI X12 encodation
              return Mode.ANSIX12_ENCODE;
            case 239: // Latch to Text encodation
              return Mode.TEXT_ENCODE;
            case 240: // Latch to EDIFACT encodation
              return Mode.EDIFACT_ENCODE;
            case 241: // ECI Character
              // TODO(bbrown): I think we need to support ECI
              //throw ReaderException.getInstance();
              // Ignore this symbol for now
              break;
            default:
              // Not to be used in ASCII encodation
              // but work around encoders that end with 254, latch back to ASCII
              if (oneByte != 254 || bits.available() != 0) {
                throw FormatException.getFormatInstance();
              }
              break;
          }
        }
      } while (bits.available() > 0);
      return Mode.ASCII_ENCODE;
    }