Example #1
0
static void
pdf_parse_codespace_range(fz_context *ctx, pdf_cmap *cmap, fz_stream *file)
{
	pdf_lexbuf buf;
	int tok;
	int lo, hi;

	buf.size = PDF_LEXBUF_SMALL;
	while (1)
	{
		tok = pdf_lex_cmap(file, &buf);
		/* RJW: Lost debugging: "syntaxerror in cmap" */

		if (tok == TOK_END_CODESPACE_RANGE)
			return;

		else if (tok == PDF_TOK_STRING)
		{
			lo = pdf_code_from_string(buf.scratch, buf.len);
			tok = pdf_lex_cmap(file, &buf);
			/* RJW: Lost debugging: "syntaxerror in cmap" */
			if (tok == PDF_TOK_STRING)
			{
				hi = pdf_code_from_string(buf.scratch, buf.len);
				pdf_add_codespace(ctx, cmap, lo, hi, buf.len);
			}
			else break;
		}

		else break;
	}

	fz_throw(ctx, "expected string or endcodespacerange");
}
Example #2
0
static void
pdf_parse_codespace_range(pdf_cmap *cmap, fz_stream *file)
{
	char buf[256];
	int tok;
	int len;
	int lo, hi;

	while (1)
	{
		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: Lost debugging: "syntaxerror in cmap" */

		if (tok == TOK_END_CODESPACE_RANGE)
			return;

		else if (tok == PDF_TOK_STRING)
		{
			lo = pdf_code_from_string(buf, len);
			tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
			/* RJW: Lost debugging: "syntaxerror in cmap" */
			if (tok == PDF_TOK_STRING)
			{
				hi = pdf_code_from_string(buf, len);
				pdf_add_codespace(file->ctx, cmap, lo, hi, len);
			}
			else break;
		}

		else break;
	}

	fz_throw(file->ctx, "expected string or endcodespacerange");
}
Example #3
0
static void
pdf_parse_bf_range_array(fz_context *ctx, pdf_cmap *cmap, fz_stream *file, int lo, int hi)
{
	pdf_lexbuf buf;
	int tok;
	int dst[256];
	int i;

	buf.size = PDF_LEXBUF_SMALL;
	while (1)
	{
		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */

		if (tok == PDF_TOK_CLOSE_ARRAY)
			return;

		/* Note: does not handle [ /Name /Name ... ] */
		else if (tok != PDF_TOK_STRING)
			fz_throw(ctx, "expected string or ]");

		if (buf.len / 2)
		{
			for (i = 0; i < buf.len / 2; i++)
				dst[i] = pdf_code_from_string(&buf.scratch[i * 2], 2);

			pdf_map_one_to_many(ctx, cmap, lo, dst, buf.len / 2);
		}

		lo ++;
	}
}
Example #4
0
static void
pdf_parse_cid_char(fz_context *ctx, pdf_cmap *cmap, fz_stream *file)
{
	pdf_lexbuf buf;
	int tok;
	int src, dst;

	buf.size = PDF_LEXBUF_SMALL;
	while (1)
	{
		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */

		if (tok == TOK_END_CID_CHAR)
			return;

		else if (tok != PDF_TOK_STRING)
			fz_throw(ctx, "expected string or endcidchar");

		src = pdf_code_from_string(buf.scratch, buf.len);

		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */

		if (tok != PDF_TOK_INT)
			fz_throw(ctx, "expected integer");

		dst = buf.i;

		pdf_map_range_to_range(ctx, cmap, src, src, dst);
	}
}
Example #5
0
static void
pdf_parse_bf_range_array(pdf_cmap *cmap, fz_stream *file, int lo, int hi)
{
	char buf[256];
	int tok;
	int len;
	int dst[256];
	int i;

	while (1)
	{
		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */

		if (tok == PDF_TOK_CLOSE_ARRAY)
			return;

		/* Note: does not handle [ /Name /Name ... ] */
		else if (tok != PDF_TOK_STRING)
			fz_throw(file->ctx, "expected string or ]");

		if (len / 2)
		{
			for (i = 0; i < len / 2; i++)
				dst[i] = pdf_code_from_string(buf + i * 2, 2);

			pdf_map_one_to_many(file->ctx, cmap, lo, dst, len / 2);
		}

		lo ++;
	}
}
Example #6
0
static void
pdf_parse_cid_char(pdf_cmap *cmap, fz_stream *file)
{
	char buf[256];
	int tok;
	int len;
	int src, dst;

	while (1)
	{
		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */

		if (tok == TOK_END_CID_CHAR)
			return;

		else if (tok != PDF_TOK_STRING)
			fz_throw(file->ctx, "expected string or endcidchar");

		src = pdf_code_from_string(buf, len);

		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */

		if (tok != PDF_TOK_INT)
			fz_throw(file->ctx, "expected integer");

		dst = atoi(buf);

		pdf_map_range_to_range(file->ctx, cmap, src, src, dst);
	}
}
Example #7
0
static void
pdf_parse_bf_char(fz_context *ctx, pdf_cmap *cmap, fz_stream *file)
{
	pdf_lexbuf buf;
	int tok;
	int dst[256];
	int src;
	int i;

	buf.size = PDF_LEXBUF_SMALL;
	while (1)
	{
		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */

		if (tok == TOK_END_BF_CHAR)
			return;

		else if (tok != PDF_TOK_STRING)
			fz_throw(ctx, "expected string or endbfchar");

		src = pdf_code_from_string(buf.scratch, buf.len);

		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */
		/* Note: does not handle /dstName */
		if (tok != PDF_TOK_STRING)
			fz_throw(ctx, "expected string");

		if (buf.len / 2)
		{
			for (i = 0; i < buf.len / 2; i++)
				dst[i] = pdf_code_from_string(&buf.scratch[i * 2], 2);
			pdf_map_one_to_many(ctx, cmap, src, dst, i);
		}
	}
}
Example #8
0
static void
pdf_parse_bf_char(pdf_cmap *cmap, fz_stream *file)
{
	char buf[256];
	int tok;
	int len;
	int dst[256];
	int src;
	int i;

	while (1)
	{
		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */

		if (tok == TOK_END_BF_CHAR)
			return;

		else if (tok != PDF_TOK_STRING)
			fz_throw(file->ctx, "expected string or endbfchar");

		src = pdf_code_from_string(buf, len);

		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */
		/* Note: does not handle /dstName */
		if (tok != PDF_TOK_STRING)
			fz_throw(file->ctx, "expected string");

		if (len / 2)
		{
			for (i = 0; i < len / 2; i++)
				dst[i] = pdf_code_from_string(buf + i * 2, 2);
			pdf_map_one_to_many(file->ctx, cmap, src, dst, i);
		}
	}
}
Example #9
0
static void
pdf_parse_bf_range(fz_context *ctx, pdf_cmap *cmap, fz_stream *file)
{
	pdf_lexbuf buf;
	int tok;
	int lo, hi, dst;

	buf.size = PDF_LEXBUF_SMALL;
	while (1)
	{
		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */

		if (tok == TOK_END_BF_RANGE)
			return;

		else if (tok != PDF_TOK_STRING)
			fz_throw(ctx, "expected string or endbfrange");

		lo = pdf_code_from_string(buf.scratch, buf.len);

		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */
		if (tok != PDF_TOK_STRING)
			fz_throw(ctx, "expected string");

		hi = pdf_code_from_string(buf.scratch, buf.len);

		tok = pdf_lex_cmap(file, &buf);
		/* RJW: "syntaxerror in cmap" */

		if (tok == PDF_TOK_STRING)
		{
			if (buf.len == 2)
			{
				dst = pdf_code_from_string(buf.scratch, buf.len);
				pdf_map_range_to_range(ctx, cmap, lo, hi, dst);
			}
			else
			{
				int dststr[256];
				int i;

				if (buf.len / 2)
				{
					for (i = 0; i < buf.len / 2; i++)
						dststr[i] = pdf_code_from_string(&buf.scratch[i * 2], 2);

					while (lo <= hi)
					{
						dststr[i-1] ++;
						pdf_map_one_to_many(ctx, cmap, lo, dststr, i);
						lo ++;
					}
				}
			}
		}

		else if (tok == PDF_TOK_OPEN_ARRAY)
		{
			pdf_parse_bf_range_array(ctx, cmap, file, lo, hi);
			/* RJW: "cannot map bfrange" */
		}

		else
		{
			fz_throw(ctx, "expected string or array or endbfrange");
		}
	}
}
Example #10
0
static void
pdf_parse_bf_range(pdf_cmap *cmap, fz_stream *file)
{
	char buf[256];
	int tok;
	int len;
	int lo, hi, dst;

	while (1)
	{
		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */

		if (tok == TOK_END_BF_RANGE)
			return;

		else if (tok != PDF_TOK_STRING)
			fz_throw(file->ctx, "expected string or endbfrange");

		lo = pdf_code_from_string(buf, len);

		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */
		if (tok != PDF_TOK_STRING)
			fz_throw(file->ctx, "expected string");

		hi = pdf_code_from_string(buf, len);

		tok = pdf_lex_cmap(file, buf, sizeof buf, &len);
		/* RJW: "syntaxerror in cmap" */

		if (tok == PDF_TOK_STRING)
		{
			if (len == 2)
			{
				dst = pdf_code_from_string(buf, len);
				pdf_map_range_to_range(file->ctx, cmap, lo, hi, dst);
			}
			else
			{
				int dststr[256];
				int i;

				if (len / 2)
				{
					for (i = 0; i < len / 2; i++)
						dststr[i] = pdf_code_from_string(buf + i * 2, 2);

					while (lo <= hi)
					{
						dststr[i-1] ++;
						pdf_map_one_to_many(file->ctx, cmap, lo, dststr, i);
						lo ++;
					}
				}
			}
		}

		else if (tok == PDF_TOK_OPEN_ARRAY)
		{
			pdf_parse_bf_range_array(cmap, file, lo, hi);
			/* RJW: "cannot map bfrange" */
		}

		else
		{
			fz_throw(file->ctx, "expected string or array or endbfrange");
		}
	}
}