1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 28459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 The Android Open Source Project 48459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 78459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 88459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 108459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#ifndef SkPDFTypes_DEFINED 118459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#define SkPDFTypes_DEFINED 128459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 138459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#include "SkRefCnt.h" 148459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#include "SkScalar.h" 158459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#include "SkString.h" 168459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#include "SkTDArray.h" 176addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com#include "SkTSet.h" 1828be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org#include "SkTypes.h" 198459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 208459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFCatalog; 218459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkWStream; 228459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 238459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFObject 248459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 258459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org A PDF Object is the base class for primitive elements in a PDF file. A 268459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org common subtype is used to ease the use of indirect object references, 278459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org which are common in the PDF format. 288459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 298459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFObject : public SkRefCnt { 308459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 314d73ac22a1b99402fc8cff78a4eb4b27aa8fe019robertphillips@google.com SK_DECLARE_INST_COUNT(SkPDFObject) 324d73ac22a1b99402fc8cff78a4eb4b27aa8fe019robertphillips@google.com 338459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Return the size (number of bytes) of this object in the final output 348459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * file. Compound objects or objects that are computationally intensive 358459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * to output should override this method. 368459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param catalog The object catalog to use. 378459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param indirect If true, output an object identifier with the object. 388459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 398459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 408459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 41188838c20818307fda770ffc395a76ea63c1c8ccvandebo@chromium.org /** For non-primitive objects (i.e. objects defined outside this file), 426addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * this method will add to newResourceObjects any objects that this method 436addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * depends on, but not already in knownResourceObjects. This operates 446addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * recursively so if this object depends on another object and that object 456addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * depends on two more, all three objects will be added. 466addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * 476addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * @param knownResourceObjects The set of resources to be ignored. 486addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * @param newResourceObjects The set to append dependant resources to. 49a518086928494319b8968abc09808eff492c194fvandebo@chromium.org */ 506addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects, 516addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com SkTSet<SkPDFObject*>* newResourceObjects); 52a518086928494319b8968abc09808eff492c194fvandebo@chromium.org 532ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org /** Emit this object unless the catalog has a substitute object, in which 542ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org * case emit that. 552ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org * @see emitObject 562ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org */ 572ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org void emit(SkWStream* stream, SkPDFCatalog* catalog, bool indirect); 582ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org 598459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Helper function to output an indirect object. 608459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param catalog The object catalog to use. 618459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param stream The writable output stream to send the output to. 628459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 638459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org void emitIndirectObject(SkWStream* stream, SkPDFCatalog* catalog); 648459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 658459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Helper function to find the size of an indirect object. 668459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param catalog The object catalog to use. 678459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 688459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org size_t getIndirectOutputSize(SkPDFCatalog* catalog); 692ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org 70421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org /** Static helper function to add a resource to a list. The list takes 71421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org * a reference. 72421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org * @param resource The resource to add. 73421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org * @param list The list to add the resource to. 74421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org */ 75421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org static void AddResourceHelper(SkPDFObject* resource, 76421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org SkTDArray<SkPDFObject*>* list); 77421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org 78421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org /** Static helper function to copy and reference the resources (and all 79421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org * their subresources) into a new list. 80421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org * @param resources The resource list. 816addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * @param newResourceObjects All the resource objects (recursively) used on 826addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * the page are added to this array. This gives 836addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * the caller a chance to deduplicate resources 846addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * across pages. 856addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com * @param knownResourceObjects The set of resources to be ignored. 86421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org */ 876addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com static void GetResourcesHelper( 886addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com const SkTDArray<SkPDFObject*>* resources, 896addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com const SkTSet<SkPDFObject*>& knownResourceObjects, 906addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com SkTSet<SkPDFObject*>* newResourceObjects); 91421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org 922ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.orgprotected: 932ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org /** Subclasses must implement this method to print the object to the 942ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org * PDF file. 952ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org * @param catalog The object catalog to use. 962ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org * @param indirect If true, output an object identifier with the object. 972ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org * @param stream The writable output stream to send the output to. 982ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org */ 992ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 1002ef12d4bb54312091d644f0ada3639c51c9f6e5avandebo@chromium.org bool indirect) = 0; 1014d73ac22a1b99402fc8cff78a4eb4b27aa8fe019robertphillips@google.com 1024d73ac22a1b99402fc8cff78a4eb4b27aa8fe019robertphillips@google.com typedef SkRefCnt INHERITED; 1038459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 1048459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1058459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFObjRef 1068459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1078459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org An indirect reference to a PDF object. 1088459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 1098459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFObjRef : public SkPDFObject { 1108459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 1113b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFObjRef) 1123b429984664e88e0530eb6a1461a828898d8d96breed@google.com 1138459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a reference to an existing SkPDFObject. 1148459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param obj The object to reference. 1158459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 116f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFObjRef(SkPDFObject* obj); 117f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org virtual ~SkPDFObjRef(); 1188459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1198459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 1208459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 1218459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 1228459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 1238459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1248459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 125d96d17b9c113ac694138224249ff2ce643e961ddvandebo@chromium.org SkAutoTUnref<SkPDFObject> fObj; 126d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1273b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 1288459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 1298459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1308459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFInt 1318459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1328459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org An integer object in a PDF. 1338459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 1348459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFInt : public SkPDFObject { 1358459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 1363b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFInt) 1373b429984664e88e0530eb6a1461a828898d8d96breed@google.com 1388459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a PDF integer (usually for indirect reference purposes). 1398459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value An integer value between 2^31 - 1 and -2^31. 1408459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 141f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFInt(int32_t value); 142f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org virtual ~SkPDFInt(); 1438459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1448459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 1458459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 1468459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 1478459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1488459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 1498459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org int32_t fValue; 150d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1513b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 1528459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 1538459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1549b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org/** \class SkPDFBool 1559b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 1569b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org An boolean value in a PDF. 1579b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org*/ 1589b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgclass SkPDFBool : public SkPDFObject { 1599b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgpublic: 1603b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFBool) 1613b429984664e88e0530eb6a1461a828898d8d96breed@google.com 1629b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org /** Create a PDF boolean. 1639b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org * @param value true or false. 1649b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org */ 1659b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org explicit SkPDFBool(bool value); 1669b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org virtual ~SkPDFBool(); 1679b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 1689b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org // The SkPDFObject interface. 1699b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 1709b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org bool indirect); 1719b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 1729b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 1739b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgprivate: 1749b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org bool fValue; 175d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1763b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 1779b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org}; 1789b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 1798459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFScalar 1808459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1818459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org A real number object in a PDF. 1828459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 1838459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFScalar : public SkPDFObject { 1848459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 1853b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFScalar) 1863b429984664e88e0530eb6a1461a828898d8d96breed@google.com 1878459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a PDF real number. 1888459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value A real value. 1898459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 190f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFScalar(SkScalar value); 191f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org virtual ~SkPDFScalar(); 1928459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 193cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org static void Append(SkScalar value, SkWStream* stream); 194094316bd284372c2a3d8ef02eec589901e503c59vandebo@chromium.org 1958459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 1968459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 1978459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 1988459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 1998459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 2008459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org SkScalar fValue; 201d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2023b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 2038459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 2048459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2058459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFString 2068459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2078459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org A string object in a PDF. 2088459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 2098459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFString : public SkPDFObject { 2108459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 2113b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFString) 2123b429984664e88e0530eb6a1461a828898d8d96breed@google.com 2138459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a PDF string. Maximum length (in bytes) is 65,535. 2148459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value A string value. 2158459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 216f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFString(const char value[]); 217f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFString(const SkString& value); 21828be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org 21928be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org /** Create a PDF string. Maximum length (in bytes) is 65,535. 22028be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org * @param value A string value. 22128be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org * @param len The length of value. 22228be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org * @param wideChars Indicates if the top byte in value is significant and 22328be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org * should be encoded (true) or not (false). 22428be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org */ 22528be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org SkPDFString(const uint16_t* value, size_t len, bool wideChars); 226f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org virtual ~SkPDFString(); 2278459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2288459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 2298459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 2308459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 2318459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 2328459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 233f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com static SkString FormatString(const char* input, size_t len); 234f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com static SkString FormatString(const uint16_t* input, size_t len, 23528be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org bool wideChars); 2368459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 237d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org static const size_t kMaxLen = 65535; 2388459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2398459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org const SkString fValue; 2408459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 241f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com static SkString DoFormatString(const void* input, size_t len, 24228be72b63e457c680c192a34fb9f58e1c693363fvandebo@chromium.org bool wideInput, bool wideOutput); 2433b429984664e88e0530eb6a1461a828898d8d96breed@google.com 2443b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 2458459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 2468459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2478459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFName 2488459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2498459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org A name object in a PDF. 2508459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 2518459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFName : public SkPDFObject { 2528459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 2533b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFName) 2543b429984664e88e0530eb6a1461a828898d8d96breed@google.com 2558459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a PDF name object. Maximum length is 127 bytes. 2568459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value The name. 2578459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 258f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFName(const char name[]); 259f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org explicit SkPDFName(const SkString& name); 260f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org virtual ~SkPDFName(); 2618459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 262421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org bool operator==(const SkPDFName& b) const; 263421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org 2648459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 2658459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 2668459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 2678459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 2688459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2698459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 270d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org static const size_t kMaxLen = 127; 2718459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2728459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org const SkString fValue; 2738459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 274f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com static SkString FormatName(const SkString& input); 275d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2763b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 2778459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 2788459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2798459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFArray 2808459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2818459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org An array object in a PDF. 2828459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 2838459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFArray : public SkPDFObject { 2848459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 2853b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFArray) 2863b429984664e88e0530eb6a1461a828898d8d96breed@google.com 2878459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a PDF array. Maximum length is 8191. 2888459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 289f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org SkPDFArray(); 2908459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual ~SkPDFArray(); 2918459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2928459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 2938459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 2948459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 2958459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 2968459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 2978459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** The size of the array. 2988459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 2998459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org int size() { return fValue.count(); } 3008459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 3018459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Preallocate space for the given number of entries. 3028459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param length The number of array slots to preallocate. 3038459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 3048459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org void reserve(int length); 3058459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 3068459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Returns the object at the given offset in the array. 3078459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param index The index into the array to retrieve. 3088459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 3098459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org SkPDFObject* getAt(int index) { return fValue[index]; } 3108459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 311f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org /** Set the object at the given offset in the array. Ref's value. 3128459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param index The index into the array to set. 3138459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value The value to add to the array. 314f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org * @return The value argument is returned. 3158459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 316f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org SkPDFObject* setAt(int index, SkPDFObject* value); 3178459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 318f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org /** Append the object to the end of the array and increments its ref count. 3198459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value The value to add to the array. 320f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org * @return The value argument is returned. 3218459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 322f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org SkPDFObject* append(SkPDFObject* value); 323a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 324c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Creates a SkPDFInt object and appends it to the array. 325c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param value The value to add to the array. 326c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 327c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void appendInt(int32_t value); 328a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 329c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Creates a SkPDFScalar object and appends it to the array. 330c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param value The value to add to the array. 331c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 332c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void appendScalar(SkScalar value); 333a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 334c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Creates a SkPDFName object and appends it to the array. 335c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param value The value to add to the array. 336c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 337c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void appendName(const char name[]); 338a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 3398459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 3408459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org static const int kMaxLen = 8191; 3418459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org SkTDArray<SkPDFObject*> fValue; 342d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 3433b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 3448459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 3458459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 3468459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org/** \class SkPDFDict 3478459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 3488459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org A dictionary object in a PDF. 3498459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org*/ 3508459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgclass SkPDFDict : public SkPDFObject { 3518459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgpublic: 3523b429984664e88e0530eb6a1461a828898d8d96breed@google.com SK_DECLARE_INST_COUNT(SkPDFDict) 3533b429984664e88e0530eb6a1461a828898d8d96breed@google.com 3548459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** Create a PDF dictionary. Maximum number of entries is 4095. 3558459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 356f66025d59ab4c8c4439fabf6ad89ddf35a19d1fdvandebo@chromium.org SkPDFDict(); 357d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 358d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org /** Create a PDF dictionary with a Type entry. 359d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org * @param type The value of the Type entry. 360d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org */ 361d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org explicit SkPDFDict(const char type[]); 362d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 3638459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual ~SkPDFDict(); 3648459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 3658459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org // The SkPDFObject interface. 3668459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog, 3678459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org bool indirect); 3688459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect); 3698459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 3708459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org /** The size of the dictionary. 3718459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 3728459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org int size() { return fValue.count(); } 3738459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 374f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org /** Add the value to the dictionary with the given key. Refs value. 3758459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param key The key for this dictionary entry. 3768459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org * @param value The value for this dictionary entry. 377f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org * @return The value argument is returned. 3788459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org */ 379f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org SkPDFObject* insert(SkPDFName* key, SkPDFObject* value); 3808459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 381f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org /** Add the value to the dictionary with the given key. Refs value. The 382f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org * method will create the SkPDFName object. 383d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org * @param key The text of the key for this dictionary entry. 384d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org * @param value The value for this dictionary entry. 385f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org * @return The value argument is returned. 386d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org */ 387f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org SkPDFObject* insert(const char key[], SkPDFObject* value); 388a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 389c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Add the int to the dictionary with the given key. 390c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param key The text of the key for this dictionary entry. 391c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param value The int value for this dictionary entry. 392c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 393c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void insertInt(const char key[], int32_t value); 394a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 395aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com /** 396aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com * Calls insertInt() but asserts in debug builds that the value can be represented 397aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com * by an int32_t. 398aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com */ 399aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com void insertInt(const char key[], size_t value) { 400aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com this->insertInt(key, SkToS32(value)); 401aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com } 402aec406650cbfa4ef65d83db5ff4f82572e8e098freed@google.com 403c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Add the scalar to the dictionary with the given key. 404c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param key The text of the key for this dictionary entry. 405c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param value The scalar value for this dictionary entry. 406c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 407c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void insertScalar(const char key[], SkScalar value); 408a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 409c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Add the name to the dictionary with the given key. 410c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param key The text of the key for this dictionary entry. 411c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param name The name for this dictionary entry. 412c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 413c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void insertName(const char key[], const char name[]); 414d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 415c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com /** Add the name to the dictionary with the given key. 416c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param key The text of the key for this dictionary entry. 417c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com * @param name The name for this dictionary entry. 418c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com */ 419c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com void insertName(const char key[], const SkString& name) { 420c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com this->insertName(key, name.c_str()); 421c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com } 422a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org 423d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org /** Remove all entries from the dictionary. 424d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org */ 425d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org void clear(); 426d877fdbb6e64692285c3e6532d88b9458f65b3cdvandebo@chromium.org 4278459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.orgprivate: 4288459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org struct Rec { 4298459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org SkPDFName* key; 4308459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org SkPDFObject* value; 4318459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org }; 4328459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 433421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.orgpublic: 434421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org class Iter { 435421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org public: 436421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org explicit Iter(const SkPDFDict& dict); 437421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org SkPDFName* next(SkPDFObject** value); 438421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org 439421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org private: 440aa537d4bdb2384cdcd0644a02a2ab7fb0ecdd3b3commit-bot@chromium.org const Rec* fIter; 441aa537d4bdb2384cdcd0644a02a2ab7fb0ecdd3b3commit-bot@chromium.org const Rec* fStop; 442421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org }; 443421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org 444421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.orgprivate: 445421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org static const int kMaxLen = 4095; 446421d6443fbd3a913dfa32b6492c4a2969bc6314bvandebo@chromium.org 4478459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org SkTDArray<struct Rec> fValue; 448d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 4493b429984664e88e0530eb6a1461a828898d8d96breed@google.com typedef SkPDFObject INHERITED; 4508459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org}; 4518459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org 4528459d4e5e32608ec6da3f2b81731aaeb7b038843vandebo@chromium.org#endif 453