summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2015-03-20 17:02:35 +0000
committerRobin Watts <robin.watts@artifex.com>2015-03-24 19:49:58 +0000
commitf533104d6e66b3fc6d3b63b98ec7fe4fb175b366 (patch)
tree9b26b57a66dcb5124c568a9826311d41292a6056
parente0f638b398b2362f5843ea0c1907f678cfa8e278 (diff)
downloadmupdf-f533104d6e66b3fc6d3b63b98ec7fe4fb175b366.tar.xz
Rework handling of PDF names for speed and memory.
Currently, every PDF name is allocated in a pdf_obj structure, and comparisons are done using strcmp. Given that we can predict most of the PDF names we'll use in a given file, this seems wasteful. The pdf_obj type is opaque outside the pdf-object.c file, so we can abuse it slightly without anyone outside knowing. We collect a sorted list of names used in PDF (resources/pdf/names.txt), and we add a utility (namedump) that preprocesses this into 2 header files. The first (include/mupdf/pdf/pdf-names-table.h, included as part of include/mupdf/pdf/object.h), defines a set of "PDF_NAME_xxxx" entries. These are pdf_obj *'s that callers can use to mean "A PDF object that means literal name 'xxxx'" The second (source/pdf/pdf-name-impl.h) is a C array of names. We therefore update the code so that rather than passing "xxxx" to functions (such as pdf_dict_gets(...)) we now pass PDF_NAME_xxxx (to pdf_dict_get(...)). This is a fairly natural (if widespread) change. The pdf_dict_getp (and sibling) functions that take a path (e.g. "foo/bar/baz") are therefore supplemented with equivalents that take a list (pdf_dict_getl(... , PDF_NAME_foo, PDF_NAME_bar, PDF_NAME_baz, NULL)). The actual implementation of this relies on the fact that small pointer values are never valid values. For a given pdf_obj *p, if NULL < (intptr_t)p < PDF_NAME__LIMIT then p is a literal entry in the name table. This enables us to do fast pointer compares and to skip expensive strcmps. Also, bring "null", "true" and "false" into the same style as PDF names. Rather than using full pdf_obj structures for null/true/false, use special pointer values just above the PDF_NAME_ table. This saves memory and makes comparisons easier.
-rw-r--r--Makefile22
-rw-r--r--include/mupdf/pdf.h1
-rw-r--r--include/mupdf/pdf/annot.h4
-rw-r--r--include/mupdf/pdf/crypt.h2
-rw-r--r--include/mupdf/pdf/field.h2
-rw-r--r--include/mupdf/pdf/object.h23
-rw-r--r--platform/win32/generate.bat7
-rw-r--r--platform/win32/generated.vcproj12
-rw-r--r--platform/win32/libmupdf.vcproj4
-rw-r--r--resources/pdf/names.txt367
-rw-r--r--scripts/namedump.c100
-rw-r--r--source/html/html-font.c3
-rw-r--r--source/pdf/js/pdf-js.c10
-rw-r--r--source/pdf/pdf-annot-edit.c70
-rw-r--r--source/pdf/pdf-annot.c120
-rw-r--r--source/pdf/pdf-appearance.c103
-rw-r--r--source/pdf/pdf-clean.c40
-rw-r--r--source/pdf/pdf-cmap-load.c4
-rw-r--r--source/pdf/pdf-colorspace.c54
-rw-r--r--source/pdf/pdf-crypt.c58
-rw-r--r--source/pdf/pdf-device.c122
-rw-r--r--source/pdf/pdf-field.c48
-rw-r--r--source/pdf/pdf-font.c116
-rw-r--r--source/pdf/pdf-form.c211
-rw-r--r--source/pdf/pdf-function.c26
-rw-r--r--source/pdf/pdf-image.c32
-rw-r--r--source/pdf/pdf-interpret.c119
-rw-r--r--source/pdf/pdf-nametree.c34
-rw-r--r--source/pdf/pdf-object.c417
-rw-r--r--source/pdf/pdf-op-filter.c30
-rw-r--r--source/pdf/pdf-outline.c18
-rw-r--r--source/pdf/pdf-page.c142
-rw-r--r--source/pdf/pdf-pattern.c8
-rw-r--r--source/pdf/pdf-pkcs7.c2
-rw-r--r--source/pdf/pdf-repair.c40
-rw-r--r--source/pdf/pdf-shade.c46
-rw-r--r--source/pdf/pdf-stream.c76
-rw-r--r--source/pdf/pdf-type3.c24
-rw-r--r--source/pdf/pdf-write.c240
-rw-r--r--source/pdf/pdf-xobject.c50
-rw-r--r--source/pdf/pdf-xref.c94
-rw-r--r--source/tools/pdfclean.c38
42 files changed, 1825 insertions, 1114 deletions
diff --git a/Makefile b/Makefile
index 8a0b01cf..84c03ede 100644
--- a/Makefile
+++ b/Makefile
@@ -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 &amp;&amp; generate.bat"
- CleanCommandLine="del /q ..\..\generated"
+ ReBuildCommandLine="del /q ..\..\generated ..\..\include\mupdf\pdf\name-table.h ..\..\source\pdf\pdf-name-table.h &amp;&amp; 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 */