Exemple #1
0
static int test_lex_sym_literal_1() {
	struct ymd_lex lex;
	struct ytoken token;
	int rv;
	lex_init(&lex, NULL, " a\nb\n\t__\t_1\t_1abcdef\n(ab)");
	ASSERT_SYM(a);
	ASSERT_SYM(b);
	lex_init(&lex, NULL, "4 * (b + 2) / a\n");
	ASSERT_DEC(4);
	ASSERT_TOKEN('*');
	ASSERT_TOKEN('(');
	ASSERT_SYM(b);
	ASSERT_TOKEN('+');
	return 0;
}
pdf::Reference PdfReader::getNextReference(){
  TR_USE(PDF_Reader);
  pdf::Reference ret;
  ret.object = getNextInt();
  ret.generation = getNextInt();
  ASSERT_TOKEN("R");
  return ret;
}
pdf::Object* PdfReader::readObject(unsigned offset, pdf::Reference& refr){
  TR_USE(PDF_Reader);
  mReader->jumpTo(offset);
  int obj = getNextInt();
  if (obj != refr.object)
    TR_ERROR("expected to find %i at offset %i", refr.object, offset);
  int gen = getNextInt();
  if (gen != refr.generation)
    TR_ERROR("expected to find generation %i", refr.generation);
  ASSERT_TOKEN("obj");
  ASSERT_TOKEN("<<");
  const char* key = getNextDictEntry();
  while(key != NULL){
    key = getNextDictEntry();
  }
  ASSERT_TOKEN("endobj");
  return NULL;
}
Exemple #4
0
static int test_lex_num_literal_2() {
	struct ymd_lex lex;
	struct ytoken token;
	int rv;
	lex_init(&lex, NULL, "0x0\t0x1\t0x0123456789abcdefABCDEF");
	ASSERT_HEX(0x0);
	ASSERT_HEX(0x1);
	ASSERT_HEX(0x0123456789abcdefABCDEF);
	ASSERT_TOKEN(EOS);
	return 0;
}
PdfDocument* PdfReader::readDocument(){
  TR_USE(PDF_Reader);
  uint8 version[9];
  mReader->readBytes(version, 8);
  mReader->gotoEnd();
  findBackwards("startxref");
  ASSERT_TOKEN("startxref");
  unsigned crtOffset = (unsigned)getNextInt();
  //ASSERT_TOKEN("%%EOF");
  PdfDocument* doc = new PdfDocument(this, crtOffset);
  return doc;
}
pdf::Reference PdfReader::readCrt(unsigned crtOffset, pdf::CrossReferenceTable& crt){
  TR_USE(PDF_Reader);
  mReader->jumpTo(crtOffset);
  ASSERT_TOKEN("xref");
  crt.sections.push_back(pdf::CrossReferenceSection());
  pdf::CrossReferenceSection& sect = crt.sections.back();
  sect.object = getNextInt();
  sect.numObjects = getNextInt();
  for (unsigned i = 0; i < sect.numObjects; ++i){
    sect.entries.push_back(pdf::CrtEntry());
    pdf::CrtEntry& entry = sect.entries.back();
    entry.offset = getNextInt();
    entry.generation = getNextInt();
    const char* tok = getNextToken();
    entry.used = strcmp(tok, "n") == 0;
    crt.entries.push_back(entry);
  }
  //read trailer section
  int numObjects = 0;
  pdf::Reference root;
  ASSERT_TOKEN("trailer");
  ASSERT_TOKEN("<<");
  const char* key = getNextDictEntry();
  while(key != NULL){
    if (strcmp(key, "Size") == 0){
      numObjects = getNextInt();
    }
    else if (strcmp(key, "Root") == 0){
      root = getNextReference();
    }
    else
      TR_WARN("%s unexpected in trailer", key);
    key = getNextDictEntry();
  }
  return root;
}
Exemple #7
0
static int test_lex_num_literal_1() {
	struct ymd_lex lex;
	struct ytoken token;
	int rv;
	lex_init(&lex, NULL, "0 -1 -0 0123456789 9 1 12 123 1234");
	ASSERT_DEC(0);
	ASSERT_DEC(-1);
	ASSERT_DEC(-0);
	ASSERT_DEC(0123456789);
	ASSERT_DEC(9);
	ASSERT_DEC(1);
	ASSERT_DEC(12);
	ASSERT_DEC(123);
	ASSERT_DEC(1234);
	ASSERT_TOKEN(EOS);
	return 0;
}
Exemple #8
0
static int test_lex_punc_1() {
	struct ymd_lex lex;
	struct ytoken token;
	int rv;
	lex_init(&lex, NULL, "->!~+-=<>/\n\t .%^*(){}[]:==>=<=!=~=>>|><<@{|&");
	ASSERT_TOKEN(DICT);
	ASSERT_TOKEN('!');
	ASSERT_TOKEN('~');
	ASSERT_TOKEN('+');
	ASSERT_TOKEN('-');
	ASSERT_TOKEN('=');
	ASSERT_TOKEN('<');
	ASSERT_TOKEN('>');
	ASSERT_TOKEN('/');
	ASSERT_TOKEN('.');
	ASSERT_TOKEN('%');
	ASSERT_TOKEN('^');
	ASSERT_TOKEN('*');
	ASSERT_TOKEN('(');
	ASSERT_TOKEN(')');
	ASSERT_TOKEN('{');
	ASSERT_TOKEN('}');
	ASSERT_TOKEN('[');
	ASSERT_TOKEN(']');
	ASSERT_TOKEN(':');
	ASSERT_TOKEN(EQ);
	ASSERT_TOKEN(GE);
	ASSERT_TOKEN(LE);
	ASSERT_TOKEN(NE);
	ASSERT_TOKEN(MATCH);
	ASSERT_TOKEN(RSHIFT_A);
	ASSERT_TOKEN(RSHIFT_L);
	ASSERT_TOKEN(LSHIFT);
	ASSERT_TOKEN(SKLS);
	ASSERT_TOKEN('|');
	ASSERT_TOKEN('&');
	ASSERT_TOKEN(EOS);
	return 0;
}