clang-format all pdfium code.
[pdfium.git] / core / include / fpdfapi / fpdf_serial.h
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_
9
10 #include "fpdf_page.h"
11 #include "fpdf_pageobj.h"
12
13 class CPDF_ObjectStream;
14 class CPDF_XRefStream;
15 CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj);
16 #define FPDFCREATE_INCREMENTAL 1
17 #define FPDFCREATE_NO_ORIGINAL 2
18 #define FPDFCREATE_PROGRESSIVE 4
19 #define FPDFCREATE_OBJECTSTREAM 8
20 class CPDF_Creator {
21  public:
22   CPDF_Creator(CPDF_Document* pDoc);
23
24   ~CPDF_Creator();
25
26   void RemoveSecurity();
27
28   FX_BOOL Create(const FX_WCHAR* filename, FX_DWORD flags = 0);
29
30   FX_BOOL Create(const FX_CHAR* filename, FX_DWORD flags = 0);
31
32   FX_BOOL Create(IFX_StreamWrite* pFile, FX_DWORD flags = 0);
33
34   int32_t Continue(IFX_Pause* pPause = NULL);
35
36   FX_BOOL SetFileVersion(int32_t fileVersion = 17);
37
38  protected:
39   CPDF_Document* m_pDocument;
40
41   CPDF_Parser* m_pParser;
42
43   FX_BOOL m_bCompress;
44
45   FX_BOOL m_bSecurityChanged;
46
47   CPDF_Dictionary* m_pEncryptDict;
48   FX_DWORD m_dwEnryptObjNum;
49   FX_BOOL m_bEncryptCloned;
50
51   FX_BOOL m_bStandardSecurity;
52
53   CPDF_CryptoHandler* m_pCryptoHandler;
54   FX_BOOL m_bNewCrypto;
55
56   FX_BOOL m_bEncryptMetadata;
57
58   CPDF_Object* m_pMetadata;
59
60   CPDF_XRefStream* m_pXRefStream;
61
62   int32_t m_ObjectStreamSize;
63
64   FX_DWORD m_dwLastObjNum;
65   FX_BOOL Create(FX_DWORD flags);
66   void ResetStandardSecurity();
67   void Clear();
68   int32_t WriteDoc_Stage1(IFX_Pause* pPause);
69   int32_t WriteDoc_Stage2(IFX_Pause* pPause);
70   int32_t WriteDoc_Stage3(IFX_Pause* pPause);
71   int32_t WriteDoc_Stage4(IFX_Pause* pPause);
72
73   CFX_FileBufferArchive m_File;
74
75   FX_FILESIZE m_Offset;
76   void InitOldObjNumOffsets();
77   void InitNewObjNumOffsets();
78   void AppendNewObjNum(FX_DWORD objbum);
79   int32_t WriteOldIndirectObject(FX_DWORD objnum);
80   int32_t WriteOldObjs(IFX_Pause* pPause);
81   int32_t WriteNewObjs(FX_BOOL bIncremental, IFX_Pause* pPause);
82   int32_t WriteIndirectObj(const CPDF_Object* pObj);
83   int32_t WriteDirectObj(FX_DWORD objnum,
84                          const CPDF_Object* pObj,
85                          FX_BOOL bEncrypt = TRUE);
86   int32_t WriteIndirectObjectToStream(const CPDF_Object* pObj);
87   int32_t WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj);
88   int32_t WriteIndirectObjectToStream(FX_DWORD objnum,
89                                       const uint8_t* pBuffer,
90                                       FX_DWORD dwSize);
91   int32_t AppendObjectNumberToXRef(FX_DWORD objnum);
92   void InitID(FX_BOOL bDefault = TRUE);
93   int32_t WriteStream(const CPDF_Object* pStream,
94                       FX_DWORD objnum,
95                       CPDF_CryptoHandler* pCrypto);
96
97   int32_t m_iStage;
98   FX_DWORD m_dwFlags;
99   FX_POSITION m_Pos;
100   FX_FILESIZE m_XrefStart;
101
102   CFX_FileSizeListArray m_ObjectOffset;
103
104   CFX_DWordListArray m_ObjectSize;
105   CFX_DWordArray m_NewObjNumArray;
106
107   CPDF_Array* m_pIDArray;
108
109   int32_t m_FileVersion;
110   friend class CPDF_ObjectStream;
111   friend class CPDF_XRefStream;
112 };
113
114 #endif  // CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_