readLiteralString static method

UPdfString readLiteralString(
  1. UDocCursor cursor
)

Implementation

static UPdfString readLiteralString(UDocCursor cursor) {
  cursor.skip(1);
  final List<int> out = <int>[];
  int depth = 1;
  while (!cursor.isEmpty) {
    final int byte = cursor.u8();
    if (byte == 0x5C) {
      if (cursor.isEmpty) break;
      final int escape = cursor.u8();
      switch (escape) {
        case 0x6E:
          out.add(lineFeed);
          break;
        case 0x72:
          out.add(carriageReturn);
          break;
        case 0x74:
          out.add(tab);
          break;
        case 0x62:
          out.add(0x08);
          break;
        case 0x66:
          out.add(formFeed);
          break;
        case lineFeed:
          break;
        case carriageReturn:
          if (!cursor.isEmpty && cursor.peek == lineFeed) cursor.skip(1);
          break;
        default:
          if (escape >= 0x30 && escape <= 0x37) {
            int value = escape - 0x30;
            for (int i = 0; i < 2 && !cursor.isEmpty && cursor.peek >= 0x30 && cursor.peek <= 0x37; i++) {
              value = value * 8 + (cursor.u8() - 0x30);
            }
            out.add(value & 0xFF);
          } else {
            out.add(escape);
          }
          break;
      }
      continue;
    }
    if (byte == 0x28) {
      depth++;
      out.add(byte);
      continue;
    }
    if (byte == 0x29) {
      depth--;
      if (depth == 0) break;
      out.add(byte);
      continue;
    }
    out.add(byte);
    if (out.length > uDocMaxStringLength) break;
  }
  return UPdfString(Uint8List.fromList(out));
}