diff options
42 files changed, 1825 insertions, 1114 deletions
@@ -83,7 +83,7 @@ CBZ_SRC := $(wildcard source/cbz/*.c) HTML_SRC := $(wildcard source/html/*.c) FITZ_SRC_HDR := $(wildcard source/fitz/*.h) -PDF_SRC_HDR := $(wildcard source/pdf/*.h) +PDF_SRC_HDR := $(wildcard source/pdf/*.h) source/pdf/pdf-name-table.h XPS_SRC_HDR := $(wildcard source/xps/*.h) HTML_SRC_HDR := $(wildcard source/html/*.h) @@ -163,6 +163,7 @@ $(OUT)/platform/x11/curl/%.o : platform/x11/%.c | $(ALL_DIR) CMAPDUMP := $(OUT)/cmapdump FONTDUMP := $(OUT)/fontdump +NAMEDUMP := $(OUT)/namedump CQUOTE := $(OUT)/cquote BIN2HEX := $(OUT)/bin2hex @@ -195,6 +196,11 @@ $(GEN)/gen_font_cjk_full.h : $(FONT_CJK_FULL_SRC) FONT_GEN := $(GEN)/gen_font_base14.h $(GEN)/gen_font_cjk.h $(GEN)/gen_font_cjk_full.h +include/mupdf/pdf.h : include/mupdf/pdf/name-table.h +NAME_GEN := include/mupdf/pdf/name-table.h source/pdf/pdf-name-table.h +$(NAME_GEN) : $(NAMEDUMP) resources/pdf/names.txt + $(QUIET_GEN) $(NAMEDUMP) resources/pdf/names.txt $(NAME_GEN) + JAVASCRIPT_SRC := source/pdf/js/pdf-util.js JAVASCRIPT_GEN := $(GEN)/gen_js_util.h $(JAVASCRIPT_GEN) : $(JAVASCRIPT_SRC) @@ -208,23 +214,25 @@ $(ADOBECA_GEN) : $(ADOBECA_SRC) ifneq "$(CROSSCOMPILE)" "yes" $(CMAP_GEN) : $(CMAPDUMP) | $(GEN) $(FONT_GEN) : $(FONTDUMP) | $(GEN) +$(NAME_GEN) : $(NAMEDUMP) | $(GEN) $(JAVASCRIPT_GEN) : $(CQUOTE) | $(GEN) $(ADOBECA_GEN) : $(BIN2HEX) | $(GEN) endif -generate: $(CMAP_GEN) $(FONT_GEN) $(JAVASCRIPT_GEN) $(ADOBECA_GEN) +generate: $(CMAP_GEN) $(FONT_GEN) $(JAVASCRIPT_GEN) $(ADOBECA_GEN) $(NAME_GEN) $(OUT)/pdf/pdf-cmap-table.o : $(CMAP_GEN) $(OUT)/pdf/pdf-fontfile.o : $(FONT_GEN) $(OUT)/pdf/pdf-pkcs7.o : $(ADOBECA_GEN) $(OUT)/pdf/js/pdf-js.o : $(JAVASCRIPT_GEN) -$(OUT)/cmapdump.o : include/mupdf/pdf/cmap.h source/pdf/pdf-cmap.c source/pdf/pdf-cmap-parse.c +$(OUT)/pdf/pdf-object.o : source/pdf/pdf-name-table.h +$(OUT)/cmapdump.o : include/mupdf/pdf/cmap.h source/pdf/pdf-cmap.c source/pdf/pdf-cmap-parse.c source/pdf/pdf-name-table.h # --- Tools and Apps --- MUDRAW := $(addprefix $(OUT)/, mudraw) MUDRAW_OBJ := $(addprefix $(OUT)/tools/, mudraw.o) -$(MUDRAW_OBJ) : $(FITZ_HDR) +$(MUDRAW_OBJ) : $(FITZ_HDR) $(PDF_HDR) $(MUDRAW) : $(MUPDF_LIB) $(THIRD_LIBS) $(MUDRAW) : $(MUDRAW_OBJ) $(LINK_CMD) @@ -242,8 +250,10 @@ $(MJSGEN) : $(addprefix $(OUT)/tools/, mjsgen.o) $(LINK_CMD) MUJSTEST := $(OUT)/mujstest +MUJSTEST_OBJ := $(addprefix $(OUT)/platform/x11/, jstest_main.o pdfapp.o) +$(MUJSTEST_OBJ) : $(FITZ_HDR) $(PDF_HDR) $(MUJSTEST) : $(MUPDF_LIB) $(THIRD_LIBS) -$(MUJSTEST) : $(addprefix $(OUT)/platform/x11/, jstest_main.o pdfapp.o) +$(MUJSTEST) : $(MUJSTEST_OBJ) $(LINK_CMD) ifeq "$(HAVE_X11)" "yes" @@ -338,6 +348,6 @@ all: libs apps clean: rm -rf $(OUT) nuke: - rm -rf build/* $(GEN) + rm -rf build/* $(GEN) $(NAME_GEN) .PHONY: all clean nuke install third libs apps generate diff --git a/include/mupdf/pdf.h b/include/mupdf/pdf.h index b2b54c10..a6f812f3 100644 --- a/include/mupdf/pdf.h +++ b/include/mupdf/pdf.h @@ -3,6 +3,7 @@ #include "mupdf/fitz.h" +#include "mupdf/pdf/name-table.h" #include "mupdf/pdf/object.h" #include "mupdf/pdf/document.h" #include "mupdf/pdf/parse.h" diff --git a/include/mupdf/pdf/annot.h b/include/mupdf/pdf/annot.h index e7cb6090..fb9d3a69 100644 --- a/include/mupdf/pdf/annot.h +++ b/include/mupdf/pdf/annot.h @@ -74,8 +74,8 @@ fz_link_dest pdf_parse_link_dest(fz_context *ctx, pdf_document *doc, fz_link_kin char *pdf_parse_file_spec(fz_context *ctx, pdf_document *doc, pdf_obj *file_spec); fz_link_dest pdf_parse_action(fz_context *ctx, pdf_document *doc, pdf_obj *action); pdf_obj *pdf_lookup_dest(fz_context *ctx, pdf_document *doc, pdf_obj *needle); -pdf_obj *pdf_lookup_name(fz_context *ctx, pdf_document *doc, char *which, pdf_obj *needle); -pdf_obj *pdf_load_name_tree(fz_context *ctx, pdf_document *doc, char *which); +pdf_obj *pdf_lookup_name(fz_context *ctx, pdf_document *doc, pdf_obj *which, pdf_obj *needle); +pdf_obj *pdf_load_name_tree(fz_context *ctx, pdf_document *doc, pdf_obj *which); fz_link *pdf_load_link_annots(fz_context *ctx, pdf_document *, pdf_obj *annots, const fz_matrix *page_ctm); diff --git a/include/mupdf/pdf/crypt.h b/include/mupdf/pdf/crypt.h index 30a74ec0..45bbc12a 100644 --- a/include/mupdf/pdf/crypt.h +++ b/include/mupdf/pdf/crypt.h @@ -11,7 +11,7 @@ void pdf_drop_crypt(fz_context *ctx, pdf_crypt *crypt); void pdf_crypt_obj(fz_context *ctx, pdf_crypt *crypt, pdf_obj *obj, int num, int gen); void pdf_crypt_buffer(fz_context *ctx, pdf_crypt *crypt, fz_buffer *buf, int num, int gen); fz_stream *pdf_open_crypt(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, int num, int gen); -fz_stream *pdf_open_crypt_with_filter(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, char *name, int num, int gen); +fz_stream *pdf_open_crypt_with_filter(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, pdf_obj *name, int num, int gen); int pdf_crypt_version(fz_context *ctx, pdf_document *doc); int pdf_crypt_revision(fz_context *ctx, pdf_document *doc); diff --git a/include/mupdf/pdf/field.h b/include/mupdf/pdf/field.h index 272e14be..72a72479 100644 --- a/include/mupdf/pdf/field.h +++ b/include/mupdf/pdf/field.h @@ -34,7 +34,7 @@ enum }; char *pdf_get_string_or_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj); -pdf_obj *pdf_get_inheritable(fz_context *ctx, pdf_document *doc, pdf_obj *obj, char *key); +pdf_obj *pdf_get_inheritable(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *key); int pdf_get_field_flags(fz_context *ctx, pdf_document *doc, pdf_obj *obj); int pdf_field_type(fz_context *ctx, pdf_document *doc, pdf_obj *field); void pdf_set_field_type(fz_context *ctx, pdf_document *doc, pdf_obj *obj, int type); diff --git a/include/mupdf/pdf/object.h b/include/mupdf/pdf/object.h index 642a52d2..2db0e57b 100644 --- a/include/mupdf/pdf/object.h +++ b/include/mupdf/pdf/object.h @@ -42,8 +42,18 @@ int pdf_is_array(fz_context *ctx, pdf_obj *obj); int pdf_is_dict(fz_context *ctx, pdf_obj *obj); int pdf_is_indirect(fz_context *ctx, pdf_obj *obj); int pdf_is_stream(fz_context *ctx, pdf_document *doc, int num, int gen); - +pdf_obj *pdf_resolve_obj(fz_context *ctx, pdf_obj *a); int pdf_objcmp(fz_context *ctx, pdf_obj *a, pdf_obj *b); +int pdf_objcmp_resolve(fz_context *ctx, pdf_obj *a, pdf_obj *b); + +static inline int pdf_name_eq(fz_context *ctx, pdf_obj *a, pdf_obj *b) +{ + if (a == b) + return 1; + if (a < PDF_OBJ_NAME__LIMIT && b < PDF_OBJ_NAME__LIMIT) + return 0; + return !pdf_objcmp_resolve(ctx, a, b); +} /* obj marking and unmarking functions - to avoid infinite recursions. */ int pdf_obj_marked(fz_context *ctx, pdf_obj *obj); @@ -88,14 +98,19 @@ pdf_obj *pdf_dict_get_key(fz_context *ctx, pdf_obj *dict, int idx); pdf_obj *pdf_dict_get_val(fz_context *ctx, pdf_obj *dict, int idx); void pdf_dict_put_val_drop(fz_context *ctx, pdf_obj *obj, int i, pdf_obj *new_obj); pdf_obj *pdf_dict_get(fz_context *ctx, pdf_obj *dict, pdf_obj *key); +pdf_obj *pdf_dict_getp(fz_context *ctx, pdf_obj *dict, const char *path); +pdf_obj *pdf_dict_getl(fz_context *ctx, pdf_obj *dict, ...); +pdf_obj *pdf_dict_geta(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *abbrev); pdf_obj *pdf_dict_gets(fz_context *ctx, pdf_obj *dict, const char *key); -pdf_obj *pdf_dict_getp(fz_context *ctx, pdf_obj *dict, const char *key); pdf_obj *pdf_dict_getsa(fz_context *ctx, pdf_obj *dict, const char *key, const char *abbrev); void pdf_dict_put(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val); +void pdf_dict_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val); void pdf_dict_puts(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val); void pdf_dict_puts_drop(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val); -void pdf_dict_putp(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val); -void pdf_dict_putp_drop(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val); +void pdf_dict_putp(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val); +void pdf_dict_putp_drop(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val); +void pdf_dict_putl(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...); +void pdf_dict_putl_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...); void pdf_dict_del(fz_context *ctx, pdf_obj *dict, pdf_obj *key); void pdf_dict_dels(fz_context *ctx, pdf_obj *dict, const char *key); void pdf_sort_dict(fz_context *ctx, pdf_obj *dict); diff --git a/platform/win32/generate.bat b/platform/win32/generate.bat index f47e2c56..e7fcadae 100644 --- a/platform/win32/generate.bat +++ b/platform/win32/generate.bat @@ -4,6 +4,13 @@ if not exist scripts/fontdump.c cd ../.. if not exist scripts/fontdump.c goto usage if not exist generated mkdir generated +cl /nologo -Iinclude scripts/namedump.c + +if not exist namedump.exe goto usage + +if not exist include/mupdf/pdf/name-table.h namedump.exe resources/pdf/names.txt include/mupdf/pdf/name-table.h source/pdf/pdf-name-table.h +if not exist source/pdf/pdf-name-table.h namedump.exe resources/pdf/names.txt include/mupdf/pdf/name-table.h source/pdf/pdf-name-table.h + cl /nologo -Iinclude scripts/fontdump.c setargv.obj cl /nologo -Iinclude scripts/cmapdump.c setargv.obj cl /nologo -Iinclude scripts/cquote.c setargv.obj diff --git a/platform/win32/generated.vcproj b/platform/win32/generated.vcproj index a0a55c35..063f997c 100644 --- a/platform/win32/generated.vcproj +++ b/platform/win32/generated.vcproj @@ -27,8 +27,8 @@ <Tool Name="VCNMakeTool" BuildCommandLine="generate.bat" - ReBuildCommandLine="del /q ..\..\generated && generate.bat" - CleanCommandLine="del /q ..\..\generated" + ReBuildCommandLine="del /q ..\..\generated ..\..\include\mupdf\pdf\name-table.h ..\..\source\pdf\pdf-name-table.h && generate.bat" + CleanCommandLine="del /q ..\..\generated ..\..\include\mupdf\pdf\name-table.h ..\..\source\pdf\pdf-name-table.h" Output="" PreprocessorDefinitions="WIN32;_DEBUG;USE_OUTPUT_DEBUG_STRING" IncludeSearchPath="" @@ -161,6 +161,14 @@ RelativePath="..\..\scripts\fontdump.c" > </File> + <File + RelativePath="..\..\scripts\namedump.c" + > + </File> + <File + RelativePath="..\..\resources\pdf\names.txt" + > + </File> </Filter> <Filter Name="generated" diff --git a/platform/win32/libmupdf.vcproj b/platform/win32/libmupdf.vcproj index 625a47c6..c3dc0aa3 100644 --- a/platform/win32/libmupdf.vcproj +++ b/platform/win32/libmupdf.vcproj @@ -1321,6 +1321,10 @@ > </File> <File + RelativePath="..\..\include\mupdf\pdf\name-table.h" + > + </File> + <File RelativePath="..\..\include\mupdf\pdf\object.h" > </File> diff --git a/resources/pdf/names.txt b/resources/pdf/names.txt new file mode 100644 index 00000000..a631a2ce --- /dev/null +++ b/resources/pdf/names.txt @@ -0,0 +1,367 @@ +3D +A +A85 +AA +AESV2 +AESV3 +AHx +AP +AS +ASCII85Decode +ASCIIHexDecode +AcroForm +Adobe.PPKLite +AllOff +AllOn +Alpha +Alternate +Annot +Annots +AnyOff +ArtBox +Ascent +B +BBox +BC +BG +BM +BPC +BS +Background +BaseEncoding +BaseFont +BaseState +BitsPerComponent +BitsPerCoordinate +BitsPerFlag +BitsPerSample +BlackIs1 +BleedBox +Blinds +Bounds +Box +Bt +Btn +ByteRange +C +C0 +C1 +CA +CCF +CCITTFaxDecod +CCITTFaxDecode +CF +CFM +CIDFontType0 +CIDFontType0C +CIDFontType2 +CIDSystemInfo +CIDToGIDMap +CMYK +CS +CalCMYK +CalGray +CalRGB +CapHeight +Caret +Catalog +Ch +CharProcs +Circle +ColorSpace +ColorTransform +Colors +Columns +Configs +Contents +Coords +Count +Cover +Creator +CropBox +Crypt +D +DA +DC +DCT +DCTDecod +DCTDecode +DOS +DP +DR +DV +DW +DW2 +DamagedRowsBeforeError +Decode +DecodeParms +Default +DescendantFonts +Descent +Dest +Dests +DeviceCMYK +DeviceGray +DeviceN +DeviceRGB +Di +Differences +Dissolve +Dm +Domain +Dur +E +EarlyChange +Encode +EncodedByteAlign +Encoding +Encrypt +EncryptMetadata +EndOfBlock +EndOfLine +Exclude +ExtGState +Extend +F +FL +FRM +FS +FT +Fade +Ff +Fields +FileAttachment +Filter +First +FirstChar +Fit +FitB +FitBH +FitBV +FitH +FitR +FitV +Fl +Flags +FlateDecod +FlateDecode +Fly +Font +FontBBox +FontDescriptor +FontFile +FontFile2 +FontFile3 +FontMatrix +FontName +Form +FormType +FreeText +Function +FunctionType +Functions +G +Glitter +GoTo +GoToR +Group +H +Height +Highlight +I +ICCBased +ID +IM +Identity +Identity-H +Identity-V +Image +ImageMask +Index +Indexed +Info +Ink +InkList +Intent +Interpolate +IsMap +ItalicAngle +JBIG2Decode +JBIG2Globals +JPXDecode +JS +JavaScript +K +Kids +L +LC +LJ +LW +LZ +LZW +LZWDecod +LZWDecode +Lab +LastChar +Launch +Length +Length1 +Length2 +Length3 +Limits +Line +Linearized +Link +Luminosity +M +MK +ML +MMType1 +Mac +Mask +Matrix +Matte +MaxLen +MediaBox +MissingWidth +Movie +N +Name +Named +Names +NewWindow +Next +None +Normal +O +OC +OCG +OCGs +OCMD +OCProperties +OE +OFF +ON +ObjStm +Of +Off +Opt +Ordering +Outlines +P +PDF +PS +Page +PageMode +Pages +PaintType +Parent +Pattern +PatternType +PolyLine +Polygon +Popup +Predictor +Prev +Print +PrinterMark +ProcSet +Producer +Properties +Push +Q +QuadPoints +R +RGB +RI +RL +Range +Rect +Registry +ResetForm +Resources +Root +Rotate +Rows +RunLengthDecod +RunLengthDecode +S +SMask +SMaskInData +Screen +Separation +Shading +ShadingType +Si +Sig +SigFlags +Size +Sound +Split +Square +Squiggly +Stamp +Standard +StdCF +StmF +StrF +StrikeOut +SubFilter +Subtype +Subtype2 +T +TR +TR2 +Text +Title +ToUnicode +Trans +Transparency +TrapNet +TrimBox +TrueType +Tx +Type +Type0 +Type1 +Type1C +Type3 +U +UE +UF +URI +URL +Unchanged +Uncover +Underline +Unix +Usage +UseCMap +UseOutlines +UserUnit +V +V2 +VE +Version +VerticesPerRow +W +W2 +WMode +Watermark +Widget +Width +Widths +WinAnsiEncoding +Wipe +XHeight +XObject +XRef +XRefStm +XStep +XYZ +YStep +adbe.pkcs7.detached +ca +n0 +n1 +n2 diff --git a/scripts/namedump.c b/scripts/namedump.c new file mode 100644 index 00000000..0d7d9e67 --- /dev/null +++ b/scripts/namedump.c @@ -0,0 +1,100 @@ +/* namedump.c -- parse an alphabetically sorted list of PDF names + * and generate header files from it. */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +char buffer[256]; + +static char *get_line(FILE *in) +{ + size_t l; + + if (fgets(buffer, sizeof(buffer), in) == NULL) + { + buffer[0] = 0; + return buffer; + } + l = strlen(buffer); + while (l > 0 && buffer[l-1] <= ' ') + l--; + buffer[l] = 0; + + return buffer; +} + + +int +main(int argc, char **argv) +{ + FILE *in; + FILE *out_c; + FILE *out_h; + + if (argc != 4) + { + fprintf(stderr, "Syntax:\nnamedump <in-file> <public header> <private header>\n"); + return EXIT_FAILURE; + } + + in = fopen(argv[1], "rb"); + if (!in) + { + fprintf(stderr, "Failed to open '%s' for reading\n", argv[1]); + return EXIT_FAILURE; + } + + out_h = fopen(argv[2], "wb"); + if (!out_h) + { + fprintf(stderr, "Failed to open '%s' for writing\n", argv[2]); + return EXIT_FAILURE; + } + + out_c = fopen(argv[3], "wb"); + if (!out_c) + { + fprintf(stderr, "Failed to open '%s' for writing\n", argv[3]); + return EXIT_FAILURE; + } + + fprintf(out_c, "char *PDF_NAMES[] =\n{\n\t\"\",\n"); + + fprintf(out_h, "enum\n{\n\tPDF_OBJ_ENUM__DUMMY,\n"); + + while (!feof(in)) + { + char *line = get_line(in); + if (*line == 0) + continue; + + fprintf(out_c, "\t\"%s\",\n", line); + + { + char *l; + for (l = line; *l; l++) + { + if (*l == '.' || *l == '-') + *l = '_'; + } + } + + fprintf(out_h, "#define PDF_NAME_%s ((pdf_obj *)(intptr_t)PDF_OBJ_ENUM_NAME_%s)\n", line, line); + fprintf(out_h, "\tPDF_OBJ_ENUM_NAME_%s,\n", line); + } + + fprintf(out_h, "#define PDF_OBJ_NAME__LIMIT ((pdf_obj *)(intptr_t)PDF_OBJ_ENUM_NAME__LIMIT)\n\tPDF_OBJ_ENUM_NAME__LIMIT,\n"); + fprintf(out_h, "#define PDF_OBJ_FALSE ((pdf_obj *)(intptr_t)PDF_OBJ_ENUM_BOOL_FALSE)\n\tPDF_OBJ_ENUM_BOOL_FALSE = PDF_OBJ_ENUM_NAME__LIMIT,\n"); + fprintf(out_h, "#define PDF_OBJ_TRUE ((pdf_obj *)(intptr_t)PDF_OBJ_ENUM_BOOL_TRUE)\n\tPDF_OBJ_ENUM_BOOL_TRUE,\n"); + fprintf(out_h, "#define PDF_OBJ_NULL ((pdf_obj *)(intptr_t)PDF_OBJ_ENUM_NULL)\n\tPDF_OBJ_ENUM_NULL,\n"); + fprintf(out_h, "#define PDF_OBJ__LIMIT ((pdf_obj *)(intptr_t)PDF_OBJ_ENUM__LIMIT)\n\tPDF_OBJ_ENUM__LIMIT\n};\n"); + + fprintf(out_c, "};\n"); + + fclose(out_c); + fclose(out_h); + fclose(in); + + return EXIT_SUCCESS; +} diff --git a/source/html/html-font.c b/source/html/html-font.c index ae6568c9..08da04f5 100644 --- a/source/html/html-font.c +++ b/source/html/html-font.c @@ -1,5 +1,6 @@ #include "mupdf/html.h" -#include "mupdf/pdf.h" /* for pdf_lookup_builtin_font */ + +unsigned char *pdf_lookup_builtin_font(fz_context *ctx, const char *name, unsigned int *len); static const char *font_names[16] = { diff --git a/source/pdf/js/pdf-js.c b/source/pdf/js/pdf-js.c index 84a14381..6eea8c30 100644 --- a/source/pdf/js/pdf-js.c +++ b/source/pdf/js/pdf-js.c @@ -803,9 +803,9 @@ static pdf_js *pdf_new_js(fz_context *ctx, pdf_document *doc) js->doc = doc; /* Find the form array */ - root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - acroform = pdf_dict_gets(ctx, root, "AcroForm"); - js->form = pdf_dict_gets(ctx, acroform, "Fields"); + root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + acroform = pdf_dict_get(ctx, root, PDF_NAME_AcroForm); + js->form = pdf_dict_get(ctx, acroform, PDF_NAME_Fields); /* Initialise the javascript engine, passing the main context * for use in memory allocation and exception handling. Also @@ -837,13 +837,13 @@ static void pdf_js_load_document_level(pdf_js *js) { int len, i; - javascript = pdf_load_name_tree(ctx, doc, "JavaScript"); + javascript = pdf_load_name_tree(ctx, doc, PDF_NAME_JavaScript); len = pdf_dict_len(ctx, javascript); for (i = 0; i < len; i++) { pdf_obj *fragment = pdf_dict_get_val(ctx, javascript, i); - pdf_obj *code = pdf_dict_gets(ctx, fragment, "JS"); + pdf_obj *code = pdf_dict_get(ctx, fragment, PDF_NAME_JS); fz_var(codebuf); fz_try(ctx) diff --git a/source/pdf/pdf-annot-edit.c b/source/pdf/pdf-annot-edit.c index 565e3171..aef14e6f 100644 --- a/source/pdf/pdf-annot-edit.c +++ b/source/pdf/pdf-annot-edit.c @@ -45,8 +45,8 @@ pdf_update_annot(fz_context *ctx, pdf_document *doc, pdf_annot *annot) obj = annot->obj; - ap = pdf_dict_gets(ctx, obj, "AP"); - as = pdf_dict_gets(ctx, obj, "AS"); + ap = pdf_dict_get(ctx, obj, PDF_NAME_AP); + as = pdf_dict_get(ctx, obj, PDF_NAME_AS); if (pdf_is_dict(ctx, ap)) { @@ -58,11 +58,11 @@ pdf_update_annot(fz_context *ctx, pdf_document *doc, pdf_annot *annot) && hp->gen == pdf_to_gen(ctx, obj) && (hp->state & HOTSPOT_POINTER_DOWN)) { - n = pdf_dict_gets(ctx, ap, "D"); /* down state */ + n = pdf_dict_get(ctx, ap, PDF_NAME_D); /* down state */ } if (n == NULL) - n = pdf_dict_gets(ctx, ap, "N"); /* normal state */ + n = pdf_dict_get(ctx, ap, PDF_NAME_N); /* normal state */ /* lookup current state in sub-dictionary */ if (!pdf_is_stream(ctx, doc, pdf_to_num(ctx, n), pdf_to_gen(ctx, n))) @@ -102,20 +102,20 @@ pdf_create_annot(fz_context *ctx, pdf_document *doc, pdf_page *page, fz_annot_ty int ind_obj_num; fz_rect rect = {0.0, 0.0, 0.0, 0.0}; const char *type_str = annot_type_str(type); - pdf_obj *annot_arr = pdf_dict_gets(ctx, page->me, "Annots"); + pdf_obj *annot_arr = pdf_dict_get(ctx, page->me, PDF_NAME_Annots); if (annot_arr == NULL) { annot_arr = pdf_new_array(ctx, doc, 0); - pdf_dict_puts_drop(ctx, page->me, "Annots", annot_arr); + pdf_dict_put_drop(ctx, page->me, PDF_NAME_Annots, annot_arr); } - pdf_dict_puts_drop(ctx, annot_obj, "Type", pdf_new_name(ctx, doc, "Annot")); + pdf_dict_put_drop(ctx, annot_obj, PDF_NAME_Type, PDF_NAME_Annot); - pdf_dict_puts_drop(ctx, annot_obj, "Subtype", pdf_new_name(ctx, doc, type_str)); - pdf_dict_puts_drop(ctx, annot_obj, "Rect", pdf_new_rect(ctx, doc, &rect)); + pdf_dict_put_drop(ctx, annot_obj, PDF_NAME_Subtype, pdf_new_name(ctx, doc, type_str)); + pdf_dict_put_drop(ctx, annot_obj, PDF_NAME_Rect, pdf_new_rect(ctx, doc, &rect)); /* Make printable as default */ - pdf_dict_puts_drop(ctx, annot_obj, "F", pdf_new_int(ctx, doc, F_Print)); + pdf_dict_put_drop(ctx, annot_obj, PDF_NAME_F, pdf_new_int(ctx, doc, F_Print)); annot = fz_malloc_struct(ctx, pdf_annot); annot->page = page; @@ -194,7 +194,7 @@ pdf_delete_annot(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_annot * annot->ap = NULL; /* Recreate the "Annots" array with this annot removed */ - old_annot_arr = pdf_dict_gets(ctx, page->me, "Annots"); + old_annot_arr = pdf_dict_get(ctx, page->me, PDF_NAME_Annots); if (old_annot_arr) { @@ -214,7 +214,7 @@ pdf_delete_annot(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_annot * if (pdf_is_indirect(ctx, old_annot_arr)) pdf_update_object(ctx, doc, pdf_to_num(ctx, old_annot_arr), annot_arr); else - pdf_dict_puts(ctx, page->me, "Annots", annot_arr); + pdf_dict_put(ctx, page->me, PDF_NAME_Annots, annot_arr); if (pdf_is_indirect(ctx, annot->obj)) pdf_delete_object(ctx, doc, pdf_to_num(ctx, annot->obj)); @@ -243,7 +243,7 @@ pdf_set_markup_annot_quadpoints(fz_context *ctx, pdf_document *doc, pdf_annot *a fz_invert_matrix(&ctm, &annot->page->ctm); - pdf_dict_puts_drop(ctx, annot->obj, "QuadPoints", arr); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_QuadPoints, arr); for (i = 0; i < n; i++) { @@ -260,7 +260,7 @@ pdf_set_markup_annot_quadpoints(fz_context *ctx, pdf_document *doc, pdf_annot *a static void update_rect(fz_context *ctx, pdf_annot *annot) { - pdf_to_rect(ctx, pdf_dict_gets(ctx, annot->obj, "Rect"), &annot->rect); + pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Rect), &annot->rect); annot->pagerect = annot->rect; fz_transform_rect(&annot->pagerect, &annot->page->ctm); } @@ -276,7 +276,7 @@ pdf_set_ink_annot_list(fz_context *ctx, pdf_document *doc, pdf_annot *annot, fz_ fz_invert_matrix(&ctm, &annot->page->ctm); - pdf_dict_puts_drop(ctx, annot->obj, "InkList", list); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_InkList, list); for (i = 0; i < ncount; i++) { @@ -320,15 +320,15 @@ pdf_set_ink_annot_list(fz_context *ctx, pdf_document *doc, pdf_annot *annot, fz_ rect.y1 += thickness; } - pdf_dict_puts_drop(ctx, annot->obj, "Rect", pdf_new_rect(ctx, doc, &rect)); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Rect, pdf_new_rect(ctx, doc, &rect)); update_rect(ctx, annot); bs = pdf_new_dict(ctx, doc, 1); - pdf_dict_puts_drop(ctx, annot->obj, "BS", bs); - pdf_dict_puts_drop(ctx, bs, "W", pdf_new_real(ctx, doc, thickness)); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_BS, bs); + pdf_dict_put_drop(ctx, bs, PDF_NAME_W, pdf_new_real(ctx, doc, thickness)); col = pdf_new_array(ctx, doc, 3); - pdf_dict_puts_drop(ctx, annot->obj, "C", col); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_C, col); for (i = 0; i < 3; i++) pdf_array_push_drop(ctx, col, pdf_new_real(ctx, doc, color[i])); } @@ -360,23 +360,23 @@ void pdf_set_text_annot_position(fz_context *ctx, pdf_document *doc, pdf_annot * rect.y1 = pt.y + TEXT_ANNOT_SIZE; fz_transform_rect(&rect, &ctm); - pdf_dict_puts_drop(ctx, annot->obj, "Rect", pdf_new_rect(ctx, doc, &rect)); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Rect, pdf_new_rect(ctx, doc, &rect)); - flags = pdf_to_int(ctx, pdf_dict_gets(ctx, annot->obj, "F")); + flags = pdf_to_int(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_F)); flags |= (F_NoZoom|F_NoRotate); - pdf_dict_puts_drop(ctx, annot->obj, "F", pdf_new_int(ctx, doc, flags)); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_F, pdf_new_int(ctx, doc, flags)); update_rect(ctx, annot); } void pdf_set_annot_contents(fz_context *ctx, pdf_document *doc, pdf_annot *annot, char *text) { - pdf_dict_puts_drop(ctx, annot->obj, "Contents", pdf_new_string(ctx, doc, text, strlen(text))); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Contents, pdf_new_string(ctx, doc, text, strlen(text))); } char *pdf_annot_contents(fz_context *ctx, pdf_document *doc, pdf_annot *annot) { - return pdf_to_str_buf(ctx, pdf_dict_getp(ctx, annot->obj, "Contents")); + return pdf_to_str_buf(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Contents)); } void pdf_set_free_text_details(fz_context *ctx, pdf_document *doc, pdf_annot *annot, fz_point *pos, char *text, char *font_name, float font_size, float color[3]) @@ -394,19 +394,19 @@ void pdf_set_free_text_details(fz_context *ctx, pdf_document *doc, pdf_annot *an fz_invert_matrix(&ctm, &annot->page->ctm); - dr = pdf_dict_gets(ctx, annot->page->me, "Resources"); + dr = pdf_dict_get(ctx, annot->page->me, PDF_NAME_Resources); if (!dr) { dr = pdf_new_dict(ctx, doc, 1); - pdf_dict_putp_drop(ctx, annot->page->me, "Resources", dr); + pdf_dict_put_drop(ctx, annot->page->me, PDF_NAME_Resources, dr); } /* Ensure the resource dictionary includes a font dict */ - form_fonts = pdf_dict_gets(ctx, dr, "Font"); + form_fonts = pdf_dict_get(ctx, dr, PDF_NAME_Font); if (!form_fonts) { form_fonts = pdf_new_dict(ctx, doc, 1); - pdf_dict_puts_drop(ctx, dr, "Font", form_fonts); + pdf_dict_put_drop(ctx, dr, PDF_NAME_Font, form_fonts); /* form_fonts is still valid if execution continues past the above call */ } @@ -424,10 +424,10 @@ void pdf_set_free_text_details(fz_context *ctx, pdf_document *doc, pdf_annot *an ref = pdf_new_ref(ctx, doc, font); pdf_dict_puts_drop(ctx, form_fonts, nbuf, ref); - pdf_dict_puts_drop(ctx, font, "Type", pdf_new_name(ctx, doc, "Font")); - pdf_dict_puts_drop(ctx, font, "Subtype", pdf_new_name(ctx, doc, "Type1")); - pdf_dict_puts_drop(ctx, font, "BaseFont", pdf_new_name(ctx, doc, font_name)); - pdf_dict_puts_drop(ctx, font, "Encoding", pdf_new_name(ctx, doc, "WinAnsiEncoding")); + pdf_dict_put_drop(ctx, font, PDF_NAME_Type, PDF_NAME_Font); + pdf_dict_put_drop(ctx, font, PDF_NAME_Subtype, PDF_NAME_Type1); + pdf_dict_put_drop(ctx, font, PDF_NAME_BaseFont, pdf_new_name(ctx, doc, font_name)); + pdf_dict_put_drop(ctx, font, PDF_NAME_Encoding, PDF_NAME_WinAnsiEncoding); memcpy(da_info.col, color, sizeof(float)*3); da_info.col_size = 3; @@ -438,10 +438,10 @@ void pdf_set_free_text_details(fz_context *ctx, pdf_document *doc, pdf_annot *an pdf_fzbuf_print_da(ctx, fzbuf, &da_info); da_len = fz_buffer_storage(ctx, fzbuf, &da_str); - pdf_dict_puts_drop(ctx, annot->obj, "DA", pdf_new_string(ctx, doc, (char *)da_str, da_len)); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_DA, pdf_new_string(ctx, doc, (char *)da_str, da_len)); /* FIXME: should convert to WinAnsiEncoding */ - pdf_dict_puts_drop(ctx, annot->obj, "Contents", pdf_new_string(ctx, doc, text, strlen(text))); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Contents, pdf_new_string(ctx, doc, text, strlen(text))); font_desc = pdf_load_font(ctx, doc, NULL, font, 0); pdf_measure_text(ctx, font_desc, (unsigned char *)text, strlen(text), &bounds); @@ -459,7 +459,7 @@ void pdf_set_free_text_details(fz_context *ctx, pdf_document *doc, pdf_annot *an bounds.y0 += page_pos.y; bounds.y1 += page_pos.y; - pdf_dict_puts_drop(ctx, annot->obj, "Rect", pdf_new_rect(ctx, doc, &bounds)); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Rect, pdf_new_rect(ctx, doc, &bounds)); update_rect(ctx, annot); } fz_always(ctx) diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c index 79114211..50c637d2 100644 --- a/source/pdf/pdf-annot.c +++ b/source/pdf/pdf-annot.c @@ -24,7 +24,7 @@ resolve_dest_rec(fz_context *ctx, pdf_document *doc, pdf_obj *dest, fz_link_kind else if (pdf_is_dict(ctx, dest)) { - dest = pdf_dict_gets(ctx, dest, "D"); + dest = pdf_dict_get(ctx, dest, PDF_NAME_D); return resolve_dest_rec(ctx, doc, dest, kind, depth+1); } @@ -101,27 +101,27 @@ pdf_parse_link_dest(fz_context *ctx, pdf_document *doc, fz_link_kind kind, pdf_o if (!pdf_is_name(ctx, obj)) return ld; - if (!strcmp("XYZ", pdf_to_name(ctx, obj))) + if (pdf_name_eq(ctx, PDF_NAME_XYZ, obj)) { l_from_2 = t_from_3 = z_from_4 = 1; ld.ld.gotor.flags |= fz_link_flag_r_is_zoom; } - else if ((!strcmp("Fit", pdf_to_name(ctx, obj))) || (!strcmp("FitB", pdf_to_name(ctx, obj)))) + else if ((pdf_name_eq(ctx, PDF_NAME_Fit, obj)) || (pdf_name_eq(ctx, PDF_NAME_FitB, obj))) { ld.ld.gotor.flags |= fz_link_flag_fit_h; ld.ld.gotor.flags |= fz_link_flag_fit_v; } - else if ((!strcmp("FitH", pdf_to_name(ctx, obj))) || (!strcmp("FitBH", pdf_to_name(ctx, obj)))) + else if ((pdf_name_eq(ctx, PDF_NAME_FitH, obj)) || (pdf_name_eq(ctx, PDF_NAME_FitBH, obj))) { t_from_2 = 1; ld.ld.gotor.flags |= fz_link_flag_fit_h; } - else if ((!strcmp("FitV", pdf_to_name(ctx, obj))) || (!strcmp("FitBV", pdf_to_name(ctx, obj)))) + else if ((pdf_name_eq(ctx, PDF_NAME_FitV, obj)) || (pdf_name_eq(ctx, PDF_NAME_FitBV, obj))) { l_from_2 = 1; ld.ld.gotor.flags |= fz_link_flag_fit_v; } - else if (!strcmp("FitR", pdf_to_name(ctx, obj))) + else if (pdf_name_eq(ctx, PDF_NAME_FitR, obj)) { l_from_2 = b_from_3 = r_from_4 = t_from_5 = 1; ld.ld.gotor.flags |= fz_link_flag_fit_h; @@ -228,12 +228,12 @@ pdf_parse_file_spec(fz_context *ctx, pdf_document *doc, pdf_obj *file_spec) if (pdf_is_dict(ctx, file_spec)) { #if defined(_WIN32) || defined(_WIN64) - filename = pdf_dict_gets(ctx, file_spec, "DOS"); + filename = pdf_dict_get(ctx, file_spec, PDF_NAME_DOS); #else - filename = pdf_dict_gets(ctx, file_spec, "Unix"); + filename = pdf_dict_get(ctx, file_spec, PDF_NAME_Unix); #endif if (!filename) - filename = pdf_dict_getsa(ctx, file_spec, "UF", "F"); + filename = pdf_dict_geta(ctx, file_spec, PDF_NAME_UF, PDF_NAME_F); } if (!pdf_is_string(ctx, filename)) @@ -274,38 +274,38 @@ pdf_parse_action(fz_context *ctx, pdf_document *doc, pdf_obj *action) if (!action) return ld; - obj = pdf_dict_gets(ctx, action, "S"); - if (!strcmp(pdf_to_name(ctx, obj), "GoTo")) + obj = pdf_dict_get(ctx, action, PDF_NAME_S); + if (pdf_name_eq(ctx, PDF_NAME_GoTo, obj)) { - dest = pdf_dict_gets(ctx, action, "D"); + dest = pdf_dict_get(ctx, action, PDF_NAME_D); ld = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTO, dest); } - else if (!strcmp(pdf_to_name(ctx, obj), "URI")) + else if (pdf_name_eq(ctx, PDF_NAME_URI, obj)) { ld.kind = FZ_LINK_URI; - ld.ld.uri.is_map = pdf_to_bool(ctx, pdf_dict_gets(ctx, action, "IsMap")); - ld.ld.uri.uri = pdf_to_utf8(ctx, doc, pdf_dict_gets(ctx, action, "URI")); + ld.ld.uri.is_map = pdf_to_bool(ctx, pdf_dict_get(ctx, action, PDF_NAME_IsMap)); + ld.ld.uri.uri = pdf_to_utf8(ctx, doc, pdf_dict_get(ctx, action, PDF_NAME_URI)); } - else if (!strcmp(pdf_to_name(ctx, obj), "Launch")) + else if (pdf_name_eq(ctx, PDF_NAME_Launch, obj)) { ld.kind = FZ_LINK_LAUNCH; - file_spec = pdf_dict_gets(ctx, action, "F"); + file_spec = pdf_dict_get(ctx, action, PDF_NAME_F); ld.ld.launch.file_spec = pdf_parse_file_spec(ctx, doc, file_spec); - ld.ld.launch.new_window = pdf_to_int(ctx, pdf_dict_gets(ctx, action, "NewWindow")); - ld.ld.launch.is_uri = !strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, file_spec, "FS")), "URL"); + ld.ld.launch.new_window = pdf_to_int(ctx, pdf_dict_get(ctx, action, PDF_NAME_NewWindow)); + ld.ld.launch.is_uri = pdf_name_eq(ctx, PDF_NAME_URL, pdf_dict_get(ctx, file_spec, PDF_NAME_FS)); } - else if (!strcmp(pdf_to_name(ctx, obj), "Named")) + else if (pdf_name_eq(ctx, PDF_NAME_Named, obj)) { ld.kind = FZ_LINK_NAMED; - ld.ld.named.named = fz_strdup(ctx, pdf_to_name(ctx, pdf_dict_gets(ctx, action, "N"))); + ld.ld.named.named = fz_strdup(ctx, pdf_to_name(ctx, pdf_dict_get(ctx, action, PDF_NAME_N))); } - else if (!strcmp(pdf_to_name(ctx, obj), "GoToR")) + else if (pdf_name_eq(ctx, PDF_NAME_GoToR, obj)) { - dest = pdf_dict_gets(ctx, action, "D"); - file_spec = pdf_dict_gets(ctx, action, "F"); + dest = pdf_dict_get(ctx, action, PDF_NAME_D); + file_spec = pdf_dict_get(ctx, action, PDF_NAME_F); ld = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTOR, dest); ld.ld.gotor.file_spec = pdf_parse_file_spec(ctx, doc, file_spec); - ld.ld.gotor.new_window = pdf_to_int(ctx, pdf_dict_gets(ctx, action, "NewWindow")); + ld.ld.gotor.new_window = pdf_to_int(ctx, pdf_dict_get(ctx, action, PDF_NAME_NewWindow)); } return ld; } @@ -318,7 +318,7 @@ pdf_load_link(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const fz_matrix fz_rect bbox; fz_link_dest ld; - obj = pdf_dict_gets(ctx, dict, "Rect"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Rect); if (obj) pdf_to_rect(ctx, obj, &bbox); else @@ -326,15 +326,15 @@ pdf_load_link(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const fz_matrix fz_transform_rect(&bbox, page_ctm); - obj = pdf_dict_gets(ctx, dict, "Dest"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Dest); if (obj) ld = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTO, obj); else { - action = pdf_dict_gets(ctx, dict, "A"); + action = pdf_dict_get(ctx, dict, PDF_NAME_A); /* fall back to additional action button's down/up action */ if (!action) - action = pdf_dict_getsa(ctx, pdf_dict_gets(ctx, dict, "AA"), "U", "D"); + action = pdf_dict_geta(ctx, pdf_dict_get(ctx, dict, PDF_NAME_AA), PDF_NAME_U, PDF_NAME_D); ld = pdf_parse_action(ctx, doc, action); } @@ -423,56 +423,56 @@ pdf_transform_annot(fz_context *ctx, pdf_annot *annot) fz_annot_type pdf_annot_obj_type(fz_context *ctx, pdf_obj *obj) { - char *subtype = pdf_to_name(ctx, pdf_dict_gets(ctx, obj, "Subtype")); - if (!strcmp(subtype, "Text")) + pdf_obj *subtype = pdf_dict_get(ctx, obj, PDF_NAME_Subtype); + if (pdf_name_eq(ctx, PDF_NAME_Text, subtype)) return FZ_ANNOT_TEXT; - else if (!strcmp(subtype, "Link")) + else if (pdf_name_eq(ctx, PDF_NAME_Link, subtype)) return FZ_ANNOT_LINK; - else if (!strcmp(subtype, "FreeText")) + else if (pdf_name_eq(ctx, PDF_NAME_FreeText, subtype)) return FZ_ANNOT_FREETEXT; - else if (!strcmp(subtype, "Line")) + else if (pdf_name_eq(ctx, PDF_NAME_Line, subtype)) return FZ_ANNOT_LINE; - else if (!strcmp(subtype, "Square")) + else if (pdf_name_eq(ctx, PDF_NAME_Square, subtype)) return FZ_ANNOT_SQUARE; - else if (!strcmp(subtype, "Circle")) + else if (pdf_name_eq(ctx, PDF_NAME_Circle, subtype)) return FZ_ANNOT_CIRCLE; - else if (!strcmp(subtype, "Polygon")) + else if (pdf_name_eq(ctx, PDF_NAME_Polygon, subtype)) return FZ_ANNOT_POLYGON; - else if (!strcmp(subtype, "PolyLine")) + else if (pdf_name_eq(ctx, PDF_NAME_PolyLine, subtype)) return FZ_ANNOT_POLYLINE; - else if (!strcmp(subtype, "Highlight")) + else if (pdf_name_eq(ctx, PDF_NAME_Highlight, subtype)) return FZ_ANNOT_HIGHLIGHT; - else if (!strcmp(subtype, "Underline")) + else if (pdf_name_eq(ctx, PDF_NAME_Underline, subtype)) return FZ_ANNOT_UNDERLINE; - else if (!strcmp(subtype, "Squiggly")) + else if (pdf_name_eq(ctx, PDF_NAME_Squiggly, subtype)) return FZ_ANNOT_SQUIGGLY; - else if (!strcmp(subtype, "StrikeOut")) + else if (pdf_name_eq(ctx, PDF_NAME_StrikeOut, subtype)) return FZ_ANNOT_STRIKEOUT; - else if (!strcmp(subtype, "Stamp")) + else if (pdf_name_eq(ctx, PDF_NAME_Stamp, subtype)) return FZ_ANNOT_STAMP; - else if (!strcmp(subtype, "Caret")) + else if (pdf_name_eq(ctx, PDF_NAME_Caret, subtype)) return FZ_ANNOT_CARET; - else if (!strcmp(subtype, "Ink")) + else if (pdf_name_eq(ctx, PDF_NAME_Ink, subtype)) return FZ_ANNOT_INK; - else if (!strcmp(subtype, "Popup")) + else if (pdf_name_eq(ctx, PDF_NAME_Popup, subtype)) return FZ_ANNOT_POPUP; - else if (!strcmp(subtype, "FileAttachment")) + else if (pdf_name_eq(ctx, PDF_NAME_FileAttachment, subtype)) return FZ_ANNOT_FILEATTACHMENT; - else if (!strcmp(subtype, "Sound")) + else if (pdf_name_eq(ctx, PDF_NAME_Sound, subtype)) return FZ_ANNOT_SOUND; - else if (!strcmp(subtype, "Movie")) + else if (pdf_name_eq(ctx, PDF_NAME_Movie, subtype)) return FZ_ANNOT_MOVIE; - else if (!strcmp(subtype, "Widget")) + else if (pdf_name_eq(ctx, PDF_NAME_Widget, subtype)) return FZ_ANNOT_WIDGET; - else if (!strcmp(subtype, "Screen")) + else if (pdf_name_eq(ctx, PDF_NAME_Screen, subtype)) return FZ_ANNOT_SCREEN; - else if (!strcmp(subtype, "PrinterMark")) + else if (pdf_name_eq(ctx, PDF_NAME_PrinterMark, subtype)) return FZ_ANNOT_PRINTERMARK; - else if (!strcmp(subtype, "TrapNet")) + else if (pdf_name_eq(ctx, PDF_NAME_TrapNet, subtype)) return FZ_ANNOT_TRAPNET; - else if (!strcmp(subtype, "Watermark")) + else if (pdf_name_eq(ctx, PDF_NAME_Watermark, subtype)) return FZ_ANNOT_WATERMARK; - else if (!strcmp(subtype, "3D")) + else if (pdf_name_eq(ctx, PDF_NAME_3D, subtype)) return FZ_ANNOT_3D; else return -1; @@ -538,9 +538,9 @@ pdf_load_annots(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *ann doc->update_appearance(ctx, doc, annot); obj = annot->obj; - rect = pdf_dict_gets(ctx, obj, "Rect"); - ap = pdf_dict_gets(ctx, obj, "AP"); - as = pdf_dict_gets(ctx, obj, "AS"); + rect = pdf_dict_get(ctx, obj, PDF_NAME_Rect); + ap = pdf_dict_get(ctx, obj, PDF_NAME_AP); + as = pdf_dict_get(ctx, obj, PDF_NAME_AS); /* We only collect annotations with an appearance * stream into this list, so remove any that don't @@ -553,11 +553,11 @@ pdf_load_annots(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *ann && hp->gen == pdf_to_gen(ctx, obj) && (hp->state & HOTSPOT_POINTER_DOWN)) { - n = pdf_dict_gets(ctx, ap, "D"); /* down state */ + n = pdf_dict_get(ctx, ap, PDF_NAME_D); /* down state */ } if (n == NULL) - n = pdf_dict_gets(ctx, ap, "N"); /* normal state */ + n = pdf_dict_get(ctx, ap, PDF_NAME_N); /* normal state */ /* lookup current state in sub-dictionary */ if (!pdf_is_stream(ctx, doc, pdf_to_num(ctx, n), pdf_to_gen(ctx, n))) diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c index 52dfba0b..ce533cf4 100644 --- a/source/pdf/pdf-appearance.c +++ b/source/pdf/pdf-appearance.c @@ -164,7 +164,7 @@ static void get_font_info(fz_context *ctx, pdf_document *doc, pdf_obj *dr, char if (font_rec->da_rec.font_name == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "No font name in default appearance"); - font_rec->font = font = pdf_load_font(ctx, doc, dr, pdf_dict_gets(ctx, pdf_dict_gets(ctx, dr, "Font"), font_rec->da_rec.font_name), 0); + font_rec->font = font = pdf_load_font(ctx, doc, dr, pdf_dict_gets(ctx, pdf_dict_get(ctx, dr, PDF_NAME_Font), font_rec->da_rec.font_name), 0); font_rec->lineheight = 1.0; if (font && font->ascent != 0.0f && font->descent != 0.0f) font_rec->lineheight = (font->ascent - font->descent) / 1000.0; @@ -179,13 +179,13 @@ static void font_info_fin(fz_context *ctx, font_info *font_rec) static void get_text_widget_info(fz_context *ctx, pdf_document *doc, pdf_obj *widget, text_widget_info *info) { - char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, widget, "DA")); + char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, widget, PDF_NAME_DA)); int ff = pdf_get_field_flags(ctx, doc, widget); - pdf_obj *ml = pdf_get_inheritable(ctx, doc, widget, "MaxLen"); + pdf_obj *ml = pdf_get_inheritable(ctx, doc, widget, PDF_NAME_MaxLen); - info->dr = pdf_get_inheritable(ctx, doc, widget, "DR"); - info->col = pdf_dict_getp(ctx, widget, "MK/BG"); - info->q = pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, widget, "Q")); + info->dr = pdf_get_inheritable(ctx, doc, widget, PDF_NAME_DR); + info->col = pdf_dict_getl(ctx, widget, PDF_NAME_MK, PDF_NAME_BG, NULL); + info->q = pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, widget, PDF_NAME_Q)); info->multiline = (ff & Ff_Multiline) != 0; info->comb = (ff & (Ff_Multiline|Ff_Password|Ff_FileSelect|Ff_Comb)) == Ff_Comb; @@ -784,7 +784,7 @@ static int get_matrix(fz_context *ctx, pdf_document *doc, pdf_xobject *form, int if (found) { fz_rect bbox; - pdf_to_rect(ctx, pdf_dict_gets(ctx, form->contents, "BBox"), &bbox); + pdf_to_rect(ctx, pdf_dict_get(ctx, form->contents, PDF_NAME_BBox), &bbox); switch (q) { @@ -928,7 +928,6 @@ static pdf_xobject *load_or_create_form(fz_context *ctx, pdf_document *doc, pdf_ int rot; pdf_obj *formobj = NULL; pdf_xobject *form = NULL; - char *dn = "N"; fz_buffer *fzbuf = NULL; int create_form = 0; @@ -937,25 +936,25 @@ static pdf_xobject *load_or_create_form(fz_context *ctx, pdf_document *doc, pdf_ fz_var(fzbuf); fz_try(ctx) { - rot = pdf_to_int(ctx, pdf_dict_getp(ctx, obj, "MK/R")); - pdf_to_rect(ctx, pdf_dict_gets(ctx, obj, "Rect"), rect); + rot = pdf_to_int(ctx, pdf_dict_getl(ctx, obj, PDF_NAME_MK, PDF_NAME_R, NULL)); + pdf_to_rect(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Rect), rect); rect->x1 -= rect->x0; rect->y1 -= rect->y0; rect->x0 = rect->y0 = 0; account_for_rot(rect, &mat, rot); - ap = pdf_dict_gets(ctx, obj, "AP"); + ap = pdf_dict_get(ctx, obj, PDF_NAME_AP); if (ap == NULL) { ap = pdf_new_dict(ctx, doc, 1); - pdf_dict_puts_drop(ctx, obj, "AP", ap); + pdf_dict_put_drop(ctx, obj, PDF_NAME_AP, ap); } - formobj = pdf_dict_gets(ctx, ap, dn); + formobj = pdf_dict_get(ctx, ap, PDF_NAME_N); if (formobj == NULL) { formobj = pdf_new_xobject(ctx, doc, rect, &mat); - pdf_dict_puts_drop(ctx, ap, dn, formobj); + pdf_dict_put_drop(ctx, ap, PDF_NAME_N, formobj); create_form = 1; } @@ -966,7 +965,7 @@ static pdf_xobject *load_or_create_form(fz_context *ctx, pdf_document *doc, pdf_ pdf_update_xobject_contents(ctx, doc, form, fzbuf); } - copy_resources(ctx, form->resources, pdf_get_inheritable(ctx, doc, obj, "DR")); + copy_resources(ctx, form->resources, pdf_get_inheritable(ctx, doc, obj, PDF_NAME_DR)); } fz_always(ctx) { @@ -1070,15 +1069,15 @@ static void update_marked_content(fz_context *ctx, pdf_document *doc, pdf_xobjec static int get_border_style(fz_context *ctx, pdf_obj *obj) { - char *sname = pdf_to_name(ctx, pdf_dict_getp(ctx, obj, "BS/S")); + pdf_obj *sname = pdf_dict_getl(ctx, obj, PDF_NAME_BS, PDF_NAME_S, NULL); - if (!strcmp(sname, "D")) + if (pdf_name_eq(ctx, PDF_NAME_D, sname)) return BS_Dashed; - else if (!strcmp(sname, "B")) + else if (pdf_name_eq(ctx, PDF_NAME_B, sname)) return BS_Beveled; - else if (!strcmp(sname, "I")) + else if (pdf_name_eq(ctx, PDF_NAME_I, sname)) return BS_Inset; - else if (!strcmp(sname, "U")) + else if (pdf_name_eq(ctx, PDF_NAME_U, sname)) return BS_Underline; else return BS_Solid; @@ -1086,7 +1085,7 @@ static int get_border_style(fz_context *ctx, pdf_obj *obj) static float get_border_width(fz_context *ctx, pdf_obj *obj) { - float w = pdf_to_real(ctx, pdf_dict_getp(ctx, obj, "BS/W")); + float w = pdf_to_real(ctx, pdf_dict_getl(ctx, obj, PDF_NAME_BS, PDF_NAME_W, NULL)); return w == 0.0 ? 1.0 : w; } @@ -1155,7 +1154,7 @@ void pdf_update_combobox_appearance(fz_context *ctx, pdf_document *doc, pdf_obj { get_text_widget_info(ctx, doc, obj, &info); - val = pdf_get_inheritable(ctx, doc, obj, "V"); + val = pdf_get_inheritable(ctx, doc, obj, PDF_NAME_V); if (pdf_is_array(ctx, val)) val = pdf_array_get(ctx, val, 0); @@ -1204,7 +1203,7 @@ void pdf_update_pushbutton_appearance(fz_context *ctx, pdf_document *doc, pdf_ob { form = load_or_create_form(ctx, doc, obj, &rect); fzbuf = fz_new_buffer(ctx, 0); - tobj = pdf_dict_getp(ctx, obj, "MK/BG"); + tobj = pdf_dict_getl(ctx, obj, PDF_NAME_MK, PDF_NAME_BG, NULL); if (pdf_is_array(ctx, tobj)) { fzbuf_print_color(ctx, fzbuf, tobj, 0, 0.0); @@ -1243,7 +1242,7 @@ void pdf_update_pushbutton_appearance(fz_context *ctx, pdf_document *doc, pdf_ob fz_buffer_printf(ctx, fzbuf, fmt_f); } - tobj = pdf_dict_getp(ctx, obj, "MK/BC"); + tobj = pdf_dict_getl(ctx, obj, PDF_NAME_MK, PDF_NAME_BC, NULL); if (tobj) { fzbuf_print_color(ctx, fzbuf, tobj, 1, 0.0); @@ -1254,13 +1253,13 @@ void pdf_update_pushbutton_appearance(fz_context *ctx, pdf_document *doc, pdf_ob fz_buffer_printf(ctx, fzbuf, fmt_s); } - tobj = pdf_dict_getp(ctx, obj, "MK/CA"); + tobj = pdf_dict_getl(ctx, obj, PDF_NAME_MK, PDF_NAME_CA, NULL); if (tobj) { fz_rect clip = rect; fz_rect bounds; fz_matrix mat; - char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, obj, "DA")); + char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, obj, PDF_NAME_DA)); char *text = pdf_to_str_buf(ctx, tobj); clip.x0 += btotal; @@ -1330,7 +1329,7 @@ void pdf_update_text_markup_appearance(fz_context *ctx, pdf_document *doc, pdf_a static void update_rect(fz_context *ctx, pdf_annot *annot) { - pdf_to_rect(ctx, pdf_dict_gets(ctx, annot->obj, "Rect"), &annot->rect); + pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Rect), &annot->rect); annot->pagerect = annot->rect; fz_transform_rect(&annot->pagerect, &annot->page->ctm); } @@ -1354,27 +1353,27 @@ void pdf_set_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *ann fz_transform_rect(&trect, &ctm); - pdf_dict_puts_drop(ctx, obj, "Rect", pdf_new_rect(ctx, doc, &trect)); + pdf_dict_put_drop(ctx, obj, PDF_NAME_Rect, pdf_new_rect(ctx, doc, &trect)); /* See if there is a current normal appearance */ - ap_obj = pdf_dict_getp(ctx, obj, "AP/N"); + ap_obj = pdf_dict_getl(ctx, obj, PDF_NAME_AP, PDF_NAME_N, NULL); if (!pdf_is_stream(ctx, doc, pdf_to_num(ctx, ap_obj), pdf_to_gen(ctx, ap_obj))) ap_obj = NULL; if (ap_obj == NULL) { ap_obj = pdf_new_xobject(ctx, doc, &trect, &mat); - pdf_dict_putp_drop(ctx, obj, "AP/N", ap_obj); + pdf_dict_putl_drop(ctx, obj, ap_obj, PDF_NAME_AP, PDF_NAME_N, NULL); } else { pdf_xref_ensure_incremental_object(ctx, doc, pdf_to_num(ctx, ap_obj)); /* Update bounding box and matrix in reused xobject obj */ - pdf_dict_puts_drop(ctx, ap_obj, "BBox", pdf_new_rect(ctx, doc, &trect)); - pdf_dict_puts_drop(ctx, ap_obj, "Matrix", pdf_new_matrix(ctx, doc, &mat)); + pdf_dict_put_drop(ctx, ap_obj, PDF_NAME_BBox, pdf_new_rect(ctx, doc, &trect)); + pdf_dict_put_drop(ctx, ap_obj, PDF_NAME_Matrix, pdf_new_matrix(ctx, doc, &mat)); } - dev = pdf_new_pdf_device(ctx, doc, ap_obj, pdf_dict_gets(ctx, ap_obj, "Resources"), &mat, NULL); + dev = pdf_new_pdf_device(ctx, doc, ap_obj, pdf_dict_get(ctx, ap_obj, PDF_NAME_Resources), &mat, NULL); fz_run_display_list(ctx, disp_list, dev, &ctm, &fz_infinite_rect, NULL); fz_drop_device(ctx, dev); @@ -1403,7 +1402,7 @@ void pdf_set_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *ann static fz_point * quadpoints(fz_context *ctx, pdf_document *doc, pdf_obj *annot, int *nout) { - pdf_obj *quad = pdf_dict_gets(ctx, annot, "QuadPoints"); + pdf_obj *quad = pdf_dict_get(ctx, annot, PDF_NAME_QuadPoints); fz_point *qp = NULL; int i, n; @@ -1568,7 +1567,7 @@ void pdf_update_ink_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *an int n, m, i, j; int empty = 1; - cs = pdf_to_color(ctx, doc, pdf_dict_gets(ctx, annot->obj, "C"), color); + cs = pdf_to_color(ctx, doc, pdf_dict_get(ctx, annot->obj, PDF_NAME_C), color); if (!cs) { cs = fz_device_rgb(ctx); @@ -1577,11 +1576,11 @@ void pdf_update_ink_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *an color[2] = 0.0f; } - width = pdf_to_real(ctx, pdf_dict_gets(ctx, pdf_dict_gets(ctx, annot->obj, "BS"), "W")); + width = pdf_to_real(ctx, pdf_dict_get(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_BS), PDF_NAME_W)); if (width == 0.0f) width = 1.0f; - list = pdf_dict_gets(ctx, annot->obj, "InkList"); + list = pdf_dict_get(ctx, annot->obj, PDF_NAME_InkList); n = pdf_array_len(ctx, list); @@ -1857,7 +1856,7 @@ void pdf_update_text_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_an fz_rect bounds; fz_matrix tm; - pdf_to_rect(ctx, pdf_dict_gets(ctx, annot->obj, "Rect"), &rect); + pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Rect), &rect); dlist = fz_new_display_list(ctx); dev = fz_new_list_device(ctx, dlist); stroke = fz_new_stroke_state(ctx); @@ -1907,7 +1906,7 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p { const fz_matrix *page_ctm = &annot->page->ctm; pdf_obj *obj = annot->obj; - pdf_obj *dr = pdf_dict_getp(ctx, annot->page->me, "Resources"); + pdf_obj *dr = pdf_dict_get(ctx, annot->page->me, PDF_NAME_Resources); fz_display_list *dlist = NULL; fz_device *dev = NULL; font_info font_rec; @@ -1926,8 +1925,8 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p fz_var(cs); fz_try(ctx) { - char *contents = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, obj, "Contents")); - char *da = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, obj, "DA")); + char *contents = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Contents)); + char *da = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_DA)); fz_rect rect = annot->rect; fz_point pos; @@ -2029,14 +2028,14 @@ static void draw_logo(fz_context *ctx, fz_path *path) static void insert_signature_appearance_layers(fz_context *ctx, pdf_document *doc, pdf_annot *annot) { - pdf_obj *ap = pdf_dict_getp(ctx, annot->obj, "AP/N"); + pdf_obj *ap = pdf_dict_getl(ctx, annot->obj, PDF_NAME_AP, PDF_NAME_N, NULL); pdf_obj *main_ap = NULL; pdf_obj *frm = NULL; pdf_obj *n0 = NULL; fz_rect bbox; fz_buffer *fzbuf = NULL; - pdf_to_rect(ctx, pdf_dict_gets(ctx, ap, "BBox"), &bbox); + pdf_to_rect(ctx, pdf_dict_get(ctx, ap, PDF_NAME_BBox), &bbox); fz_var(main_ap); fz_var(frm); @@ -2048,15 +2047,15 @@ static void insert_signature_appearance_layers(fz_context *ctx, pdf_document *do frm = pdf_new_xobject(ctx, doc, &bbox, &fz_identity); n0 = pdf_new_xobject(ctx, doc, &bbox, &fz_identity); - pdf_dict_putp(ctx, main_ap, "Resources/XObject/FRM", frm); + pdf_dict_putl(ctx, main_ap, frm, PDF_NAME_Resources, PDF_NAME_XObject, PDF_NAME_FRM, NULL); fzbuf = fz_new_buffer(ctx, 8); fz_buffer_printf(ctx, fzbuf, "/FRM Do"); pdf_update_stream(ctx, doc, main_ap, fzbuf, 0); fz_drop_buffer(ctx, fzbuf); fzbuf = NULL; - pdf_dict_putp(ctx, frm, "Resources/XObject/n0", n0); - pdf_dict_putp(ctx, frm, "Resources/XObject/n2", ap); + pdf_dict_putl(ctx, frm, n0, PDF_NAME_Resources, PDF_NAME_XObject, PDF_NAME_n0, NULL); + pdf_dict_putl(ctx, frm, ap, PDF_NAME_Resources, PDF_NAME_XObject, PDF_NAME_n2, NULL); fzbuf = fz_new_buffer(ctx, 8); fz_buffer_printf(ctx, fzbuf, "q 1 0 0 1 0 0 cm /n0 Do Q q 1 0 0 1 0 0 cm /n2 Do Q"); pdf_update_stream(ctx, doc, frm, fzbuf, 0); @@ -2069,7 +2068,7 @@ static void insert_signature_appearance_layers(fz_context *ctx, pdf_document *do fz_drop_buffer(ctx, fzbuf); fzbuf = NULL; - pdf_dict_putp(ctx, annot->obj, "AP/N", main_ap); + pdf_dict_putl(ctx, annot->obj, main_ap, PDF_NAME_AP, PDF_NAME_N, NULL); } fz_always(ctx) { @@ -2091,7 +2090,7 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot { const fz_matrix *page_ctm = &annot->page->ctm; pdf_obj *obj = annot->obj; - pdf_obj *dr = pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/DR"); + pdf_obj *dr = pdf_dict_getl(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, PDF_NAME_AcroForm, PDF_NAME_DR, NULL); fz_display_list *dlist = NULL; fz_device *dev = NULL; font_info font_rec; @@ -2101,7 +2100,7 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot fz_buffer *fzbuf = NULL; if (!dr) - pdf_dict_putp_drop(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/DR", pdf_new_dict(ctx, doc, 1)); + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), pdf_new_dict(ctx, doc, 1), PDF_NAME_Root, PDF_NAME_AcroForm, PDF_NAME_DR, NULL); memset(&font_rec, 0, sizeof(font_rec)); @@ -2113,7 +2112,7 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot fz_var(fzbuf); fz_try(ctx) { - char *da = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, obj, "DA")); + char *da = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_DA)); fz_rect rect = annot->rect; fz_rect logo_bounds; fz_matrix logo_tm; @@ -2190,7 +2189,7 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot void pdf_update_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot) { pdf_obj *obj = annot->obj; - if (!pdf_dict_gets(ctx, obj, "AP") || pdf_obj_is_dirty(ctx, obj)) + if (!pdf_dict_get(ctx, obj, PDF_NAME_AP) || pdf_obj_is_dirty(ctx, obj)) { fz_annot_type type = pdf_annot_obj_type(ctx, obj); switch (type) @@ -2201,7 +2200,7 @@ void pdf_update_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot) case PDF_WIDGET_TYPE_TEXT: { #if 0 - pdf_obj *formatting = pdf_dict_getp(ctx, obj, "AA/F"); + pdf_obj *formatting = pdf_dict_getl(ctx, obj, PDF_NAME_AA, PDF_NAME_F, NULL); if (formatting && doc->js) { /* Apply formatting */ diff --git a/source/pdf/pdf-clean.c b/source/pdf/pdf-clean.c index 399d9339..90de0444 100644 --- a/source/pdf/pdf-clean.c +++ b/source/pdf/pdf-clean.c @@ -23,7 +23,7 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob { if (own_res) { - pdf_obj *r = pdf_dict_gets(ctx, obj, "Resources"); + pdf_obj *r = pdf_dict_get(ctx, obj, PDF_NAME_Resources); if (r) orig_res = r; } @@ -40,7 +40,7 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob if (own_res) { ref = pdf_new_ref(ctx, doc, res); - pdf_dict_puts(ctx, obj, "Resources", ref); + pdf_dict_put(ctx, obj, PDF_NAME_Resources, ref); } } fz_always(ctx) @@ -74,14 +74,14 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_ fz_try(ctx) { - res = pdf_dict_gets(ctx, obj, "Resources"); + res = pdf_dict_get(ctx, obj, PDF_NAME_Resources); if (res) orig_res = res; res = NULL; res = pdf_new_dict(ctx, doc, 1); - charprocs = pdf_dict_gets(ctx, obj, "CharProcs"); + charprocs = pdf_dict_get(ctx, obj, PDF_NAME_CharProcs); l = pdf_dict_len(ctx, charprocs); for (i = 0; i < l; i++) @@ -110,10 +110,10 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_ } /* ProcSet - no cleaning possible. Inherit this from the old dict. */ - pdf_dict_puts(ctx, res, "ProcSet", pdf_dict_gets(ctx, orig_res, "ProcSet")); + pdf_dict_put(ctx, res, PDF_NAME_ProcSet, pdf_dict_get(ctx, orig_res, PDF_NAME_ProcSet)); ref = pdf_new_ref(ctx, doc, res); - pdf_dict_puts(ctx, obj, "Resources", ref); + pdf_dict_put(ctx, obj, PDF_NAME_Resources, ref); } fz_always(ctx) { @@ -166,8 +166,8 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, } else { - pdf_dict_dels(ctx, contents, "Filter"); - pdf_dict_dels(ctx, contents, "DecodeParms"); + pdf_dict_del(ctx, contents, PDF_NAME_Filter); + pdf_dict_del(ctx, contents, PDF_NAME_DecodeParms); } /* Now deal with resources. The spec allows for Type3 fonts and form @@ -176,7 +176,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, * conceivably cause changes in rendering, but we don't care. */ /* ExtGState */ - obj = pdf_dict_gets(ctx, res, "ExtGState"); + obj = pdf_dict_get(ctx, res, PDF_NAME_ExtGState); if (obj) { int i, l; @@ -184,11 +184,11 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, l = pdf_dict_len(ctx, obj); for (i = 0; i < l; i++) { - pdf_obj *o = pdf_dict_gets(ctx, pdf_dict_get_val(ctx, obj, i), "SMask"); + pdf_obj *o = pdf_dict_get(ctx, pdf_dict_get_val(ctx, obj, i), PDF_NAME_SMask); if (!o) continue; - o = pdf_dict_gets(ctx, o, "G"); + o = pdf_dict_get(ctx, o, PDF_NAME_G); if (!o) continue; @@ -200,7 +200,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, /* ColorSpace - no cleaning possible */ /* Pattern */ - obj = pdf_dict_gets(ctx, res, "Pattern"); + obj = pdf_dict_get(ctx, res, PDF_NAME_Pattern); if (obj) { int i, l; @@ -212,7 +212,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, if (!pat) continue; - if (pdf_to_int(ctx, pdf_dict_gets(ctx, pat, "PatternType")) == 1) + if (pdf_to_int(ctx, pdf_dict_get(ctx, pat, PDF_NAME_PatternType)) == 1) pdf_clean_stream_object(ctx, doc, pat, page->resources, cookie, 0); } } @@ -220,7 +220,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, /* Shading - no cleaning possible */ /* XObject */ - obj = pdf_dict_gets(ctx, res, "XObject"); + obj = pdf_dict_get(ctx, res, PDF_NAME_XObject); if (obj) { int i, l; @@ -230,7 +230,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, { pdf_obj *xobj = pdf_dict_get_val(ctx, obj, i); - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, xobj, "Subtype")), "Form")) + if (!pdf_name_eq(ctx, PDF_NAME_Form, pdf_dict_get(ctx, xobj, PDF_NAME_Subtype))) continue; pdf_clean_stream_object(ctx, doc, xobj, page->resources, cookie, 1); @@ -238,7 +238,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, } /* Font */ - obj = pdf_dict_gets(ctx, res, "Font"); + obj = pdf_dict_get(ctx, res, PDF_NAME_Font); if (obj) { int i, l; @@ -248,7 +248,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, { pdf_obj *o = pdf_dict_get_val(ctx, obj, i); - if (!strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, o, "Subtype")), "Type3")) + if (pdf_name_eq(ctx, PDF_NAME_Type3, pdf_dict_get(ctx, o, PDF_NAME_Subtype))) { pdf_clean_type3(ctx, doc, o, page->resources, cookie); } @@ -256,9 +256,9 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, } /* ProcSet - no cleaning possible. Inherit this from the old dict. */ - obj = pdf_dict_gets(ctx, page->resources, "ProcSet"); + obj = pdf_dict_get(ctx, page->resources, PDF_NAME_ProcSet); if (obj) - pdf_dict_puts(ctx, res, "ProcSet", obj); + pdf_dict_put(ctx, res, PDF_NAME_ProcSet, obj); /* Properties - no cleaning possible. */ @@ -269,7 +269,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_drop_obj(ctx, page->resources); ref = pdf_new_ref(ctx, doc, res); page->resources = pdf_keep_obj(ctx, ref); - pdf_dict_puts(ctx, page->me, "Resources", ref); + pdf_dict_put(ctx, page->me, PDF_NAME_Resources, ref); } fz_always(ctx) { diff --git a/source/pdf/pdf-cmap-load.c b/source/pdf/pdf-cmap-load.c index 46338539..159c4e6f 100644 --- a/source/pdf/pdf-cmap-load.c +++ b/source/pdf/pdf-cmap-load.c @@ -49,10 +49,10 @@ pdf_load_embedded_cmap(fz_context *ctx, pdf_document *doc, pdf_obj *stmobj) fz_drop_stream(ctx, file); file = NULL; - wmode = pdf_dict_gets(ctx, stmobj, "WMode"); + wmode = pdf_dict_get(ctx, stmobj, PDF_NAME_WMode); if (pdf_is_int(ctx, wmode)) pdf_set_cmap_wmode(ctx, cmap, pdf_to_int(ctx, wmode)); - obj = pdf_dict_gets(ctx, stmobj, "UseCMap"); + obj = pdf_dict_get(ctx, stmobj, PDF_NAME_UseCMap); if (pdf_is_name(ctx, obj)) { usecmap = pdf_load_system_cmap(ctx, pdf_to_name(ctx, obj)); diff --git a/source/pdf/pdf-colorspace.c b/source/pdf/pdf-colorspace.c index a58dc961..321b224b 100644 --- a/source/pdf/pdf-colorspace.c +++ b/source/pdf/pdf-colorspace.c @@ -8,8 +8,8 @@ load_icc_based(fz_context *ctx, pdf_document *doc, pdf_obj *dict) int n; pdf_obj *obj; - n = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "N")); - obj = pdf_dict_gets(ctx, dict, "Alternate"); + n = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_N)); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Alternate); if (obj) { @@ -251,20 +251,19 @@ pdf_load_colorspace_imp(fz_context *ctx, pdf_document *doc, pdf_obj *obj) if (pdf_is_name(ctx, obj)) { - const char *str = pdf_to_name(ctx, obj); - if (!strcmp(str, "Pattern")) + if (pdf_name_eq(ctx, obj, PDF_NAME_Pattern)) return fz_device_gray(ctx); - else if (!strcmp(str, "G")) + else if (pdf_name_eq(ctx, obj, PDF_NAME_G)) return fz_device_gray(ctx); - else if (!strcmp(str, "RGB")) + else if (pdf_name_eq(ctx, obj, PDF_NAME_RGB)) return fz_device_rgb(ctx); - else if (!strcmp(str, "CMYK")) + else if (pdf_name_eq(ctx, obj, PDF_NAME_CMYK)) return fz_device_cmyk(ctx); - else if (!strcmp(str, "DeviceGray")) + else if (pdf_name_eq(ctx, obj, PDF_NAME_DeviceGray)) return fz_device_gray(ctx); - else if (!strcmp(str, "DeviceRGB")) + else if (pdf_name_eq(ctx, obj, PDF_NAME_DeviceRGB)) return fz_device_rgb(ctx); - else if (!strcmp(str, "DeviceCMYK")) + else if (pdf_name_eq(ctx, obj, PDF_NAME_DeviceCMYK)) return fz_device_cmyk(ctx); else fz_throw(ctx, FZ_ERROR_GENERIC, "unknown colorspace: %s", pdf_to_name(ctx, obj)); @@ -273,30 +272,29 @@ pdf_load_colorspace_imp(fz_context *ctx, pdf_document *doc, pdf_obj *obj) else if (pdf_is_array(ctx, obj)) { pdf_obj *name = pdf_array_get(ctx, obj, 0); - const char *str = pdf_to_name(ctx, name); if (pdf_is_name(ctx, name)) { /* load base colorspace instead */ - if (!strcmp(str, "G")) + if (pdf_name_eq(ctx, name, PDF_NAME_G)) return fz_device_gray(ctx); - else if (!strcmp(str, "RGB")) + else if (pdf_name_eq(ctx, name, PDF_NAME_RGB)) return fz_device_rgb(ctx); - else if (!strcmp(str, "CMYK")) + else if (pdf_name_eq(ctx, name, PDF_NAME_CMYK)) return fz_device_cmyk(ctx); - else if (!strcmp(str, "DeviceGray")) + else if (pdf_name_eq(ctx, name, PDF_NAME_DeviceGray)) return fz_device_gray(ctx); - else if (!strcmp(str, "DeviceRGB")) + else if (pdf_name_eq(ctx, name, PDF_NAME_DeviceRGB)) return fz_device_rgb(ctx); - else if (!strcmp(str, "DeviceCMYK")) + else if (pdf_name_eq(ctx, name, PDF_NAME_DeviceCMYK)) return fz_device_cmyk(ctx); - else if (!strcmp(str, "CalGray")) + else if (pdf_name_eq(ctx, name, PDF_NAME_CalGray)) return fz_device_gray(ctx); - else if (!strcmp(str, "CalRGB")) + else if (pdf_name_eq(ctx, name, PDF_NAME_CalRGB)) return fz_device_rgb(ctx); - else if (!strcmp(str, "CalCMYK")) + else if (pdf_name_eq(ctx, name, PDF_NAME_CalCMYK)) return fz_device_cmyk(ctx); - else if (!strcmp(str, "Lab")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Lab)) return fz_device_lab; else { @@ -304,20 +302,20 @@ pdf_load_colorspace_imp(fz_context *ctx, pdf_document *doc, pdf_obj *obj) fz_try(ctx) { pdf_mark_obj(ctx, obj); - if (!strcmp(str, "ICCBased")) + if (pdf_name_eq(ctx, name, PDF_NAME_ICCBased)) cs = load_icc_based(ctx, doc, pdf_array_get(ctx, obj, 1)); - else if (!strcmp(str, "Indexed")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Indexed)) cs = load_indexed(ctx, doc, obj); - else if (!strcmp(str, "I")) + else if (pdf_name_eq(ctx, name, PDF_NAME_I)) cs = load_indexed(ctx, doc, obj); - else if (!strcmp(str, "Separation")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Separation)) cs = load_separation(ctx, doc, obj); - else if (!strcmp(str, "DeviceN")) + else if (pdf_name_eq(ctx, name, PDF_NAME_DeviceN)) cs = load_separation(ctx, doc, obj); - else if (!strcmp(str, "Pattern")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Pattern)) { pdf_obj *pobj; @@ -331,7 +329,7 @@ pdf_load_colorspace_imp(fz_context *ctx, pdf_document *doc, pdf_obj *obj) cs = pdf_load_colorspace(ctx, doc, pobj); } else - fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: unknown colorspace %s", str); + fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: unknown colorspace %s", pdf_to_name(ctx, name)); } fz_always(ctx) { diff --git a/source/pdf/pdf-crypt.c b/source/pdf/pdf-crypt.c index 4519657f..88e485ff 100644 --- a/source/pdf/pdf-crypt.c +++ b/source/pdf/pdf-crypt.c @@ -38,7 +38,7 @@ struct pdf_crypt_s unsigned char key[32]; /* decryption key generated from password */ }; -static void pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, char *name); +static void pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, pdf_obj *name); /* * Create crypt object for decrypting strings and streams @@ -55,20 +55,20 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) /* Common to all security handlers (PDF 1.7 table 3.18) */ - obj = pdf_dict_gets(ctx, dict, "Filter"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Filter); if (!pdf_is_name(ctx, obj)) { pdf_drop_crypt(ctx, crypt); fz_throw(ctx, FZ_ERROR_GENERIC, "unspecified encryption handler"); } - if (strcmp(pdf_to_name(ctx, obj), "Standard") != 0) + if (!pdf_name_eq(ctx, PDF_NAME_Standard, obj) != 0) { pdf_drop_crypt(ctx, crypt); fz_throw(ctx, FZ_ERROR_GENERIC, "unknown encryption handler: '%s'", pdf_to_name(ctx, obj)); } crypt->v = 0; - obj = pdf_dict_gets(ctx, dict, "V"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_V); if (pdf_is_int(ctx, obj)) crypt->v = pdf_to_int(ctx, obj); if (crypt->v != 1 && crypt->v != 2 && crypt->v != 4 && crypt->v != 5) @@ -79,7 +79,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) /* Standard security handler (PDF 1.7 table 3.19) */ - obj = pdf_dict_gets(ctx, dict, "R"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_R); if (pdf_is_int(ctx, obj)) crypt->r = pdf_to_int(ctx, obj); else if (crypt->v <= 4) @@ -104,7 +104,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) fz_throw(ctx, FZ_ERROR_GENERIC, "unknown crypt revision %d", r); } - obj = pdf_dict_gets(ctx, dict, "O"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_O); if (pdf_is_string(ctx, obj) && pdf_to_str_len(ctx, obj) == 32) memcpy(crypt->o, pdf_to_str_buf(ctx, obj), 32); /* /O and /U are supposed to be 48 bytes long for revision 5 and 6, they're often longer, though */ @@ -116,7 +116,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) fz_throw(ctx, FZ_ERROR_GENERIC, "encryption dictionary missing owner password"); } - obj = pdf_dict_gets(ctx, dict, "U"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_U); if (pdf_is_string(ctx, obj) && pdf_to_str_len(ctx, obj) == 32) memcpy(crypt->u, pdf_to_str_buf(ctx, obj), 32); /* /O and /U are supposed to be 48 bytes long for revision 5 and 6, they're often longer, though */ @@ -133,7 +133,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) fz_throw(ctx, FZ_ERROR_GENERIC, "encryption dictionary missing user password"); } - obj = pdf_dict_gets(ctx, dict, "P"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_P); if (pdf_is_int(ctx, obj)) crypt->p = pdf_to_int(ctx, obj); else @@ -144,7 +144,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) if (crypt->r == 5 || crypt->r == 6) { - obj = pdf_dict_gets(ctx, dict, "OE"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_OE); if (!pdf_is_string(ctx, obj) || pdf_to_str_len(ctx, obj) != 32) { pdf_drop_crypt(ctx, crypt); @@ -152,7 +152,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) } memcpy(crypt->oe, pdf_to_str_buf(ctx, obj), 32); - obj = pdf_dict_gets(ctx, dict, "UE"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_UE); if (!pdf_is_string(ctx, obj) || pdf_to_str_len(ctx, obj) != 32) { pdf_drop_crypt(ctx, crypt); @@ -162,7 +162,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) } crypt->encrypt_metadata = 1; - obj = pdf_dict_gets(ctx, dict, "EncryptMetadata"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_EncryptMetadata); if (pdf_is_bool(ctx, obj)) crypt->encrypt_metadata = pdf_to_bool(ctx, obj); @@ -182,7 +182,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) crypt->length = 40; if (crypt->v == 2 || crypt->v == 4) { - obj = pdf_dict_gets(ctx, dict, "Length"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Length); if (pdf_is_int(ctx, obj)) crypt->length = pdf_to_int(ctx, obj); @@ -222,7 +222,7 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) crypt->strf.method = PDF_CRYPT_NONE; crypt->strf.length = crypt->length; - obj = pdf_dict_gets(ctx, dict, "CF"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_CF); if (pdf_is_dict(ctx, obj)) { crypt->cf = pdf_keep_obj(ctx, obj); @@ -234,13 +234,13 @@ pdf_new_crypt(fz_context *ctx, pdf_obj *dict, pdf_obj *id) fz_try(ctx) { - obj = pdf_dict_gets(ctx, dict, "StmF"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_StmF); if (pdf_is_name(ctx, obj)) - pdf_parse_crypt_filter(ctx, &crypt->stmf, crypt, pdf_to_name(ctx, obj)); + pdf_parse_crypt_filter(ctx, &crypt->stmf, crypt, obj); - obj = pdf_dict_gets(ctx, dict, "StrF"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_StrF); if (pdf_is_name(ctx, obj)) - pdf_parse_crypt_filter(ctx, &crypt->strf, crypt, pdf_to_name(ctx, obj)); + pdf_parse_crypt_filter(ctx, &crypt->strf, crypt, obj); } fz_catch(ctx) { @@ -269,12 +269,12 @@ pdf_drop_crypt(fz_context *ctx, pdf_crypt *crypt) */ static void -pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, char *name) +pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, pdf_obj *name) { pdf_obj *obj; pdf_obj *dict; - int is_identity = (strcmp(name, "Identity") == 0); - int is_stdcf = (!is_identity && (strcmp(name, "StdCF") == 0)); + int is_identity = (pdf_name_eq(ctx, name, PDF_NAME_Identity)); + int is_stdcf = (!is_identity && pdf_name_eq(ctx, name, PDF_NAME_StdCF)); if (!is_identity && !is_stdcf) fz_throw(ctx, FZ_ERROR_GENERIC, "Crypt Filter not Identity or StdCF (%d %d R)", pdf_to_num(ctx, crypt->cf), pdf_to_gen(ctx, crypt->cf)); @@ -288,26 +288,26 @@ pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, return; } - dict = pdf_dict_gets(ctx, crypt->cf, name); + dict = pdf_dict_get(ctx, crypt->cf, name); if (!pdf_is_dict(ctx, dict)) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot parse crypt filter (%d %d R)", pdf_to_num(ctx, crypt->cf), pdf_to_gen(ctx, crypt->cf)); - obj = pdf_dict_gets(ctx, dict, "CFM"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_CFM); if (pdf_is_name(ctx, obj)) { - if (!strcmp(pdf_to_name(ctx, obj), "None")) + if (pdf_name_eq(ctx, PDF_NAME_None, obj)) cf->method = PDF_CRYPT_NONE; - else if (!strcmp(pdf_to_name(ctx, obj), "V2")) + else if (pdf_name_eq(ctx, PDF_NAME_V2, obj)) cf->method = PDF_CRYPT_RC4; - else if (!strcmp(pdf_to_name(ctx, obj), "AESV2")) + else if (pdf_name_eq(ctx, PDF_NAME_AESV2, obj)) cf->method = PDF_CRYPT_AESV2; - else if (!strcmp(pdf_to_name(ctx, obj), "AESV3")) + else if (pdf_name_eq(ctx, PDF_NAME_AESV3, obj)) cf->method = PDF_CRYPT_AESV3; else fz_warn(ctx, "unknown encryption method: %s", pdf_to_name(ctx, obj)); } - obj = pdf_dict_gets(ctx, dict, "Length"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Length); if (pdf_is_int(ctx, obj)) cf->length = pdf_to_int(ctx, obj); @@ -977,9 +977,9 @@ pdf_open_crypt(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, int num, int } fz_stream * -pdf_open_crypt_with_filter(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, char *name, int num, int gen) +pdf_open_crypt_with_filter(fz_context *ctx, fz_stream *chain, pdf_crypt *crypt, pdf_obj *name, int num, int gen) { - if (strcmp(name, "Identity")) + if (!pdf_name_eq(ctx, name, PDF_NAME_Identity)) { pdf_crypt_filter cf; pdf_parse_crypt_filter(ctx, &cf, crypt, name); diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c index be477942..553810f6 100644 --- a/source/pdf/pdf-device.c +++ b/source/pdf/pdf-device.c @@ -200,20 +200,20 @@ send_image(fz_context *ctx, pdf_device *pdev, fz_image *image, int mask, int sma pdev->images[num].ref = NULL; /* Will be filled in later */ imobj = pdf_new_dict(ctx, doc, 3); - pdf_dict_puts_drop(ctx, imobj, "Type", pdf_new_name(ctx, doc, "XObject")); - pdf_dict_puts_drop(ctx, imobj, "Subtype", pdf_new_name(ctx, doc, "Image")); - pdf_dict_puts_drop(ctx, imobj, "Width", pdf_new_int(ctx, doc, image->w)); - pdf_dict_puts_drop(ctx, imobj, "Height", pdf_new_int(ctx, doc, image->h)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Type, PDF_NAME_XObject); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Subtype, PDF_NAME_Image); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Width, pdf_new_int(ctx, doc, image->w)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Height, pdf_new_int(ctx, doc, image->h)); if (mask) {} else if (!colorspace || colorspace->n == 1) - pdf_dict_puts_drop(ctx, imobj, "ColorSpace", pdf_new_name(ctx, doc, "DeviceGray")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_ColorSpace, PDF_NAME_DeviceGray); else if (colorspace->n == 3) - pdf_dict_puts_drop(ctx, imobj, "ColorSpace", pdf_new_name(ctx, doc, "DeviceRGB")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_ColorSpace, PDF_NAME_DeviceRGB); else if (colorspace->n == 4) - pdf_dict_puts_drop(ctx, imobj, "ColorSpace", pdf_new_name(ctx, doc, "DeviceCMYK")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_ColorSpace, PDF_NAME_DeviceCMYK); if (!mask) - pdf_dict_puts_drop(ctx, imobj, "BitsPerComponent", pdf_new_int(ctx, doc, image->bpc)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_BitsPerComponent, pdf_new_int(ctx, doc, image->bpc)); switch (cp ? cp->type : FZ_IMAGE_UNKNOWN) { case FZ_IMAGE_UNKNOWN: /* Unknown also means raw */ @@ -221,32 +221,32 @@ send_image(fz_context *ctx, pdf_device *pdev, fz_image *image, int mask, int sma break; case FZ_IMAGE_JPEG: if (cp->u.jpeg.color_transform != -1) - pdf_dict_puts_drop(ctx, imobj, "ColorTransform", pdf_new_int(ctx, doc, cp->u.jpeg.color_transform)); - pdf_dict_puts_drop(ctx, imobj, "Filter", pdf_new_name(ctx, doc, "DCTDecode")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_ColorTransform, pdf_new_int(ctx, doc, cp->u.jpeg.color_transform)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Filter, PDF_NAME_DCTDecode); break; case FZ_IMAGE_JPX: if (cp->u.jpx.smask_in_data) - pdf_dict_puts_drop(ctx, imobj, "SMaskInData", pdf_new_int(ctx, doc, cp->u.jpx.smask_in_data)); - pdf_dict_puts_drop(ctx, imobj, "Filter", pdf_new_name(ctx, doc, "JPXDecode")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_SMaskInData, pdf_new_int(ctx, doc, cp->u.jpx.smask_in_data)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Filter, PDF_NAME_JPXDecode); break; case FZ_IMAGE_FAX: if (cp->u.fax.columns) - pdf_dict_puts_drop(ctx, imobj, "Columns", pdf_new_int(ctx, doc, cp->u.fax.columns)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Columns, pdf_new_int(ctx, doc, cp->u.fax.columns)); if (cp->u.fax.rows) - pdf_dict_puts_drop(ctx, imobj, "Rows", pdf_new_int(ctx, doc, cp->u.fax.rows)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Rows, pdf_new_int(ctx, doc, cp->u.fax.rows)); if (cp->u.fax.k) - pdf_dict_puts_drop(ctx, imobj, "K", pdf_new_int(ctx, doc, cp->u.fax.k)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_K, pdf_new_int(ctx, doc, cp->u.fax.k)); if (cp->u.fax.end_of_line) - pdf_dict_puts_drop(ctx, imobj, "EndOfLine", pdf_new_int(ctx, doc, cp->u.fax.end_of_line)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_EndOfLine, pdf_new_int(ctx, doc, cp->u.fax.end_of_line)); if (cp->u.fax.encoded_byte_align) - pdf_dict_puts_drop(ctx, imobj, "EncodedByteAlign", pdf_new_int(ctx, doc, cp->u.fax.encoded_byte_align)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_EncodedByteAlign, pdf_new_int(ctx, doc, cp->u.fax.encoded_byte_align)); if (cp->u.fax.end_of_block) - pdf_dict_puts_drop(ctx, imobj, "EndOfBlock", pdf_new_int(ctx, doc, cp->u.fax.end_of_block)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_EndOfBlock, pdf_new_int(ctx, doc, cp->u.fax.end_of_block)); if (cp->u.fax.black_is_1) - pdf_dict_puts_drop(ctx, imobj, "BlackIs1", pdf_new_int(ctx, doc, cp->u.fax.black_is_1)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_BlackIs1, pdf_new_int(ctx, doc, cp->u.fax.black_is_1)); if (cp->u.fax.damaged_rows_before_error) - pdf_dict_puts_drop(ctx, imobj, "DamagedRowsBeforeError", pdf_new_int(ctx, doc, cp->u.fax.damaged_rows_before_error)); - pdf_dict_puts_drop(ctx, imobj, "Filter", pdf_new_name(ctx, doc, "CCITTFaxDecode")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_DamagedRowsBeforeError, pdf_new_int(ctx, doc, cp->u.fax.damaged_rows_before_error)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Filter, PDF_NAME_CCITTFaxDecode); break; case FZ_IMAGE_JBIG2: /* FIXME - jbig2globals */ @@ -254,37 +254,37 @@ send_image(fz_context *ctx, pdf_device *pdev, fz_image *image, int mask, int sma break; case FZ_IMAGE_FLATE: if (cp->u.flate.columns) - pdf_dict_puts_drop(ctx, imobj, "Columns", pdf_new_int(ctx, doc, cp->u.flate.columns)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Columns, pdf_new_int(ctx, doc, cp->u.flate.columns)); if (cp->u.flate.colors) - pdf_dict_puts_drop(ctx, imobj, "Colors", pdf_new_int(ctx, doc, cp->u.flate.colors)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Colors, pdf_new_int(ctx, doc, cp->u.flate.colors)); if (cp->u.flate.predictor) - pdf_dict_puts_drop(ctx, imobj, "Predictor", pdf_new_int(ctx, doc, cp->u.flate.predictor)); - pdf_dict_puts_drop(ctx, imobj, "Filter", pdf_new_name(ctx, doc, "FlateDecode")); - pdf_dict_puts_drop(ctx, imobj, "BitsPerComponent", pdf_new_int(ctx, doc, image->bpc)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Predictor, pdf_new_int(ctx, doc, cp->u.flate.predictor)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Filter, PDF_NAME_FlateDecode); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_BitsPerComponent, pdf_new_int(ctx, doc, image->bpc)); break; case FZ_IMAGE_LZW: if (cp->u.lzw.columns) - pdf_dict_puts_drop(ctx, imobj, "Columns", pdf_new_int(ctx, doc, cp->u.lzw.columns)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Columns, pdf_new_int(ctx, doc, cp->u.lzw.columns)); if (cp->u.lzw.colors) - pdf_dict_puts_drop(ctx, imobj, "Colors", pdf_new_int(ctx, doc, cp->u.lzw.colors)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Colors, pdf_new_int(ctx, doc, cp->u.lzw.colors)); if (cp->u.lzw.predictor) - pdf_dict_puts_drop(ctx, imobj, "Predictor", pdf_new_int(ctx, doc, cp->u.lzw.predictor)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Predictor, pdf_new_int(ctx, doc, cp->u.lzw.predictor)); if (cp->u.lzw.early_change) - pdf_dict_puts_drop(ctx, imobj, "EarlyChange", pdf_new_int(ctx, doc, cp->u.lzw.early_change)); - pdf_dict_puts_drop(ctx, imobj, "Filter", pdf_new_name(ctx, doc, "LZWDecode")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_EarlyChange, pdf_new_int(ctx, doc, cp->u.lzw.early_change)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Filter, PDF_NAME_LZWDecode); break; case FZ_IMAGE_RLD: - pdf_dict_puts_drop(ctx, imobj, "Filter", pdf_new_name(ctx, doc, "RunLengthDecode")); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_Filter, PDF_NAME_RunLengthDecode); break; } if (mask) { - pdf_dict_puts_drop(ctx, imobj, "ImageMask", pdf_new_bool(ctx, doc, 1)); + pdf_dict_put_drop(ctx, imobj, PDF_NAME_ImageMask, pdf_new_bool(ctx, doc, 1)); } if (image->mask) { int smasknum = send_image(ctx, pdev, image->mask, 0, 1); - pdf_dict_puts(ctx, imobj, "SMask", pdev->images[smasknum].ref); + pdf_dict_put(ctx, imobj, PDF_NAME_SMask, pdev->images[smasknum].ref); } imref = pdf_new_ref(ctx, doc, imobj); @@ -514,7 +514,7 @@ pdf_dev_alpha(fz_context *ctx, pdf_device *pdev, float alpha, int stroke) fz_try(ctx) { char text[32]; - pdf_dict_puts_drop(ctx, o, (stroke ? "CA" : "ca"), pdf_new_real(ctx, doc, alpha)); + pdf_dict_put_drop(ctx, o, (stroke ? PDF_NAME_CA : PDF_NAME_ca), pdf_new_real(ctx, doc, alpha)); ref = pdf_new_ref(ctx, doc, o); snprintf(text, sizeof(text), "ExtGState/Alp%d", i); pdf_dict_putp(ctx, pdev->resources, text, ref); @@ -574,10 +574,10 @@ pdf_dev_font(fz_context *ctx, pdf_device *pdev, fz_font *font, float size) fz_try(ctx) { char text[32]; - pdf_dict_puts_drop(ctx, o, "Type", pdf_new_name(ctx, doc, "Font")); - pdf_dict_puts_drop(ctx, o, "Subtype", pdf_new_name(ctx, doc, "Type1")); - pdf_dict_puts_drop(ctx, o, "BaseFont", pdf_new_name(ctx, doc, font->name)); - pdf_dict_puts_drop(ctx, o, "Encoding", pdf_new_name(ctx, doc, "WinAnsiEncoding")); + pdf_dict_put_drop(ctx, o, PDF_NAME_Type, PDF_NAME_Font); + pdf_dict_put_drop(ctx, o, PDF_NAME_Subtype, PDF_NAME_Type1); + pdf_dict_put_drop(ctx, o, PDF_NAME_BaseFont, pdf_new_name(ctx, doc, font->name)); + pdf_dict_put_drop(ctx, o, PDF_NAME_Encoding, PDF_NAME_WinAnsiEncoding); ref = pdf_new_ref(ctx, doc, o); snprintf(text, sizeof(text), "Font/F%d", i); pdf_dict_putp(ctx, pdev->resources, text, ref); @@ -800,18 +800,18 @@ pdf_dev_new_form(fz_context *ctx, pdf_obj **form_ref, pdf_device *pdev, const fz group = pdf_new_dict(ctx, doc, 5); fz_try(ctx) { - pdf_dict_puts_drop(ctx, group, "Type", pdf_new_name(ctx, doc, "Group")); - pdf_dict_puts_drop(ctx, group, "S", pdf_new_name(ctx, doc, "Transparency")); - pdf_dict_puts_drop(ctx, group, "K", pdf_new_bool(ctx, doc, knockout)); - pdf_dict_puts_drop(ctx, group, "I", pdf_new_bool(ctx, doc, isolated)); + pdf_dict_put_drop(ctx, group, PDF_NAME_Type, PDF_NAME_Group); + pdf_dict_put_drop(ctx, group, PDF_NAME_S, PDF_NAME_Transparency); + pdf_dict_put_drop(ctx, group, PDF_NAME_K, pdf_new_bool(ctx, doc, knockout)); + pdf_dict_put_drop(ctx, group, PDF_NAME_I, pdf_new_bool(ctx, doc, isolated)); if (!colorspace) {} else if (colorspace->n == 1) - pdf_dict_puts_drop(ctx, group, "CS", pdf_new_name(ctx, doc, "DeviceGray")); + pdf_dict_put_drop(ctx, group, PDF_NAME_CS, PDF_NAME_DeviceGray); else if (colorspace->n == 4) - pdf_dict_puts_drop(ctx, group, "CS", pdf_new_name(ctx, doc, "DeviceCMYK")); + pdf_dict_put_drop(ctx, group, PDF_NAME_CS, PDF_NAME_DeviceCMYK); else - pdf_dict_puts_drop(ctx, group, "CS", pdf_new_name(ctx, doc, "DeviceRGB")); + pdf_dict_put_drop(ctx, group, PDF_NAME_CS, PDF_NAME_DeviceRGB); group_ref = pdev->groups[num].ref = pdf_new_ref(ctx, doc, group); } fz_always(ctx) @@ -829,10 +829,10 @@ pdf_dev_new_form(fz_context *ctx, pdf_obj **form_ref, pdf_device *pdev, const fz form = pdf_new_dict(ctx, doc, 4); fz_try(ctx) { - pdf_dict_puts_drop(ctx, form, "Subtype", pdf_new_name(ctx, doc, "Form")); - pdf_dict_puts(ctx, form, "Group", group_ref); - pdf_dict_puts_drop(ctx, form, "FormType", pdf_new_int(ctx, doc, 1)); - pdf_dict_puts_drop(ctx, form, "BBox", pdf_new_rect(ctx, doc, bbox)); + pdf_dict_put_drop(ctx, form, PDF_NAME_Subtype, PDF_NAME_Form); + pdf_dict_put(ctx, form, PDF_NAME_Group, group_ref); + pdf_dict_put_drop(ctx, form, PDF_NAME_FormType, pdf_new_int(ctx, doc, 1)); + pdf_dict_put_drop(ctx, form, PDF_NAME_BBox, pdf_new_rect(ctx, doc, bbox)); *form_ref = pdf_new_ref(ctx, doc, form); } fz_catch(ctx) @@ -1091,18 +1091,18 @@ pdf_dev_begin_mask(fz_context *ctx, fz_device *dev, const fz_rect *bbox, int lum fz_try(ctx) { smask = pdf_new_dict(ctx, doc, 4); - pdf_dict_puts_drop(ctx, smask, "Type", pdf_new_name(ctx, doc, "Mask")); - pdf_dict_puts_drop(ctx, smask, "S", pdf_new_name(ctx, doc, (luminosity ? "Luminosity" : "Alpha"))); - pdf_dict_puts(ctx, smask, "G", form_ref); + pdf_dict_put_drop(ctx, smask, PDF_NAME_Type, PDF_NAME_Mask); + pdf_dict_put_drop(ctx, smask, PDF_NAME_S, (luminosity ? PDF_NAME_Luminosity : PDF_NAME_Alpha)); + pdf_dict_put(ctx, smask, PDF_NAME_G, form_ref); color_obj = pdf_new_array(ctx, doc, colorspace->n); for (i = 0; i < colorspace->n; i++) pdf_array_push(ctx, color_obj, pdf_new_real(ctx, doc, color[i])); - pdf_dict_puts_drop(ctx, smask, "BC", color_obj); + pdf_dict_put_drop(ctx, smask, PDF_NAME_BC, color_obj); color_obj = NULL; egs = pdf_new_dict(ctx, doc, 5); - pdf_dict_puts_drop(ctx, egs, "Type", pdf_new_name(ctx, doc, "ExtGState")); - pdf_dict_puts_drop(ctx, egs, "SMask", pdf_new_ref(ctx, doc, smask)); + pdf_dict_put_drop(ctx, egs, PDF_NAME_Type, PDF_NAME_ExtGState); + pdf_dict_put_drop(ctx, egs, PDF_NAME_SMask, pdf_new_ref(ctx, doc, smask)); egs_ref = pdf_new_ref(ctx, doc, egs); { @@ -1173,8 +1173,8 @@ pdf_dev_begin_group(fz_context *ctx, fz_device *dev, const fz_rect *bbox, int is { /* No, better make one */ obj = pdf_new_dict(ctx, doc, 2); - pdf_dict_puts_drop(ctx, obj, "Type", pdf_new_name(ctx, doc, "ExtGState")); - pdf_dict_puts_drop(ctx, obj, "BM", pdf_new_name(ctx, doc, fz_blendmode_name(blendmode))); + pdf_dict_put_drop(ctx, obj, PDF_NAME_Type, PDF_NAME_ExtGState); + pdf_dict_put_drop(ctx, obj, PDF_NAME_BM, pdf_new_name(ctx, doc, fz_blendmode_name(blendmode))); pdf_dict_putp_drop(ctx, pdev->resources, text, obj); } } @@ -1332,14 +1332,14 @@ fz_device *pdf_new_pdf_device(fz_context *ctx, pdf_document *doc, pdf_obj *conte fz_device *pdf_page_write(fz_context *ctx, pdf_document *doc, pdf_page *page) { - pdf_obj *resources = pdf_dict_gets(ctx, page->me, "Resources"); + pdf_obj *resources = pdf_dict_get(ctx, page->me, PDF_NAME_Resources); fz_matrix ctm; fz_pre_translate(fz_scale(&ctm, 1, -1), 0, page->mediabox.y0-page->mediabox.y1); if (resources == NULL) { resources = pdf_new_dict(ctx, doc, 0); - pdf_dict_puts_drop(ctx, page->me, "Resources", resources); + pdf_dict_put_drop(ctx, page->me, PDF_NAME_Resources, resources); } if (page->contents == NULL) @@ -1348,7 +1348,7 @@ fz_device *pdf_page_write(fz_context *ctx, pdf_document *doc, pdf_page *page) fz_try(ctx) { page->contents = pdf_new_ref(ctx, doc, obj); - pdf_dict_puts(ctx, page->me, "Contents", page->contents); + pdf_dict_put(ctx, page->me, PDF_NAME_Contents, page->contents); } fz_always(ctx) { diff --git a/source/pdf/pdf-field.c b/source/pdf/pdf-field.c index 5105125a..0571c6cc 100644 --- a/source/pdf/pdf-field.c +++ b/source/pdf/pdf-field.c @@ -1,18 +1,18 @@ #include "mupdf/pdf.h" -pdf_obj *pdf_get_inheritable(fz_context *ctx, pdf_document *doc, pdf_obj *obj, char *key) +pdf_obj *pdf_get_inheritable(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *key) { pdf_obj *fobj = NULL; while (!fobj && obj) { - fobj = pdf_dict_gets(ctx, obj, key); + fobj = pdf_dict_get(ctx, obj, key); if (!fobj) - obj = pdf_dict_gets(ctx, obj, "Parent"); + obj = pdf_dict_get(ctx, obj, PDF_NAME_Parent); } - return fobj ? fobj : pdf_dict_gets(ctx, pdf_dict_gets(ctx, pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"), "AcroForm"), key); + return fobj ? fobj : pdf_dict_get(ctx, pdf_dict_get(ctx, pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root), PDF_NAME_AcroForm), key); } char *pdf_get_string_or_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj) @@ -59,25 +59,25 @@ char *pdf_get_string_or_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj) char *pdf_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *field) { - return pdf_get_string_or_stream(ctx, doc, pdf_get_inheritable(ctx, doc, field, "V")); + return pdf_get_string_or_stream(ctx, doc, pdf_get_inheritable(ctx, doc, field, PDF_NAME_V)); } int pdf_get_field_flags(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - return pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, obj, "Ff")); + return pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, obj, PDF_NAME_Ff)); } -static char *get_field_type_name(fz_context *ctx, pdf_document *doc, pdf_obj *obj) +static pdf_obj *get_field_type_name(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - return pdf_to_name(ctx, pdf_get_inheritable(ctx, doc, obj, "FT")); + return pdf_get_inheritable(ctx, doc, obj, PDF_NAME_FT); } int pdf_field_type(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - char *type = get_field_type_name(ctx, doc, obj); + pdf_obj *type = get_field_type_name(ctx, doc, obj); int flags = pdf_get_field_flags(ctx, doc, obj); - if (!strcmp(type, "Btn")) + if (pdf_name_eq(ctx, type, PDF_NAME_Btn)) { if (flags & Ff_Pushbutton) return PDF_WIDGET_TYPE_PUSHBUTTON; @@ -86,16 +86,16 @@ int pdf_field_type(fz_context *ctx, pdf_document *doc, pdf_obj *obj) else return PDF_WIDGET_TYPE_CHECKBOX; } - else if (!strcmp(type, "Tx")) + else if (pdf_name_eq(ctx, type, PDF_NAME_Tx)) return PDF_WIDGET_TYPE_TEXT; - else if (!strcmp(type, "Ch")) + else if (pdf_name_eq(ctx, type, PDF_NAME_Ch)) { if (flags & Ff_Combo) return PDF_WIDGET_TYPE_COMBOBOX; else return PDF_WIDGET_TYPE_LISTBOX; } - else if (!strcmp(type, "Sig")) + else if (pdf_name_eq(ctx, type, PDF_NAME_Sig)) return PDF_WIDGET_TYPE_SIGNATURE; else return PDF_WIDGET_TYPE_NOT_WIDGET; @@ -105,47 +105,47 @@ void pdf_set_field_type(fz_context *ctx, pdf_document *doc, pdf_obj *obj, int ty { int setbits = 0; int clearbits = 0; - char *typename = NULL; + pdf_obj *typename = NULL; switch(type) { case PDF_WIDGET_TYPE_PUSHBUTTON: - typename = "Btn"; + typename = PDF_NAME_Btn; setbits = Ff_Pushbutton; break; case PDF_WIDGET_TYPE_CHECKBOX: - typename = "Btn"; + typename = PDF_NAME_Btn; clearbits = Ff_Pushbutton; setbits = Ff_Radio; break; case PDF_WIDGET_TYPE_RADIOBUTTON: - typename = "Btn"; + typename = PDF_NAME_Btn; clearbits = (Ff_Pushbutton|Ff_Radio); break; case PDF_WIDGET_TYPE_TEXT: - typename = "Tx"; + typename = PDF_NAME_Tx; break; case PDF_WIDGET_TYPE_LISTBOX: - typename = "Ch"; + typename = PDF_NAME_Ch; clearbits = Ff_Combo; break; case PDF_WIDGET_TYPE_COMBOBOX: - typename = "Ch"; + typename = PDF_NAME_Ch; setbits = Ff_Combo; break; case PDF_WIDGET_TYPE_SIGNATURE: - typename = "Sig"; + typename = PDF_NAME_Sig; break; } if (typename) - pdf_dict_puts_drop(ctx, obj, "FT", pdf_new_name(ctx, doc, typename)); + pdf_dict_put_drop(ctx, obj, PDF_NAME_FT, typename); if (setbits != 0 || clearbits != 0) { - int bits = pdf_to_int(ctx, pdf_dict_gets(ctx, obj, "Ff")); + int bits = pdf_to_int(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Ff)); bits &= ~clearbits; bits |= setbits; - pdf_dict_puts_drop(ctx, obj, "Ff", pdf_new_int(ctx, doc, bits)); + pdf_dict_put_drop(ctx, obj, PDF_NAME_Ff, pdf_new_int(ctx, doc, bits)); } } diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c index 5e3f1e19..35e61f93 100644 --- a/source/pdf/pdf-font.c +++ b/source/pdf/pdf-font.c @@ -419,7 +419,7 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *widths; unsigned short *etable = NULL; pdf_font_desc *fontdesc = NULL; - char *subtype; + pdf_obj *subtype; FT_Face face; FT_CharMap cmap; int symbolic; @@ -440,17 +440,17 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, { fontdesc = pdf_new_font_desc(ctx); - descriptor = pdf_dict_gets(ctx, dict, "FontDescriptor"); + descriptor = pdf_dict_get(ctx, dict, PDF_NAME_FontDescriptor); if (descriptor) pdf_load_font_descriptor(ctx, doc, fontdesc, descriptor, NULL, basefont, 0); else pdf_load_builtin_font(ctx, fontdesc, basefont, 0); /* Some chinese documents mistakenly consider WinAnsiEncoding to be codepage 936 */ - if (descriptor && pdf_is_string(ctx, pdf_dict_gets(ctx, descriptor, "FontName")) && - !pdf_dict_gets(ctx, dict, "ToUnicode") && - !strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "Encoding")), "WinAnsiEncoding") && - pdf_to_int(ctx, pdf_dict_gets(ctx, descriptor, "Flags")) == 4) + if (descriptor && pdf_is_string(ctx, pdf_dict_get(ctx, descriptor, PDF_NAME_FontName)) && + !pdf_dict_get(ctx, dict, PDF_NAME_ToUnicode) && + pdf_name_eq(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Encoding), PDF_NAME_WinAnsiEncoding) && + pdf_to_int(ctx, pdf_dict_get(ctx, descriptor, PDF_NAME_Flags)) == 4) { char *cp936fonts[] = { "\xCB\xCE\xCC\xE5", "SimSun,Regular", @@ -530,7 +530,7 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, etable[i] = 0; } - encoding = pdf_dict_gets(ctx, dict, "Encoding"); + encoding = pdf_dict_get(ctx, dict, PDF_NAME_Encoding); if (encoding) { if (pdf_is_name(ctx, encoding)) @@ -540,13 +540,13 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, { pdf_obj *base, *diff, *item; - base = pdf_dict_gets(ctx, encoding, "BaseEncoding"); + base = pdf_dict_get(ctx, encoding, PDF_NAME_BaseEncoding); if (pdf_is_name(ctx, base)) pdf_load_encoding(estrings, pdf_to_name(ctx, base)); else if (!fontdesc->is_embedded && !symbolic) pdf_load_encoding(estrings, "StandardEncoding"); - diff = pdf_dict_gets(ctx, encoding, "Differences"); + diff = pdf_dict_get(ctx, encoding, PDF_NAME_Differences); if (pdf_is_array(ctx, diff)) { n = pdf_array_len(ctx, diff); @@ -573,16 +573,16 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, has_lock = 1; /* built-in and substitute fonts may be a different type than what the document expects */ - subtype = pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "Subtype")); - if (!strcmp(subtype, "Type1")) + subtype = pdf_dict_get(ctx, dict, PDF_NAME_Subtype); + if (pdf_name_eq(ctx, subtype, PDF_NAME_Type1)) kind = TYPE1; - else if (!strcmp(subtype, "MMType1")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_MMType1)) kind = TYPE1; - else if (!strcmp(subtype, "TrueType")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_TrueType)) kind = TRUETYPE; - else if (!strcmp(subtype, "CIDFontType0")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_CIDFontType0)) kind = TYPE1; - else if (!strcmp(subtype, "CIDFontType2")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_CIDFontType2)) kind = TRUETYPE; /* encode by glyph name where we can */ @@ -703,7 +703,7 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, fz_try(ctx) { - pdf_load_to_unicode(ctx, doc, fontdesc, estrings, NULL, pdf_dict_gets(ctx, dict, "ToUnicode")); + pdf_load_to_unicode(ctx, doc, fontdesc, estrings, NULL, pdf_dict_get(ctx, dict, PDF_NAME_ToUnicode)); } fz_catch(ctx) { @@ -717,13 +717,13 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_set_default_hmtx(ctx, fontdesc, fontdesc->missing_width); - widths = pdf_dict_gets(ctx, dict, "Widths"); + widths = pdf_dict_get(ctx, dict, PDF_NAME_Widths); if (widths) { int first, last; - first = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "FirstChar")); - last = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "LastChar")); + first = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_FirstChar)); + last = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_LastChar)); if (first < 0 || last > 255 || first > last) first = last = 0; @@ -766,7 +766,7 @@ pdf_load_simple_font_by_name(fz_context *ctx, pdf_document *doc, pdf_obj *dict, static pdf_font_desc * pdf_load_simple_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { - char *basefont = pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "BaseFont")); + char *basefont = pdf_to_name(ctx, pdf_dict_get(ctx, dict, PDF_NAME_BaseFont)); return pdf_load_simple_font_by_name(ctx, doc, dict, basefont); } @@ -861,18 +861,18 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi { /* Get font name and CID collection */ - basefont = pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "BaseFont")); + basefont = pdf_to_name(ctx, pdf_dict_get(ctx, dict, PDF_NAME_BaseFont)); { pdf_obj *cidinfo; char tmpstr[64]; int tmplen; - cidinfo = pdf_dict_gets(ctx, dict, "CIDSystemInfo"); + cidinfo = pdf_dict_get(ctx, dict, PDF_NAME_CIDSystemInfo); if (!cidinfo) fz_throw(ctx, FZ_ERROR_GENERIC, "cid font is missing info"); - obj = pdf_dict_gets(ctx, cidinfo, "Registry"); + obj = pdf_dict_get(ctx, cidinfo, PDF_NAME_Registry); tmplen = fz_mini(sizeof tmpstr - 1, pdf_to_str_len(ctx, obj)); memcpy(tmpstr, pdf_to_str_buf(ctx, obj), tmplen); tmpstr[tmplen] = '\0'; @@ -880,7 +880,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi fz_strlcat(collection, "-", sizeof collection); - obj = pdf_dict_gets(ctx, cidinfo, "Ordering"); + obj = pdf_dict_get(ctx, cidinfo, PDF_NAME_Ordering); tmplen = fz_mini(sizeof tmpstr - 1, pdf_to_str_len(ctx, obj)); memcpy(tmpstr, pdf_to_str_buf(ctx, obj), tmplen); tmpstr[tmplen] = '\0'; @@ -891,9 +891,9 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi if (pdf_is_name(ctx, encoding)) { - if (!strcmp(pdf_to_name(ctx, encoding), "Identity-H")) + if (pdf_name_eq(ctx, encoding, PDF_NAME_Identity_H)) cmap = pdf_new_identity_cmap(ctx, 0, 2); - else if (!strcmp(pdf_to_name(ctx, encoding), "Identity-V")) + else if (pdf_name_eq(ctx, encoding, PDF_NAME_Identity_V)) cmap = pdf_new_identity_cmap(ctx, 1, 2); else cmap = pdf_load_system_cmap(ctx, pdf_to_name(ctx, encoding)); @@ -916,7 +916,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi pdf_set_font_wmode(ctx, fontdesc, pdf_cmap_wmode(ctx, fontdesc->encoding)); - descriptor = pdf_dict_gets(ctx, dict, "FontDescriptor"); + descriptor = pdf_dict_get(ctx, dict, PDF_NAME_FontDescriptor); if (!descriptor) fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: missing font descriptor"); pdf_load_font_descriptor(ctx, doc, fontdesc, descriptor, collection, basefont, 1); @@ -925,7 +925,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi /* Apply encoding */ - cidtogidmap = pdf_dict_gets(ctx, dict, "CIDToGIDMap"); + cidtogidmap = pdf_dict_get(ctx, dict, PDF_NAME_CIDToGIDMap); if (pdf_is_indirect(ctx, cidtogidmap)) { fz_buffer *buf; @@ -980,12 +980,12 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi /* Horizontal */ dw = 1000; - obj = pdf_dict_gets(ctx, dict, "DW"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_DW); if (obj) dw = pdf_to_int(ctx, obj); pdf_set_default_hmtx(ctx, fontdesc, dw); - widths = pdf_dict_gets(ctx, dict, "W"); + widths = pdf_dict_get(ctx, dict, PDF_NAME_W); if (widths) { int c0, c1, w, n, m; @@ -1024,7 +1024,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi int dw2y = 880; int dw2w = -1000; - obj = pdf_dict_gets(ctx, dict, "DW2"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_DW2); if (obj) { dw2y = pdf_to_int(ctx, pdf_array_get(ctx, obj, 0)); @@ -1033,7 +1033,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi pdf_set_default_vmtx(ctx, fontdesc, dw2y, dw2w); - widths = pdf_dict_gets(ctx, dict, "W2"); + widths = pdf_dict_get(ctx, dict, PDF_NAME_W2); if (widths) { int c0, c1, w, x, y, n; @@ -1088,19 +1088,19 @@ pdf_load_type0_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict) pdf_obj *encoding; pdf_obj *to_unicode; - dfonts = pdf_dict_gets(ctx, dict, "DescendantFonts"); + dfonts = pdf_dict_get(ctx, dict, PDF_NAME_DescendantFonts); if (!dfonts) fz_throw(ctx, FZ_ERROR_GENERIC, "cid font is missing descendant fonts"); dfont = pdf_array_get(ctx, dfonts, 0); - subtype = pdf_dict_gets(ctx, dfont, "Subtype"); - encoding = pdf_dict_gets(ctx, dict, "Encoding"); - to_unicode = pdf_dict_gets(ctx, dict, "ToUnicode"); + subtype = pdf_dict_get(ctx, dfont, PDF_NAME_Subtype); + encoding = pdf_dict_get(ctx, dict, PDF_NAME_Encoding); + to_unicode = pdf_dict_get(ctx, dict, PDF_NAME_ToUnicode); - if (pdf_is_name(ctx, subtype) && !strcmp(pdf_to_name(ctx, subtype), "CIDFontType0")) + if (pdf_is_name(ctx, subtype) && pdf_name_eq(ctx, subtype, PDF_NAME_CIDFontType0)) return load_cid_font(ctx, doc, dfont, encoding, to_unicode); - if (pdf_is_name(ctx, subtype) && !strcmp(pdf_to_name(ctx, subtype), "CIDFontType2")) + if (pdf_is_name(ctx, subtype) && pdf_name_eq(ctx, subtype, PDF_NAME_CIDFontType2)) return load_cid_font(ctx, doc, dfont, encoding, to_unicode); fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: unknown cid font type"); } @@ -1119,17 +1119,17 @@ pdf_load_font_descriptor(fz_context *ctx, pdf_document *doc, pdf_font_desc *font /* Prefer BaseFont; don't bother with FontName */ fontname = basefont; - fontdesc->flags = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "Flags")); - fontdesc->italic_angle = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "ItalicAngle")); - fontdesc->ascent = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "Ascent")); - fontdesc->descent = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "Descent")); - fontdesc->cap_height = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "CapHeight")); - fontdesc->x_height = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "XHeight")); - fontdesc->missing_width = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "MissingWidth")); - - obj1 = pdf_dict_gets(ctx, dict, "FontFile"); - obj2 = pdf_dict_gets(ctx, dict, "FontFile2"); - obj3 = pdf_dict_gets(ctx, dict, "FontFile3"); + fontdesc->flags = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Flags)); + fontdesc->italic_angle = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_ItalicAngle)); + fontdesc->ascent = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Ascent)); + fontdesc->descent = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Descent)); + fontdesc->cap_height = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_CapHeight)); + fontdesc->x_height = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_XHeight)); + fontdesc->missing_width = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_MissingWidth)); + + obj1 = pdf_dict_get(ctx, dict, PDF_NAME_FontFile); + obj2 = pdf_dict_get(ctx, dict, PDF_NAME_FontFile2); + obj3 = pdf_dict_get(ctx, dict, PDF_NAME_FontFile3); obj = obj1 ? obj1 : obj2 ? obj2 : obj3; if (pdf_is_indirect(ctx, obj)) @@ -1209,7 +1209,7 @@ pdf_make_width_table(fz_context *ctx, pdf_font_desc *fontdesc) pdf_font_desc * pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, int nested_depth) { - char *subtype; + pdf_obj *subtype; pdf_obj *dfonts; pdf_obj *charprocs; pdf_font_desc *fontdesc; @@ -1220,19 +1220,19 @@ pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, i return fontdesc; } - subtype = pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "Subtype")); - dfonts = pdf_dict_gets(ctx, dict, "DescendantFonts"); - charprocs = pdf_dict_gets(ctx, dict, "CharProcs"); + subtype = pdf_dict_get(ctx, dict, PDF_NAME_Subtype); + dfonts = pdf_dict_get(ctx, dict, PDF_NAME_DescendantFonts); + charprocs = pdf_dict_get(ctx, dict, PDF_NAME_CharProcs); - if (subtype && !strcmp(subtype, "Type0")) + if (pdf_name_eq(ctx, subtype, PDF_NAME_Type0)) fontdesc = pdf_load_type0_font(ctx, doc, dict); - else if (subtype && !strcmp(subtype, "Type1")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_Type1)) fontdesc = pdf_load_simple_font(ctx, doc, dict); - else if (subtype && !strcmp(subtype, "MMType1")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_MMType1)) fontdesc = pdf_load_simple_font(ctx, doc, dict); - else if (subtype && !strcmp(subtype, "TrueType")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_TrueType)) fontdesc = pdf_load_simple_font(ctx, doc, dict); - else if (subtype && !strcmp(subtype, "Type3")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_Type3)) { fontdesc = pdf_load_type3_font(ctx, doc, rdb, dict); type3 = 1; diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c index 4caadd25..f18396c4 100644 --- a/source/pdf/pdf-form.c +++ b/source/pdf/pdf-form.c @@ -27,15 +27,15 @@ static int pdf_field_dirties_document(fz_context *ctx, pdf_document *doc, pdf_ob * share the same name */ static pdf_obj *find_head_of_field_group(fz_context *ctx, pdf_obj *obj) { - if (obj == NULL || pdf_dict_gets(ctx, obj, "T")) + if (obj == NULL || pdf_dict_get(ctx, obj, PDF_NAME_T)) return obj; else - return find_head_of_field_group(ctx, pdf_dict_gets(ctx, obj, "Parent")); + return find_head_of_field_group(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Parent)); } static void pdf_field_mark_dirty(fz_context *ctx, pdf_document *doc, pdf_obj *field) { - pdf_obj *kids = pdf_dict_gets(ctx, field, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, field, PDF_NAME_Kids); if (kids) { int i, n = pdf_array_len(ctx, kids); @@ -67,7 +67,7 @@ static void update_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *obj, fz_try(ctx) { sobj = pdf_new_string(ctx, doc, text, strlen(text)); - pdf_dict_puts(ctx, obj, "V", sobj); + pdf_dict_put(ctx, obj, PDF_NAME_V, sobj); } fz_always(ctx) { @@ -92,7 +92,7 @@ static pdf_obj *find_field(fz_context *ctx, pdf_obj *dict, char *name, int len) char *part; field = pdf_array_get(ctx, dict, i); - part = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, field, "T")); + part = pdf_to_str_buf(ctx, pdf_dict_get(ctx, field, PDF_NAME_T)); if (strlen(part) == (size_t)len && !memcmp(part, name, len)) return field; } @@ -119,7 +119,7 @@ pdf_obj *pdf_lookup_field(fz_context *ctx, pdf_obj *form, char *name) len = dot ? dot - namep : strlen(namep); dict = find_field(ctx, form, namep, len); if (dot) - form = pdf_dict_gets(ctx, dict, "Kids"); + form = pdf_dict_get(ctx, dict, PDF_NAME_Kids); } return dict; @@ -134,13 +134,13 @@ static void reset_field(fz_context *ctx, pdf_document *doc, pdf_obj *field) * At the bottom of the hierarchy we may find widget annotations * that aren't also fields, but DV and V will not be present in their * dictionaries, and attempts to remove V will be harmless. */ - pdf_obj *dv = pdf_dict_gets(ctx, field, "DV"); - pdf_obj *kids = pdf_dict_gets(ctx, field, "Kids"); + pdf_obj *dv = pdf_dict_get(ctx, field, PDF_NAME_DV); + pdf_obj *kids = pdf_dict_get(ctx, field, PDF_NAME_Kids); if (dv) - pdf_dict_puts(ctx, field, "V", dv); + pdf_dict_put(ctx, field, PDF_NAME_V, dv); else - pdf_dict_dels(ctx, field, "V"); + pdf_dict_del(ctx, field, PDF_NAME_V); if (kids == NULL) { @@ -153,16 +153,16 @@ static void reset_field(fz_context *ctx, pdf_document *doc, pdf_obj *field) case PDF_WIDGET_TYPE_RADIOBUTTON: case PDF_WIDGET_TYPE_CHECKBOX: { - pdf_obj *leafv = pdf_get_inheritable(ctx, doc, field, "V"); + pdf_obj *leafv = pdf_get_inheritable(ctx, doc, field, PDF_NAME_V); if (leafv) pdf_keep_obj(ctx, leafv); else - leafv = pdf_new_name(ctx, doc, "Off"); + leafv = PDF_NAME_Off; fz_try(ctx) { - pdf_dict_puts(ctx, field, "AS", leafv); + pdf_dict_put(ctx, field, PDF_NAME_AS, leafv); } fz_always(ctx) { @@ -190,7 +190,7 @@ static void reset_field(fz_context *ctx, pdf_document *doc, pdf_obj *field) void pdf_field_reset(fz_context *ctx, pdf_document *doc, pdf_obj *field) { - pdf_obj *kids = pdf_dict_gets(ctx, field, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, field, PDF_NAME_Kids); reset_field(ctx, doc, field); @@ -205,8 +205,8 @@ void pdf_field_reset(fz_context *ctx, pdf_document *doc, pdf_obj *field) static void add_field_hierarchy_to_array(fz_context *ctx, pdf_obj *array, pdf_obj *field) { - pdf_obj *kids = pdf_dict_gets(ctx, field, "Kids"); - pdf_obj *exclude = pdf_dict_gets(ctx, field, "Exclude"); + pdf_obj *kids = pdf_dict_get(ctx, field, PDF_NAME_Kids); + pdf_obj *exclude = pdf_dict_get(ctx, field, PDF_NAME_Exclude); if (exclude) return; @@ -231,7 +231,7 @@ static void add_field_hierarchy_to_array(fz_context *ctx, pdf_obj *array, pdf_ob */ static pdf_obj *specified_fields(fz_context *ctx, pdf_document *doc, pdf_obj *fields, int exclude) { - pdf_obj *form = pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/Fields"); + pdf_obj *form = pdf_dict_getl(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, PDF_NAME_AcroForm, PDF_NAME_Fields, NULL); int i, n; pdf_obj *result = pdf_new_array(ctx, doc, 0); pdf_obj *nil = NULL; @@ -256,7 +256,7 @@ static pdf_obj *specified_fields(fz_context *ctx, pdf_document *doc, pdf_obj *fi field = pdf_lookup_field(ctx, form, pdf_to_str_buf(ctx, field)); if (field) - pdf_dict_puts(ctx, field, "Exclude", nil); + pdf_dict_put(ctx, field, PDF_NAME_Exclude, nil); } /* Act upon all unmarked fields */ @@ -276,7 +276,7 @@ static pdf_obj *specified_fields(fz_context *ctx, pdf_document *doc, pdf_obj *fi field = pdf_lookup_field(ctx, form, pdf_to_str_buf(ctx, field)); if (field) - pdf_dict_dels(ctx, field, "Exclude"); + pdf_dict_del(ctx, field, PDF_NAME_Exclude); } } else @@ -333,11 +333,11 @@ static void execute_action(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf { if (a) { - char *type = pdf_to_name(ctx, pdf_dict_gets(ctx, a, "S")); + pdf_obj *type = pdf_dict_get(ctx, a, PDF_NAME_S); - if (!strcmp(type, "JavaScript")) + if (pdf_name_eq(ctx, type, PDF_NAME_JavaScript)) { - pdf_obj *js = pdf_dict_gets(ctx, a, "JS"); + pdf_obj *js = pdf_dict_get(ctx, a, PDF_NAME_JS); if (js) { char *code = pdf_to_utf8(ctx, doc, js); @@ -355,15 +355,15 @@ static void execute_action(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf } } } - else if (!strcmp(type, "ResetForm")) + else if (pdf_name_eq(ctx, type, PDF_NAME_ResetForm)) { - reset_form(ctx, doc, pdf_dict_gets(ctx, a, "Fields"), pdf_to_int(ctx, pdf_dict_gets(ctx, a, "Flags")) & 1); + reset_form(ctx, doc, pdf_dict_get(ctx, a, PDF_NAME_Fields), pdf_to_int(ctx, pdf_dict_get(ctx, a, PDF_NAME_Flags)) & 1); } - else if (!strcmp(type, "Named")) + else if (pdf_name_eq(ctx, type, PDF_NAME_Named)) { - char *name = pdf_to_name(ctx, pdf_dict_gets(ctx, a, "N")); + pdf_obj *name = pdf_dict_get(ctx, a, PDF_NAME_N); - if (!strcmp(name, "Print")) + if (pdf_name_eq(ctx, name, PDF_NAME_Print)) pdf_event_issue_print(ctx, doc); } } @@ -371,7 +371,7 @@ static void execute_action(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf static void execute_action_chain(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - pdf_obj *a = pdf_dict_gets(ctx, obj, "A"); + pdf_obj *a = pdf_dict_get(ctx, obj, PDF_NAME_A); pdf_js_event e; e.target = obj; @@ -381,7 +381,7 @@ static void execute_action_chain(fz_context *ctx, pdf_document *doc, pdf_obj *ob while (a) { execute_action(ctx, doc, obj, a); - a = pdf_dict_gets(ctx, a, "Next"); + a = pdf_dict_get(ctx, a, PDF_NAME_Next); } } @@ -402,56 +402,29 @@ static void execute_additional_action(fz_context *ctx, pdf_document *doc, pdf_ob static void check_off(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - pdf_obj *off = NULL; - - fz_var(off); - fz_try(ctx); - { - off = pdf_new_name(ctx, doc, "Off"); - pdf_dict_puts(ctx, obj, "AS", off); - } - fz_always(ctx) - { - pdf_drop_obj(ctx, off); - } - fz_catch(ctx) - { - fz_rethrow(ctx); - } + pdf_dict_put(ctx, obj, PDF_NAME_AS, PDF_NAME_Off); } -static void set_check(fz_context *ctx, pdf_document *doc, pdf_obj *chk, char *name) +static void set_check(fz_context *ctx, pdf_document *doc, pdf_obj *chk, pdf_obj *name) { pdf_obj *n = pdf_dict_getp(ctx, chk, "AP/N"); - pdf_obj *val = NULL; + pdf_obj *val; - fz_var(val); - fz_try(ctx) - { - /* If name is a possible value of this check - * box then use it, otherwise use "Off" */ - if (pdf_dict_gets(ctx, n, name)) - val = pdf_new_name(ctx, doc, name); - else - val = pdf_new_name(ctx, doc, "Off"); + /* If name is a possible value of this check + * box then use it, otherwise use "Off" */ + if (pdf_dict_get(ctx, n, name)) + val = name; + else + val = PDF_NAME_Off; - pdf_dict_puts(ctx, chk, "AS", val); - } - fz_always(ctx) - { - pdf_drop_obj(ctx, val); - } - fz_catch(ctx) - { - fz_rethrow(ctx); - } + pdf_dict_put_drop(ctx, chk, PDF_NAME_AS, val); } /* Set the values of all fields in a group defined by a node * in the hierarchy */ -static void set_check_grp(fz_context *ctx, pdf_document *doc, pdf_obj *grp, char *val) +static void set_check_grp(fz_context *ctx, pdf_document *doc, pdf_obj *grp, pdf_obj *val) { - pdf_obj *kids = pdf_dict_gets(ctx, grp, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, grp, PDF_NAME_Kids); if (kids == NULL) { @@ -512,16 +485,16 @@ static void recalculate(fz_context *ctx, pdf_document *doc) static void toggle_check_box(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - pdf_obj *as = pdf_dict_gets(ctx, obj, "AS"); + pdf_obj *as = pdf_dict_get(ctx, obj, PDF_NAME_AS); int ff = pdf_get_field_flags(ctx, doc, obj); int radio = ((ff & (Ff_Pushbutton|Ff_Radio)) == Ff_Radio); char *val = NULL; - pdf_obj *grp = radio ? pdf_dict_gets(ctx, obj, "Parent") : find_head_of_field_group(ctx, obj); + pdf_obj *grp = radio ? pdf_dict_get(ctx, obj, PDF_NAME_Parent) : find_head_of_field_group(ctx, obj); if (!grp) grp = obj; - if (as && strcmp(pdf_to_name(ctx, as), "Off")) + if (as && !pdf_name_eq(ctx, as, PDF_NAME_Off)) { /* "as" neither missing nor set to Off. Set it to Off, unless * this is a non-toggle-off radio button. */ @@ -543,7 +516,7 @@ static void toggle_check_box(fz_context *ctx, pdf_document *doc, pdf_obj *obj) for (i = 0; i < len; i++) { key = pdf_dict_get_key(ctx, n, i); - if (pdf_is_name(ctx, key) && strcmp(pdf_to_name(ctx, key), "Off")) + if (pdf_is_name(ctx, key) && !pdf_name_eq(ctx, key, PDF_NAME_Off)) break; } @@ -551,19 +524,17 @@ static void toggle_check_box(fz_context *ctx, pdf_document *doc, pdf_obj *obj) if (!key) return; - val = pdf_to_name(ctx, key); - if (radio) { /* For radio buttons, first turn off all buttons in the group and * then set the one that was clicked */ - pdf_obj *kids = pdf_dict_gets(ctx, grp, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, grp, PDF_NAME_Kids); len = pdf_array_len(ctx, kids); for (i = 0; i < len; i++) check_off(ctx, doc, pdf_array_get(ctx, kids, i)); - pdf_dict_puts(ctx, obj, "AS", key); + pdf_dict_put(ctx, obj, PDF_NAME_AS, key); } else { @@ -572,9 +543,9 @@ static void toggle_check_box(fz_context *ctx, pdf_document *doc, pdf_obj *obj) * all to the same value. This may cause the group to act like * radio buttons, if each have distinct "On" values */ if (grp) - set_check_grp(ctx, doc, grp, val); + set_check_grp(ctx, doc, grp, key); else - set_check(ctx, doc, obj, val); + set_check(ctx, doc, obj, key); } } @@ -586,7 +557,7 @@ static void toggle_check_box(fz_context *ctx, pdf_document *doc, pdf_obj *obj) fz_try(ctx) { v = pdf_new_string(ctx, doc, val, strlen(val)); - pdf_dict_puts(ctx, grp, "V", v); + pdf_dict_put(ctx, grp, PDF_NAME_V, v); } fz_always(ctx) { @@ -625,7 +596,7 @@ int pdf_pass_event(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_ui_ev if (annot) { - int f = pdf_to_int(ctx, pdf_dict_gets(ctx, annot->obj, "F")); + int f = pdf_to_int(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_F)); if (f & (F_Hidden|F_NoView)) annot = NULL; @@ -805,13 +776,13 @@ pdf_widget *pdf_create_widget(fz_context *ctx, pdf_document *doc, pdf_page *page fz_try(ctx) { pdf_set_field_type(ctx, doc, annot->obj, type); - pdf_dict_puts_drop(ctx, annot->obj, "T", pdf_new_string(ctx, doc, fieldname, strlen(fieldname))); + pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_T, pdf_new_string(ctx, doc, fieldname, strlen(fieldname))); annot->widget_type = type; if (type == PDF_WIDGET_TYPE_SIGNATURE) { int sigflags = (old_sigflags | (SigFlag_SignaturesExist|SigFlag_AppendOnly)); - pdf_dict_putp_drop(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/SigFlags", pdf_new_int(ctx, doc, sigflags)); + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), pdf_new_int(ctx, doc, sigflags), PDF_NAME_Root, PDF_NAME_AcroForm, PDF_NAME_SigFlags, NULL); } /* @@ -822,7 +793,7 @@ pdf_widget *pdf_create_widget(fz_context *ctx, pdf_document *doc, pdf_page *page if (!form) { form = pdf_new_array(ctx, doc, 1); - pdf_dict_putp_drop(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/Fields", form); + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), form, PDF_NAME_Root, PDF_NAME_AcroForm, PDF_NAME_Fields, NULL); } pdf_array_push(ctx, form, annot->obj); /* Cleanup relies on this statement being last */ @@ -834,7 +805,7 @@ pdf_widget *pdf_create_widget(fz_context *ctx, pdf_document *doc, pdf_page *page /* An empty Fields array may have been created, but that is harmless */ if (type == PDF_WIDGET_TYPE_SIGNATURE) - pdf_dict_putp_drop(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/SigFlags", pdf_new_int(ctx, doc, old_sigflags)); + pdf_dict_putl_drop(ctx, pdf_trailer(ctx, doc), pdf_new_int(ctx, doc, old_sigflags), PDF_NAME_Root, PDF_NAME_AcroForm, PDF_NAME_SigFlags, NULL); fz_rethrow(ctx); } @@ -876,7 +847,7 @@ static int set_text_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *fie static void update_checkbox_selector(fz_context *ctx, pdf_document *doc, pdf_obj *field, char *val) { - pdf_obj *kids = pdf_dict_gets(ctx, field, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, field, PDF_NAME_Kids); if (kids) { @@ -896,9 +867,9 @@ static void update_checkbox_selector(fz_context *ctx, pdf_document *doc, pdf_obj if (pdf_dict_gets(ctx, n, val)) oval = pdf_new_name(ctx, doc, val); else - oval = pdf_new_name(ctx, doc, "Off"); + oval = PDF_NAME_Off; - pdf_dict_puts(ctx, field, "AS", oval); + pdf_dict_put(ctx, field, PDF_NAME_AS, oval); } fz_always(ctx) { @@ -947,7 +918,7 @@ int pdf_field_set_value(fz_context *ctx, pdf_document *doc, pdf_obj *field, char char *pdf_field_border_style(fz_context *ctx, pdf_document *doc, pdf_obj *field) { - char *bs = pdf_to_name(ctx, pdf_dict_getp(ctx, field, "BS/S")); + char *bs = pdf_to_name(ctx, pdf_dict_getl(ctx, field, PDF_NAME_BS, PDF_NAME_S, NULL)); switch (*bs) { @@ -966,21 +937,21 @@ void pdf_field_set_border_style(fz_context *ctx, pdf_document *doc, pdf_obj *fie pdf_obj *val = NULL; if (!strcmp(text, "Solid")) - val = pdf_new_name(ctx, doc, "S"); + val = PDF_NAME_S; else if (!strcmp(text, "Dashed")) - val = pdf_new_name(ctx, doc, "D"); + val = PDF_NAME_D; else if (!strcmp(text, "Beveled")) - val = pdf_new_name(ctx, doc, "B"); + val = PDF_NAME_B; else if (!strcmp(text, "Inset")) - val = pdf_new_name(ctx, doc, "I"); + val = PDF_NAME_I; else if (!strcmp(text, "Underline")) - val = pdf_new_name(ctx, doc, "U"); + val = PDF_NAME_U; else return; fz_try(ctx); { - pdf_dict_putp(ctx, field, "BS/S", val); + pdf_dict_putl(ctx, field, val, PDF_NAME_BS, PDF_NAME_S, NULL); pdf_field_mark_dirty(ctx, doc, field); } fz_always(ctx) @@ -1001,7 +972,7 @@ void pdf_field_set_button_caption(fz_context *ctx, pdf_document *doc, pdf_obj *f { if (pdf_field_type(ctx, doc, field) == PDF_WIDGET_TYPE_PUSHBUTTON) { - pdf_dict_putp(ctx, field, "MK/CA", val); + pdf_dict_putl(ctx, field, val, PDF_NAME_MK, PDF_NAME_CA, NULL); pdf_field_mark_dirty(ctx, doc, field); } } @@ -1023,10 +994,10 @@ int pdf_field_display(fz_context *ctx, pdf_document *doc, pdf_obj *field) /* Base response on first of children. Not ideal, * but not clear how to handle children with * differing values */ - while ((kids = pdf_dict_gets(ctx, field, "Kids")) != NULL) + while ((kids = pdf_dict_get(ctx, field, PDF_NAME_Kids)) != NULL) field = pdf_array_get(ctx, kids, 0); - f = pdf_to_int(ctx, pdf_dict_gets(ctx, field, "F")); + f = pdf_to_int(ctx, pdf_dict_get(ctx, field, PDF_NAME_F)); if (f & F_Hidden) { @@ -1055,8 +1026,8 @@ int pdf_field_display(fz_context *ctx, pdf_document *doc, pdf_obj *field) static char *get_field_name(fz_context *ctx, pdf_document *doc, pdf_obj *field, int spare) { char *res = NULL; - pdf_obj *parent = pdf_dict_gets(ctx, field, "Parent"); - char *lname = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, field, "T")); + pdf_obj *parent = pdf_dict_get(ctx, field, PDF_NAME_Parent); + char *lname = pdf_to_str_buf(ctx, pdf_dict_get(ctx, field, PDF_NAME_T)); int llen = strlen(lname); /* @@ -1094,12 +1065,12 @@ char *pdf_field_name(fz_context *ctx, pdf_document *doc, pdf_obj *field) void pdf_field_set_display(fz_context *ctx, pdf_document *doc, pdf_obj *field, int d) { - pdf_obj *kids = pdf_dict_gets(ctx, field, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, field, PDF_NAME_Kids); if (!kids) { int mask = (F_Hidden|F_Print|F_NoView); - int f = pdf_to_int(ctx, pdf_dict_gets(ctx, field, "F")) & ~mask; + int f = pdf_to_int(ctx, pdf_dict_get(ctx, field, PDF_NAME_F)) & ~mask; pdf_obj *fo = NULL; switch (d) @@ -1121,7 +1092,7 @@ void pdf_field_set_display(fz_context *ctx, pdf_document *doc, pdf_obj *field, i fz_try(ctx) { fo = pdf_new_int(ctx, doc, f); - pdf_dict_puts(ctx, field, "F", fo); + pdf_dict_put(ctx, field, PDF_NAME_F, fo); } fz_always(ctx) { @@ -1146,7 +1117,7 @@ void pdf_field_set_fill_color(fz_context *ctx, pdf_document *doc, pdf_obj *field /* col == NULL mean transparent, but we can simply pass it on as with * non-NULL values because pdf_dict_putp interprets a NULL value as * delete */ - pdf_dict_putp(ctx, field, "MK/BG", col); + pdf_dict_putl(ctx, field, col, PDF_NAME_MK, PDF_NAME_BG, NULL); pdf_field_mark_dirty(ctx, doc, field); } @@ -1154,7 +1125,7 @@ void pdf_field_set_text_color(fz_context *ctx, pdf_document *doc, pdf_obj *field { pdf_da_info di; fz_buffer *fzbuf = NULL; - char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, field, "DA")); + char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, field, PDF_NAME_DA)); unsigned char *buf; int len; pdf_obj *daobj = NULL; @@ -1179,7 +1150,7 @@ void pdf_field_set_text_color(fz_context *ctx, pdf_document *doc, pdf_obj *field pdf_fzbuf_print_da(ctx, fzbuf, &di); len = fz_buffer_storage(ctx, fzbuf, &buf); daobj = pdf_new_string(ctx, doc, (char *)buf, len); - pdf_dict_puts(ctx, field, "DA", daobj); + pdf_dict_put(ctx, field, PDF_NAME_DA, daobj); pdf_field_mark_dirty(ctx, doc, field); } fz_always(ctx) @@ -1227,7 +1198,7 @@ int pdf_text_widget_max_len(fz_context *ctx, pdf_document *doc, pdf_widget *tw) { pdf_annot *annot = (pdf_annot *)tw; - return pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, annot->obj, "MaxLen")); + return pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, annot->obj, PDF_NAME_MaxLen)); } int pdf_text_widget_content_type(fz_context *ctx, pdf_document *doc, pdf_widget *tw) @@ -1239,7 +1210,7 @@ int pdf_text_widget_content_type(fz_context *ctx, pdf_document *doc, pdf_widget fz_var(code); fz_try(ctx) { - code = pdf_get_string_or_stream(ctx, doc, pdf_dict_getp(ctx, annot->obj, "AA/F/JS")); + code = pdf_get_string_or_stream(ctx, doc, pdf_dict_getl(ctx, annot->obj, PDF_NAME_AA, PDF_NAME_F, PDF_NAME_JS, NULL)); if (code) { if (strstr(code, "AFNumber_Format")) @@ -1266,7 +1237,7 @@ int pdf_text_widget_content_type(fz_context *ctx, pdf_document *doc, pdf_widget static int run_keystroke(fz_context *ctx, pdf_document *doc, pdf_obj *field, char **text) { - pdf_obj *k = pdf_dict_getp(ctx, field, "AA/K"); + pdf_obj *k = pdf_dict_getl(ctx, field, PDF_NAME_AA, PDF_NAME_K, NULL); if (k && doc->js) { @@ -1314,7 +1285,7 @@ int pdf_choice_widget_options(fz_context *ctx, pdf_document *doc, pdf_widget *tw if (!annot) return 0; - optarr = pdf_dict_gets(ctx, annot->obj, "Opt"); + optarr = pdf_dict_get(ctx, annot->obj, PDF_NAME_Opt); n = pdf_array_len(ctx, optarr); if (opts) @@ -1353,7 +1324,7 @@ int pdf_choice_widget_value(fz_context *ctx, pdf_document *doc, pdf_widget *tw, if (!annot) return 0; - optarr = pdf_dict_gets(ctx, annot->obj, "V"); + optarr = pdf_dict_get(ctx, annot->obj, PDF_NAME_V); if (pdf_is_string(ctx, optarr)) { @@ -1408,18 +1379,18 @@ void pdf_choice_widget_set_value(fz_context *ctx, pdf_document *doc, pdf_widget opt = NULL; } - pdf_dict_puts(ctx, annot->obj, "V", optarr); + pdf_dict_put(ctx, annot->obj, PDF_NAME_V, optarr); pdf_drop_obj(ctx, optarr); } else { opt = pdf_new_string(ctx, doc, opts[0], strlen(opts[0])); - pdf_dict_puts(ctx, annot->obj, "V", opt); + pdf_dict_put(ctx, annot->obj, PDF_NAME_V, opt); pdf_drop_obj(ctx, opt); } /* FIXME: when n > 1, we should be regenerating the indexes */ - pdf_dict_dels(ctx, annot->obj, "I"); + pdf_dict_del(ctx, annot->obj, PDF_NAME_I); pdf_field_mark_dirty(ctx, doc, annot->obj); if (pdf_field_dirties_document(ctx, doc, annot->obj)) @@ -1436,7 +1407,7 @@ void pdf_choice_widget_set_value(fz_context *ctx, pdf_document *doc, pdf_widget int pdf_signature_widget_byte_range(fz_context *ctx, pdf_document *doc, pdf_widget *widget, int (*byte_range)[2]) { pdf_annot *annot = (pdf_annot *)widget; - pdf_obj *br = pdf_dict_getp(ctx, annot->obj, "V/ByteRange"); + pdf_obj *br = pdf_dict_getl(ctx, annot->obj, PDF_NAME_V, PDF_NAME_ByteRange, NULL); int i, n = pdf_array_len(ctx, br)/2; if (byte_range) @@ -1454,7 +1425,7 @@ int pdf_signature_widget_byte_range(fz_context *ctx, pdf_document *doc, pdf_widg int pdf_signature_widget_contents(fz_context *ctx, pdf_document *doc, pdf_widget *widget, char **contents) { pdf_annot *annot = (pdf_annot *)widget; - pdf_obj *c = pdf_dict_getp(ctx, annot->obj, "V/Contents"); + pdf_obj *c = pdf_dict_getl(ctx, annot->obj, PDF_NAME_V, PDF_NAME_Contents, NULL); if (contents) *contents = pdf_to_str_buf(ctx, c); return pdf_to_str_len(ctx, c); @@ -1474,7 +1445,7 @@ void pdf_signature_set_value(fz_context *ctx, pdf_document *doc, pdf_obj *field, vnum = pdf_create_object(ctx, doc); indv = pdf_new_indirect(ctx, doc, vnum, 0); - pdf_dict_puts_drop(ctx, field, "V", indv); + pdf_dict_put_drop(ctx, field, PDF_NAME_V, indv); fz_var(v); fz_try(ctx) @@ -1492,13 +1463,13 @@ void pdf_signature_set_value(fz_context *ctx, pdf_document *doc, pdf_obj *field, } byte_range = pdf_new_array(ctx, doc, 4); - pdf_dict_puts_drop(ctx, v, "ByteRange", byte_range); + pdf_dict_put_drop(ctx, v, PDF_NAME_ByteRange, byte_range); contents = pdf_new_string(ctx, doc, buf, sizeof(buf)); - pdf_dict_puts_drop(ctx, v, "Contents", contents); + pdf_dict_put_drop(ctx, v, PDF_NAME_Contents, contents); - pdf_dict_puts_drop(ctx, v, "Filter", pdf_new_name(ctx, doc, "Adobe.PPKLite")); - pdf_dict_puts_drop(ctx, v, "SubFilter", pdf_new_name(ctx, doc, "adbe.pkcs7.detached")); + pdf_dict_put_drop(ctx, v, PDF_NAME_Filter, PDF_NAME_Adobe_PPKLite); + pdf_dict_put_drop(ctx, v, PDF_NAME_SubFilter, PDF_NAME_adbe_pkcs7_detached); /* Record details within the document structure so that contents * and byte_range can be updated with their correct values at diff --git a/source/pdf/pdf-function.c b/source/pdf/pdf-function.c index 7ead09ca..1969cbba 100644 --- a/source/pdf/pdf-function.c +++ b/source/pdf/pdf-function.c @@ -919,7 +919,7 @@ load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj func->u.sa.samples = NULL; - obj = pdf_dict_gets(ctx, dict, "Size"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Size); if (pdf_array_len(ctx, obj) < func->base.m) fz_throw(ctx, FZ_ERROR_GENERIC, "too few sample function dimension sizes"); if (pdf_array_len(ctx, obj) > func->base.m) @@ -934,7 +934,7 @@ load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj } } - obj = pdf_dict_gets(ctx, dict, "BitsPerSample"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_BitsPerSample); func->u.sa.bps = bps = pdf_to_int(ctx, obj); for (i = 0; i < func->base.m; i++) @@ -942,7 +942,7 @@ load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj func->u.sa.encode[i][0] = 0; func->u.sa.encode[i][1] = func->u.sa.size[i] - 1; } - obj = pdf_dict_gets(ctx, dict, "Encode"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Encode); if (pdf_is_array(ctx, obj)) { int ranges = fz_mini(func->base.m, pdf_array_len(ctx, obj) / 2); @@ -962,7 +962,7 @@ load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj func->u.sa.decode[i][1] = func->range[i][1]; } - obj = pdf_dict_gets(ctx, dict, "Decode"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Decode); if (pdf_is_array(ctx, obj)) { int ranges = fz_mini(func->base.n, pdf_array_len(ctx, obj) / 2); @@ -1141,7 +1141,7 @@ load_exponential_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pd fz_warn(ctx, "exponential functions have at most one input"); func->base.m = 1; - obj = pdf_dict_gets(ctx, dict, "N"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_N); func->u.e.n = pdf_to_real(ctx, obj); /* See exponential functions (PDF 1.7 section 3.9.2) */ @@ -1167,7 +1167,7 @@ load_exponential_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pd func->u.e.c1[i] = 1; } - obj = pdf_dict_gets(ctx, dict, "C0"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_C0); if (pdf_is_array(ctx, obj)) { int ranges = fz_mini(func->base.n, pdf_array_len(ctx, obj)); @@ -1178,7 +1178,7 @@ load_exponential_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pd func->u.e.c0[i] = pdf_to_real(ctx, pdf_array_get(ctx, obj, i)); } - obj = pdf_dict_gets(ctx, dict, "C1"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_C1); if (pdf_is_array(ctx, obj)) { int ranges = fz_mini(func->base.n, pdf_array_len(ctx, obj)); @@ -1232,7 +1232,7 @@ load_stitching_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_ fz_warn(ctx, "stitching functions have at most one input"); func->base.m = 1; - obj = pdf_dict_gets(ctx, dict, "Functions"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Functions); if (!pdf_is_array(ctx, obj)) fz_throw(ctx, FZ_ERROR_GENERIC, "stitching function has no input functions"); @@ -1269,7 +1269,7 @@ load_stitching_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_ fz_rethrow(ctx); } - obj = pdf_dict_gets(ctx, dict, "Bounds"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Bounds); if (!pdf_is_array(ctx, obj)) fz_throw(ctx, FZ_ERROR_GENERIC, "stitching function has no bounds"); { @@ -1297,7 +1297,7 @@ load_stitching_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_ func->u.st.encode[i * 2 + 1] = 0; } - obj = pdf_dict_gets(ctx, dict, "Encode"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Encode); if (pdf_is_array(ctx, obj)) { int ranges = fz_mini(k, pdf_array_len(ctx, obj) / 2); @@ -1645,11 +1645,11 @@ pdf_load_function(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int in, int func->base.debug = pdf_debug_function; #endif - obj = pdf_dict_gets(ctx, dict, "FunctionType"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_FunctionType); func->type = pdf_to_int(ctx, obj); /* required for all */ - obj = pdf_dict_gets(ctx, dict, "Domain"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Domain); func->base.m = fz_clampi(pdf_array_len(ctx, obj) / 2, 1, FZ_FN_MAXM); for (i = 0; i < func->base.m; i++) { @@ -1658,7 +1658,7 @@ pdf_load_function(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int in, int } /* required for type0 and type4, optional otherwise */ - obj = pdf_dict_gets(ctx, dict, "Range"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Range); if (pdf_is_array(ctx, obj)) { func->has_range = 1; diff --git a/source/pdf/pdf-image.c b/source/pdf/pdf-image.c index 30f96dc8..87fa8f38 100644 --- a/source/pdf/pdf-image.c +++ b/source/pdf/pdf-image.c @@ -55,13 +55,13 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di break; /* Out of fz_try */ } - w = pdf_to_int(ctx, pdf_dict_getsa(ctx, dict, "Width", "W")); - h = pdf_to_int(ctx, pdf_dict_getsa(ctx, dict, "Height", "H")); - bpc = pdf_to_int(ctx, pdf_dict_getsa(ctx, dict, "BitsPerComponent", "BPC")); + w = pdf_to_int(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_Width, PDF_NAME_W)); + h = pdf_to_int(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_Height, PDF_NAME_H)); + bpc = pdf_to_int(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_BitsPerComponent, PDF_NAME_BPC)); if (bpc == 0) bpc = 8; - imagemask = pdf_to_bool(ctx, pdf_dict_getsa(ctx, dict, "ImageMask", "IM")); - interpolate = pdf_to_bool(ctx, pdf_dict_getsa(ctx, dict, "Interpolate", "I")); + imagemask = pdf_to_bool(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_ImageMask, PDF_NAME_IM)); + interpolate = pdf_to_bool(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_Interpolate, PDF_NAME_I)); indexed = 0; usecolorkey = 0; @@ -82,13 +82,13 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di if (h > (1 << 16)) fz_throw(ctx, FZ_ERROR_GENERIC, "image is too high"); - obj = pdf_dict_getsa(ctx, dict, "ColorSpace", "CS"); + obj = pdf_dict_geta(ctx, dict, PDF_NAME_ColorSpace, PDF_NAME_CS); if (obj && !imagemask && !forcemask) { /* colorspace resource lookup is only done for inline images */ if (pdf_is_name(ctx, obj)) { - res = pdf_dict_get(ctx, pdf_dict_gets(ctx, rdb, "ColorSpace"), obj); + res = pdf_dict_get(ctx, pdf_dict_get(ctx, rdb, PDF_NAME_ColorSpace), obj); if (res) obj = res; } @@ -103,7 +103,7 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di n = 1; } - obj = pdf_dict_getsa(ctx, dict, "Decode", "D"); + obj = pdf_dict_geta(ctx, dict, PDF_NAME_Decode, PDF_NAME_D); if (obj) { for (i = 0; i < n * 2; i++) @@ -116,7 +116,7 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di decode[i] = i & 1 ? maxval : 0; } - obj = pdf_dict_getsa(ctx, dict, "SMask", "Mask"); + obj = pdf_dict_geta(ctx, dict, PDF_NAME_SMask, PDF_NAME_Mask); if (pdf_is_dict(ctx, obj)) { /* Not allowed for inline images or soft masks */ @@ -127,7 +127,7 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di else { mask = pdf_load_image_imp(ctx, doc, rdb, obj, NULL, 1); - obj = pdf_dict_gets(ctx, obj, "Matte"); + obj = pdf_dict_get(ctx, obj, PDF_NAME_Matte); if (pdf_is_array(ctx, obj)) { usecolorkey = 1; @@ -191,12 +191,12 @@ pdf_is_jpx_image(fz_context *ctx, pdf_obj *dict) pdf_obj *filter; int i, n; - filter = pdf_dict_gets(ctx, dict, "Filter"); - if (!strcmp(pdf_to_name(ctx, filter), "JPXDecode")) + filter = pdf_dict_get(ctx, dict, PDF_NAME_Filter); + if (pdf_name_eq(ctx, filter, PDF_NAME_JPXDecode)) return 1; n = pdf_array_len(ctx, filter); for (i = 0; i < n; i++) - if (!strcmp(pdf_to_name(ctx, pdf_array_get(ctx, filter, i)), "JPXDecode")) + if (pdf_name_eq(ctx, pdf_array_get(ctx, filter, i), PDF_NAME_JPXDecode)) return 1; return 0; } @@ -222,7 +222,7 @@ pdf_load_jpx(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int forcemask) /* FIXME: We can't handle decode arrays for indexed images currently */ fz_try(ctx) { - obj = pdf_dict_gets(ctx, dict, "ColorSpace"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ColorSpace); if (obj) { colorspace = pdf_load_colorspace(ctx, doc, obj); @@ -231,7 +231,7 @@ pdf_load_jpx(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int forcemask) pix = fz_load_jpx(ctx, buf->data, buf->len, colorspace, indexed); - obj = pdf_dict_getsa(ctx, dict, "SMask", "Mask"); + obj = pdf_dict_geta(ctx, dict, PDF_NAME_SMask, PDF_NAME_Mask); if (pdf_is_dict(ctx, obj)) { if (forcemask) @@ -240,7 +240,7 @@ pdf_load_jpx(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int forcemask) mask = pdf_load_image_imp(ctx, doc, NULL, obj, NULL, 1); } - obj = pdf_dict_getsa(ctx, dict, "Decode", "D"); + obj = pdf_dict_geta(ctx, dict, PDF_NAME_Decode, PDF_NAME_D); if (obj && !indexed) { float decode[FZ_MAX_COLORS * 2]; diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c index 0961b742..40aa51ad 100644 --- a/source/pdf/pdf-interpret.c +++ b/source/pdf/pdf-interpret.c @@ -104,8 +104,7 @@ static int pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const char *event, pdf_obj *ocg) { char event_state[16]; - pdf_obj *obj, *obj2; - char *type; + pdf_obj *obj, *obj2, *type; /* Avoid infinite recursions */ if (pdf_obj_marked(ctx, ocg)) @@ -122,7 +121,7 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const /* If we've been handed a name, look it up in the properties. */ if (pdf_is_name(ctx, ocg)) { - ocg = pdf_dict_gets(ctx, pdf_dict_gets(ctx, rdb, "Properties"), pdf_to_name(ctx, ocg)); + ocg = pdf_dict_get(ctx, pdf_dict_get(ctx, rdb, PDF_NAME_Properties), ocg); } /* If we haven't been given an ocg at all, then we're visible */ if (!ocg) @@ -131,9 +130,9 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const fz_strlcpy(event_state, event, sizeof event_state); fz_strlcat(event_state, "State", sizeof event_state); - type = pdf_to_name(ctx, pdf_dict_gets(ctx, ocg, "Type")); + type = pdf_dict_get(ctx, ocg, PDF_NAME_Type); - if (strcmp(type, "OCG") == 0) + if (pdf_name_eq(ctx, type, PDF_NAME_OCG)) { /* An Optional Content Group */ int default_value = 0; @@ -141,6 +140,7 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const int gen = pdf_to_gen(ctx, ocg); int len = desc->len; int i; + pdf_obj *es; /* by default an OCG is visible, unless it's explicitly hidden */ for (i = 0; i < len; i++) @@ -154,7 +154,7 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const /* Check Intents; if our intent is not part of the set given * by the current config, we should ignore it. */ - obj = pdf_dict_gets(ctx, ocg, "Intent"); + obj = pdf_dict_get(ctx, ocg, PDF_NAME_Intent); if (pdf_is_name(ctx, obj)) { /* If it doesn't match, it's hidden */ @@ -190,7 +190,7 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const * correspond to entries in the AS list in the OCG config. * Given that we don't handle Zoom or User, or Language * dicts, this is not really a problem. */ - obj = pdf_dict_gets(ctx, ocg, "Usage"); + obj = pdf_dict_get(ctx, ocg, PDF_NAME_Usage); if (!pdf_is_dict(ctx, obj)) return default_value; /* FIXME: Should look at Zoom (and return hidden if out of @@ -198,39 +198,40 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const /* FIXME: Could provide hooks to the caller to check if * User is appropriate - if not return hidden. */ obj2 = pdf_dict_gets(ctx, obj, event); - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, obj2, event_state)), "OFF") == 0) + es = pdf_dict_gets(ctx, obj2, event_state); + if (pdf_name_eq(ctx, es, PDF_NAME_OFF)) { return 1; } - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, obj2, event_state)), "ON") == 0) + if (pdf_name_eq(ctx, es, PDF_NAME_ON)) { return 0; } return default_value; } - else if (strcmp(type, "OCMD") == 0) + else if (pdf_name_eq(ctx, type, PDF_NAME_OCMD)) { /* An Optional Content Membership Dictionary */ - char *name; + pdf_obj *name; int combine, on; - obj = pdf_dict_gets(ctx, ocg, "VE"); + obj = pdf_dict_get(ctx, ocg, PDF_NAME_VE); if (pdf_is_array(ctx, obj)) { /* FIXME: Calculate visibility from array */ return 0; } - name = pdf_to_name(ctx, pdf_dict_gets(ctx, ocg, "P")); + name = pdf_dict_get(ctx, ocg, PDF_NAME_P); /* Set combine; Bit 0 set => AND, Bit 1 set => true means * Off, otherwise true means On */ - if (strcmp(name, "AllOn") == 0) + if (pdf_name_eq(ctx, name, PDF_NAME_AllOn)) { combine = 1; } - else if (strcmp(name, "AnyOff") == 0) + else if (pdf_name_eq(ctx, name, PDF_NAME_AnyOff)) { combine = 2; } - else if (strcmp(name, "AllOff") == 0) + else if (pdf_name_eq(ctx, name, PDF_NAME_AllOff)) { combine = 3; } @@ -243,7 +244,7 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const return 0; /* Should never happen */ fz_try(ctx) { - obj = pdf_dict_gets(ctx, ocg, "OCGs"); + obj = pdf_dict_get(ctx, ocg, PDF_NAME_OCGs); on = combine & 1; if (pdf_is_array(ctx, obj)) { int i, len; @@ -343,23 +344,23 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob { pdf_obj *obj; - obj = pdf_dict_gets(ctx, dict, "LW"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_LW); if (pdf_is_number(ctx, obj) && proc->op_w) proc->op_w(ctx, proc, pdf_to_real(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "LC"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_LC); if (pdf_is_int(ctx, obj) && proc->op_J) proc->op_J(ctx, proc, pdf_to_int(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "LJ"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_LJ); if (pdf_is_int(ctx, obj) && proc->op_j) proc->op_j(ctx, proc, pdf_to_int(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "ML"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ML); if (pdf_is_number(ctx, obj) && proc->op_M) proc->op_M(ctx, proc, pdf_to_real(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "D"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_D); if (pdf_is_array(ctx, obj) && proc->op_d) { pdf_obj *dash_array = pdf_array_get(ctx, obj, 0); @@ -367,15 +368,15 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob proc->op_d(ctx, proc, dash_array, pdf_to_real(ctx, dash_phase)); } - obj = pdf_dict_gets(ctx, dict, "RI"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_RI); if (pdf_is_name(ctx, obj) && proc->op_ri) proc->op_ri(ctx, proc, pdf_to_name(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "FL"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_FL); if (pdf_is_number(ctx, obj) && proc->op_i) proc->op_i(ctx, proc, pdf_to_real(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "Font"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Font); if (pdf_is_array(ctx, obj) && proc->op_Tf) { pdf_obj *font_ref = pdf_array_get(ctx, obj, 0); @@ -391,35 +392,35 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob /* transfer functions */ - obj = pdf_dict_gets(ctx, dict, "TR2"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_TR2); if (pdf_is_name(ctx, obj)) - if (strcmp(pdf_to_name(ctx, obj), "Identity") && strcmp(pdf_to_name(ctx, obj), "Default")) + if (!pdf_name_eq(ctx, obj, PDF_NAME_Identity) && !pdf_name_eq(ctx, obj, PDF_NAME_Default)) fz_warn(ctx, "ignoring transfer function"); if (!obj) /* TR is ignored in the presence of TR2 */ { - pdf_obj *tr = pdf_dict_gets(ctx, dict, "TR"); + pdf_obj *tr = pdf_dict_get(ctx, dict, PDF_NAME_TR); if (pdf_is_name(ctx, tr)) - if (strcmp(pdf_to_name(ctx, tr), "Identity")) + if (!pdf_name_eq(ctx, tr, PDF_NAME_Identity)) fz_warn(ctx, "ignoring transfer function"); } /* transparency state */ - obj = pdf_dict_gets(ctx, dict, "CA"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_CA); if (pdf_is_number(ctx, obj) && proc->op_gs_CA) proc->op_gs_CA(ctx, proc, pdf_to_real(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "ca"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ca); if (pdf_is_number(ctx, obj) && proc->op_gs_ca) proc->op_gs_ca(ctx, proc, pdf_to_real(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "BM"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_BM); if (pdf_is_array(ctx, obj)) obj = pdf_array_get(ctx, obj, 0); if (pdf_is_name(ctx, obj) && proc->op_gs_BM) proc->op_gs_BM(ctx, proc, pdf_to_name(ctx, obj)); - obj = pdf_dict_gets(ctx, dict, "SMask"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_SMask); if (proc->op_gs_SMask) { if (pdf_is_dict(ctx, obj)) @@ -432,7 +433,7 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob fz_var(xobj); - group = pdf_dict_gets(ctx, obj, "G"); + group = pdf_dict_get(ctx, obj, PDF_NAME_G); if (!group) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load softmask xobject (%d %d R)", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); xobj = pdf_load_xobject(ctx, csi->doc, group); @@ -446,21 +447,21 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob for (k = 0; k < colorspace->n; k++) softmask_bc[k] = 0; - bc = pdf_dict_gets(ctx, obj, "BC"); + bc = pdf_dict_get(ctx, obj, PDF_NAME_BC); if (pdf_is_array(ctx, bc)) { for (k = 0; k < colorspace->n; k++) softmask_bc[k] = pdf_to_real(ctx, pdf_array_get(ctx, bc, k)); } - s = pdf_dict_gets(ctx, obj, "S"); - if (pdf_is_name(ctx, s) && !strcmp(pdf_to_name(ctx, s), "Luminosity")) + s = pdf_dict_get(ctx, obj, PDF_NAME_S); + if (pdf_name_eq(ctx, s, PDF_NAME_Luminosity)) luminosity = 1; else luminosity = 0; - tr = pdf_dict_gets(ctx, obj, "TR"); - if (tr && strcmp(pdf_to_name(ctx, tr), "Identity")) + tr = pdf_dict_get(ctx, obj, PDF_NAME_TR); + if (tr && !pdf_name_eq(ctx, tr, PDF_NAME_Identity)) fz_warn(ctx, "ignoring transfer function"); proc->op_gs_SMask(ctx, proc, xobj, csi->rdb, softmask_bc, luminosity); @@ -474,7 +475,7 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob fz_rethrow(ctx); } } - else if (pdf_is_name(ctx, obj) && !strcmp(pdf_to_name(ctx, obj), "None")) + else if (pdf_is_name(ctx, obj) && pdf_name_eq(ctx, obj, PDF_NAME_None)) { proc->op_gs_SMask(ctx, proc, NULL, NULL, NULL, 0); } @@ -486,22 +487,26 @@ pdf_process_Do(fz_context *ctx, pdf_processor *proc, pdf_csi *csi) { pdf_obj *xres, *xobj, *subtype; - xres = pdf_dict_gets(ctx, csi->rdb, "XObject"); + xres = pdf_dict_get(ctx, csi->rdb, PDF_NAME_XObject); if (!xres) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find XObject dictionary"); xobj = pdf_dict_gets(ctx, xres, csi->name); if (!xobj) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find XObject resource '%s'", csi->name); - subtype = pdf_dict_gets(ctx, xobj, "Subtype"); - if (!strcmp(pdf_to_name(ctx, subtype), "Form") && pdf_dict_gets(ctx, xobj, "Subtype2")) - subtype = pdf_dict_gets(ctx, xobj, "Subtype2"); + subtype = pdf_dict_get(ctx, xobj, PDF_NAME_Subtype); + if (pdf_name_eq(ctx, subtype, PDF_NAME_Form)) + { + pdf_obj *st = pdf_dict_get(ctx, xobj, PDF_NAME_Subtype2); + if (st) + subtype = st; + } if (!pdf_is_name(ctx, subtype)) fz_throw(ctx, FZ_ERROR_GENERIC, "no XObject subtype specified"); - if (pdf_is_hidden_ocg(ctx, csi->doc->ocg, csi->rdb, proc->event, pdf_dict_gets(ctx, xobj, "OC"))) + if (pdf_is_hidden_ocg(ctx, csi->doc->ocg, csi->rdb, proc->event, pdf_dict_get(ctx, xobj, PDF_NAME_OC))) return; - if (!strcmp(pdf_to_name(ctx, subtype), "Form")) + if (pdf_name_eq(ctx, subtype, PDF_NAME_Form)) { if (proc->op_Do_form) { @@ -516,7 +521,7 @@ pdf_process_Do(fz_context *ctx, pdf_processor *proc, pdf_csi *csi) } } - else if (!strcmp(pdf_to_name(ctx, subtype), "Image")) + else if (pdf_name_eq(ctx, subtype, PDF_NAME_Image)) { if (proc->op_Do_image) { @@ -562,7 +567,7 @@ pdf_process_CS(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, int stroke) else { pdf_obj *csres, *csobj; - csres = pdf_dict_gets(ctx, csi->rdb, "ColorSpace"); + csres = pdf_dict_get(ctx, csi->rdb, PDF_NAME_ColorSpace); if (!csres) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find ColorSpace dictionary"); csobj = pdf_dict_gets(ctx, csres, csi->name); @@ -592,14 +597,14 @@ pdf_process_SC(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, int stroke) { pdf_obj *patres, *patobj, *type; - patres = pdf_dict_gets(ctx, csi->rdb, "Pattern"); + patres = pdf_dict_get(ctx, csi->rdb, PDF_NAME_Pattern); if (!patres) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find Pattern dictionary"); patobj = pdf_dict_gets(ctx, patres, csi->name); if (!patobj) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find Pattern resource '%s'", csi->name); - type = pdf_dict_gets(ctx, patobj, "PatternType"); + type = pdf_dict_get(ctx, patobj, PDF_NAME_PatternType); if (pdf_to_int(ctx, type) == 1) { @@ -661,7 +666,7 @@ static pdf_obj * resolve_properties(fz_context *ctx, pdf_csi *csi, pdf_obj *obj) { if (pdf_is_name(ctx, obj)) - return pdf_dict_gets(ctx, pdf_dict_gets(ctx, csi->rdb, "Properties"), pdf_to_name(ctx, obj)); + return pdf_dict_get(ctx, pdf_dict_get(ctx, csi->rdb, PDF_NAME_Properties), obj); else return obj; } @@ -688,7 +693,7 @@ pdf_process_BDC(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, const char * return; /* Wrong type of property */ - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, properties, "Type")), "OCG")) + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, properties, PDF_NAME_Type), PDF_NAME_OCG)) return; if (pdf_is_hidden_ocg(ctx, csi->doc->ocg, csi->rdb, proc->event, properties)) @@ -785,7 +790,7 @@ pdf_process_keyword(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, fz_strea case B('g','s'): { pdf_obj *gsres, *gsobj; - gsres = pdf_dict_gets(ctx, csi->rdb, "ExtGState"); + gsres = pdf_dict_get(ctx, csi->rdb, PDF_NAME_ExtGState); if (!gsres) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find ExtGState dictionary"); gsobj = pdf_dict_gets(ctx, gsres, csi->name); @@ -846,7 +851,7 @@ pdf_process_keyword(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, fz_strea { pdf_obj *fontres, *fontobj; pdf_font_desc *font; - fontres = pdf_dict_gets(ctx, csi->rdb, "Font"); + fontres = pdf_dict_get(ctx, csi->rdb, PDF_NAME_Font); if (!fontres) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find Font dictionary"); fontobj = pdf_dict_gets(ctx, fontres, csi->name); @@ -938,7 +943,7 @@ pdf_process_keyword(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, fz_strea { pdf_obj *shaderes, *shadeobj; fz_shade *shade; - shaderes = pdf_dict_gets(ctx, csi->rdb, "Shading"); + shaderes = pdf_dict_get(ctx, csi->rdb, PDF_NAME_Shading); if (!shaderes) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find Shading dictionary"); shadeobj = pdf_dict_gets(ctx, shaderes, csi->name); @@ -1222,7 +1227,7 @@ pdf_process_contents(fz_context *ctx, pdf_processor *proc, pdf_document *doc, pd void pdf_process_annot(fz_context *ctx, pdf_processor *proc, pdf_document *doc, pdf_page *page, pdf_annot *annot, fz_cookie *cookie) { - int flags = pdf_to_int(ctx, pdf_dict_gets(ctx, annot->obj, "F")); + int flags = pdf_to_int(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_F)); if (flags & (F_Invisible | F_Hidden)) return; @@ -1238,7 +1243,7 @@ pdf_process_annot(fz_context *ctx, pdf_processor *proc, pdf_document *doc, pdf_p /* TODO: NoZoom and NoRotate */ /* XXX what resources, if any, to use for this check? */ - if (pdf_is_hidden_ocg(ctx, doc->ocg, NULL, proc->event, pdf_dict_gets(ctx, annot->obj, "OC"))) + if (pdf_is_hidden_ocg(ctx, doc->ocg, NULL, proc->event, pdf_dict_get(ctx, annot->obj, PDF_NAME_OC))) return; if (proc->op_q && proc->op_cm && proc->op_Do_form && proc->op_Q) diff --git a/source/pdf/pdf-nametree.c b/source/pdf/pdf-nametree.c index eecbb320..8426b906 100644 --- a/source/pdf/pdf-nametree.c +++ b/source/pdf/pdf-nametree.c @@ -3,8 +3,8 @@ static pdf_obj * pdf_lookup_name_imp(fz_context *ctx, pdf_obj *node, pdf_obj *needle) { - pdf_obj *kids = pdf_dict_gets(ctx, node, "Kids"); - pdf_obj *names = pdf_dict_gets(ctx, node, "Names"); + pdf_obj *kids = pdf_dict_get(ctx, node, PDF_NAME_Kids); + pdf_obj *names = pdf_dict_get(ctx, node, PDF_NAME_Names); if (pdf_is_array(ctx, kids)) { @@ -15,7 +15,7 @@ pdf_lookup_name_imp(fz_context *ctx, pdf_obj *node, pdf_obj *needle) { int m = (l + r) >> 1; pdf_obj *kid = pdf_array_get(ctx, kids, m); - pdf_obj *limits = pdf_dict_gets(ctx, kid, "Limits"); + pdf_obj *limits = pdf_dict_get(ctx, kid, PDF_NAME_Limits); pdf_obj *first = pdf_array_get(ctx, limits, 0); pdf_obj *last = pdf_array_get(ctx, limits, 1); @@ -70,20 +70,20 @@ pdf_lookup_name_imp(fz_context *ctx, pdf_obj *node, pdf_obj *needle) } pdf_obj * -pdf_lookup_name(fz_context *ctx, pdf_document *doc, char *which, pdf_obj *needle) +pdf_lookup_name(fz_context *ctx, pdf_document *doc, pdf_obj *which, pdf_obj *needle) { - pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pdf_obj *names = pdf_dict_gets(ctx, root, "Names"); - pdf_obj *tree = pdf_dict_gets(ctx, names, which); + pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pdf_obj *names = pdf_dict_get(ctx, root, PDF_NAME_Names); + pdf_obj *tree = pdf_dict_get(ctx, names, which); return pdf_lookup_name_imp(ctx, tree, needle); } pdf_obj * pdf_lookup_dest(fz_context *ctx, pdf_document *doc, pdf_obj *needle) { - pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pdf_obj *dests = pdf_dict_gets(ctx, root, "Dests"); - pdf_obj *names = pdf_dict_gets(ctx, root, "Names"); + pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pdf_obj *dests = pdf_dict_get(ctx, root, PDF_NAME_Dests); + pdf_obj *names = pdf_dict_get(ctx, root, PDF_NAME_Names); pdf_obj *dest = NULL; /* PDF 1.1 has destinations in a dictionary */ @@ -98,7 +98,7 @@ pdf_lookup_dest(fz_context *ctx, pdf_document *doc, pdf_obj *needle) /* PDF 1.2 has destinations in a name tree */ if (names && !dest) { - pdf_obj *tree = pdf_dict_gets(ctx, names, "Dests"); + pdf_obj *tree = pdf_dict_get(ctx, names, PDF_NAME_Dests); return pdf_lookup_name_imp(ctx, tree, needle); } @@ -108,8 +108,8 @@ pdf_lookup_dest(fz_context *ctx, pdf_document *doc, pdf_obj *needle) static void pdf_load_name_tree_imp(fz_context *ctx, pdf_obj *dict, pdf_document *doc, pdf_obj *node) { - pdf_obj *kids = pdf_dict_gets(ctx, node, "Kids"); - pdf_obj *names = pdf_dict_gets(ctx, node, "Names"); + pdf_obj *kids = pdf_dict_get(ctx, node, PDF_NAME_Kids); + pdf_obj *names = pdf_dict_get(ctx, node, PDF_NAME_Names); int i; UNUSED(ctx); @@ -144,11 +144,11 @@ pdf_load_name_tree_imp(fz_context *ctx, pdf_obj *dict, pdf_document *doc, pdf_ob } pdf_obj * -pdf_load_name_tree(fz_context *ctx, pdf_document *doc, char *which) +pdf_load_name_tree(fz_context *ctx, pdf_document *doc, pdf_obj *which) { - pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pdf_obj *names = pdf_dict_gets(ctx, root, "Names"); - pdf_obj *tree = pdf_dict_gets(ctx, names, which); + pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pdf_obj *names = pdf_dict_get(ctx, root, PDF_NAME_Names); + pdf_obj *tree = pdf_dict_get(ctx, names, which); if (pdf_is_dict(ctx, tree)) { pdf_obj *dict = pdf_new_dict(ctx, doc, 100); diff --git a/source/pdf/pdf-object.c b/source/pdf/pdf-object.c index 0ed9667d..ecdb1ebb 100644 --- a/source/pdf/pdf-object.c +++ b/source/pdf/pdf-object.c @@ -1,9 +1,11 @@ #include "mupdf/pdf.h" +#include "pdf-name-table.h" + +#include <stdarg.h> + typedef enum pdf_objkind_e { - PDF_NULL = 0, - PDF_BOOL = 'b', PDF_INT = 'i', PDF_REAL = 'f', PDF_STRING = 's', @@ -37,7 +39,6 @@ struct pdf_obj_s int parent_num; union { - int b; int i; float f; struct { @@ -65,28 +66,13 @@ struct pdf_obj_s pdf_obj * pdf_new_null(fz_context *ctx, pdf_document *doc) { - pdf_obj *obj; - obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(null)"); - obj->doc = doc; - obj->refs = 1; - obj->kind = PDF_NULL; - obj->flags = 0; - obj->parent_num = 0; - return obj; + return PDF_OBJ_NULL; } pdf_obj * pdf_new_bool(fz_context *ctx, pdf_document *doc, int b) { - pdf_obj *obj; - obj = Memento_label(fz_malloc(ctx, sizeof(pdf_obj)), "pdf_obj(bool)"); - obj->doc = doc; - obj->refs = 1; - obj->kind = PDF_BOOL; - obj->flags = 0; - obj->parent_num = 0; - obj->u.b = b; - return obj; + return b ? PDF_OBJ_TRUE : PDF_OBJ_FALSE; } pdf_obj * @@ -133,10 +119,22 @@ pdf_new_string(fz_context *ctx, pdf_document *doc, const char *str, int len) return obj; } +static int +namecmp(const void *key, const void *name) +{ + return strcmp((char *)key, *(char **)name); +} + pdf_obj * pdf_new_name(fz_context *ctx, pdf_document *doc, const char *str) { pdf_obj *obj; + char **stdname; + + stdname = bsearch(str, &PDF_NAMES[1], PDF_OBJ_ENUM_NAME__LIMIT-1, sizeof(char *), namecmp); + if (stdname != NULL) + return (pdf_obj *)(intptr_t)(stdname - &PDF_NAMES[0]); + obj = Memento_label(fz_malloc(ctx, offsetof(pdf_obj, u.n) + strlen(str) + 1), "pdf_obj(name)"); obj->doc = doc; obj->refs = 1; @@ -165,86 +163,86 @@ pdf_new_indirect(fz_context *ctx, pdf_document *doc, int num, int gen) pdf_obj * pdf_keep_obj(fz_context *ctx, pdf_obj *obj) { - if (obj) + if (obj >= PDF_OBJ__LIMIT) obj->refs ++; return obj; } int pdf_is_indirect(fz_context *ctx, pdf_obj *obj) { - return obj ? obj->kind == PDF_INDIRECT : 0; + return obj >= PDF_OBJ__LIMIT ? obj->kind == PDF_INDIRECT : 0; } #define RESOLVE(obj) \ - if (obj && obj->kind == PDF_INDIRECT) \ + if (obj >= PDF_OBJ__LIMIT && obj->kind == PDF_INDIRECT) \ obj = pdf_resolve_indirect(ctx, obj); \ int pdf_is_null(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_NULL : 0; + return obj == PDF_OBJ_NULL; } int pdf_is_bool(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_BOOL : 0; + return obj == PDF_OBJ_TRUE || obj == PDF_OBJ_FALSE; } int pdf_is_int(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_INT : 0; + return obj >= PDF_OBJ__LIMIT ? obj->kind == PDF_INT : 0; } int pdf_is_real(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_REAL : 0; + return obj >= PDF_OBJ__LIMIT ? obj->kind == PDF_REAL : 0; } int pdf_is_number(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? (obj->kind == PDF_REAL || obj->kind == PDF_INT) : 0; + return obj >= PDF_OBJ__LIMIT ? (obj->kind == PDF_REAL || obj->kind == PDF_INT) : 0; } int pdf_is_string(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_STRING : 0; + return obj >= PDF_OBJ__LIMIT ? obj->kind == PDF_STRING : 0; } int pdf_is_name(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_NAME : 0; + if (obj < PDF_OBJ__LIMIT) + return obj != NULL && obj < PDF_OBJ_NAME__LIMIT; + return obj->kind == PDF_NAME; } int pdf_is_array(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_ARRAY : 0; + return obj >= PDF_OBJ__LIMIT ? obj->kind == PDF_ARRAY : 0; } int pdf_is_dict(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return obj ? obj->kind == PDF_DICT : 0; + return obj >= PDF_OBJ__LIMIT ? obj->kind == PDF_DICT : 0; } int pdf_to_bool(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) - return 0; - return obj->kind == PDF_BOOL ? obj->u.b : 0; + return obj == PDF_OBJ_TRUE; } int pdf_to_int(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return 0; if (obj->kind == PDF_INT) return obj->u.i; @@ -256,7 +254,7 @@ int pdf_to_int(fz_context *ctx, pdf_obj *obj) float pdf_to_real(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return 0; if (obj->kind == PDF_REAL) return obj->u.f; @@ -268,7 +266,11 @@ float pdf_to_real(fz_context *ctx, pdf_obj *obj) char *pdf_to_name(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj || obj->kind != PDF_NAME) + if (!obj) + return ""; + if (obj < PDF_OBJ_NAME__LIMIT) + return PDF_NAMES[(intptr_t)obj]; + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_NAME) return ""; return obj->u.n; } @@ -276,7 +278,7 @@ char *pdf_to_name(fz_context *ctx, pdf_obj *obj) char *pdf_to_str_buf(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj || obj->kind != PDF_STRING) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_STRING) return ""; return obj->u.s.buf; } @@ -284,14 +286,14 @@ char *pdf_to_str_buf(fz_context *ctx, pdf_obj *obj) int pdf_to_str_len(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj || obj->kind != PDF_STRING) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_STRING) return 0; return obj->u.s.len; } void pdf_set_int(fz_context *ctx, pdf_obj *obj, int i) { - if (!obj || obj->kind != PDF_INT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_INT) return; obj->u.i = i; } @@ -300,7 +302,7 @@ void pdf_set_int(fz_context *ctx, pdf_obj *obj, int i) void pdf_set_str_len(fz_context *ctx, pdf_obj *obj, int newlen) { RESOLVE(obj); - if (!obj || obj->kind != PDF_STRING) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_STRING) return; /* This should never happen */ if (newlen > obj->u.s.len) return; /* This should never happen */ @@ -310,30 +312,37 @@ void pdf_set_str_len(fz_context *ctx, pdf_obj *obj, int newlen) pdf_obj *pdf_to_dict(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - return (obj && obj->kind == PDF_DICT ? obj : NULL); + return (obj >= PDF_OBJ__LIMIT && obj->kind == PDF_DICT ? obj : NULL); } int pdf_to_num(fz_context *ctx, pdf_obj *obj) { - if (!obj || obj->kind != PDF_INDIRECT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_INDIRECT) return 0; return obj->u.r.num; } int pdf_to_gen(fz_context *ctx, pdf_obj *obj) { - if (!obj || obj->kind != PDF_INDIRECT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_INDIRECT) return 0; return obj->u.r.gen; } pdf_document *pdf_get_indirect_document(fz_context *ctx, pdf_obj *obj) { - if (!obj || obj->kind != PDF_INDIRECT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_INDIRECT) return NULL; return obj->doc; } +int pdf_objcmp_resolve(fz_context *ctx, pdf_obj *a, pdf_obj *b) +{ + RESOLVE(a); + RESOLVE(b); + return pdf_objcmp(ctx, a, b); +} + int pdf_objcmp(fz_context *ctx, pdf_obj *a, pdf_obj *b) { @@ -345,17 +354,31 @@ pdf_objcmp(fz_context *ctx, pdf_obj *a, pdf_obj *b) if (!a || !b) return 1; + if (a < PDF_OBJ_NAME__LIMIT) + { + if (b < PDF_OBJ_NAME__LIMIT) + return a != b; + + if (b->kind != PDF_NAME) + return 1; + return strcmp(b->u.n, PDF_NAMES[(intptr_t)a]); + } + + if (b < PDF_OBJ_NAME__LIMIT) + { + if (a->kind != PDF_NAME) + return 1; + return strcmp(a->u.n, PDF_NAMES[(intptr_t)b]); + } + + if (a < PDF_OBJ__LIMIT || b < PDF_OBJ__LIMIT) + return a != b; + if (a->kind != b->kind) return 1; switch (a->kind) { - case PDF_NULL: - return 0; - - case PDF_BOOL: - return a->u.b - b->u.b; - case PDF_INT: return a->u.i - b->u.i; @@ -418,10 +441,15 @@ pdf_objkindstr(pdf_obj *obj) { if (!obj) return "<NULL>"; + if (obj < PDF_OBJ_NAME__LIMIT) + return "name"; + if (obj == PDF_OBJ_TRUE || obj == PDF_OBJ_FALSE) + return "boolean"; + if (obj == PDF_OBJ_NULL) + return "null"; + switch (obj->kind) { - case PDF_NULL: return "null"; - case PDF_BOOL: return "boolean"; case PDF_INT: return "integer"; case PDF_REAL: return "real"; case PDF_STRING: return "string"; @@ -506,7 +534,7 @@ int pdf_array_len(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj || obj->kind != PDF_ARRAY) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_ARRAY) return 0; return obj->u.a.len; } @@ -515,7 +543,7 @@ pdf_obj * pdf_array_get(fz_context *ctx, pdf_obj *obj, int i) { RESOLVE(obj); - if (!obj || obj->kind != PDF_ARRAY) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_ARRAY) return NULL; if (i < 0 || i >= obj->u.a.len) return NULL; @@ -546,7 +574,7 @@ void pdf_array_put(fz_context *ctx, pdf_obj *obj, int i, pdf_obj *item) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { if (obj->kind != PDF_ARRAY) fz_warn(ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); @@ -576,7 +604,7 @@ void pdf_array_push(fz_context *ctx, pdf_obj *obj, pdf_obj *item) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { if (obj->kind != PDF_ARRAY) fz_warn(ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); @@ -597,7 +625,7 @@ void pdf_array_push_drop(fz_context *ctx, pdf_obj *obj, pdf_obj *item) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { fz_try(ctx) pdf_array_push(ctx, obj, item); @@ -612,7 +640,7 @@ void pdf_array_insert(fz_context *ctx, pdf_obj *obj, pdf_obj *item, int i) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { if (obj->kind != PDF_ARRAY) fz_warn(ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); @@ -636,7 +664,7 @@ void pdf_array_insert_drop(fz_context *ctx, pdf_obj *obj, pdf_obj *item, int i) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { fz_try(ctx) pdf_array_insert(ctx, obj, item, i); @@ -651,7 +679,7 @@ void pdf_array_delete(fz_context *ctx, pdf_obj *obj, int i) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { if (obj->kind != PDF_ARRAY) fz_warn(ctx, "assert: not an array (%s)", pdf_objkindstr(obj)); @@ -777,9 +805,26 @@ static int keyvalcmp(const void *ap, const void *bp) { const struct keyval *a = ap; const struct keyval *b = bp; - if (a->k->kind == PDF_NAME && b->k->kind == PDF_NAME) - return strcmp(a->k->u.n, b->k->u.n); - return 0; + const char *an; + const char *bn; + + /* We should never get a->k == NULL or b->k == NULL. If we + * do, then they match. */ + if (a->k < PDF_OBJ_NAME__LIMIT) + an = PDF_NAMES[(intptr_t)a->k]; + else if (a->k >= PDF_OBJ__LIMIT && a->k->kind == PDF_NAME) + an = a->k->u.n; + else + return 0; + + if (b->k < PDF_OBJ_NAME__LIMIT) + bn = PDF_NAMES[(intptr_t)b->k]; + else if (b->k >= PDF_OBJ__LIMIT && b->k->kind == PDF_NAME) + bn = b->k->u.n; + else + return 0; + + return strcmp(an, bn); } pdf_obj * @@ -839,7 +884,7 @@ pdf_copy_dict(fz_context *ctx, pdf_obj *obj) int i, n; RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { pdf_document *doc = obj->doc; @@ -860,7 +905,7 @@ int pdf_dict_len(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj || obj->kind != PDF_DICT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_DICT) return 0; return obj->u.d.len; } @@ -869,7 +914,7 @@ pdf_obj * pdf_dict_get_key(fz_context *ctx, pdf_obj *obj, int i) { RESOLVE(obj); - if (!obj || obj->kind != PDF_DICT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_DICT) return NULL; if (i < 0 || i >= obj->u.d.len) return NULL; @@ -880,7 +925,7 @@ pdf_obj * pdf_dict_get_val(fz_context *ctx, pdf_obj *obj, int i) { RESOLVE(obj); - if (!obj || obj->kind != PDF_DICT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_DICT) return NULL; if (i < 0 || i >= obj->u.d.len) return NULL; @@ -944,6 +989,66 @@ pdf_dict_finds(fz_context *ctx, pdf_obj *obj, const char *key, int *location) if (strcmp(pdf_to_name(ctx, obj->u.d.items[i].k), key) == 0) return i; + + if (location) + *location = obj->u.d.len; + } + + return -1; +} + +static int +pdf_dict_find(fz_context *ctx, pdf_obj *obj, pdf_obj *key, int *location) +{ + if ((obj->flags & PDF_FLAGS_SORTED) && obj->u.d.len > 0) + { + int l = 0; + int r = obj->u.d.len - 1; + pdf_obj *k = obj->u.d.items[r].k; + + if (k == key || (k >= PDF_OBJ__LIMIT && strcmp(k->u.n, PDF_NAMES[(intptr_t)key]) < 0)) + { + if (location) + *location = r + 1; + return -1; + } + + while (l <= r) + { + int m = (l + r) >> 1; + int c; + + k = obj->u.d.items[m].k; + c = (k < PDF_OBJ__LIMIT ? key-k : -strcmp(k->u.n, PDF_NAMES[(intptr_t)key])); + if (c < 0) + r = m - 1; + else if (c > 0) + l = m + 1; + else + return m; + + if (location) + *location = l; + } + } + else + { + int i; + for (i = 0; i < obj->u.d.len; i++) + { + pdf_obj *k = obj->u.d.items[i].k; + if (k < PDF_OBJ__LIMIT) + { + if (k == key) + return i; + } + else + { + if (!strcmp(PDF_NAMES[(intptr_t)key], k->u.n)) + return i; + } + } + if (location) *location = obj->u.d.len; } @@ -957,7 +1062,7 @@ pdf_dict_gets(fz_context *ctx, pdf_obj *obj, const char *key) int i; RESOLVE(obj); - if (!obj || obj->kind != PDF_DICT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_DICT) return NULL; i = pdf_dict_finds(ctx, obj, key, NULL); @@ -971,7 +1076,7 @@ pdf_obj * pdf_dict_getp(fz_context *ctx, pdf_obj *obj, const char *keys) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { char buf[256]; char *k, *e; @@ -1003,11 +1108,44 @@ pdf_dict_getp(fz_context *ctx, pdf_obj *obj, const char *keys) } pdf_obj * +pdf_dict_getl(fz_context *ctx, pdf_obj *obj, ...) +{ + va_list keys; + pdf_obj *key; + + va_start(keys, obj); + + while (obj != NULL && (key = va_arg(keys, pdf_obj *)) != NULL) + { + obj = pdf_dict_get(ctx, obj, key); + } + + va_end(keys); + return obj; +} + + +pdf_obj * pdf_dict_get(fz_context *ctx, pdf_obj *obj, pdf_obj *key) { - if (!key || key->kind != PDF_NAME) + int i; + + if (key >= PDF_OBJ__LIMIT) + { + if (key->kind != PDF_NAME) + return NULL; + + return pdf_dict_gets(ctx, obj, pdf_to_name(ctx, key)); + } + + RESOLVE(obj); + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_DICT) return NULL; - return pdf_dict_gets(ctx, obj, pdf_to_name(ctx, key)); + + i = pdf_dict_find(ctx, obj, key, NULL); + if (i >= 0) + return obj->u.d.items[i].v; + return NULL; } pdf_obj * @@ -1020,11 +1158,21 @@ pdf_dict_getsa(fz_context *ctx, pdf_obj *obj, const char *key, const char *abbre return pdf_dict_gets(ctx, obj, abbrev); } +pdf_obj * +pdf_dict_geta(fz_context *ctx, pdf_obj *obj, pdf_obj *key, pdf_obj *abbrev) +{ + pdf_obj *v; + v = pdf_dict_get(ctx, obj, key); + if (v) + return v; + return pdf_dict_get(ctx, obj, abbrev); +} + void pdf_dict_put(fz_context *ctx, pdf_obj *obj, pdf_obj *key, pdf_obj *val) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { int location; char *s; @@ -1037,7 +1185,7 @@ pdf_dict_put(fz_context *ctx, pdf_obj *obj, pdf_obj *key, pdf_obj *val) } RESOLVE(key); - if (!key || key->kind != PDF_NAME) + if (!key || (key >= PDF_OBJ__LIMIT && key->kind != PDF_NAME)) { fz_warn(ctx, "assert: key is not a name (%s)", pdf_objkindstr(obj)); return; @@ -1086,6 +1234,17 @@ pdf_dict_put(fz_context *ctx, pdf_obj *obj, pdf_obj *key, pdf_obj *val) } void +pdf_dict_put_drop(fz_context *ctx, pdf_obj *obj, pdf_obj *key, pdf_obj *val) +{ + fz_try(ctx) + pdf_dict_put(ctx, obj, key, val); + fz_always(ctx) + pdf_drop_obj(ctx, val); + fz_catch(ctx) + fz_rethrow(ctx); +} + +void pdf_dict_puts(fz_context *ctx, pdf_obj *obj, const char *key, pdf_obj *val) { pdf_document *doc = obj->doc; @@ -1127,7 +1286,7 @@ void pdf_dict_putp(fz_context *ctx, pdf_obj *obj, const char *keys, pdf_obj *val) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { pdf_document *doc = obj->doc; @@ -1194,11 +1353,80 @@ pdf_dict_putp_drop(fz_context *ctx, pdf_obj *obj, const char *keys, pdf_obj *val fz_rethrow(ctx); } +static void +pdf_dict_vputl(fz_context *ctx, pdf_obj *obj, pdf_obj *val, va_list keys) +{ + pdf_obj *key; + pdf_obj *next_key; + pdf_obj *next_obj; + + key = va_arg(keys, pdf_obj *); + if (key == NULL) + return; + + while ((next_key = va_arg(keys, pdf_obj *)) != NULL) + { + next_obj = pdf_dict_get(ctx, obj, key); + if (next_obj == NULL) + goto new_obj; + obj = next_obj; + key = next_key; + } + + pdf_dict_put(ctx, obj, key, val); + return; + +new_obj: + /* We have to create entries */ + do + { + next_obj = pdf_new_dict(ctx, obj->doc, 1); + pdf_dict_put_drop(ctx, obj, key, next_obj); + obj = next_obj; + key = next_key; + } + while ((next_key = va_arg(keys, pdf_obj *)) != NULL); + + pdf_dict_put(ctx, obj, key, val); + return; +} + +void +pdf_dict_putl(fz_context *ctx, pdf_obj *obj, pdf_obj *val, ...) +{ + va_list keys; + va_start(keys, val); + + fz_try(ctx) + pdf_dict_vputl(ctx, obj, val, keys); + fz_always(ctx) + va_end(keys); + fz_catch(ctx) + fz_rethrow(ctx); +} + +void +pdf_dict_putl_drop(fz_context *ctx, pdf_obj *obj, pdf_obj *val, ...) +{ + va_list keys; + va_start(keys, val); + + fz_try(ctx) + pdf_dict_vputl(ctx, obj, val, keys); + fz_always(ctx) + { + pdf_drop_obj(ctx, val); + va_end(keys); + } + fz_catch(ctx) + fz_rethrow(ctx); +} + void pdf_dict_dels(fz_context *ctx, pdf_obj *obj, const char *key) { RESOLVE(obj); - if (obj) + if (obj >= PDF_OBJ__LIMIT) { if (obj->kind != PDF_DICT) fz_warn(ctx, "assert: not a dict (%s)", pdf_objkindstr(obj)); @@ -1224,7 +1452,12 @@ void pdf_dict_del(fz_context *ctx, pdf_obj *obj, pdf_obj *key) { RESOLVE(key); - if (key && key->kind == PDF_NAME) + if (!key) + return; /* Can't warn */ + + if (key < PDF_OBJ__LIMIT) + pdf_dict_dels(ctx, obj, PDF_NAMES[(intptr_t)key]); + else if (key->kind == PDF_NAME) pdf_dict_dels(ctx, obj, key->u.n); /* else Can't warn */ } @@ -1233,7 +1466,7 @@ void pdf_sort_dict(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj || obj->kind != PDF_DICT) + if (obj < PDF_OBJ__LIMIT || obj->kind != PDF_DICT) return; if (!(obj->flags & PDF_FLAGS_SORTED)) { @@ -1246,7 +1479,7 @@ int pdf_obj_marked(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return 0; return !!(obj->flags & PDF_FLAGS_MARKED); } @@ -1256,7 +1489,7 @@ pdf_mark_obj(fz_context *ctx, pdf_obj *obj) { int marked; RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return 0; marked = !!(obj->flags & PDF_FLAGS_MARKED); obj->flags |= PDF_FLAGS_MARKED; @@ -1267,7 +1500,7 @@ void pdf_unmark_obj(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return; obj->flags &= ~PDF_FLAGS_MARKED; } @@ -1275,6 +1508,9 @@ pdf_unmark_obj(fz_context *ctx, pdf_obj *obj) void pdf_set_obj_memo(fz_context *ctx, pdf_obj *obj, int memo) { + if (obj < PDF_OBJ__LIMIT) + return; + obj->flags |= PDF_FLAGS_MEMO; if (memo) obj->flags |= PDF_FLAGS_MEMO_BOOL; @@ -1285,6 +1521,8 @@ pdf_set_obj_memo(fz_context *ctx, pdf_obj *obj, int memo) int pdf_obj_memo(fz_context *ctx, pdf_obj *obj, int *memo) { + if (obj < PDF_OBJ__LIMIT) + return 0; if (!(obj->flags & PDF_FLAGS_MEMO)) return 0; *memo = !!(obj->flags & PDF_FLAGS_MEMO_BOOL); @@ -1294,7 +1532,7 @@ pdf_obj_memo(fz_context *ctx, pdf_obj *obj, int *memo) int pdf_obj_is_dirty(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return 0; return !!(obj->flags & PDF_FLAGS_DIRTY); } @@ -1302,14 +1540,14 @@ int pdf_obj_is_dirty(fz_context *ctx, pdf_obj *obj) void pdf_dirty_obj(fz_context *ctx, pdf_obj *obj) { RESOLVE(obj); - if (!obj) + if (obj < PDF_OBJ__LIMIT) return; obj->flags |= PDF_FLAGS_DIRTY; } void pdf_clean_obj(fz_context *ctx, pdf_obj *obj) { - if (!obj) + if (obj < PDF_OBJ__LIMIT) return; obj->flags &= ~PDF_FLAGS_DIRTY; } @@ -1343,7 +1581,7 @@ pdf_drop_dict(fz_context *ctx, pdf_obj *obj) void pdf_drop_obj(fz_context *ctx, pdf_obj *obj) { - if (obj) + if (obj >= PDF_OBJ__LIMIT) { if (--obj->refs) return; @@ -1361,7 +1599,7 @@ pdf_set_obj_parent(fz_context *ctx, pdf_obj *obj, int num) { int n, i; - if (!obj) + if (obj < PDF_OBJ__LIMIT) return; obj->parent_num = num; @@ -1383,6 +1621,9 @@ pdf_set_obj_parent(fz_context *ctx, pdf_obj *obj, int num) int pdf_obj_parent_num(fz_context *ctx, pdf_obj *obj) { + if (obj < PDF_OBJ__LIMIT) + return 0; + return obj->parent_num; } @@ -1773,5 +2014,5 @@ pdf_print_ref(fz_context *ctx, pdf_obj *ref) int pdf_obj_refs(fz_context *ctx, pdf_obj *ref) { - return (ref ? ref->refs : 0); + return (ref >= PDF_OBJ__LIMIT ? ref->refs : 0); } diff --git a/source/pdf/pdf-op-filter.c b/source/pdf/pdf-op-filter.c index c030f468..24644a37 100644 --- a/source/pdf/pdf-op-filter.c +++ b/source/pdf/pdf-op-filter.c @@ -51,22 +51,22 @@ typedef struct pdf_filter_processor_s } pdf_filter_processor; static void -copy_resource(fz_context *ctx, pdf_filter_processor *p, const char *key, const char *name) +copy_resource(fz_context *ctx, pdf_filter_processor *p, pdf_obj *key, const char *name) { pdf_obj *res, *obj; if (!name || name[0] == 0) return; - res = pdf_dict_gets(ctx, p->old_rdb, key); + res = pdf_dict_get(ctx, p->old_rdb, key); obj = pdf_dict_gets(ctx, res, name); if (obj) { - res = pdf_dict_gets(ctx, p->new_rdb, key); + res = pdf_dict_get(ctx, p->new_rdb, key); if (!res) { res = pdf_new_dict(ctx, p->doc, 1); - pdf_dict_puts_drop(ctx, p->new_rdb, key, res); + pdf_dict_put_drop(ctx, p->new_rdb, key, res); } pdf_dict_putp(ctx, res, name, obj); } @@ -402,7 +402,7 @@ pdf_filter_gs_begin(fz_context *ctx, pdf_processor *proc, const char *name, pdf_ filter_flush(ctx, p, FLUSH_ALL); if (p->chain->op_gs_begin) p->chain->op_gs_begin(ctx, p->chain, name, extgstate); - copy_resource(ctx, p, "ExtGState", name); + copy_resource(ctx, p, PDF_NAME_ExtGState, name); } static void @@ -725,7 +725,7 @@ pdf_filter_Tf(fz_context *ctx, pdf_processor *proc, const char *name, pdf_font_d filter_flush(ctx, p, 0); if (p->chain->op_Tf) p->chain->op_Tf(ctx, p->chain, name, font, size); - copy_resource(ctx, p, "Font", name); + copy_resource(ctx, p, PDF_NAME_Font, name); } static void @@ -851,7 +851,7 @@ pdf_filter_CS(fz_context *ctx, pdf_processor *proc, const char *name, fz_colorsp filter_gstate *gstate = gstate_to_update(ctx, p); fz_strlcpy(gstate->CS.name, name, sizeof gstate->CS.name); gstate->CS.cs = cs; - copy_resource(ctx, p, "ColorSpace", name); + copy_resource(ctx, p, PDF_NAME_ColorSpace, name); } static void @@ -861,7 +861,7 @@ pdf_filter_cs(fz_context *ctx, pdf_processor *proc, const char *name, fz_colorsp filter_gstate *gstate = gstate_to_update(ctx, p); fz_strlcpy(gstate->cs.name, name, sizeof gstate->cs.name); gstate->cs.cs = cs; - copy_resource(ctx, p, "ColorSpace", name); + copy_resource(ctx, p, PDF_NAME_ColorSpace, name); } static void @@ -876,7 +876,7 @@ pdf_filter_SC_pattern(fz_context *ctx, pdf_processor *proc, const char *name, pd gstate->SC.n = n; for (i = 0; i < n; ++i) gstate->SC.c[i] = color[i]; - copy_resource(ctx, p, "Pattern", name); + copy_resource(ctx, p, PDF_NAME_Pattern, name); } static void @@ -891,7 +891,7 @@ pdf_filter_sc_pattern(fz_context *ctx, pdf_processor *proc, const char *name, pd gstate->sc.n = n; for (i = 0; i < n; ++i) gstate->sc.c[i] = color[i]; - copy_resource(ctx, p, "Pattern", name); + copy_resource(ctx, p, PDF_NAME_Pattern, name); } static void @@ -903,7 +903,7 @@ pdf_filter_SC_shade(fz_context *ctx, pdf_processor *proc, const char *name, fz_s gstate->SC.pat = NULL; gstate->SC.shd = shade; gstate->SC.n = 0; - copy_resource(ctx, p, "Pattern", name); + copy_resource(ctx, p, PDF_NAME_Pattern, name); } static void @@ -915,7 +915,7 @@ pdf_filter_sc_shade(fz_context *ctx, pdf_processor *proc, const char *name, fz_s gstate->sc.pat = NULL; gstate->sc.shd = shade; gstate->sc.n = 0; - copy_resource(ctx, p, "Pattern", name); + copy_resource(ctx, p, PDF_NAME_Pattern, name); } static void @@ -1012,7 +1012,7 @@ pdf_filter_sh(fz_context *ctx, pdf_processor *proc, const char *name, fz_shade * filter_flush(ctx, p, FLUSH_ALL); if (p->chain->op_sh) p->chain->op_sh(ctx, p->chain, name, shade); - copy_resource(ctx, p, "Shading", name); + copy_resource(ctx, p, PDF_NAME_Shading, name); } static void @@ -1022,7 +1022,7 @@ pdf_filter_Do_image(fz_context *ctx, pdf_processor *proc, const char *name, fz_i filter_flush(ctx, p, FLUSH_ALL); if (p->chain->op_Do_image) p->chain->op_Do_image(ctx, p->chain, name, image); - copy_resource(ctx, p, "XObject", name); + copy_resource(ctx, p, PDF_NAME_XObject, name); } static void @@ -1032,7 +1032,7 @@ pdf_filter_Do_form(fz_context *ctx, pdf_processor *proc, const char *name, pdf_x filter_flush(ctx, p, FLUSH_ALL); if (p->chain->op_Do_form) p->chain->op_Do_form(ctx, p->chain, name, xobj, page_resources); - copy_resource(ctx, p, "XObject", name); + copy_resource(ctx, p, PDF_NAME_XObject, name); } /* marked content */ diff --git a/source/pdf/pdf-outline.c b/source/pdf/pdf-outline.c index 34bb79ed..8f83fdf9 100644 --- a/source/pdf/pdf-outline.c +++ b/source/pdf/pdf-outline.c @@ -26,25 +26,25 @@ pdf_load_outline_imp(fz_context *ctx, pdf_document *doc, pdf_obj *dict) *prev = node; prev = &node->next; - obj = pdf_dict_gets(ctx, dict, "Title"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Title); if (obj) node->title = pdf_to_utf8(ctx, doc, obj); - if ((obj = pdf_dict_gets(ctx, dict, "Dest")) != NULL) + if ((obj = pdf_dict_get(ctx, dict, PDF_NAME_Dest)) != NULL) node->dest = pdf_parse_link_dest(ctx, doc, FZ_LINK_GOTO, obj); - else if ((obj = pdf_dict_gets(ctx, dict, "A")) != NULL) + else if ((obj = pdf_dict_get(ctx, dict, PDF_NAME_A)) != NULL) node->dest = pdf_parse_action(ctx, doc, obj); - obj = pdf_dict_gets(ctx, dict, "First"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_First); if (obj) node->down = pdf_load_outline_imp(ctx, doc, obj); - dict = pdf_dict_gets(ctx, dict, "Next"); + dict = pdf_dict_get(ctx, dict, PDF_NAME_Next); } } fz_always(ctx) { - for (dict = odict; dict && pdf_obj_marked(ctx, dict); dict = pdf_dict_gets(ctx, dict, "Next")) + for (dict = odict; dict && pdf_obj_marked(ctx, dict); dict = pdf_dict_get(ctx, dict, PDF_NAME_Next)) pdf_unmark_obj(ctx, dict); } fz_catch(ctx) @@ -61,9 +61,9 @@ pdf_load_outline(fz_context *ctx, pdf_document *doc) { pdf_obj *root, *obj, *first; - root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - obj = pdf_dict_gets(ctx, root, "Outlines"); - first = pdf_dict_gets(ctx, obj, "First"); + root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + obj = pdf_dict_get(ctx, root, PDF_NAME_Outlines); + first = pdf_dict_get(ctx, obj, PDF_NAME_First); if (first) return pdf_load_outline_imp(ctx, doc, first); diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c index 7917afbf..588ba093 100644 --- a/source/pdf/pdf-page.c +++ b/source/pdf/pdf-page.c @@ -36,7 +36,7 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int * { do { - kids = pdf_dict_gets(ctx, node, "Kids"); + kids = pdf_dict_get(ctx, node, PDF_NAME_Kids); len = pdf_array_len(ctx, kids); if (len == 0) @@ -62,10 +62,10 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int * for (i = 0; i < len; i++) { pdf_obj *kid = pdf_array_get(ctx, kids, i); - char *type = pdf_to_name(ctx, pdf_dict_gets(ctx, kid, "Type")); - if (*type ? !strcmp(type, "Pages") : pdf_dict_gets(ctx, kid, "Kids") && !pdf_dict_gets(ctx, kid, "MediaBox")) + pdf_obj *type = pdf_dict_get(ctx, kid, PDF_NAME_Type); + if (type ? pdf_name_eq(ctx, type, PDF_NAME_Pages) : pdf_dict_get(ctx, kid, PDF_NAME_Kids) && !pdf_dict_get(ctx, kid, PDF_NAME_MediaBox)) { - int count = pdf_to_int(ctx, pdf_dict_gets(ctx, kid, "Count")); + int count = pdf_to_int(ctx, pdf_dict_get(ctx, kid, PDF_NAME_Count)); if (*skip < count) { node = kid; @@ -78,8 +78,8 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int * } else { - if (*type ? strcmp(type, "Page") != 0 : !pdf_dict_gets(ctx, kid, "MediaBox")) - fz_warn(ctx, "non-page object in page tree (%s)", type); + if (type ? !pdf_name_eq(ctx, type, PDF_NAME_Page) != 0 : !pdf_dict_get(ctx, kid, PDF_NAME_MediaBox)) + fz_warn(ctx, "non-page object in page tree (%s)", pdf_to_name(ctx, type)); if (*skip == 0) { if (parentp) *parentp = node; @@ -114,8 +114,8 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int * pdf_obj * pdf_lookup_page_loc(fz_context *ctx, pdf_document *doc, int needle, pdf_obj **parentp, int *indexp) { - pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pdf_obj *node = pdf_dict_gets(ctx, root, "Pages"); + pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pdf_obj *node = pdf_dict_get(ctx, root, PDF_NAME_Pages); int skip = needle; pdf_obj *hit; @@ -137,16 +137,16 @@ pdf_lookup_page_obj(fz_context *ctx, pdf_document *doc, int needle) static int pdf_count_pages_before_kid(fz_context *ctx, pdf_document *doc, pdf_obj *parent, int kid_num) { - pdf_obj *kids = pdf_dict_gets(ctx, parent, "Kids"); + pdf_obj *kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids); int i, total = 0, len = pdf_array_len(ctx, kids); for (i = 0; i < len; i++) { pdf_obj *kid = pdf_array_get(ctx, kids, i); if (pdf_to_num(ctx, kid) == kid_num) return total; - if (!strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, kid, "Type")), "Pages")) + if (pdf_name_eq(ctx, pdf_dict_get(ctx, kid, PDF_NAME_Type), PDF_NAME_Pages)) { - pdf_obj *count = pdf_dict_gets(ctx, kid, "Count"); + pdf_obj *count = pdf_dict_get(ctx, kid, PDF_NAME_Count); int n = pdf_to_int(ctx, count); if (!pdf_is_int(ctx, count) || n < 0) fz_throw(ctx, FZ_ERROR_GENERIC, "illegal or missing count in pages tree"); @@ -165,10 +165,10 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node) int total = 0; pdf_obj *parent, *parent2; - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, node, "Type")), "Page") != 0) + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, node, PDF_NAME_Type), PDF_NAME_Page) != 0) fz_throw(ctx, FZ_ERROR_GENERIC, "invalid page object"); - parent2 = parent = pdf_dict_gets(ctx, node, "Parent"); + parent2 = parent = pdf_dict_get(ctx, node, PDF_NAME_Parent); fz_var(parent); fz_try(ctx) { @@ -178,7 +178,7 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node) fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree (parents)"); total += pdf_count_pages_before_kid(ctx, doc, parent, needle); needle = pdf_to_num(ctx, parent); - parent = pdf_dict_gets(ctx, parent, "Parent"); + parent = pdf_dict_get(ctx, parent, PDF_NAME_Parent); } } fz_always(ctx) @@ -189,7 +189,7 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node) pdf_unmark_obj(ctx, parent2); if (parent2 == parent) break; - parent2 = pdf_dict_gets(ctx, parent2, "Parent"); + parent2 = pdf_dict_get(ctx, parent2, PDF_NAME_Parent); } } fz_catch(ctx) @@ -201,7 +201,7 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node) } static pdf_obj * -pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node, const char *key) +pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node, pdf_obj *key) { pdf_obj *node2 = node; pdf_obj *val; @@ -212,12 +212,12 @@ pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node { do { - val = pdf_dict_gets(ctx, node, key); + val = pdf_dict_get(ctx, node, key); if (val) break; if (pdf_mark_obj(ctx, node)) fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree (parents)"); - node = pdf_dict_gets(ctx, node, "Parent"); + node = pdf_dict_get(ctx, node, PDF_NAME_Parent); } while (node); } @@ -228,7 +228,7 @@ pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node pdf_unmark_obj(ctx, node2); if (node2 == node) break; - node2 = pdf_dict_gets(ctx, node2, "Parent"); + node2 = pdf_dict_get(ctx, node2, PDF_NAME_Parent); } while (node2); } @@ -247,8 +247,8 @@ static int pdf_resources_use_blending(fz_context *ctx, pdf_document *doc, pdf_ob static int pdf_extgstate_uses_blending(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { - pdf_obj *obj = pdf_dict_gets(ctx, dict, "BM"); - if (pdf_is_name(ctx, obj) && strcmp(pdf_to_name(ctx, obj), "Normal")) + pdf_obj *obj = pdf_dict_get(ctx, dict, PDF_NAME_BM); + if (obj && !pdf_name_eq(ctx, obj, PDF_NAME_Normal)) return 1; return 0; } @@ -257,18 +257,18 @@ static int pdf_pattern_uses_blending(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { pdf_obj *obj; - obj = pdf_dict_gets(ctx, dict, "Resources"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Resources); if (pdf_resources_use_blending(ctx, doc, obj)) return 1; - obj = pdf_dict_gets(ctx, dict, "ExtGState"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ExtGState); return pdf_extgstate_uses_blending(ctx, doc, obj); } static int pdf_xobject_uses_blending(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { - pdf_obj *obj = pdf_dict_gets(ctx, dict, "Resources"); - if (!strcmp(pdf_to_name(ctx, pdf_dict_getp(ctx, dict, "Group/S")), "Transparency")) + pdf_obj *obj = pdf_dict_get(ctx, dict, PDF_NAME_Resources); + if (pdf_name_eq(ctx, pdf_dict_getp(ctx, dict, "Group/S"), PDF_NAME_Transparency)) return 1; return pdf_resources_use_blending(ctx, doc, obj); } @@ -292,19 +292,19 @@ pdf_resources_use_blending(fz_context *ctx, pdf_document *doc, pdf_obj *rdb) fz_try(ctx) { - obj = pdf_dict_gets(ctx, rdb, "ExtGState"); + obj = pdf_dict_get(ctx, rdb, PDF_NAME_ExtGState); n = pdf_dict_len(ctx, obj); for (i = 0; i < n; i++) if (pdf_extgstate_uses_blending(ctx, doc, pdf_dict_get_val(ctx, obj, i))) goto found; - obj = pdf_dict_gets(ctx, rdb, "Pattern"); + obj = pdf_dict_get(ctx, rdb, PDF_NAME_Pattern); n = pdf_dict_len(ctx, obj); for (i = 0; i < n; i++) if (pdf_pattern_uses_blending(ctx, doc, pdf_dict_get_val(ctx, obj, i))) goto found; - obj = pdf_dict_gets(ctx, rdb, "XObject"); + obj = pdf_dict_get(ctx, rdb, PDF_NAME_XObject); n = pdf_dict_len(ctx, obj); for (i = 0; i < n; i++) if (pdf_xobject_uses_blending(ctx, doc, pdf_dict_get_val(ctx, obj, i))) @@ -331,43 +331,43 @@ found: static void pdf_load_transition(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *transdict) { - char *name; + pdf_obj *name; pdf_obj *obj; int type; - obj = pdf_dict_gets(ctx, transdict, "D"); + obj = pdf_dict_get(ctx, transdict, PDF_NAME_D); page->transition.duration = (obj ? pdf_to_real(ctx, obj) : 1); - page->transition.vertical = (pdf_to_name(ctx, pdf_dict_gets(ctx, transdict, "Dm"))[0] != 'H'); - page->transition.outwards = (pdf_to_name(ctx, pdf_dict_gets(ctx, transdict, "M"))[0] != 'I'); + page->transition.vertical = !pdf_name_eq(ctx, pdf_dict_get(ctx, transdict, PDF_NAME_Dm), PDF_NAME_H); + page->transition.outwards = !pdf_name_eq(ctx, pdf_dict_get(ctx, transdict, PDF_NAME_M), PDF_NAME_I); /* FIXME: If 'Di' is None, it should be handled differently, but * this only affects Fly, and we don't implement that currently. */ - page->transition.direction = (pdf_to_int(ctx, pdf_dict_gets(ctx, transdict, "Di"))); + page->transition.direction = (pdf_to_int(ctx, pdf_dict_get(ctx, transdict, PDF_NAME_Di))); /* FIXME: Read SS for Fly when we implement it */ /* FIXME: Read B for Fly when we implement it */ - name = pdf_to_name(ctx, pdf_dict_gets(ctx, transdict, "S")); - if (!strcmp(name, "Split")) + name = pdf_dict_get(ctx, transdict, PDF_NAME_S); + if (pdf_name_eq(ctx, name, PDF_NAME_Split)) type = FZ_TRANSITION_SPLIT; - else if (!strcmp(name, "Blinds")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Blinds)) type = FZ_TRANSITION_BLINDS; - else if (!strcmp(name, "Box")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Box)) type = FZ_TRANSITION_BOX; - else if (!strcmp(name, "Wipe")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Wipe)) type = FZ_TRANSITION_WIPE; - else if (!strcmp(name, "Dissolve")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Dissolve)) type = FZ_TRANSITION_DISSOLVE; - else if (!strcmp(name, "Glitter")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Glitter)) type = FZ_TRANSITION_GLITTER; - else if (!strcmp(name, "Fly")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Fly)) type = FZ_TRANSITION_FLY; - else if (!strcmp(name, "Push")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Push)) type = FZ_TRANSITION_PUSH; - else if (!strcmp(name, "Cover")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Cover)) type = FZ_TRANSITION_COVER; - else if (!strcmp(name, "Uncover")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Uncover)) type = FZ_TRANSITION_UNCOVER; - else if (!strcmp(name, "Fade")) + else if (pdf_name_eq(ctx, name, PDF_NAME_Fade)) type = FZ_TRANSITION_FADE; else type = FZ_TRANSITION_NONE; @@ -464,13 +464,13 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number) page->me = pdf_keep_obj(ctx, pageobj); page->incomplete = 0; - obj = pdf_dict_gets(ctx, pageobj, "UserUnit"); + obj = pdf_dict_get(ctx, pageobj, PDF_NAME_UserUnit); if (pdf_is_real(ctx, obj)) userunit = pdf_to_real(ctx, obj); else userunit = 1; - pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, "MediaBox"), &mediabox); + pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_MediaBox), &mediabox); if (fz_is_empty_rect(&mediabox)) { fz_warn(ctx, "cannot find page size for page %d", number + 1); @@ -480,7 +480,7 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number) mediabox.y1 = 792; } - pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, "CropBox"), &cropbox); + pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_CropBox), &cropbox); if (!fz_is_empty_rect(&cropbox)) fz_intersect_rect(&mediabox, &cropbox); @@ -495,7 +495,7 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number) page->mediabox = fz_unit_rect; } - page->rotate = pdf_to_int(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, "Rotate")); + page->rotate = pdf_to_int(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_Rotate)); /* Snap page->rotate to 0, 90, 180 or 270 */ if (page->rotate < 0) page->rotate = 360 - ((-page->rotate) % 360); @@ -513,7 +513,7 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number) fz_try(ctx) { - obj = pdf_dict_gets(ctx, pageobj, "Annots"); + obj = pdf_dict_get(ctx, pageobj, PDF_NAME_Annots); if (obj) { page->links = pdf_load_link_annots(ctx, doc, obj, &page->ctm); @@ -529,9 +529,9 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number) page->links = NULL; } - page->duration = pdf_to_real(ctx, pdf_dict_gets(ctx, pageobj, "Dur")); + page->duration = pdf_to_real(ctx, pdf_dict_get(ctx, pageobj, PDF_NAME_Dur)); - obj = pdf_dict_gets(ctx, pageobj, "Trans"); + obj = pdf_dict_get(ctx, pageobj, PDF_NAME_Trans); page->transition_present = (obj != NULL); if (obj) { @@ -539,18 +539,18 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number) } // TODO: inherit - page->resources = pdf_lookup_inherited_page_item(ctx, doc, pageobj, "Resources"); + page->resources = pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_Resources); if (page->resources) pdf_keep_obj(ctx, page->resources); - obj = pdf_dict_gets(ctx, pageobj, "Contents"); + obj = pdf_dict_get(ctx, pageobj, PDF_NAME_Contents); fz_try(ctx) { page->contents = pdf_keep_obj(ctx, obj); if (pdf_resources_use_blending(ctx, doc, page->resources)) page->transparency = 1; - else if (!strcmp(pdf_to_name(ctx, pdf_dict_getp(ctx, pageobj, "Group/S")), "Transparency")) + else if (pdf_name_eq(ctx, pdf_dict_getp(ctx, pageobj, "Group/S"), PDF_NAME_Transparency)) page->transparency = 1; for (annot = page->annots; annot && !page->transparency; annot = annot->next) @@ -577,14 +577,14 @@ pdf_delete_page(fz_context *ctx, pdf_document *doc, int at) int i; pdf_lookup_page_loc(ctx, doc, at, &parent, &i); - kids = pdf_dict_gets(ctx, parent, "Kids"); + kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids); pdf_array_delete(ctx, kids, i); while (parent) { - int count = pdf_to_int(ctx, pdf_dict_gets(ctx, parent, "Count")); - pdf_dict_puts_drop(ctx, parent, "Count", pdf_new_int(ctx, doc, count - 1)); - parent = pdf_dict_gets(ctx, parent, "Parent"); + int count = pdf_to_int(ctx, pdf_dict_get(ctx, parent, PDF_NAME_Count)); + pdf_dict_put_drop(ctx, parent, PDF_NAME_Count, pdf_new_int(ctx, doc, count - 1)); + parent = pdf_dict_get(ctx, parent, PDF_NAME_Parent); } doc->page_count = 0; /* invalidate cached value */ @@ -604,12 +604,12 @@ pdf_insert_page(fz_context *ctx, pdf_document *doc, pdf_page *page, int at) { if (count == 0) { - pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - parent = pdf_dict_gets(ctx, root, "Pages"); + pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + parent = pdf_dict_get(ctx, root, PDF_NAME_Pages); if (!parent) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find page tree"); - kids = pdf_dict_gets(ctx, parent, "Kids"); + kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids); if (!kids) fz_throw(ctx, FZ_ERROR_GENERIC, "malformed page tree"); @@ -625,25 +625,25 @@ pdf_insert_page(fz_context *ctx, pdf_document *doc, pdf_page *page, int at) /* append after last page */ pdf_lookup_page_loc(ctx, doc, count - 1, &parent, &i); - kids = pdf_dict_gets(ctx, parent, "Kids"); + kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids); pdf_array_insert(ctx, kids, page_ref, i + 1); } else { /* insert before found page */ pdf_lookup_page_loc(ctx, doc, at, &parent, &i); - kids = pdf_dict_gets(ctx, parent, "Kids"); + kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids); pdf_array_insert(ctx, kids, page_ref, i); } - pdf_dict_puts(ctx, page->me, "Parent", parent); + pdf_dict_put(ctx, page->me, PDF_NAME_Parent, parent); /* Adjust page counts */ while (parent) { - int count = pdf_to_int(ctx, pdf_dict_gets(ctx, parent, "Count")); - pdf_dict_puts_drop(ctx, parent, "Count", pdf_new_int(ctx, doc, count + 1)); - parent = pdf_dict_gets(ctx, parent, "Parent"); + int count = pdf_to_int(ctx, pdf_dict_get(ctx, parent, PDF_NAME_Count)); + pdf_dict_put_drop(ctx, parent, PDF_NAME_Count, pdf_new_int(ctx, doc, count + 1)); + parent = pdf_dict_get(ctx, parent, PDF_NAME_Parent); } } @@ -686,13 +686,13 @@ pdf_create_page(fz_context *ctx, pdf_document *doc, fz_rect mediabox, int res, i page->annots = NULL; page->me = pageobj = pdf_new_dict(ctx, doc, 4); - pdf_dict_puts_drop(ctx, pageobj, "Type", pdf_new_name(ctx, doc, "Page")); + pdf_dict_put_drop(ctx, pageobj, PDF_NAME_Type, PDF_NAME_Page); page->mediabox.x0 = fz_min(mediabox.x0, mediabox.x1) * userunit; page->mediabox.y0 = fz_min(mediabox.y0, mediabox.y1) * userunit; page->mediabox.x1 = fz_max(mediabox.x0, mediabox.x1) * userunit; page->mediabox.y1 = fz_max(mediabox.y0, mediabox.y1) * userunit; - pdf_dict_puts_drop(ctx, pageobj, "MediaBox", pdf_new_rect(ctx, doc, &page->mediabox)); + pdf_dict_put_drop(ctx, pageobj, PDF_NAME_MediaBox, pdf_new_rect(ctx, doc, &page->mediabox)); /* Snap page->rotate to 0, 90, 180 or 270 */ if (page->rotate < 0) @@ -702,7 +702,7 @@ pdf_create_page(fz_context *ctx, pdf_document *doc, fz_rect mediabox, int res, i page->rotate = 90*((page->rotate + 45)/90); if (page->rotate > 360) page->rotate = 0; - pdf_dict_puts_drop(ctx, pageobj, "Rotate", pdf_new_int(ctx, doc, page->rotate)); + pdf_dict_put_drop(ctx, pageobj, PDF_NAME_Rotate, pdf_new_int(ctx, doc, page->rotate)); fz_pre_rotate(fz_scale(&ctm, 1, -1), -page->rotate); realbox = page->mediabox; diff --git a/source/pdf/pdf-pattern.c b/source/pdf/pdf-pattern.c index 32fd077c..0dc42d58 100644 --- a/source/pdf/pdf-pattern.c +++ b/source/pdf/pdf-pattern.c @@ -53,9 +53,9 @@ pdf_load_pattern(fz_context *ctx, pdf_document *doc, pdf_obj *dict) /* Store pattern now, to avoid possible recursion if objects refer back to this one */ pdf_store_item(ctx, dict, pat, pdf_pattern_size(pat)); - pat->ismask = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "PaintType")) == 2; - pat->xstep = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "XStep")); - pat->ystep = pdf_to_real(ctx, pdf_dict_gets(ctx, dict, "YStep")); + pat->ismask = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_PaintType)) == 2; + pat->xstep = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_XStep)); + pat->ystep = pdf_to_real(ctx, pdf_dict_get(ctx, dict, PDF_NAME_YStep)); obj = pdf_dict_gets(ctx, dict, "BBox"); pdf_to_rect(ctx, obj, &pat->bbox); @@ -66,7 +66,7 @@ pdf_load_pattern(fz_context *ctx, pdf_document *doc, pdf_obj *dict) else pat->matrix = fz_identity; - pat->resources = pdf_dict_gets(ctx, dict, "Resources"); + pat->resources = pdf_dict_get(ctx, dict, PDF_NAME_Resources); if (pat->resources) pdf_keep_obj(ctx, pat->resources); diff --git a/source/pdf/pdf-pkcs7.c b/source/pdf/pdf-pkcs7.c index c1a97599..93abd474 100644 --- a/source/pdf/pdf-pkcs7.c +++ b/source/pdf/pdf-pkcs7.c @@ -737,7 +737,7 @@ void pdf_sign_signature(fz_context *ctx, pdf_document *doc, pdf_widget *widget, pdf_signature_set_value(ctx, doc, wobj, signer); - pdf_to_rect(ctx, pdf_dict_gets(ctx, wobj, "Rect"), &rect); + pdf_to_rect(ctx, pdf_dict_get(ctx, wobj, PDF_NAME_Rect), &rect); /* Create an appearance stream only if the signature is intended to be visible */ if (!fz_is_empty_rect(&rect)) { diff --git a/source/pdf/pdf-repair.c b/source/pdf/pdf-repair.c index 0c1c504c..3c149177 100644 --- a/source/pdf/pdf-repair.c +++ b/source/pdf/pdf-repair.c @@ -54,17 +54,17 @@ pdf_repair_obj(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf, int *stmofsp if (encrypt && id) { - obj = pdf_dict_gets(ctx, dict, "Type"); - if (pdf_is_name(ctx, obj) && !strcmp(pdf_to_name(ctx, obj), "XRef")) + obj = pdf_dict_get(ctx, dict, PDF_NAME_Type); + if (pdf_name_eq(ctx, obj, PDF_NAME_XRef)) { - obj = pdf_dict_gets(ctx, dict, "Encrypt"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Encrypt); if (obj) { pdf_drop_obj(ctx, *encrypt); *encrypt = pdf_keep_obj(ctx, obj); } - obj = pdf_dict_gets(ctx, dict, "ID"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ID); if (obj) { pdf_drop_obj(ctx, *id); @@ -73,14 +73,14 @@ pdf_repair_obj(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf, int *stmofsp } } - obj = pdf_dict_gets(ctx, dict, "Length"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Length); if (!pdf_is_indirect(ctx, obj) && pdf_is_int(ctx, obj)) stm_len = pdf_to_int(ctx, obj); if (doc->file_reading_linearly && page) { - obj = pdf_dict_gets(ctx, dict, "Type"); - if (!strcmp(pdf_to_name(ctx, obj), "Page")) + obj = pdf_dict_get(ctx, dict, PDF_NAME_Type); + if (pdf_name_eq(ctx, obj, PDF_NAME_Page)) { pdf_drop_obj(ctx, *page); *page = pdf_keep_obj(ctx, dict); @@ -182,7 +182,7 @@ pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen) { obj = pdf_load_object(ctx, doc, num, gen); - count = pdf_to_int(ctx, pdf_dict_gets(ctx, obj, "N")); + count = pdf_to_int(ctx, pdf_dict_get(ctx, obj, PDF_NAME_N)); pdf_drop_obj(ctx, obj); @@ -403,28 +403,28 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) continue; } - obj = pdf_dict_gets(ctx, dict, "Encrypt"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Encrypt); if (obj) { pdf_drop_obj(ctx, encrypt); encrypt = pdf_keep_obj(ctx, obj); } - obj = pdf_dict_gets(ctx, dict, "ID"); - if (obj && (!id || !encrypt || pdf_dict_gets(ctx, dict, "Encrypt"))) + obj = pdf_dict_get(ctx, dict, PDF_NAME_ID); + if (obj && (!id || !encrypt || pdf_dict_get(ctx, dict, PDF_NAME_Encrypt))) { pdf_drop_obj(ctx, id); id = pdf_keep_obj(ctx, obj); } - obj = pdf_dict_gets(ctx, dict, "Root"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Root); if (obj) { pdf_drop_obj(ctx, root); root = pdf_keep_obj(ctx, obj); } - obj = pdf_dict_gets(ctx, dict, "Info"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Info); if (obj) { pdf_drop_obj(ctx, info); @@ -472,7 +472,7 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) dict = pdf_load_object(ctx, doc, list[i].num, list[i].gen); length = pdf_new_int(ctx, doc, list[i].stm_len); - pdf_dict_puts(ctx, dict, "Length", length); + pdf_dict_put(ctx, dict, PDF_NAME_Length, length); pdf_drop_obj(ctx, length); pdf_drop_obj(ctx, dict); @@ -507,19 +507,19 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) obj = NULL; obj = pdf_new_int(ctx, doc, maxnum + 1); - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "Size", obj); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Size, obj); pdf_drop_obj(ctx, obj); obj = NULL; if (root) { - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "Root", root); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, root); pdf_drop_obj(ctx, root); root = NULL; } if (info) { - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "Info", info); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info, info); pdf_drop_obj(ctx, info); info = NULL; } @@ -534,7 +534,7 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) encrypt = obj; obj = NULL; } - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "Encrypt", encrypt); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Encrypt, encrypt); pdf_drop_obj(ctx, encrypt); encrypt = NULL; } @@ -549,7 +549,7 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) id = obj; obj = NULL; } - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "ID", id); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_ID, id); pdf_drop_obj(ctx, id); id = NULL; } @@ -584,7 +584,7 @@ pdf_repair_obj_stms(fz_context *ctx, pdf_document *doc) dict = pdf_load_object(ctx, doc, i, 0); fz_try(ctx) { - if (!strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "Type")), "ObjStm")) + if (pdf_name_eq(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Type), PDF_NAME_ObjStm)) pdf_repair_obj_stm(ctx, doc, i, 0); } fz_catch(ctx) diff --git a/source/pdf/pdf-shade.c b/source/pdf/pdf-shade.c index 4203d1b0..94b87cc5 100644 --- a/source/pdf/pdf-shade.c +++ b/source/pdf/pdf-shade.c @@ -58,7 +58,7 @@ pdf_load_function_based_shading(fz_context *ctx, pdf_document *doc, fz_shade *sh x0 = y0 = 0; x1 = y1 = 1; - obj = pdf_dict_gets(ctx, dict, "Domain"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Domain); if (obj) { x0 = pdf_to_real(ctx, pdf_array_get(ctx, obj, 0)); @@ -67,7 +67,7 @@ pdf_load_function_based_shading(fz_context *ctx, pdf_document *doc, fz_shade *sh y1 = pdf_to_real(ctx, pdf_array_get(ctx, obj, 3)); } - obj = pdf_dict_gets(ctx, dict, "Matrix"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Matrix); if (obj) pdf_to_matrix(ctx, obj, &matrix); else @@ -103,7 +103,7 @@ pdf_load_linear_shading(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf float d0, d1; int e0, e1; - obj = pdf_dict_gets(ctx, dict, "Coords"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Coords); shade->u.l_or_r.coords[0][0] = pdf_to_real(ctx, pdf_array_get(ctx, obj, 0)); shade->u.l_or_r.coords[0][1] = pdf_to_real(ctx, pdf_array_get(ctx, obj, 1)); shade->u.l_or_r.coords[1][0] = pdf_to_real(ctx, pdf_array_get(ctx, obj, 2)); @@ -111,7 +111,7 @@ pdf_load_linear_shading(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf d0 = 0; d1 = 1; - obj = pdf_dict_gets(ctx, dict, "Domain"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Domain); if (obj) { d0 = pdf_to_real(ctx, pdf_array_get(ctx, obj, 0)); @@ -119,7 +119,7 @@ pdf_load_linear_shading(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf } e0 = e1 = 0; - obj = pdf_dict_gets(ctx, dict, "Extend"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Extend); if (obj) { e0 = pdf_to_bool(ctx, pdf_array_get(ctx, obj, 0)); @@ -139,7 +139,7 @@ pdf_load_radial_shading(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf float d0, d1; int e0, e1; - obj = pdf_dict_gets(ctx, dict, "Coords"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Coords); shade->u.l_or_r.coords[0][0] = pdf_to_real(ctx, pdf_array_get(ctx, obj, 0)); shade->u.l_or_r.coords[0][1] = pdf_to_real(ctx, pdf_array_get(ctx, obj, 1)); shade->u.l_or_r.coords[0][2] = pdf_to_real(ctx, pdf_array_get(ctx, obj, 2)); @@ -149,7 +149,7 @@ pdf_load_radial_shading(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf d0 = 0; d1 = 1; - obj = pdf_dict_gets(ctx, dict, "Domain"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Domain); if (obj) { d0 = pdf_to_real(ctx, pdf_array_get(ctx, obj, 0)); @@ -157,7 +157,7 @@ pdf_load_radial_shading(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf } e0 = e1 = 0; - obj = pdf_dict_gets(ctx, dict, "Extend"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Extend); if (obj) { e0 = pdf_to_bool(ctx, pdf_array_get(ctx, obj, 0)); @@ -198,12 +198,12 @@ pdf_load_mesh_params(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf_ob shade->u.m.c1[i] = 1; } - shade->u.m.vprow = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "VerticesPerRow")); - shade->u.m.bpflag = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "BitsPerFlag")); - shade->u.m.bpcoord = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "BitsPerCoordinate")); - shade->u.m.bpcomp = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "BitsPerComponent")); + shade->u.m.vprow = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_VerticesPerRow)); + shade->u.m.bpflag = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_BitsPerFlag)); + shade->u.m.bpcoord = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_BitsPerCoordinate)); + shade->u.m.bpcomp = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_BitsPerComponent)); - obj = pdf_dict_gets(ctx, dict, "Decode"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Decode); if (pdf_array_len(ctx, obj) >= 6) { n = (pdf_array_len(ctx, obj) - 4) / 2; @@ -328,15 +328,15 @@ pdf_load_shading_dict(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const f funcs = 0; - obj = pdf_dict_gets(ctx, dict, "ShadingType"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ShadingType); type = pdf_to_int(ctx, obj); - obj = pdf_dict_gets(ctx, dict, "ColorSpace"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ColorSpace); if (!obj) fz_throw(ctx, FZ_ERROR_GENERIC, "shading colorspace is missing"); shade->colorspace = pdf_load_colorspace(ctx, doc, obj); - obj = pdf_dict_gets(ctx, dict, "Background"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Background); if (obj) { shade->use_background = 1; @@ -344,11 +344,11 @@ pdf_load_shading_dict(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const f shade->background[i] = pdf_to_real(ctx, pdf_array_get(ctx, obj, i)); } - obj = pdf_dict_gets(ctx, dict, "BBox"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_BBox); if (pdf_is_array(ctx, obj)) pdf_to_rect(ctx, obj, &shade->bbox); - obj = pdf_dict_gets(ctx, dict, "Function"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Function); if (pdf_is_dict(ctx, obj)) { funcs = 1; @@ -448,24 +448,24 @@ pdf_load_shading(fz_context *ctx, pdf_document *doc, pdf_obj *dict) } /* Type 2 pattern dictionary */ - if (pdf_dict_gets(ctx, dict, "PatternType")) + if (pdf_dict_get(ctx, dict, PDF_NAME_PatternType)) { - obj = pdf_dict_gets(ctx, dict, "Matrix"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Matrix); if (obj) pdf_to_matrix(ctx, obj, &mat); else mat = fz_identity; - obj = pdf_dict_gets(ctx, dict, "ExtGState"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_ExtGState); if (obj) { - if (pdf_dict_gets(ctx, obj, "CA") || pdf_dict_gets(ctx, obj, "ca")) + if (pdf_dict_get(ctx, obj, PDF_NAME_CA) || pdf_dict_get(ctx, obj, PDF_NAME_ca)) { fz_warn(ctx, "shading with alpha not supported"); } } - obj = pdf_dict_gets(ctx, dict, "Shading"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Shading); if (!obj) fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: missing shading dictionary"); diff --git a/source/pdf/pdf-stream.c b/source/pdf/pdf-stream.c index 15fdd29a..ad1e5e2c 100644 --- a/source/pdf/pdf-stream.c +++ b/source/pdf/pdf-stream.c @@ -26,10 +26,10 @@ pdf_stream_has_crypt(fz_context *ctx, pdf_obj *stm) pdf_obj *obj; int i; - filters = pdf_dict_getsa(ctx, stm, "Filter", "F"); + filters = pdf_dict_geta(ctx, stm, PDF_NAME_Filter, PDF_NAME_F); if (filters) { - if (!strcmp(pdf_to_name(ctx, filters), "Crypt")) + if (pdf_name_eq(ctx, filters, PDF_NAME_Crypt)) return 1; if (pdf_is_array(ctx, filters)) { @@ -37,7 +37,7 @@ pdf_stream_has_crypt(fz_context *ctx, pdf_obj *stm) for (i = 0; i < n; i++) { obj = pdf_array_get(ctx, filters, i); - if (!strcmp(pdf_to_name(ctx, obj), "Crypt")) + if (pdf_name_eq(ctx, obj, PDF_NAME_Crypt)) return 1; } } @@ -82,31 +82,29 @@ pdf_load_jbig2_globals(fz_context *ctx, pdf_document *doc, pdf_obj *dict) static fz_stream * build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, pdf_obj *p, int num, int gen, fz_compression_params *params) { - char *s = pdf_to_name(ctx, f); - - int predictor = pdf_to_int(ctx, pdf_dict_gets(ctx, p, "Predictor")); - pdf_obj *columns_obj = pdf_dict_gets(ctx, p, "Columns"); + int predictor = pdf_to_int(ctx, pdf_dict_get(ctx, p, PDF_NAME_Predictor)); + pdf_obj *columns_obj = pdf_dict_get(ctx, p, PDF_NAME_Columns); int columns = pdf_to_int(ctx, columns_obj); - int colors = pdf_to_int(ctx, pdf_dict_gets(ctx, p, "Colors")); - int bpc = pdf_to_int(ctx, pdf_dict_gets(ctx, p, "BitsPerComponent")); + int colors = pdf_to_int(ctx, pdf_dict_get(ctx, p, PDF_NAME_Colors)); + int bpc = pdf_to_int(ctx, pdf_dict_get(ctx, p, PDF_NAME_BitsPerComponent)); if (params) params->type = FZ_IMAGE_RAW; - if (!strcmp(s, "ASCIIHexDecode") || !strcmp(s, "AHx")) + if (pdf_name_eq(ctx, f, PDF_NAME_ASCIIHexDecode) || pdf_name_eq(ctx, f, PDF_NAME_AHx)) return fz_open_ahxd(ctx, chain); - else if (!strcmp(s, "ASCII85Decode") || !strcmp(s, "A85")) + else if (pdf_name_eq(ctx, f, PDF_NAME_ASCII85Decode) || pdf_name_eq(ctx, f, PDF_NAME_A85)) return fz_open_a85d(ctx, chain); - else if (!strcmp(s, "CCITTFaxDecode") || !strcmp(s, "CCF")) + else if (pdf_name_eq(ctx, f, PDF_NAME_CCITTFaxDecode) || pdf_name_eq(ctx, f, PDF_NAME_CCF)) { - pdf_obj *k = pdf_dict_gets(ctx, p, "K"); - pdf_obj *eol = pdf_dict_gets(ctx, p, "EndOfLine"); - pdf_obj *eba = pdf_dict_gets(ctx, p, "EncodedByteAlign"); - pdf_obj *rows = pdf_dict_gets(ctx, p, "Rows"); - pdf_obj *eob = pdf_dict_gets(ctx, p, "EndOfBlock"); - pdf_obj *bi1 = pdf_dict_gets(ctx, p, "BlackIs1"); + pdf_obj *k = pdf_dict_get(ctx, p, PDF_NAME_K); + pdf_obj *eol = pdf_dict_get(ctx, p, PDF_NAME_EndOfLine); + pdf_obj *eba = pdf_dict_get(ctx, p, PDF_NAME_EncodedByteAlign); + pdf_obj *rows = pdf_dict_get(ctx, p, PDF_NAME_Rows); + pdf_obj *eob = pdf_dict_get(ctx, p, PDF_NAME_EndOfBlock); + pdf_obj *bi1 = pdf_dict_get(ctx, p, PDF_NAME_BlackIs1); if (params) { /* We will shortstop here */ @@ -130,9 +128,9 @@ build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, p bi1 ? pdf_to_bool(ctx, bi1) : 0); } - else if (!strcmp(s, "DCTDecode") || !strcmp(s, "DCT")) + else if (pdf_name_eq(ctx, f, PDF_NAME_DCTDecode) || pdf_name_eq(ctx, f, PDF_NAME_DCT)) { - pdf_obj *ct = pdf_dict_gets(ctx, p, "ColorTransform"); + pdf_obj *ct = pdf_dict_get(ctx, p, PDF_NAME_ColorTransform); if (params) { /* We will shortstop here */ @@ -143,7 +141,7 @@ build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, p return fz_open_dctd(ctx, chain, ct ? pdf_to_int(ctx, ct) : -1, 0, NULL); } - else if (!strcmp(s, "RunLengthDecode") || !strcmp(s, "RL")) + else if (pdf_name_eq(ctx, f, PDF_NAME_RunLengthDecode) || pdf_name_eq(ctx, f, PDF_NAME_RL)) { if (params) { @@ -153,7 +151,7 @@ build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, p } return fz_open_rld(ctx, chain); } - else if (!strcmp(s, "FlateDecode") || !strcmp(s, "Fl")) + else if (pdf_name_eq(ctx, f, PDF_NAME_FlateDecode) || pdf_name_eq(ctx, f, PDF_NAME_Fl)) { if (params) { @@ -171,9 +169,9 @@ build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, p return chain; } - else if (!strcmp(s, "LZWDecode") || !strcmp(s, "LZW")) + else if (pdf_name_eq(ctx, f, PDF_NAME_LZWDecode) || pdf_name_eq(ctx, f, PDF_NAME_LZW)) { - pdf_obj *ec = pdf_dict_gets(ctx, p, "EarlyChange"); + pdf_obj *ec = pdf_dict_get(ctx, p, PDF_NAME_EarlyChange); if (params) { /* We will shortstop here */ @@ -191,20 +189,20 @@ build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, p return chain; } - else if (!strcmp(s, "JBIG2Decode")) + else if (pdf_name_eq(ctx, f, PDF_NAME_JBIG2Decode)) { fz_jbig2_globals *globals = NULL; - pdf_obj *obj = pdf_dict_gets(ctx, p, "JBIG2Globals"); + pdf_obj *obj = pdf_dict_get(ctx, p, PDF_NAME_JBIG2Globals); if (pdf_is_indirect(ctx, obj)) globals = pdf_load_jbig2_globals(ctx, doc, obj); /* fz_open_jbig2d takes possession of globals */ return fz_open_jbig2d(ctx, chain, globals); } - else if (!strcmp(s, "JPXDecode")) + else if (pdf_name_eq(ctx, f, PDF_NAME_JPXDecode)) return chain; /* JPX decoding is special cased in the image loading code */ - else if (!strcmp(s, "Crypt")) + else if (pdf_name_eq(ctx, f, PDF_NAME_Crypt)) { pdf_obj *name; @@ -214,14 +212,14 @@ build_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *f, p return chain; } - name = pdf_dict_gets(ctx, p, "Name"); + name = pdf_dict_get(ctx, p, PDF_NAME_Name); if (pdf_is_name(ctx, name)) - return pdf_open_crypt_with_filter(ctx, chain, doc->crypt, pdf_to_name(ctx, name), num, gen); + return pdf_open_crypt_with_filter(ctx, chain, doc->crypt, name, num, gen); return chain; } - fz_warn(ctx, "unknown filter name (%s)", s); + fz_warn(ctx, "unknown filter name (%s)", pdf_to_name(ctx, f)); return chain; } @@ -284,7 +282,7 @@ pdf_open_raw_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_ob /* don't close chain when we close this filter */ fz_keep_stream(ctx, chain); - len = pdf_to_int(ctx, pdf_dict_gets(ctx, stmobj, "Length")); + len = pdf_to_int(ctx, pdf_dict_get(ctx, stmobj, PDF_NAME_Length)); chain = fz_open_null(ctx, chain, len, offset); hascrypt = pdf_stream_has_crypt(ctx, stmobj); @@ -304,8 +302,8 @@ pdf_open_filter(fz_context *ctx, pdf_document *doc, fz_stream *chain, pdf_obj *s pdf_obj *filters; pdf_obj *params; - filters = pdf_dict_getsa(ctx, stmobj, "Filter", "F"); - params = pdf_dict_getsa(ctx, stmobj, "DecodeParms", "DP"); + filters = pdf_dict_geta(ctx, stmobj, PDF_NAME_Filter, PDF_NAME_F); + params = pdf_dict_geta(ctx, stmobj, PDF_NAME_DecodeParms, PDF_NAME_DP); chain = pdf_open_raw_filter(ctx, chain, doc, stmobj, num, num, gen, offset); @@ -345,8 +343,8 @@ pdf_open_inline_stream(fz_context *ctx, pdf_document *doc, pdf_obj *stmobj, int pdf_obj *filters; pdf_obj *params; - filters = pdf_dict_getsa(ctx, stmobj, "Filter", "F"); - params = pdf_dict_getsa(ctx, stmobj, "DecodeParms", "DP"); + filters = pdf_dict_geta(ctx, stmobj, PDF_NAME_Filter, PDF_NAME_F); + params = pdf_dict_geta(ctx, stmobj, PDF_NAME_DecodeParms, PDF_NAME_DP); /* don't close chain when we close this filter */ fz_keep_stream(ctx, chain); @@ -470,7 +468,7 @@ pdf_load_raw_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int dict = pdf_load_object(ctx, doc, num, gen); - len = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "Length")); + len = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Length)); pdf_drop_obj(ctx, dict); @@ -517,8 +515,8 @@ pdf_load_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int dict = pdf_load_object(ctx, doc, num, gen); - len = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "Length")); - obj = pdf_dict_gets(ctx, dict, "Filter"); + len = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Length)); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Filter); len = pdf_guess_filter_length(len, pdf_to_name(ctx, obj)); n = pdf_array_len(ctx, obj); for (i = 0; i < n; i++) diff --git a/source/pdf/pdf-type3.c b/source/pdf/pdf-type3.c index 3da74806..56128c9a 100644 --- a/source/pdf/pdf-type3.c +++ b/source/pdf/pdf-type3.c @@ -43,7 +43,7 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d fz_try(ctx) { - obj = pdf_dict_gets(ctx, dict, "Name"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Name); if (pdf_is_name(ctx, obj)) fz_strlcpy(buf, pdf_to_name(ctx, obj), sizeof buf); else @@ -51,10 +51,10 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d fontdesc = pdf_new_font_desc(ctx); - obj = pdf_dict_gets(ctx, dict, "FontMatrix"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_FontMatrix); pdf_to_matrix(ctx, obj, &matrix); - obj = pdf_dict_gets(ctx, dict, "FontBBox"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_FontBBox); fz_transform_rect(pdf_to_rect(ctx, obj, &bbox), &matrix); fontdesc->font = fz_new_type3_font(ctx, buf, &matrix); @@ -67,7 +67,7 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d for (i = 0; i < 256; i++) estrings[i] = NULL; - encoding = pdf_dict_gets(ctx, dict, "Encoding"); + encoding = pdf_dict_get(ctx, dict, PDF_NAME_Encoding); if (!encoding) { fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: Type3 font missing Encoding"); @@ -80,11 +80,11 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d { pdf_obj *base, *diff, *item; - base = pdf_dict_gets(ctx, encoding, "BaseEncoding"); + base = pdf_dict_get(ctx, encoding, PDF_NAME_BaseEncoding); if (pdf_is_name(ctx, base)) pdf_load_encoding(estrings, pdf_to_name(ctx, base)); - diff = pdf_dict_gets(ctx, encoding, "Differences"); + diff = pdf_dict_get(ctx, encoding, PDF_NAME_Differences); if (pdf_is_array(ctx, diff)) { n = pdf_array_len(ctx, diff); @@ -103,19 +103,19 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d fontdesc->encoding = pdf_new_identity_cmap(ctx, 0, 1); fontdesc->size += pdf_cmap_size(ctx, fontdesc->encoding); - pdf_load_to_unicode(ctx, doc, fontdesc, estrings, NULL, pdf_dict_gets(ctx, dict, "ToUnicode")); + pdf_load_to_unicode(ctx, doc, fontdesc, estrings, NULL, pdf_dict_get(ctx, dict, PDF_NAME_ToUnicode)); /* Widths */ pdf_set_default_hmtx(ctx, fontdesc, 0); - first = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "FirstChar")); - last = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "LastChar")); + first = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_FirstChar)); + last = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_LastChar)); if (first < 0 || last > 255 || first > last) first = last = 0; - widths = pdf_dict_gets(ctx, dict, "Widths"); + widths = pdf_dict_get(ctx, dict, PDF_NAME_Widths); if (!widths) { fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: Type3 font missing Widths"); @@ -134,7 +134,7 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d /* Resources -- inherit page resources if the font doesn't have its own */ fontdesc->font->t3freeres = pdf_t3_free_resources; - fontdesc->font->t3resources = pdf_dict_gets(ctx, dict, "Resources"); + fontdesc->font->t3resources = pdf_dict_get(ctx, dict, PDF_NAME_Resources); if (!fontdesc->font->t3resources) fontdesc->font->t3resources = rdb; if (fontdesc->font->t3resources) @@ -147,7 +147,7 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d /* CharProcs */ - charprocs = pdf_dict_gets(ctx, dict, "CharProcs"); + charprocs = pdf_dict_get(ctx, dict, PDF_NAME_CharProcs); if (!charprocs) { fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: Type3 font missing CharProcs"); diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c index a9dd7423..5f815e03 100644 --- a/source/pdf/pdf-write.c +++ b/source/pdf/pdf-write.c @@ -530,12 +530,12 @@ static pdf_obj *markref(fz_context *ctx, pdf_document *doc, pdf_write_options *o { if (pdf_is_stream(ctx, doc, num, gen)) { - pdf_obj *len = pdf_dict_gets(ctx, obj, "Length"); + pdf_obj *len = pdf_dict_get(ctx, obj, PDF_NAME_Length); if (pdf_is_indirect(ctx, len)) { opts->use_list[pdf_to_num(ctx, len)] = 0; len = pdf_resolve_indirect(ctx, len); - pdf_dict_puts(ctx, obj, "Length", len); + pdf_dict_put(ctx, obj, PDF_NAME_Length, len); } } } @@ -949,7 +949,7 @@ mark_pages(fz_context *ctx, pdf_document *doc, pdf_write_options *opts, pdf_obj { if (pdf_is_dict(ctx, val)) { - if (!strcmp("Page", pdf_to_name(ctx, pdf_dict_gets(ctx, val, "Type")))) + if (pdf_name_eq(ctx, PDF_NAME_Page, pdf_dict_get(ctx, val, PDF_NAME_Type))) { int num = pdf_to_num(ctx, val); pdf_unmark_obj(ctx, val); @@ -967,7 +967,7 @@ mark_pages(fz_context *ctx, pdf_document *doc, pdf_write_options *opts, pdf_obj pdf_obj *key = pdf_dict_get_key(ctx, val, i); pdf_obj *obj = pdf_dict_get_val(ctx, val, i); - if (!strcmp("Kids", pdf_to_name(ctx, key))) + if (pdf_name_eq(ctx, PDF_NAME_Kids, key)) pagenum = mark_pages(ctx, doc, opts, obj, pagenum); else mark_all(ctx, doc, opts, obj, USE_CATALOGUE, -1); @@ -1024,21 +1024,21 @@ mark_root(fz_context *ctx, pdf_document *doc, pdf_write_options *opts, pdf_obj * for (i = 0; i < n; i++) { - char *key = pdf_to_name(ctx, pdf_dict_get_key(ctx, dict, i)); + pdf_obj *key = pdf_dict_get_key(ctx, dict, i); pdf_obj *val = pdf_dict_get_val(ctx, dict, i); - if (!strcmp("Pages", key)) + if (pdf_name_eq(ctx, PDF_NAME_Pages, key)) opts->page_count = mark_pages(ctx, doc, opts, val, 0); - else if (!strcmp("Names", key)) + else if (pdf_name_eq(ctx, PDF_NAME_Names, key)) mark_all(ctx, doc, opts, val, USE_OTHER_OBJECTS, -1); - else if (!strcmp("Dests", key)) + else if (pdf_name_eq(ctx, PDF_NAME_Dests, key)) mark_all(ctx, doc, opts, val, USE_OTHER_OBJECTS, -1); - else if (!strcmp("Outlines", key)) + else if (pdf_name_eq(ctx, PDF_NAME_Outlines, key)) { int section; /* Look at PageMode to decide whether to * USE_OTHER_OBJECTS or USE_PAGE1 here. */ - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, dict, "PageMode")), "UseOutlines") == 0) + if (pdf_name_eq(ctx, pdf_dict_get(ctx, dict, PDF_NAME_PageMode), PDF_NAME_UseOutlines)) section = USE_PAGE1; else section = USE_OTHER_OBJECTS; @@ -1070,10 +1070,10 @@ mark_trailer(fz_context *ctx, pdf_document *doc, pdf_write_options *opts, pdf_ob { for (i = 0; i < n; i++) { - char *key = pdf_to_name(ctx, pdf_dict_get_key(ctx, dict, i)); + pdf_obj *key = pdf_dict_get_key(ctx, dict, i); pdf_obj *val = pdf_dict_get_val(ctx, dict, i); - if (!strcmp("Root", key)) + if (pdf_name_eq(ctx, PDF_NAME_Root, key)) mark_root(ctx, doc, opts, val); else mark_all(ctx, doc, opts, val, USE_CATALOGUE, -1); @@ -1117,24 +1117,24 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_options *op opts->rev_renumber_map[params_num] = params_num; opts->gen_list[params_num] = 0; opts->rev_gen_list[params_num] = 0; - pdf_dict_puts_drop(ctx, params_obj, "Linearized", pdf_new_real(ctx, doc, 1.0)); + pdf_dict_put_drop(ctx, params_obj, PDF_NAME_Linearized, pdf_new_real(ctx, doc, 1.0)); opts->linear_l = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, params_obj, "L", opts->linear_l); + pdf_dict_put(ctx, params_obj, PDF_NAME_L, opts->linear_l); opts->linear_h0 = pdf_new_int(ctx, doc, INT_MIN); o = pdf_new_array(ctx, doc, 2); pdf_array_push(ctx, o, opts->linear_h0); opts->linear_h1 = pdf_new_int(ctx, doc, INT_MIN); pdf_array_push(ctx, o, opts->linear_h1); - pdf_dict_puts_drop(ctx, params_obj, "H", o); + pdf_dict_put_drop(ctx, params_obj, PDF_NAME_H, o); o = NULL; opts->linear_o = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, params_obj, "O", opts->linear_o); + pdf_dict_put(ctx, params_obj, PDF_NAME_O, opts->linear_o); opts->linear_e = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, params_obj, "E", opts->linear_e); + pdf_dict_put(ctx, params_obj, PDF_NAME_E, opts->linear_e); opts->linear_n = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, params_obj, "N", opts->linear_n); + pdf_dict_put(ctx, params_obj, PDF_NAME_N, opts->linear_n); opts->linear_t = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, params_obj, "T", opts->linear_t); + pdf_dict_put(ctx, params_obj, PDF_NAME_T, opts->linear_t); /* Primary hint stream */ hint_obj = pdf_new_dict(ctx, doc, 10); @@ -1146,9 +1146,9 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_options *op opts->rev_renumber_map[hint_num] = hint_num; opts->gen_list[hint_num] = 0; opts->rev_gen_list[hint_num] = 0; - pdf_dict_puts_drop(ctx, hint_obj, "P", pdf_new_int(ctx, doc, 0)); + pdf_dict_put_drop(ctx, hint_obj, PDF_NAME_P, pdf_new_int(ctx, doc, 0)); opts->hints_s = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, hint_obj, "S", opts->hints_s); + pdf_dict_put(ctx, hint_obj, PDF_NAME_S, opts->hints_s); /* FIXME: Do we have thumbnails? Do a T entry */ /* FIXME: Do we have outlines? Do an O entry */ /* FIXME: Do we have article threads? Do an A entry */ @@ -1157,9 +1157,9 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_options *op /* FIXME: Do we have document information? Do an I entry */ /* FIXME: Do we have logical structure heirarchy? Do a C entry */ /* FIXME: Do L, Page Label hint table */ - pdf_dict_puts_drop(ctx, hint_obj, "Filter", pdf_new_name(ctx, doc, "FlateDecode")); + pdf_dict_put_drop(ctx, hint_obj, PDF_NAME_Filter, PDF_NAME_FlateDecode); opts->hints_length = pdf_new_int(ctx, doc, INT_MIN); - pdf_dict_puts(ctx, hint_obj, "Length", opts->hints_length); + pdf_dict_put(ctx, hint_obj, PDF_NAME_Length, opts->hints_length); pdf_get_xref_entry(ctx, doc, hint_num)->stm_ofs = -1; } fz_always(ctx) @@ -1177,19 +1177,19 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_options *op } static void -lpr_inherit_res_contents(fz_context *ctx, pdf_obj *res, pdf_obj *dict, char *text) +lpr_inherit_res_contents(fz_context *ctx, pdf_obj *res, pdf_obj *dict, pdf_obj *text) { pdf_obj *o, *r; int i, n; /* If the parent node doesn't have an entry of this type, give up. */ - o = pdf_dict_gets(ctx, dict, text); + o = pdf_dict_get(ctx, dict, text); if (!o) return; /* If the resources dict we are building doesn't have an entry of this * type yet, then just copy it (ensuring it's not a reference) */ - r = pdf_dict_gets(ctx, res, text); + r = pdf_dict_get(ctx, res, text); if (r == NULL) { o = pdf_resolve_indirect(ctx, o); @@ -1200,7 +1200,7 @@ lpr_inherit_res_contents(fz_context *ctx, pdf_obj *res, pdf_obj *dict, char *tex else o = NULL; if (o) - pdf_dict_puts(ctx, res, text, o); + pdf_dict_put(ctx, res, text, o); return; } @@ -1213,9 +1213,9 @@ lpr_inherit_res_contents(fz_context *ctx, pdf_obj *res, pdf_obj *dict, char *tex pdf_obj *key = pdf_dict_get_key(ctx, o, i); pdf_obj *val = pdf_dict_get_val(ctx, o, i); - if (pdf_dict_gets(ctx, res, pdf_to_name(ctx, key))) + if (pdf_dict_get(ctx, res, key)) continue; - pdf_dict_puts(ctx, res, pdf_to_name(ctx, key), val); + pdf_dict_put(ctx, res, key, val); } } } @@ -1227,22 +1227,22 @@ lpr_inherit_res(fz_context *ctx, pdf_obj *node, int depth, pdf_obj *dict) { pdf_obj *o; - node = pdf_dict_gets(ctx, node, "Parent"); + node = pdf_dict_get(ctx, node, PDF_NAME_Parent); depth--; if (!node || depth < 0) break; - o = pdf_dict_gets(ctx, node, "Resources"); + o = pdf_dict_get(ctx, node, PDF_NAME_Resources); if (o) { - lpr_inherit_res_contents(ctx, dict, o, "ExtGState"); - lpr_inherit_res_contents(ctx, dict, o, "ColorSpace"); - lpr_inherit_res_contents(ctx, dict, o, "Pattern"); - lpr_inherit_res_contents(ctx, dict, o, "Shading"); - lpr_inherit_res_contents(ctx, dict, o, "XObject"); - lpr_inherit_res_contents(ctx, dict, o, "Font"); - lpr_inherit_res_contents(ctx, dict, o, "ProcSet"); - lpr_inherit_res_contents(ctx, dict, o, "Properties"); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_ExtGState); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_ColorSpace); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_Pattern); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_Shading); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_XObject); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_Font); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_ProcSet); + lpr_inherit_res_contents(ctx, dict, o, PDF_NAME_Properties); } } } @@ -1256,7 +1256,7 @@ lpr_inherit(fz_context *ctx, pdf_obj *node, char *text, int depth) if (o) return pdf_resolve_indirect(ctx, o); - node = pdf_dict_gets(ctx, node, "Parent"); + node = pdf_dict_get(ctx, node, PDF_NAME_Parent); depth--; } while (depth >= 0 && node); @@ -1278,53 +1278,53 @@ lpr(fz_context *ctx, pdf_document *doc, pdf_obj *node, int depth, int page) fz_try(ctx) { - if (!strcmp("Page", pdf_to_name(ctx, pdf_dict_gets(ctx, node, "Type")))) + if (pdf_name_eq(ctx, PDF_NAME_Page, pdf_dict_get(ctx, node, PDF_NAME_Type))) { pdf_obj *r; /* r is deliberately not cleaned up */ /* Copy resources down to the child */ - o = pdf_keep_obj(ctx, pdf_dict_gets(ctx, node, "Resources")); + o = pdf_keep_obj(ctx, pdf_dict_get(ctx, node, PDF_NAME_Resources)); if (!o) { o = pdf_keep_obj(ctx, pdf_new_dict(ctx, doc, 2)); - pdf_dict_puts(ctx, node, "Resources", o); + pdf_dict_put(ctx, node, PDF_NAME_Resources, o); } lpr_inherit_res(ctx, node, depth, o); r = lpr_inherit(ctx, node, "MediaBox", depth); if (r) - pdf_dict_puts(ctx, node, "MediaBox", r); + pdf_dict_put(ctx, node, PDF_NAME_MediaBox, r); r = lpr_inherit(ctx, node, "CropBox", depth); if (r) - pdf_dict_puts(ctx, node, "CropBox", r); + pdf_dict_put(ctx, node, PDF_NAME_CropBox, r); r = lpr_inherit(ctx, node, "BleedBox", depth); if (r) - pdf_dict_puts(ctx, node, "BleedBox", r); + pdf_dict_put(ctx, node, PDF_NAME_BleedBox, r); r = lpr_inherit(ctx, node, "TrimBox", depth); if (r) - pdf_dict_puts(ctx, node, "TrimBox", r); + pdf_dict_put(ctx, node, PDF_NAME_TrimBox, r); r = lpr_inherit(ctx, node, "ArtBox", depth); if (r) - pdf_dict_puts(ctx, node, "ArtBox", r); + pdf_dict_put(ctx, node, PDF_NAME_ArtBox, r); r = lpr_inherit(ctx, node, "Rotate", depth); if (r) - pdf_dict_puts(ctx, node, "Rotate", r); + pdf_dict_put(ctx, node, PDF_NAME_Rotate, r); page++; } else { - kids = pdf_dict_gets(ctx, node, "Kids"); + kids = pdf_dict_get(ctx, node, PDF_NAME_Kids); n = pdf_array_len(ctx, kids); for(i = 0; i < n; i++) { page = lpr(ctx, doc, pdf_array_get(ctx, kids, i), depth+1, page); } - pdf_dict_dels(ctx, node, "Resources"); - pdf_dict_dels(ctx, node, "MediaBox"); - pdf_dict_dels(ctx, node, "CropBox"); - pdf_dict_dels(ctx, node, "BleedBox"); - pdf_dict_dels(ctx, node, "TrimBox"); - pdf_dict_dels(ctx, node, "ArtBox"); - pdf_dict_dels(ctx, node, "Rotate"); + pdf_dict_del(ctx, node, PDF_NAME_Resources); + pdf_dict_del(ctx, node, PDF_NAME_MediaBox); + pdf_dict_del(ctx, node, PDF_NAME_CropBox); + pdf_dict_del(ctx, node, PDF_NAME_BleedBox); + pdf_dict_del(ctx, node, PDF_NAME_TrimBox); + pdf_dict_del(ctx, node, PDF_NAME_ArtBox); + pdf_dict_del(ctx, node, PDF_NAME_Rotate); } } fz_always(ctx) @@ -1347,7 +1347,7 @@ pdf_localise_page_resources(fz_context *ctx, pdf_document *doc) if (doc->resources_localised) return; - lpr(ctx, doc, pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/Pages"), 0, 0); + lpr(ctx, doc, pdf_dict_getl(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, PDF_NAME_Pages, NULL), 0, 0); doc->resources_localised = 1; } @@ -1525,19 +1525,18 @@ static fz_buffer *hexbuf(fz_context *ctx, unsigned char *p, int n) static void addhexfilter(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { pdf_obj *f, *dp, *newf, *newdp; - pdf_obj *ahx, *nullobj; + pdf_obj *nullobj; - ahx = pdf_new_name(ctx, doc, "ASCIIHexDecode"); nullobj = pdf_new_null(ctx, doc); newf = newdp = NULL; - f = pdf_dict_gets(ctx, dict, "Filter"); - dp = pdf_dict_gets(ctx, dict, "DecodeParms"); + f = pdf_dict_get(ctx, dict, PDF_NAME_Filter); + dp = pdf_dict_get(ctx, dict, PDF_NAME_DecodeParms); if (pdf_is_name(ctx, f)) { newf = pdf_new_array(ctx, doc, 2); - pdf_array_push(ctx, newf, ahx); + pdf_array_push(ctx, newf, PDF_NAME_ASCIIHexDecode); pdf_array_push(ctx, newf, f); f = newf; if (pdf_is_dict(ctx, dp)) @@ -1550,18 +1549,17 @@ static void addhexfilter(fz_context *ctx, pdf_document *doc, pdf_obj *dict) } else if (pdf_is_array(ctx, f)) { - pdf_array_insert(ctx, f, ahx, 0); + pdf_array_insert(ctx, f, PDF_NAME_ASCIIHexDecode, 0); if (pdf_is_array(ctx, dp)) pdf_array_insert(ctx, dp, nullobj, 0); } else - f = ahx; + f = PDF_NAME_ASCIIHexDecode; - pdf_dict_puts(ctx, dict, "Filter", f); + pdf_dict_put(ctx, dict, PDF_NAME_Filter, f); if (dp) - pdf_dict_puts(ctx, dict, "DecodeParms", dp); + pdf_dict_put(ctx, dict, PDF_NAME_DecodeParms, dp); - pdf_drop_obj(ctx, ahx); pdf_drop_obj(ctx, nullobj); pdf_drop_obj(ctx, newf); pdf_drop_obj(ctx, newdp); @@ -1587,7 +1585,7 @@ static void copystream(fz_context *ctx, pdf_document *doc, pdf_write_options *op addhexfilter(ctx, doc, obj); newlen = pdf_new_int(ctx, doc, buf->len); - pdf_dict_puts(ctx, obj, "Length", newlen); + pdf_dict_put(ctx, obj, PDF_NAME_Length, newlen); pdf_drop_obj(ctx, newlen); } @@ -1615,8 +1613,8 @@ static void expandstream(fz_context *ctx, pdf_document *doc, pdf_write_options * (*opts->errors)++; obj = pdf_copy_dict(ctx, obj_orig); - pdf_dict_dels(ctx, obj, "Filter"); - pdf_dict_dels(ctx, obj, "DecodeParms"); + pdf_dict_del(ctx, obj, PDF_NAME_Filter); + pdf_dict_del(ctx, obj, PDF_NAME_DecodeParms); if (opts->do_ascii && isbinarystream(buf)) { @@ -1628,7 +1626,7 @@ static void expandstream(fz_context *ctx, pdf_document *doc, pdf_write_options * } newlen = pdf_new_int(ctx, doc, buf->len); - pdf_dict_puts(ctx, obj, "Length", newlen); + pdf_dict_put(ctx, obj, PDF_NAME_Length, newlen); pdf_drop_obj(ctx, newlen); fprintf(opts->out, "%d %d obj\n", num, gen); @@ -1697,14 +1695,14 @@ static void writeobject(fz_context *ctx, pdf_document *doc, pdf_write_options *o /* skip ObjStm and XRef objects */ if (pdf_is_dict(ctx, obj)) { - type = pdf_dict_gets(ctx, obj, "Type"); - if (pdf_is_name(ctx, type) && !strcmp(pdf_to_name(ctx, type), "ObjStm")) + type = pdf_dict_get(ctx, obj, PDF_NAME_Type); + if (pdf_name_eq(ctx, type, PDF_NAME_ObjStm)) { opts->use_list[num] = 0; pdf_drop_obj(ctx, obj); return; } - if (skip_xrefs && pdf_is_name(ctx, type) && !strcmp(pdf_to_name(ctx, type), "XRef")) + if (skip_xrefs && pdf_name_eq(ctx, type, PDF_NAME_XRef)) { opts->use_list[num] = 0; pdf_drop_obj(ctx, obj); @@ -1732,26 +1730,26 @@ static void writeobject(fz_context *ctx, pdf_document *doc, pdf_write_options *o { pdf_obj *o; - if ((o = pdf_dict_gets(ctx, obj, "Type"), !strcmp(pdf_to_name(ctx, o), "XObject")) && - (o = pdf_dict_gets(ctx, obj, "Subtype"), !strcmp(pdf_to_name(ctx, o), "Image"))) + if ((o = pdf_dict_get(ctx, obj, PDF_NAME_Type), pdf_name_eq(ctx, o, PDF_NAME_XObject)) && + (o = pdf_dict_get(ctx, obj, PDF_NAME_Subtype), pdf_name_eq(ctx, o, PDF_NAME_Image))) dontexpand = !(opts->do_expand & fz_expand_images); - if (o = pdf_dict_gets(ctx, obj, "Type"), !strcmp(pdf_to_name(ctx, o), "Font")) + if (o = pdf_dict_get(ctx, obj, PDF_NAME_Type), pdf_name_eq(ctx, o, PDF_NAME_Font)) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (o = pdf_dict_gets(ctx, obj, "Type"), !strcmp(pdf_to_name(ctx, o), "FontDescriptor")) + if (o = pdf_dict_get(ctx, obj, PDF_NAME_Type), pdf_name_eq(ctx, o, PDF_NAME_FontDescriptor)) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (pdf_dict_gets(ctx, obj, "Length1") != NULL) + if (pdf_dict_get(ctx, obj, PDF_NAME_Length1) != NULL) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (pdf_dict_gets(ctx, obj, "Length2") != NULL) + if (pdf_dict_get(ctx, obj, PDF_NAME_Length2) != NULL) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (pdf_dict_gets(ctx, obj, "Length3") != NULL) + if (pdf_dict_get(ctx, obj, PDF_NAME_Length3) != NULL) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (o = pdf_dict_gets(ctx, obj, "Subtype"), !strcmp(pdf_to_name(ctx, o), "Type1C")) + if (o = pdf_dict_get(ctx, obj, PDF_NAME_Subtype), pdf_name_eq(ctx, o, PDF_NAME_Type1C)) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (o = pdf_dict_gets(ctx, obj, "Subtype"), !strcmp(pdf_to_name(ctx, o), "CIDFontType0C")) + if (o = pdf_dict_get(ctx, obj, PDF_NAME_Subtype), pdf_name_eq(ctx, o, PDF_NAME_CIDFontType0C)) dontexpand = !(opts->do_expand & fz_expand_fonts); - if (o = pdf_dict_gets(ctx, obj, "Filter"), filter_implies_image(ctx, doc, o)) + if (o = pdf_dict_get(ctx, obj, PDF_NAME_Filter), filter_implies_image(ctx, doc, o)) dontexpand = !(opts->do_expand & fz_expand_images); - if (pdf_dict_gets(ctx, obj, "Width") != NULL && pdf_dict_gets(ctx, obj, "Height") != NULL) + if (pdf_dict_get(ctx, obj, PDF_NAME_Width) != NULL && pdf_dict_get(ctx, obj, PDF_NAME_Height) != NULL) dontexpand = !(opts->do_expand & fz_expand_images); } fz_try(ctx) @@ -1840,8 +1838,8 @@ static void writexref(fz_context *ctx, pdf_document *doc, pdf_write_options *opt if (opts->do_incremental) { trailer = pdf_keep_obj(ctx, pdf_trailer(ctx, doc)); - pdf_dict_puts_drop(ctx, trailer, "Size", pdf_new_int(ctx, doc, pdf_xref_len(ctx, doc))); - pdf_dict_puts_drop(ctx, trailer, "Prev", pdf_new_int(ctx, doc, doc->startxref)); + pdf_dict_put_drop(ctx, trailer, PDF_NAME_Size, pdf_new_int(ctx, doc, pdf_xref_len(ctx, doc))); + pdf_dict_put_drop(ctx, trailer, PDF_NAME_Prev, pdf_new_int(ctx, doc, doc->startxref)); doc->startxref = startxref; } else @@ -1849,28 +1847,28 @@ static void writexref(fz_context *ctx, pdf_document *doc, pdf_write_options *opt trailer = pdf_new_dict(ctx, doc, 5); nobj = pdf_new_int(ctx, doc, to); - pdf_dict_puts(ctx, trailer, "Size", nobj); + pdf_dict_put(ctx, trailer, PDF_NAME_Size, nobj); pdf_drop_obj(ctx, nobj); nobj = NULL; if (first) { - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Info"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info); if (obj) - pdf_dict_puts(ctx, trailer, "Info", obj); + pdf_dict_put(ctx, trailer, PDF_NAME_Info, obj); - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); if (obj) - pdf_dict_puts(ctx, trailer, "Root", obj); + pdf_dict_put(ctx, trailer, PDF_NAME_Root, obj); - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "ID"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_ID); if (obj) - pdf_dict_puts(ctx, trailer, "ID", obj); + pdf_dict_put(ctx, trailer, PDF_NAME_ID, obj); } if (main_xref_offset != 0) { nobj = pdf_new_int(ctx, doc, main_xref_offset); - pdf_dict_puts(ctx, trailer, "Prev", nobj); + pdf_dict_put(ctx, trailer, PDF_NAME_Prev, nobj); pdf_drop_obj(ctx, nobj); nobj = NULL; } @@ -1937,49 +1935,49 @@ static void writexrefstream(fz_context *ctx, pdf_document *doc, pdf_write_option if (first) { - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Info"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info); if (obj) - pdf_dict_puts(ctx, dict, "Info", obj); + pdf_dict_put(ctx, dict, PDF_NAME_Info, obj); - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); if (obj) - pdf_dict_puts(ctx, dict, "Root", obj); + pdf_dict_put(ctx, dict, PDF_NAME_Root, obj); - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "ID"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_ID); if (obj) - pdf_dict_puts(ctx, dict, "ID", obj); + pdf_dict_put(ctx, dict, PDF_NAME_ID, obj); if (opts->do_incremental) { - obj = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Encrypt"); + obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Encrypt); if (obj) - pdf_dict_puts(ctx, dict, "Encrypt", obj); + pdf_dict_put(ctx, dict, PDF_NAME_Encrypt, obj); } } - pdf_dict_puts_drop(ctx, dict, "Size", pdf_new_int(ctx, doc, to)); + pdf_dict_put_drop(ctx, dict, PDF_NAME_Size, pdf_new_int(ctx, doc, to)); if (opts->do_incremental) { - pdf_dict_puts_drop(ctx, dict, "Prev", pdf_new_int(ctx, doc, doc->startxref)); + pdf_dict_put_drop(ctx, dict, PDF_NAME_Prev, pdf_new_int(ctx, doc, doc->startxref)); doc->startxref = startxref; } else { if (main_xref_offset != 0) - pdf_dict_puts_drop(ctx, dict, "Prev", pdf_new_int(ctx, doc, main_xref_offset)); + pdf_dict_put_drop(ctx, dict, PDF_NAME_Prev, pdf_new_int(ctx, doc, main_xref_offset)); } - pdf_dict_puts_drop(ctx, dict, "Type", pdf_new_name(ctx, doc, "XRef")); + pdf_dict_put_drop(ctx, dict, PDF_NAME_Type, PDF_NAME_XRef); w = pdf_new_array(ctx, doc, 3); - pdf_dict_puts(ctx, dict, "W", w); + pdf_dict_put(ctx, dict, PDF_NAME_W, w); pdf_array_push_drop(ctx, w, pdf_new_int(ctx, doc, 1)); pdf_array_push_drop(ctx, w, pdf_new_int(ctx, doc, 4)); pdf_array_push_drop(ctx, w, pdf_new_int(ctx, doc, 1)); index = pdf_new_array(ctx, doc, 2); - pdf_dict_puts_drop(ctx, dict, "Index", index); + pdf_dict_put_drop(ctx, dict, PDF_NAME_Index, index); opts->ofs_list[num] = opts->first_xref_entry_offset; @@ -2450,7 +2448,7 @@ static void presize_unsaved_signature_byteranges(fz_context *ctx, pdf_document * * the end and between each consecutive pair of signatures, * hence n + 1 */ int i; - pdf_obj *byte_range = pdf_dict_getp(ctx, usig->field, "V/ByteRange"); + pdf_obj *byte_range = pdf_dict_getl(ctx, usig->field, PDF_NAME_V, PDF_NAME_ByteRange, NULL); for (i = 0; i < n+1; i++) { @@ -2485,7 +2483,7 @@ static void complete_signatures(fz_context *ctx, pdf_document *doc, pdf_write_op for (usig = doc->unsaved_sigs; usig; usig = usig->next) { char *bstr, *cstr, *fstr; - int pnum = pdf_obj_parent_num(ctx, pdf_dict_getp(ctx, usig->field, "V/ByteRange")); + int pnum = pdf_obj_parent_num(ctx, pdf_dict_getl(ctx, usig->field, PDF_NAME_V, PDF_NAME_ByteRange, NULL)); fseek(f, opts->ofs_list[pnum], SEEK_SET); (void)fread(buf, 1, sizeof(buf), f); buf[sizeof(buf)-1] = 0; @@ -2506,7 +2504,7 @@ static void complete_signatures(fz_context *ctx, pdf_document *doc, pdf_write_op /* Recreate ByteRange with correct values. Initially store the * recreated object in the first of the unsaved signatures */ byte_range = pdf_new_array(ctx, doc, 4); - pdf_dict_putp_drop(ctx, doc->unsaved_sigs->field, "V/ByteRange", byte_range); + pdf_dict_putl_drop(ctx, doc->unsaved_sigs->field, byte_range, PDF_NAME_V, PDF_NAME_ByteRange, NULL); last_end = 0; for (usig = doc->unsaved_sigs; usig; usig = usig->next) @@ -2520,7 +2518,7 @@ static void complete_signatures(fz_context *ctx, pdf_document *doc, pdf_write_op /* Copy the new ByteRange to the other unsaved signatures */ for (usig = doc->unsaved_sigs->next; usig; usig = usig->next) - pdf_dict_putp_drop(ctx, usig->field, "V/ByteRange", pdf_copy_array(ctx, byte_range)); + pdf_dict_putl_drop(ctx, usig->field, pdf_copy_array(ctx, byte_range), PDF_NAME_V, PDF_NAME_ByteRange, NULL); /* Write the byte range into buf, padding with spaces*/ i = pdf_sprint_obj(ctx, buf, sizeof(buf), byte_range, 1); @@ -2806,10 +2804,10 @@ make_page_tree_node(fz_context *ctx, pdf_document *doc, int l, int r, pdf_obj *p fz_try(ctx) { me = pdf_new_dict(ctx, doc, 2); - pdf_dict_puts_drop(ctx, me, "Type", pdf_new_name(ctx, doc, "Pages")); - pdf_dict_puts_drop(ctx, me, "Count", pdf_new_int(ctx, doc, r-l)); + pdf_dict_put_drop(ctx, me, PDF_NAME_Type, PDF_NAME_Pages); + pdf_dict_put_drop(ctx, me, PDF_NAME_Count, pdf_new_int(ctx, doc, r-l)); if (!root) - pdf_dict_puts(ctx, me, "Parent", parent_ref); + pdf_dict_put(ctx, me, PDF_NAME_Parent, parent_ref); a = pdf_new_array(ctx, doc, KIDS_PER_LEVEL); me_ref = pdf_new_ref(ctx, doc, me); @@ -2818,7 +2816,7 @@ make_page_tree_node(fz_context *ctx, pdf_document *doc, int l, int r, pdf_obj *p if (spaces >= r-l) { o = pdf_keep_obj(ctx, doc->page_refs[l++]); - pdf_dict_puts(ctx, o, "Parent", me_ref); + pdf_dict_put(ctx, o, PDF_NAME_Parent, me_ref); } else { @@ -2832,7 +2830,7 @@ make_page_tree_node(fz_context *ctx, pdf_document *doc, int l, int r, pdf_obj *p pdf_drop_obj(ctx, o); o = NULL; } - pdf_dict_puts_drop(ctx, me, "Kids", a); + pdf_dict_put_drop(ctx, me, PDF_NAME_Kids, a); a = NULL; } fz_always(ctx) @@ -2858,9 +2856,9 @@ pdf_rebalance_page_tree(fz_context *ctx, pdf_document *doc) if (!doc || !doc->needs_page_tree_rebuild) return; - catalog = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); + catalog = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); pages = make_page_tree_node(ctx, doc, 0, doc->page_len, catalog, 1); - pdf_dict_puts_drop(ctx, catalog, "Pages", pages); + pdf_dict_put_drop(ctx, catalog, PDF_NAME_Pages, pages); doc->needs_page_tree_rebuild = 0; } diff --git a/source/pdf/pdf-xobject.c b/source/pdf/pdf-xobject.c index 404616ae..19d633f0 100644 --- a/source/pdf/pdf-xobject.c +++ b/source/pdf/pdf-xobject.c @@ -58,10 +58,10 @@ pdf_load_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *dict) fz_try(ctx) { - obj = pdf_dict_gets(ctx, dict, "BBox"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_BBox); pdf_to_rect(ctx, obj, &form->bbox); - obj = pdf_dict_gets(ctx, dict, "Matrix"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Matrix); if (obj) pdf_to_matrix(ctx, obj, &form->matrix); else @@ -71,19 +71,19 @@ pdf_load_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *dict) form->knockout = 0; form->transparency = 0; - obj = pdf_dict_gets(ctx, dict, "Group"); + obj = pdf_dict_get(ctx, dict, PDF_NAME_Group); if (obj) { pdf_obj *attrs = obj; - form->isolated = pdf_to_bool(ctx, pdf_dict_gets(ctx, attrs, "I")); - form->knockout = pdf_to_bool(ctx, pdf_dict_gets(ctx, attrs, "K")); + form->isolated = pdf_to_bool(ctx, pdf_dict_get(ctx, attrs, PDF_NAME_I)); + form->knockout = pdf_to_bool(ctx, pdf_dict_get(ctx, attrs, PDF_NAME_K)); - obj = pdf_dict_gets(ctx, attrs, "S"); - if (pdf_is_name(ctx, obj) && !strcmp(pdf_to_name(ctx, obj), "Transparency")) + obj = pdf_dict_get(ctx, attrs, PDF_NAME_S); + if (pdf_name_eq(ctx, obj, PDF_NAME_Transparency)) form->transparency = 1; - obj = pdf_dict_gets(ctx, attrs, "CS"); + obj = pdf_dict_get(ctx, attrs, PDF_NAME_CS); if (obj) { fz_try(ctx) @@ -97,7 +97,7 @@ pdf_load_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *dict) } } - form->resources = pdf_dict_gets(ctx, dict, "Resources"); + form->resources = pdf_dict_get(ctx, dict, PDF_NAME_Resources); if (form->resources) pdf_keep_obj(ctx, form->resources); @@ -136,49 +136,37 @@ pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const f dict = pdf_new_dict(ctx, doc, 0); obj = pdf_new_rect(ctx, doc, bbox); - pdf_dict_puts(ctx, dict, "BBox", obj); + pdf_dict_put(ctx, dict, PDF_NAME_BBox, obj); pdf_drop_obj(ctx, obj); obj = NULL; obj = pdf_new_int(ctx, doc, 1); - pdf_dict_puts(ctx, dict, "FormType", obj); + pdf_dict_put(ctx, dict, PDF_NAME_FormType, obj); pdf_drop_obj(ctx, obj); obj = NULL; obj = pdf_new_int(ctx, doc, 0); - pdf_dict_puts(ctx, dict, "Length", obj); + pdf_dict_put(ctx, dict, PDF_NAME_Length, obj); pdf_drop_obj(ctx, obj); obj = NULL; obj = pdf_new_matrix(ctx, doc, mat); - pdf_dict_puts(ctx, dict, "Matrix", obj); + pdf_dict_put(ctx, dict, PDF_NAME_Matrix, obj); pdf_drop_obj(ctx, obj); obj = NULL; res = pdf_new_dict(ctx, doc, 0); procset = pdf_new_array(ctx, doc, 2); - obj = pdf_new_name(ctx, doc, "PDF"); - pdf_array_push(ctx, procset, obj); - pdf_drop_obj(ctx, obj); - obj = NULL; - obj = pdf_new_name(ctx, doc, "Text"); - pdf_array_push(ctx, procset, obj); - pdf_drop_obj(ctx, obj); - obj = NULL; - pdf_dict_puts(ctx, res, "ProcSet", procset); + pdf_array_push(ctx, procset, PDF_NAME_PDF); + pdf_array_push(ctx, procset, PDF_NAME_Text); + pdf_dict_put(ctx, res, PDF_NAME_ProcSet, procset); pdf_drop_obj(ctx, procset); procset = NULL; - pdf_dict_puts(ctx, dict, "Resources", res); + pdf_dict_put(ctx, dict, PDF_NAME_Resources, res); - obj = pdf_new_name(ctx, doc, "Form"); - pdf_dict_puts(ctx, dict, "Subtype", obj); - pdf_drop_obj(ctx, obj); - obj = NULL; + pdf_dict_put(ctx, dict, PDF_NAME_Subtype, PDF_NAME_Form); - obj = pdf_new_name(ctx, doc, "XObject"); - pdf_dict_puts(ctx, dict, "Type", obj); - pdf_drop_obj(ctx, obj); - obj = NULL; + pdf_dict_put(ctx, dict, PDF_NAME_Type, PDF_NAME_XObject); form = fz_malloc_struct(ctx, pdf_xobject); FZ_INIT_STORABLE(form, 1, pdf_drop_xobject_imp); diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c index 64312010..0524376c 100644 --- a/source/pdf/pdf-xref.c +++ b/source/pdf/pdf-xref.c @@ -574,7 +574,7 @@ pdf_xref_size_from_old_trailer(fz_context *ctx, pdf_document *doc, pdf_lexbuf *b trailer = pdf_parse_dict(ctx, doc, doc->file, buf); - size = pdf_to_int(ctx, pdf_dict_gets(ctx, trailer, "Size")); + size = pdf_to_int(ctx, pdf_dict_get(ctx, trailer, PDF_NAME_Size)); if (!size) fz_throw(ctx, FZ_ERROR_GENERIC, "trailer missing Size entry"); } @@ -819,13 +819,13 @@ pdf_read_new_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) { pdf_xref_entry *entry; - obj = pdf_dict_gets(ctx, trailer, "Size"); + obj = pdf_dict_get(ctx, trailer, PDF_NAME_Size); if (!obj) fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream missing Size entry (%d %d R)", num, gen); size = pdf_to_int(ctx, obj); - obj = pdf_dict_gets(ctx, trailer, "W"); + obj = pdf_dict_get(ctx, trailer, PDF_NAME_W); if (!obj) fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream missing W entry (%d %d R)", num, gen); w0 = pdf_to_int(ctx, pdf_array_get(ctx, obj, 0)); @@ -843,7 +843,7 @@ pdf_read_new_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) w1 = w1 < 0 ? 0 : w1; w2 = w2 < 0 ? 0 : w2; - index = pdf_dict_gets(ctx, trailer, "Index"); + index = pdf_dict_get(ctx, trailer, PDF_NAME_Index); stm = pdf_open_stream_with_offset(ctx, doc, num, gen, trailer, stm_ofs); @@ -955,7 +955,7 @@ read_xref_section(fz_context *ctx, pdf_document *doc, int ofs, pdf_lexbuf *buf, /* FIXME: do we overwrite free entries properly? */ /* FIXME: Does this work properly with progression? */ - xrefstmofs = pdf_to_int(ctx, pdf_dict_gets(ctx, trailer, "XRefStm")); + xrefstmofs = pdf_to_int(ctx, pdf_dict_get(ctx, trailer, PDF_NAME_XRefStm)); if (xrefstmofs) { if (xrefstmofs < 0) @@ -969,7 +969,7 @@ read_xref_section(fz_context *ctx, pdf_document *doc, int ofs, pdf_lexbuf *buf, pdf_drop_obj(ctx, pdf_read_xref(ctx, doc, xrefstmofs, buf)); } - prevofs = pdf_to_int(ctx, pdf_dict_gets(ctx, trailer, "Prev")); + prevofs = pdf_to_int(ctx, pdf_dict_get(ctx, trailer, PDF_NAME_Prev)); if (prevofs < 0) fz_throw(ctx, FZ_ERROR_GENERIC, "negative xref stream offset for previous xref stream"); } @@ -1110,27 +1110,27 @@ pdf_load_linear(fz_context *ctx, pdf_document *doc) dict = pdf_parse_ind_obj(ctx, doc, doc->file, &doc->lexbuf.base, &num, &gen, &stmofs, NULL); if (!pdf_is_dict(ctx, dict)) fz_throw(ctx, FZ_ERROR_GENERIC, "Failed to read linearized dictionary"); - o = pdf_dict_gets(ctx, dict, "Linearized"); + o = pdf_dict_get(ctx, dict, PDF_NAME_Linearized); if (o == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "Failed to read linearized dictionary"); lin = pdf_to_int(ctx, o); if (lin != 1) fz_throw(ctx, FZ_ERROR_GENERIC, "Unexpected version of Linearized tag (%d)", lin); - len = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "L")); + len = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_L)); if (len != doc->file_length) fz_throw(ctx, FZ_ERROR_GENERIC, "File has been updated since linearization"); pdf_read_xref_sections(ctx, doc, fz_tell(ctx, doc->file), &doc->lexbuf.base, 0); - doc->page_count = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "N")); + doc->page_count = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_N)); doc->linear_page_refs = fz_resize_array(ctx, doc->linear_page_refs, doc->page_count, sizeof(pdf_obj *)); memset(doc->linear_page_refs, 0, doc->page_count * sizeof(pdf_obj*)); doc->linear_obj = dict; doc->linear_pos = fz_tell(ctx, doc->file); - doc->linear_page1_obj_num = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "O")); + doc->linear_page1_obj_num = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_O)); doc->linear_page_refs[0] = pdf_new_indirect(ctx, doc, doc->linear_page1_obj_num, 0); doc->linear_page_num = 0; - hint = pdf_dict_gets(ctx, dict, "H"); + hint = pdf_dict_get(ctx, dict, PDF_NAME_H); doc->hint_object_offset = pdf_to_int(ctx, pdf_array_get(ctx, hint, 0)); doc->hint_object_length = pdf_to_int(ctx, pdf_array_get(ctx, hint, 1)); @@ -1152,9 +1152,9 @@ pdf_ocg_set_config(fz_context *ctx, pdf_document *doc, int config) int i, j, len, len2; pdf_ocg_descriptor *desc = doc->ocg; pdf_obj *obj, *cobj; - char *name; + pdf_obj *name; - obj = pdf_dict_gets(ctx, pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"), "OCProperties"); + obj = pdf_dict_get(ctx, pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root), PDF_NAME_OCProperties); if (!obj) { if (config == 0) @@ -1164,29 +1164,29 @@ pdf_ocg_set_config(fz_context *ctx, pdf_document *doc, int config) } if (config == 0) { - cobj = pdf_dict_gets(ctx, obj, "D"); + cobj = pdf_dict_get(ctx, obj, PDF_NAME_D); if (!cobj) fz_throw(ctx, FZ_ERROR_GENERIC, "No default OCG config"); } else { - cobj = pdf_array_get(ctx, pdf_dict_gets(ctx, obj, "Configs"), config); + cobj = pdf_array_get(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Configs), config); if (!cobj) fz_throw(ctx, FZ_ERROR_GENERIC, "Illegal OCG config"); } pdf_drop_obj(ctx, desc->intent); - desc->intent = pdf_dict_gets(ctx, cobj, "Intent"); + desc->intent = pdf_dict_get(ctx, cobj, PDF_NAME_Intent); if (desc->intent) pdf_keep_obj(ctx, desc->intent); len = desc->len; - name = pdf_to_name(ctx, pdf_dict_gets(ctx, cobj, "BaseState")); - if (strcmp(name, "Unchanged") == 0) + name = pdf_dict_get(ctx, cobj, PDF_NAME_BaseState); + if (pdf_name_eq(ctx, name, PDF_NAME_Unchanged)) { /* Do nothing */ } - else if (strcmp(name, "OFF") == 0) + else if (pdf_name_eq(ctx, name, PDF_NAME_OFF)) { for (i = 0; i < len; i++) { @@ -1201,7 +1201,7 @@ pdf_ocg_set_config(fz_context *ctx, pdf_document *doc, int config) } } - obj = pdf_dict_gets(ctx, cobj, "ON"); + obj = pdf_dict_get(ctx, cobj, PDF_NAME_ON); len2 = pdf_array_len(ctx, obj); for (i = 0; i < len2; i++) { @@ -1218,7 +1218,7 @@ pdf_ocg_set_config(fz_context *ctx, pdf_document *doc, int config) } } - obj = pdf_dict_gets(ctx, cobj, "OFF"); + obj = pdf_dict_get(ctx, cobj, PDF_NAME_OFF); len2 = pdf_array_len(ctx, obj); for (i = 0; i < len2; i++) { @@ -1259,10 +1259,10 @@ pdf_read_ocg(fz_context *ctx, pdf_document *doc) fz_var(desc); - obj = pdf_dict_gets(ctx, pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"), "OCProperties"); + obj = pdf_dict_get(ctx, pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root), PDF_NAME_OCProperties); if (!obj) return; - ocg = pdf_dict_gets(ctx, obj, "OCGs"); + ocg = pdf_dict_get(ctx, obj, PDF_NAME_OCGs); if (!ocg || !pdf_is_array(ctx, ocg)) /* Not ever supposed to happen, but live with it. */ return; @@ -1364,8 +1364,8 @@ pdf_init_document(fz_context *ctx, pdf_document *doc) pdf_prime_xref_index(ctx, doc); } - encrypt = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Encrypt"); - id = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "ID"); + encrypt = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Encrypt); + id = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_ID); if (pdf_is_dict(ctx, encrypt)) doc->crypt = pdf_new_crypt(ctx, encrypt, id); @@ -1377,8 +1377,8 @@ pdf_init_document(fz_context *ctx, pdf_document *doc) int xref_len = pdf_xref_len(ctx, doc); pdf_repair_obj_stms(ctx, doc); - hasroot = (pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root") != NULL); - hasinfo = (pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Info") != NULL); + hasroot = (pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root) != NULL); + hasinfo = (pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info) != NULL); for (i = 1; i < xref_len; i++) { @@ -1399,11 +1399,11 @@ pdf_init_document(fz_context *ctx, pdf_document *doc) if (!hasroot) { - obj = pdf_dict_gets(ctx, dict, "Type"); - if (pdf_is_name(ctx, obj) && !strcmp(pdf_to_name(ctx, obj), "Catalog")) + obj = pdf_dict_get(ctx, dict, PDF_NAME_Type); + if (pdf_name_eq(ctx, obj, PDF_NAME_Catalog)) { nobj = pdf_new_indirect(ctx, doc, i, 0); - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "Root", nobj); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, nobj); pdf_drop_obj(ctx, nobj); nobj = NULL; } @@ -1411,10 +1411,10 @@ pdf_init_document(fz_context *ctx, pdf_document *doc) if (!hasinfo) { - if (pdf_dict_gets(ctx, dict, "Creator") || pdf_dict_gets(ctx, dict, "Producer")) + if (pdf_dict_get(ctx, dict, PDF_NAME_Creator) || pdf_dict_get(ctx, dict, PDF_NAME_Producer)) { nobj = pdf_new_indirect(ctx, doc, i, 0); - pdf_dict_puts(ctx, pdf_trailer(ctx, doc), "Info", nobj); + pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info, nobj); pdf_drop_obj(ctx, nobj); nobj = NULL; } @@ -1448,7 +1448,7 @@ pdf_init_document(fz_context *ctx, pdf_document *doc) fz_try(ctx) { char *version_str; - obj = pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/Version"); + obj = pdf_dict_getl(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, PDF_NAME_Version, NULL); version_str = pdf_to_name(ctx, obj); if (*version_str) { @@ -1571,8 +1571,8 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen, pdf_lexbu { objstm = pdf_load_object(ctx, doc, num, gen); - count = pdf_to_int(ctx, pdf_dict_gets(ctx, objstm, "N")); - first = pdf_to_int(ctx, pdf_dict_gets(ctx, objstm, "First")); + count = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_N)); + first = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_First)); if (count < 0) fz_throw(ctx, FZ_ERROR_GENERIC, "negative number of objects in object stream"); @@ -1800,7 +1800,7 @@ pdf_load_hinted_page(fz_context *ctx, pdf_document *doc, int pagenum) { int num = doc->hint_page[pagenum].number; pdf_obj *page = pdf_load_object(ctx, doc, num, 0); - if (!strcmp("Page", pdf_to_name(ctx, pdf_dict_gets(ctx, page, "Type")))) + if (pdf_name_eq(ctx, PDF_NAME_Page, pdf_dict_get(ctx, page, PDF_NAME_Type))) { /* We have found the page object! */ DEBUGMESS((ctx, "LoadHintedPage pagenum=%d num=%d", pagenum, num)); @@ -2197,7 +2197,7 @@ pdf_meta(fz_context *ctx, pdf_document *doc, int key, void *ptr, int size) } case FZ_META_INFO: { - pdf_obj *info = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Info"); + pdf_obj *info = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info); if (!info) { if (ptr) @@ -2335,7 +2335,7 @@ pdf_load_hints(fz_context *ctx, pdf_document *doc, int objnum, int gennum) if (dict == NULL || !pdf_is_dict(ctx, dict)) fz_throw(ctx, FZ_ERROR_GENERIC, "malformed hint object"); - shared_hint_offset = pdf_to_int(ctx, pdf_dict_gets(ctx, dict, "S")); + shared_hint_offset = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_S)); /* Malloc the structures (use realloc to cope with the fact we * may try this several times before enough data is loaded) */ @@ -2607,8 +2607,8 @@ pdf_obj *pdf_progressive_advance(fz_context *ctx, pdf_document *doc, int pagenum pdf_obj *pages; doc->linear_pos = doc->file_length; pdf_load_xref(ctx, doc, buf); - catalog = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pages = pdf_dict_gets(ctx, catalog, "Pages"); + catalog = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pages = pdf_dict_get(ctx, catalog, PDF_NAME_Pages); if (!pdf_is_dict(ctx, pages)) fz_throw(ctx, FZ_ERROR_GENERIC, "missing page tree"); @@ -2663,19 +2663,19 @@ pdf_document *pdf_create_document(fz_context *ctx) pdf_get_populating_xref_entry(ctx, doc, 0); doc->xref_altered = 1; trailer = pdf_new_dict(ctx, doc, 2); - pdf_dict_puts_drop(ctx, trailer, "Size", pdf_new_int(ctx, doc, 3)); + pdf_dict_put_drop(ctx, trailer, PDF_NAME_Size, pdf_new_int(ctx, doc, 3)); o = root = pdf_new_dict(ctx, doc, 2); - pdf_dict_puts_drop(ctx, trailer, "Root", pdf_new_ref(ctx, doc, o)); + pdf_dict_put_drop(ctx, trailer, PDF_NAME_Root, pdf_new_ref(ctx, doc, o)); pdf_drop_obj(ctx, o); o = NULL; - pdf_dict_puts_drop(ctx, root, "Type", pdf_new_name(ctx, doc, "Catalog")); + pdf_dict_put_drop(ctx, root, PDF_NAME_Type, PDF_NAME_Catalog); o = pages = pdf_new_dict(ctx, doc, 3); - pdf_dict_puts_drop(ctx, root, "Pages", pdf_new_ref(ctx, doc, o)); + pdf_dict_put_drop(ctx, root, PDF_NAME_Pages, pdf_new_ref(ctx, doc, o)); pdf_drop_obj(ctx, o); o = NULL; - pdf_dict_puts_drop(ctx, pages, "Type", pdf_new_name(ctx, doc, "Pages")); - pdf_dict_puts_drop(ctx, pages, "Count", pdf_new_int(ctx, doc, 0)); - pdf_dict_puts_drop(ctx, pages, "Kids", pdf_new_array(ctx, doc, 1)); + pdf_dict_put_drop(ctx, pages, PDF_NAME_Type, PDF_NAME_Pages); + pdf_dict_put_drop(ctx, pages, PDF_NAME_Count, pdf_new_int(ctx, doc, 0)); + pdf_dict_put_drop(ctx, pages, PDF_NAME_Kids, pdf_new_array(ctx, doc, 1)); pdf_set_populating_xref_trailer(ctx, doc, trailer); pdf_drop_obj(ctx, trailer); } diff --git a/source/tools/pdfclean.c b/source/tools/pdfclean.c index 07ca7e5a..cbb14f16 100644 --- a/source/tools/pdfclean.c +++ b/source/tools/pdfclean.c @@ -59,7 +59,7 @@ static void retainpage(fz_context *ctx, pdf_document *doc, pdf_obj *parent, pdf_ pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, page-1); pdf_obj *pageobj = pdf_resolve_indirect(ctx, pageref); - pdf_dict_puts(ctx, pageobj, "Parent", parent); + pdf_dict_put(ctx, pageobj, PDF_NAME_Parent, parent); /* Store page object in new kids array */ pdf_array_push(ctx, kids, pageref); @@ -76,13 +76,13 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv) /* Keep only pages/type and (reduced) dest entries to avoid * references to unretained pages */ - oldroot = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pages = pdf_dict_gets(ctx, oldroot, "Pages"); - olddests = pdf_load_name_tree(ctx, doc, "Dests"); + oldroot = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pages = pdf_dict_get(ctx, oldroot, PDF_NAME_Pages); + olddests = pdf_load_name_tree(ctx, doc, PDF_NAME_Dests); root = pdf_new_dict(ctx, doc, 2); - pdf_dict_puts(ctx, root, "Type", pdf_dict_gets(ctx, oldroot, "Type")); - pdf_dict_puts(ctx, root, "Pages", pdf_dict_gets(ctx, oldroot, "Pages")); + pdf_dict_put(ctx, root, PDF_NAME_Type, pdf_dict_get(ctx, oldroot, PDF_NAME_Type)); + pdf_dict_put(ctx, root, PDF_NAME_Pages, pdf_dict_get(ctx, oldroot, PDF_NAME_Pages)); pdf_update_object(ctx, doc, pdf_to_num(ctx, oldroot), root); @@ -138,9 +138,9 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv) /* Update page count and kids array */ countobj = pdf_new_int(ctx, doc, pdf_array_len(ctx, kids)); - pdf_dict_puts(ctx, pages, "Count", countobj); + pdf_dict_put(ctx, pages, PDF_NAME_Count, countobj); pdf_drop_obj(ctx, countobj); - pdf_dict_puts(ctx, pages, "Kids", kids); + pdf_dict_put(ctx, pages, PDF_NAME_Kids, kids); pdf_drop_obj(ctx, kids); /* Also preserve the (partial) Dests name tree */ @@ -156,10 +156,10 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv) { pdf_obj *key = pdf_dict_get_key(ctx, olddests, i); pdf_obj *val = pdf_dict_get_val(ctx, olddests, i); - pdf_obj *dest = pdf_dict_gets(ctx, val, "D"); + pdf_obj *dest = pdf_dict_get(ctx, val, PDF_NAME_D); dest = pdf_array_get(ctx, dest ? dest : val, 0); - if (pdf_array_contains(ctx, pdf_dict_gets(ctx, pages, "Kids"), dest)) + if (pdf_array_contains(ctx, pdf_dict_get(ctx, pages, PDF_NAME_Kids), dest)) { pdf_obj *key_str = pdf_new_string(ctx, doc, pdf_to_name(ctx, key), strlen(pdf_to_name(ctx, key))); pdf_array_push(ctx, names_list, key_str); @@ -168,10 +168,10 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv) } } - root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root"); - pdf_dict_puts(ctx, dests, "Names", names_list); - pdf_dict_puts(ctx, names, "Dests", dests); - pdf_dict_puts(ctx, root, "Names", names); + root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root); + pdf_dict_put(ctx, dests, PDF_NAME_Names, names_list); + pdf_dict_put(ctx, names, PDF_NAME_Dests, dests); + pdf_dict_put(ctx, root, PDF_NAME_Names, names); pdf_drop_obj(ctx, names); pdf_drop_obj(ctx, dests); @@ -190,7 +190,7 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv) pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, i); pdf_obj *pageobj = pdf_resolve_indirect(ctx, pageref); - pdf_obj *annots = pdf_dict_gets(ctx, pageobj, "Annots"); + pdf_obj *annots = pdf_dict_get(ctx, pageobj, PDF_NAME_Annots); int len = pdf_array_len(ctx, annots); int j; @@ -200,14 +200,14 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv) pdf_obj *o = pdf_array_get(ctx, annots, j); pdf_obj *p; - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, o, "Subtype")), "Link")) + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, o, PDF_NAME_Subtype), PDF_NAME_Link)) continue; - p = pdf_dict_gets(ctx, o, "A"); - if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, p, "S")), "GoTo")) + p = pdf_dict_get(ctx, o, PDF_NAME_A); + if (!pdf_name_eq(ctx, pdf_dict_get(ctx, p, PDF_NAME_S), PDF_NAME_GoTo)) continue; - if (string_in_names_list(ctx, pdf_dict_gets(ctx, p, "D"), names_list)) + if (string_in_names_list(ctx, pdf_dict_get(ctx, p, PDF_NAME_D), names_list)) continue; /* FIXME: Should probably look at Next too */ |