119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/*
319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org * Copyright 2010 The Android Open Source Project
419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org *
519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org * Use of this source code is governed by a BSD-style license that can be
619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org * found in the LICENSE file.
719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org */
819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
1019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#ifndef SkPDFTypes_DEFINED
1119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#define SkPDFTypes_DEFINED
1219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
1319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#include "SkRefCnt.h"
1419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#include "SkScalar.h"
1519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#include "SkString.h"
1619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#include "SkTDArray.h"
1709b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com#include "SkTSet.h"
1819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#include "SkTypes.h"
1919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
2019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFCatalog;
2119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkWStream;
2219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
2319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFObject
2419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
2519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    A PDF Object is the base class for primitive elements in a PDF file.  A
2619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    common subtype is used to ease the use of indirect object references,
2719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    which are common in the PDF format.
2819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
2919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFObject : public SkRefCnt {
3019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
315402c06820a293e8293e052266d9fbdb8ab42033robertphillips@google.com    SK_DECLARE_INST_COUNT(SkPDFObject)
325402c06820a293e8293e052266d9fbdb8ab42033robertphillips@google.com
3319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Return the size (number of bytes) of this object in the final output
3419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  file. Compound objects or objects that are computationally intensive
3519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  to output should override this method.
3619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param catalog  The object catalog to use.
3719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param indirect If true, output an object identifier with the object.
3819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
3919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
4019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
4119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** For non-primitive objects (i.e. objects defined outside this file),
4209b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *  this method will add to newResourceObjects any objects that this method
4309b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *  depends on, but not already in knownResourceObjects. This operates
4409b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *  recursively so if this object depends on another object and that object
4509b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *  depends on two more, all three objects will be added.
4609b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *
4709b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *  @param knownResourceObjects  The set of resources to be ignored.
4809b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *  @param newResourceObjects  The set to append dependant resources to.
4919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
5009b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com    virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects,
5109b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com                              SkTSet<SkPDFObject*>* newResourceObjects);
5219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
5319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Emit this object unless the catalog has a substitute object, in which
5419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  case emit that.
5519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @see emitObject
5619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
5719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void emit(SkWStream* stream, SkPDFCatalog* catalog, bool indirect);
5819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
5919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Helper function to output an indirect object.
6019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param catalog The object catalog to use.
6119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param stream  The writable output stream to send the output to.
6219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
6319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void emitIndirectObject(SkWStream* stream, SkPDFCatalog* catalog);
6419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
6519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Helper function to find the size of an indirect object.
6619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param catalog The object catalog to use.
6719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
6819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    size_t getIndirectOutputSize(SkPDFCatalog* catalog);
6919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
7019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Static helper function to add a resource to a list.  The list takes
7119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  a reference.
7219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     * @param resource  The resource to add.
7319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     * @param list      The list to add the resource to.
7419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
7519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static void AddResourceHelper(SkPDFObject* resource,
7619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                                  SkTDArray<SkPDFObject*>* list);
7719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
7819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Static helper function to copy and reference the resources (and all
7919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *   their subresources) into a new list.
8019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     * @param resources The resource list.
8109b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     * @param newResourceObjects All the resource objects (recursively) used on
8209b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *                         the page are added to this array.  This gives
8309b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *                         the caller a chance to deduplicate resources
8409b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     *                         across pages.
8509b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com     * @param knownResourceObjects  The set of resources to be ignored.
8619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
8709b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com    static void GetResourcesHelper(
8809b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com            const SkTDArray<SkPDFObject*>* resources,
8909b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com            const SkTSet<SkPDFObject*>& knownResourceObjects,
9009b4813b6bd356d371952c4346f1f9fbe02fdfceedisonn@google.com            SkTSet<SkPDFObject*>* newResourceObjects);
9119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
9219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprotected:
9319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Subclasses must implement this method to print the object to the
9419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  PDF file.
9519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param catalog  The object catalog to use.
9619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param indirect If true, output an object identifier with the object.
9719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param stream   The writable output stream to send the output to.
9819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
9919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
10019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect) = 0;
1015402c06820a293e8293e052266d9fbdb8ab42033robertphillips@google.com
1025402c06820a293e8293e052266d9fbdb8ab42033robertphillips@google.com        typedef SkRefCnt INHERITED;
10319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
10419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
10519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFObjRef
10619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
10719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    An indirect reference to a PDF object.
10819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
10919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFObjRef : public SkPDFObject {
11019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
111f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFObjRef)
112f06b135419dd7144906299be7063c616c37027f6reed@google.com
11319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a reference to an existing SkPDFObject.
11419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param obj The object to reference.
11519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
11619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFObjRef(SkPDFObject* obj);
11719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFObjRef();
11819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
11919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
12019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
12119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
12219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
12319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
12419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
1255b20098a0c3b7d3fe65d8e636bc898fb661f6fa8vandebo@chromium.org    SkAutoTUnref<SkPDFObject> fObj;
126dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
127f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
12819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
12919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
13019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFInt
13119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
13219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    An integer object in a PDF.
13319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
13419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFInt : public SkPDFObject {
13519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
136f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFInt)
137f06b135419dd7144906299be7063c616c37027f6reed@google.com
13819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF integer (usually for indirect reference purposes).
13919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value An integer value between 2^31 - 1 and -2^31.
14019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
14119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFInt(int32_t value);
14219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFInt();
14319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
14419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
14519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
14619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
14719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
14819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
14919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    int32_t fValue;
150dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
151f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
15219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
15319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
15419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFBool
15519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
15619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    An boolean value in a PDF.
15719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
15819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFBool : public SkPDFObject {
15919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
160f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFBool)
161f06b135419dd7144906299be7063c616c37027f6reed@google.com
16219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF boolean.
16319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value true or false.
16419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
16519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFBool(bool value);
16619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFBool();
16719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
16819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
16919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
17019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
17119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
17219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
17319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
17419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    bool fValue;
175dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
176f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
17719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
17819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
17919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFScalar
18019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
18119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    A real number object in a PDF.
18219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
18319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFScalar : public SkPDFObject {
18419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
185f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFScalar)
186f06b135419dd7144906299be7063c616c37027f6reed@google.com
18719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF real number.
18819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value A real value.
18919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
19019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFScalar(SkScalar value);
19119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFScalar();
19219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
19319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static void Append(SkScalar value, SkWStream* stream);
19419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
19519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
19619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
19719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
19819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
19919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
20019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkScalar fValue;
201dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
202f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
20319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
20419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
20519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFString
20619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
20719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    A string object in a PDF.
20819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
20919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFString : public SkPDFObject {
21019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
211f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFString)
212f06b135419dd7144906299be7063c616c37027f6reed@google.com
21319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF string. Maximum length (in bytes) is 65,535.
21419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value A string value.
21519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
21619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFString(const char value[]);
21719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFString(const SkString& value);
21819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
21919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF string. Maximum length (in bytes) is 65,535.
22019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value     A string value.
22119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param len       The length of value.
22219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param wideChars Indicates if the top byte in value is significant and
22319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *                   should be encoded (true) or not (false).
22419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
22519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFString(const uint16_t* value, size_t len, bool wideChars);
22619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFString();
22719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
22819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
22919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
23019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
23119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
23219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
23319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static SkString FormatString(const char* input, size_t len);
23419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static SkString FormatString(const uint16_t* input, size_t len,
23519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                                 bool wideChars);
23619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
23719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static const size_t kMaxLen = 65535;
23819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
23919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    const SkString fValue;
24019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
24119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static SkString DoFormatString(const void* input, size_t len,
24219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                                 bool wideInput, bool wideOutput);
243f06b135419dd7144906299be7063c616c37027f6reed@google.com
244f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
24519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
24619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
24719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFName
24819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
24919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    A name object in a PDF.
25019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
25119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFName : public SkPDFObject {
25219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
253f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFName)
254f06b135419dd7144906299be7063c616c37027f6reed@google.com
25519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF name object. Maximum length is 127 bytes.
25619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The name.
25719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
25819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFName(const char name[]);
25919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFName(const SkString& name);
26019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFName();
26119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
26219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    bool operator==(const SkPDFName& b) const;
26319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
26419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
26519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
26619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
26719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
26819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
26919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
27019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static const size_t kMaxLen = 127;
27119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
27219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    const SkString fValue;
27319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
27419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static SkString FormatName(const SkString& input);
275dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
276f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
27719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
27819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
27919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFArray
28019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
28119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    An array object in a PDF.
28219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
28319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFArray : public SkPDFObject {
28419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
285f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFArray)
286f06b135419dd7144906299be7063c616c37027f6reed@google.com
28719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF array. Maximum length is 8191.
28819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
28919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFArray();
29019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFArray();
29119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
29219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
29319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
29419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
29519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
29619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
29719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** The size of the array.
29819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
29919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    int size() { return fValue.count(); }
30019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
30119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Preallocate space for the given number of entries.
30219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param length The number of array slots to preallocate.
30319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
30419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void reserve(int length);
30519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
30619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Returns the object at the given offset in the array.
30719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param index The index into the array to retrieve.
30819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
30919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFObject* getAt(int index) { return fValue[index]; }
31019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
31119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Set the object at the given offset in the array. Ref's value.
31219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param index The index into the array to set.
31319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value to add to the array.
31419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @return The value argument is returned.
31519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
31619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFObject* setAt(int index, SkPDFObject* value);
31719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
31819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Append the object to the end of the array and increments its ref count.
31919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value to add to the array.
32019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @return The value argument is returned.
32119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
32219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFObject* append(SkPDFObject* value);
32319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
32419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Creates a SkPDFInt object and appends it to the array.
32519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value to add to the array.
32619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
32719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void appendInt(int32_t value);
32819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
32919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Creates a SkPDFScalar object and appends it to the array.
33019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value to add to the array.
33119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
33219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void appendScalar(SkScalar value);
33319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
33419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Creates a SkPDFName object and appends it to the array.
33519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value to add to the array.
33619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
33719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void appendName(const char name[]);
33819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
33919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
34019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static const int kMaxLen = 8191;
34119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkTDArray<SkPDFObject*> fValue;
342dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
343f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
34419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
34519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
34619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org/** \class SkPDFDict
34719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
34819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    A dictionary object in a PDF.
34919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org*/
35019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgclass SkPDFDict : public SkPDFObject {
35119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
352f06b135419dd7144906299be7063c616c37027f6reed@google.com    SK_DECLARE_INST_COUNT(SkPDFDict)
353f06b135419dd7144906299be7063c616c37027f6reed@google.com
35419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF dictionary. Maximum number of entries is 4095.
35519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
35619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFDict();
35719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
35819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Create a PDF dictionary with a Type entry.
35919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param type   The value of the Type entry.
36019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
36119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    explicit SkPDFDict(const char type[]);
36219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
36319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual ~SkPDFDict();
36419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
36519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    // The SkPDFObject interface.
36619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
36719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org                            bool indirect);
36819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    virtual size_t getOutputSize(SkPDFCatalog* catalog, bool indirect);
36919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
37019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** The size of the dictionary.
37119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
37219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    int size() { return fValue.count(); }
37319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
37419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Add the value to the dictionary with the given key.  Refs value.
37519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param key   The key for this dictionary entry.
37619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value for this dictionary entry.
37719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @return The value argument is returned.
37819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
37919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFObject* insert(SkPDFName* key, SkPDFObject* value);
38019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
38119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Add the value to the dictionary with the given key.  Refs value.  The
38219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  method will create the SkPDFName object.
38319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param key   The text of the key for this dictionary entry.
38419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The value for this dictionary entry.
38519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @return The value argument is returned.
38619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
38719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkPDFObject* insert(const char key[], SkPDFObject* value);
38819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
38919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Add the int to the dictionary with the given key.
39019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param key   The text of the key for this dictionary entry.
39119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The int value for this dictionary entry.
39219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
39319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void insertInt(const char key[], int32_t value);
39419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
39519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Add the scalar to the dictionary with the given key.
39619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param key   The text of the key for this dictionary entry.
39719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param value The scalar value for this dictionary entry.
39819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
39919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void insertScalar(const char key[], SkScalar value);
40019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
40119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Add the name to the dictionary with the given key.
40219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param key   The text of the key for this dictionary entry.
40319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param name  The name for this dictionary entry.
40419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
40519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void insertName(const char key[], const char name[]);
40619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
40719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Add the name to the dictionary with the given key.
40819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param key   The text of the key for this dictionary entry.
40919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     *  @param name  The name for this dictionary entry.
41019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
41119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void insertName(const char key[], const SkString& name) {
41219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org        this->insertName(key, name.c_str());
41319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    }
41419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
41519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    /** Remove all entries from the dictionary.
41619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org     */
41719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    void clear();
41819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
41919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
42019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    struct Rec {
42119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org      SkPDFName* key;
42219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org      SkPDFObject* value;
42319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    };
42419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
42519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgpublic:
42619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    class Iter {
42719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    public:
42819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org        explicit Iter(const SkPDFDict& dict);
42919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org        SkPDFName* next(SkPDFObject** value);
43019be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
43119be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    private:
432871c3b10650a8bae00106ddd2a73113be6256824commit-bot@chromium.org        const Rec* fIter;
433871c3b10650a8bae00106ddd2a73113be6256824commit-bot@chromium.org        const Rec* fStop;
43419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    };
43519be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
43619be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.orgprivate:
43719be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    static const int kMaxLen = 4095;
43819be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
43919be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org    SkTDArray<struct Rec> fValue;
440dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com
441f06b135419dd7144906299be7063c616c37027f6reed@google.com    typedef SkPDFObject INHERITED;
44219be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org};
44319be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org
44419be8d34138d93df3a792263eb185d77f153c0c6vandebo@chromium.org#endif
445