FX Bool considered harmful, part 3
[pdfium.git] / fpdfsdk / include / javascript / Document.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 FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_
8 #define FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_
9
10 #include "JS_Define.h"
11
12 class PrintParamsObj : public CJS_EmbedObj
13 {
14 public:
15         PrintParamsObj(CJS_Object* pJSObject);
16         virtual ~PrintParamsObj(){}
17
18 public:
19         bool bUI;
20         int nStart;
21         int nEnd;
22         bool bSilent;
23         bool bShrinkToFit;
24         bool bPrintAsImage;
25         bool bReverse;
26         bool bAnnotations;
27 };
28
29 class CJS_PrintParamsObj : public CJS_Object
30 {
31 public:
32         CJS_PrintParamsObj(JSFXObject pObject) : CJS_Object(pObject) {}
33         virtual ~CJS_PrintParamsObj(){}
34
35         DECLARE_JS_CLASS(CJS_PrintParamsObj);
36 };
37
38
39 class Icon;
40 class Field;
41
42 struct IconElement
43 {
44         IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {}
45         virtual ~IconElement()
46         {
47         }
48         CFX_WideString  IconName;
49         IconElement*    NextIcon;
50         Icon*                   IconStream;
51 };
52
53 class IconTree
54 {
55 public:
56         IconTree():m_pHead(NULL), m_pEnd(NULL), m_iLength(0)
57         {
58
59         }
60
61         virtual ~IconTree()
62         {
63         }
64
65 public:
66         void                    InsertIconElement(IconElement* pNewIcon);
67         void                    DeleteIconTree();
68         int                             GetLength();
69         IconElement*    operator[](int iIndex);
70
71 private:
72         IconElement*    m_pHead;
73         IconElement*    m_pEnd;
74         int                             m_iLength;
75 };
76
77 struct CJS_DelayData;
78 struct CJS_DelayAnnot;
79 struct CJS_AnnotObj;
80
81 class Document : public CJS_EmbedObj
82 {
83 public:
84         Document(CJS_Object* pJSObject);
85         virtual ~Document();
86
87 public:
88         bool    ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
89         bool    author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
90         bool    baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
91         bool    bookmarkRoot(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
92         bool    calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
93         bool    Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
94         bool    creationDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
95         bool    creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
96         bool    delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
97         bool    dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
98         bool    documentFileName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
99         bool external(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
100         bool    filesize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
101         bool    icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
102         bool    info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
103         bool    keywords(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
104         bool    layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
105         bool    media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
106         bool    modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
107         bool    mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
108         bool    mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
109         bool    numFields(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
110         bool    numPages(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
111         bool    pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
112         bool    pageWindowRect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
113         bool    path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
114         bool    producer(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
115         bool    subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
116         bool    title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
117         bool    zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
118         bool    zoomType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
119
120         bool addAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
121         bool    addField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
122         bool    addLink(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
123         bool    addIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
124         bool    calculateNow(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
125         bool    closeDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
126         bool    createDataObject(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
127         bool deletePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
128         bool    exportAsText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
129         bool    exportAsFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
130         bool    exportAsXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
131         bool extractPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
132         bool    getAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
133         bool    getAnnots(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
134         bool    getAnnot3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
135         bool    getAnnots3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
136         bool    getField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
137         bool    getIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
138         bool    getLinks(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
139         bool    getNthFieldName(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
140         bool    getOCGs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
141         bool    getPageBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
142         bool    getPageNthWord(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
143         bool    getPageNthWordQuads(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
144         bool    getPageNumWords(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
145         bool getPrintParams(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
146         bool getURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
147         bool    importAnFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
148         bool    importAnXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
149         bool    importTextData(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
150         bool insertPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
151         bool    mailForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
152         bool    print(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
153         bool    removeField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
154         bool replacePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
155         bool    resetForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
156         bool    saveAs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
157         bool    submitForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
158         bool    mailDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
159         bool    removeIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
160
161 public:
162         void                                    AttachDoc(CPDFSDK_Document* pDoc);
163         CPDFSDK_Document*                       GetReaderDoc();
164         static bool                          ExtractFileName(CPDFSDK_Document* pDoc, CFX_ByteString& strFileName);
165         static bool                          ExtractFolderName(CPDFSDK_Document* pDoc, CFX_ByteString& strFolderName);
166         void                                    AddDelayData(CJS_DelayData* pData);
167         void                                    DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex);
168         void                                    AddDelayAnnotData(CJS_AnnotObj *pData);
169         void                                    DoAnnotDelay();
170         void                                    SetIsolate(v8::Isolate* isolate) {m_isolate = isolate;}
171         CJS_Document*                           GetCJSDoc() const;
172
173 private:
174         CFX_WideString                          ReversalStr(CFX_WideString cbFrom);
175         CFX_WideString                          CutString(CFX_WideString cbFrom);
176         bool                                    IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect);
177         int                                     CountWords(CPDF_TextObject* pTextObj);
178         CFX_WideString                          GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
179         bool                                 ParserParams(JSObject *pObj,CJS_AnnotObj& annotobj);
180
181         v8::Isolate*                            m_isolate;
182         IconTree*                               m_pIconTree;
183         CPDFSDK_Document*                       m_pDocument;
184         CFX_WideString                          m_cwBaseURL;
185         bool                                    m_bDelay;
186         CFX_ArrayTemplate<CJS_DelayData*>       m_DelayData;
187         CFX_ArrayTemplate<CJS_AnnotObj*>        m_DelayAnnotData;
188 };
189
190 class CJS_Document : public CJS_Object
191 {
192 public:
193         CJS_Document(JSFXObject pObject) : CJS_Object(pObject) {};
194         virtual ~CJS_Document(){};
195
196         virtual bool    InitInstance(IFXJS_Context* cc);
197
198         DECLARE_JS_CLASS(CJS_Document);
199
200         JS_STATIC_PROP(ADBE, Document);
201         JS_STATIC_PROP(author, Document);
202         JS_STATIC_PROP(baseURL, Document);
203         JS_STATIC_PROP(bookmarkRoot, Document);
204         JS_STATIC_PROP(calculate, Document);
205         JS_STATIC_PROP(Collab, Document);
206         JS_STATIC_PROP(creationDate, Document);
207         JS_STATIC_PROP(creator, Document);
208         JS_STATIC_PROP(delay, Document);
209         JS_STATIC_PROP(dirty, Document);
210         JS_STATIC_PROP(documentFileName, Document);
211         JS_STATIC_PROP(external, Document);
212         JS_STATIC_PROP(filesize, Document);
213         JS_STATIC_PROP(icons, Document);
214         JS_STATIC_PROP(info, Document);
215         JS_STATIC_PROP(keywords, Document);
216         JS_STATIC_PROP(layout, Document);
217         JS_STATIC_PROP(media, Document);
218         JS_STATIC_PROP(modDate, Document);
219         JS_STATIC_PROP(mouseX, Document);
220         JS_STATIC_PROP(mouseY, Document);
221         JS_STATIC_PROP(numFields, Document);
222         JS_STATIC_PROP(numPages, Document);
223         JS_STATIC_PROP(pageNum, Document);
224         JS_STATIC_PROP(pageWindowRect, Document);
225         JS_STATIC_PROP(path, Document);
226         JS_STATIC_PROP(producer, Document);
227         JS_STATIC_PROP(subject, Document);
228         JS_STATIC_PROP(title, Document);
229         JS_STATIC_PROP(zoom, Document);
230         JS_STATIC_PROP(zoomType, Document);
231
232         JS_STATIC_METHOD(addAnnot,Document);
233         JS_STATIC_METHOD(addField, Document);
234         JS_STATIC_METHOD(addLink, Document);
235         JS_STATIC_METHOD(addIcon, Document);
236         JS_STATIC_METHOD(calculateNow, Document);
237         JS_STATIC_METHOD(closeDoc, Document);
238         JS_STATIC_METHOD(createDataObject, Document);
239         JS_STATIC_METHOD(deletePages, Document);
240         JS_STATIC_METHOD(exportAsText, Document);
241         JS_STATIC_METHOD(exportAsFDF, Document);
242         JS_STATIC_METHOD(exportAsXFDF, Document);
243         JS_STATIC_METHOD(extractPages, Document);
244         JS_STATIC_METHOD(getAnnot, Document);
245         JS_STATIC_METHOD(getAnnots, Document);
246         JS_STATIC_METHOD(getAnnot3D, Document);
247         JS_STATIC_METHOD(getAnnots3D, Document);
248         JS_STATIC_METHOD(getField, Document);
249         JS_STATIC_METHOD(getIcon, Document);
250         JS_STATIC_METHOD(getLinks, Document);
251         JS_STATIC_METHOD(getNthFieldName, Document);
252         JS_STATIC_METHOD(getOCGs, Document);
253         JS_STATIC_METHOD(getPageBox, Document);
254         JS_STATIC_METHOD(getPageNthWord, Document);
255         JS_STATIC_METHOD(getPageNthWordQuads, Document);
256         JS_STATIC_METHOD(getPageNumWords, Document);
257         JS_STATIC_METHOD(getPrintParams, Document);
258         JS_STATIC_METHOD(getURL, Document);
259         JS_STATIC_METHOD(importAnFDF, Document);
260         JS_STATIC_METHOD(importAnXFDF, Document);
261         JS_STATIC_METHOD(importTextData, Document);
262         JS_STATIC_METHOD(insertPages, Document);
263         JS_STATIC_METHOD(mailForm, Document);
264         JS_STATIC_METHOD(print, Document);
265         JS_STATIC_METHOD(removeField, Document);
266         JS_STATIC_METHOD(replacePages, Document);
267         JS_STATIC_METHOD(removeIcon, Document);
268         JS_STATIC_METHOD(resetForm, Document);
269         JS_STATIC_METHOD(saveAs, Document);
270         JS_STATIC_METHOD(submitForm, Document);
271         JS_STATIC_METHOD(mailDoc, Document);
272 };
273
274 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_