Document.cpp revision 4d3acf4ec42bf6e838f9060103aff98fbf170794
14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Document.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <utility>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector>
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/font/cpdf_font.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/page/cpdf_page.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_array.h"
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_document.h"
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_string.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/fpdf_parser_decode.h"
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_interform.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_nametree.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_annotiteration.h"
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_interform.h"
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_pageview.h"
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_widget.h"
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Annot.h"
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Field.h"
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Icon.h"
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Define.h"
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_EventHandler.h"
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Object.h"
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Value.h"
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/app.h"
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/cjs_context.h"
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/cjs_runtime.h"
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/resource.h"
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/numerics/safe_math.h"
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h"
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBEGIN_JS_STATIC_CONST(CJS_PrintParamsObj)
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannEND_JS_STATIC_CONST()
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBEGIN_JS_STATIC_PROP(CJS_PrintParamsObj)
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannEND_JS_STATIC_PROP()
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBEGIN_JS_STATIC_METHOD(CJS_PrintParamsObj)
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannEND_JS_STATIC_METHOD()
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannIMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj)
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannPrintParamsObj::PrintParamsObj(CJS_Object* pJSObject)
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : CJS_EmbedObj(pJSObject) {
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bUI = true;
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  nStart = 0;
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  nEnd = 0;
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bSilent = false;
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bShrinkToFit = false;
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bPrintAsImage = false;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bReverse = false;
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bAnnotations = true;
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define MINWIDTH 5.0f
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define MINHEIGHT 5.0f
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBEGIN_JS_STATIC_CONST(CJS_Document)
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannEND_JS_STATIC_CONST()
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBEGIN_JS_STATIC_PROP(CJS_Document)
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(ADBE)
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(author)
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(baseURL)
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(bookmarkRoot)
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(calculate)
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(Collab)
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(creationDate)
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(creator)
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(delay)
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(dirty)
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(documentFileName)
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(external)
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(filesize)
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(icons)
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(info)
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(keywords)
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(layout)
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(media)
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(modDate)
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(mouseX)
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(mouseY)
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(numFields)
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(numPages)
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(pageNum)
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(pageWindowRect)
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(path)
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(producer)
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(subject)
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(title)
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(URL)
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(zoom)
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_PROP_ENTRY(zoomType)
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannEND_JS_STATIC_PROP()
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBEGIN_JS_STATIC_METHOD(CJS_Document)
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(addAnnot)
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(addField)
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(addLink)
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(addIcon)
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(calculateNow)
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(closeDoc)
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(createDataObject)
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(deletePages)
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(exportAsText)
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(exportAsFDF)
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(exportAsXFDF)
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(extractPages)
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getAnnot)
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getAnnots)
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getAnnot3D)
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getAnnots3D)
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getField)
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getIcon)
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getLinks)
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getNthFieldName)
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getOCGs)
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getPageBox)
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getPageNthWord)
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getPageNthWordQuads)
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getPageNumWords)
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getPrintParams)
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(getURL)
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(gotoNamedDest)
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(importAnFDF)
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(importAnXFDF)
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(importTextData)
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(insertPages)
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(mailForm)
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(print)
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(removeField)
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(replacePages)
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(resetForm)
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(removeIcon)
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(saveAs)
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(submitForm)
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(syncAnnotScan)
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannJS_STATIC_METHOD_ENTRY(mailDoc)
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannEND_JS_STATIC_METHOD()
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannIMPLEMENT_JS_CLASS(CJS_Document, Document)
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CJS_Document::InitInstance(IJS_Runtime* pIRuntime) {
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime);
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Document* pDoc = static_cast<Document*>(GetEmbedObject());
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pDoc->SetFormFillEnv(pRuntime->GetFormFillEnv());
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannDocument::Document(CJS_Object* pJSObject)
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : CJS_EmbedObj(pJSObject),
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv(nullptr),
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_cwBaseURL(L""),
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_bDelay(false) {}
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannDocument::~Document() {
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// the total number of fileds in document.
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::numFields(IJS_Context* cc,
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_PropValue& vp,
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << static_cast<int>(pPDFForm->CountFields(CFX_WideString()));
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::dirty(IJS_Context* cc,
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << !!m_pFormFillEnv->GetChangeMark();
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bool bChanged = false;
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> bChanged;
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bChanged)
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv->SetChangeMark();
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    else
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv->ClearChangeMark();
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::ADBE(IJS_Context* cc,
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting())
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp.GetJSValue()->SetNull(CJS_Runtime::FromContext(cc));
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::pageNum(IJS_Context* cc,
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetCurrentView()) {
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      vp << pPageView->GetPageIndex();
2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int iPageCount = m_pFormFillEnv->GetPageCount();
2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int iPageNum = 0;
2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> iPageNum;
2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iPageNum >= 0 && iPageNum < iPageCount) {
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv->JS_docgotoPage(iPageNum);
2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (iPageNum >= iPageCount) {
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv->JS_docgotoPage(iPageCount - 1);
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (iPageNum < 0) {
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv->JS_docgotoPage(0);
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::addAnnot(IJS_Context* cc,
2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not supported.
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::addField(IJS_Context* cc,
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not supported.
2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::exportAsText(IJS_Context* cc,
2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::exportAsFDF(IJS_Context* cc,
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::exportAsXFDF(IJS_Context* cc,
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Maps a field object in PDF document to a JavaScript variable
2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment:
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// note: the paremter cName, this is clue how to treat if the cName is not a
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// valiable filed name in this document
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getField(IJS_Context* cc,
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() < 1) {
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pPDFForm->CountFields(wideName) <= 0) {
3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vRet.SetNull(pRuntime);
3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pFieldObj =
3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_Field::g_nObjDefnID);
3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Field* pJSField =
3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CJS_Field*>(pRuntime->GetObjectPrivate(pFieldObj));
3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Field* pField = static_cast<Field*>(pJSField->GetEmbedObject());
3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pField->AttachField(this, wideName);
3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pJSField);
3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Gets the name of the nth field in the document
3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getNthFieldName(IJS_Context* cc,
3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               const std::vector<CJS_Value>& params,
3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CJS_Value& vRet,
3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CFX_WideString& sError) {
3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nIndex = params[0].ToInt(pRuntime);
3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nIndex < 0) {
3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_FormField* pField = pPDFForm->GetField(nIndex, CFX_WideString());
3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pField)
3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pField->GetFullName().c_str());
3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::importAnFDF(IJS_Context* cc,
3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::importAnXFDF(IJS_Context* cc,
3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::importTextData(IJS_Context* cc,
3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              const std::vector<CJS_Value>& params,
3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_Value& vRet,
3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// exports the form data and mails the resulting fdf file as an attachment to
3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// all recipients.
3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment: need reader supports
3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::mailForm(IJS_Context* cc,
3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int iLength = params.size();
3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bUI = iLength > 0 ? params[0].ToBool(pRuntime) : true;
3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L"";
3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString(pRuntime) : L"";
3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString(pRuntime) : L"";
3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cSubject =
3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L"";
3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L"";
4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteTextBuf textBuf;
4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
4044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->BeginBlock();
4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_FormFillEnvironment* pFormFillEnv = pContext->GetFormFillEnv();
4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pFormFillEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI,
4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               cTo.c_str(), cSubject.c_str(), cCc.c_str(),
4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               cBcc.c_str(), cMsg.c_str());
4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->EndBlock();
4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::print(IJS_Context* cc,
4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     const std::vector<CJS_Value>& params,
4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_Value& vRet,
4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bUI = true;
4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nStart = 0;
4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nEnd = 0;
4304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bSilent = false;
4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bShrinkToFit = false;
4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bPrintAsImage = false;
4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bReverse = false;
4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bAnnotations = false;
4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nlength = params.size();
4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nlength == 9) {
4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (params[8].GetType() == CJS_Value::VT_object) {
4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      v8::Local<v8::Object> pObj = params[8].ToV8Object(pRuntime);
4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (CFXJS_Engine::GetObjDefnID(pObj) ==
4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CJS_PrintParamsObj::g_nObjDefnID) {
4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (CJS_Object* pJSObj = params[8].ToCJSObject(pRuntime)) {
4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (PrintParamsObj* pprintparamsObj =
4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  static_cast<PrintParamsObj*>(pJSObj->GetEmbedObject())) {
4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bUI = pprintparamsObj->bUI;
4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            nStart = pprintparamsObj->nStart;
4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            nEnd = pprintparamsObj->nEnd;
4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bSilent = pprintparamsObj->bSilent;
4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bShrinkToFit = pprintparamsObj->bShrinkToFit;
4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bPrintAsImage = pprintparamsObj->bPrintAsImage;
4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bReverse = pprintparamsObj->bReverse;
4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bAnnotations = pprintparamsObj->bAnnotations;
4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 1)
4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bUI = params[0].ToBool(pRuntime);
4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 2)
4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nStart = params[1].ToInt(pRuntime);
4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 3)
4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nEnd = params[2].ToInt(pRuntime);
4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 4)
4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bSilent = params[3].ToBool(pRuntime);
4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 5)
4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bShrinkToFit = params[4].ToBool(pRuntime);
4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 6)
4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bPrintAsImage = params[5].ToBool(pRuntime);
4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 7)
4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bReverse = params[6].ToBool(pRuntime);
4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 8)
4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bAnnotations = params[7].ToBool(pRuntime);
4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_pFormFillEnv) {
4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit,
4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                bPrintAsImage, bReverse, bAnnotations);
4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// removes the specified field from the document.
4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment:
4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// note: if the filed name is not rational, adobe is dumb for it.
4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::removeField(IJS_Context* cc,
4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM))) {
5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime);
5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<CPDFSDK_Annot::ObservedPtr> widgets;
5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pInterForm->GetWidgets(sFieldName, &widgets);
5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (widgets.empty())
5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pAnnot : widgets) {
5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_Widget* pWidget = static_cast<CPDFSDK_Widget*>(pAnnot.Get());
5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pWidget)
5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_FloatRect rcAnnot = pWidget->GetRect();
5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    --rcAnnot.left;
5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    --rcAnnot.bottom;
5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ++rcAnnot.right;
5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ++rcAnnot.top;
5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    std::vector<CFX_FloatRect> aRefresh(1, rcAnnot);
5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(pPage);
5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // If there is currently no pageview associated with the page being used
5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // do not create one. We may be in the process of tearing down the document
5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // and creating a new pageview at this point will cause bad things.
5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false);
5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPageView) {
5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#if PDF_ENABLE_XFA
5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pPageView->DeleteAnnot(pWidget);
5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // PDF_ENABLE_XFA
5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pPageView->UpdateRects(aRefresh);
5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv->SetChangeMark();
5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// reset filed values within a document.
5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment:
5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// note: if the fields names r not rational, aodbe is dumb for it.
5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::resetForm(IJS_Context* cc,
5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const std::vector<CJS_Value>& params,
5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_Value& vRet,
5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) ||
5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) {
5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array aName;
5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.empty()) {
5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPDFForm->ResetForm(true);
5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (params[0].GetType()) {
5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aName.Attach(params[0].ToV8Array(pRuntime));
5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case CJS_Value::VT_string:
5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aName.SetElement(pRuntime, 0, params[0]);
5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<CPDF_FormField*> aFields;
5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, isz = aName.GetLength(pRuntime); i < isz; ++i) {
5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Value valElement(pRuntime);
5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    aName.GetElement(pRuntime, i, valElement);
5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString swVal = valElement.ToCFXWideString(pRuntime);
5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j)
5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aFields.push_back(pPDFForm->GetField(j, swVal));
5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!aFields.empty()) {
5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPDFForm->ResetForm(aFields, true, true);
5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::saveAs(IJS_Context* cc,
6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      const std::vector<CJS_Value>& params,
6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_Value& vRet,
6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::syncAnnotScan(IJS_Context* cc,
6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const std::vector<CJS_Value>& params,
6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CJS_Value& vRet,
6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CFX_WideString& sError) {
6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::submitForm(IJS_Context* cc,
6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nSize = params.size();
6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nSize < 1) {
6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array aFields;
6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString strURL;
6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bFDF = true;
6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bEmpty = false;
6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Value v = params[0];
6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (v.GetType() == CJS_Value::VT_string) {
6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    strURL = params[0].ToCFXWideString(pRuntime);
6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nSize > 1)
6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bFDF = params[1].ToBool(pRuntime);
6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nSize > 2)
6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bEmpty = params[2].ToBool(pRuntime);
6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nSize > 3)
6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aFields.Attach(params[3].ToV8Array(pRuntime));
6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (v.GetType() == CJS_Value::VT_object) {
6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj = params[0].ToV8Object(pRuntime);
6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Value> pValue = pRuntime->GetObjectProperty(pObj, L"cURL");
6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pValue.IsEmpty())
6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      strURL = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"bFDF");
6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bFDF = CJS_Value(pRuntime, pValue).ToBool(pRuntime);
6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"bEmpty");
6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bEmpty = CJS_Value(pRuntime, pValue).ToBool(pRuntime);
6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"aFields");
6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    aFields.Attach(CJS_Value(pRuntime, pValue).ToV8Array(pRuntime));
6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (aFields.GetLength(pRuntime) == 0 && bEmpty) {
6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPDFInterForm->CheckRequiredFields(nullptr, true)) {
6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->BeginBlock();
6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pInterForm->SubmitForm(strURL, false);
6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->EndBlock();
6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<CPDF_FormField*> fieldObjects;
6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, sz = aFields.GetLength(pRuntime); i < sz; ++i) {
6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Value valName(pRuntime);
6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    aFields.GetElement(pRuntime, i, valName);
6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString sName = valName.ToCFXWideString(pRuntime);
6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) {
6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CPDF_FormField* pField = pPDFForm->GetField(j, sName);
6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!bEmpty && pField->GetValue().IsEmpty())
6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        continue;
6844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      fieldObjects.push_back(pField);
6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pPDFInterForm->CheckRequiredFields(&fieldObjects, true)) {
6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pRuntime->BeginBlock();
6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pInterForm->SubmitFields(strURL, fieldObjects, true, !bFDF);
6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pRuntime->EndBlock();
6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid Document::SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv.Reset(pFormFillEnv);
6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::bookmarkRoot(IJS_Context* cc,
7024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_PropValue& vp,
7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::mailDoc(IJS_Context* cc,
7084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
7094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
7104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(tsepez): Check maximum number of allowed params.
7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bUI = true;
7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cTo = L"";
7174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cCc = L"";
7184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cBcc = L"";
7194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cSubject = L"";
7204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cMsg = L"";
7214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
7234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 1)
7254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bUI = params[0].ToBool(pRuntime);
7264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 2)
7274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cTo = params[1].ToCFXWideString(pRuntime);
7284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 3)
7294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cCc = params[2].ToCFXWideString(pRuntime);
7304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 4)
7314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cBcc = params[3].ToCFXWideString(pRuntime);
7324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 5)
7334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cSubject = params[4].ToCFXWideString(pRuntime);
7344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 6)
7354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cMsg = params[5].ToCFXWideString(pRuntime);
7364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 1 && params[0].GetType() == CJS_Value::VT_object) {
7384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj = params[0].ToV8Object(pRuntime);
7394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Value> pValue = pRuntime->GetObjectProperty(pObj, L"bUI");
7414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bUI = CJS_Value(pRuntime, pValue).ToBool(pRuntime);
7424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cTo");
7444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cTo = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cCc");
7474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cCc = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cBcc");
7504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cBcc = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cSubject");
7534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cSubject = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cMsg");
7564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cMsg = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->BeginBlock();
7604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
7614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pFormFillEnv->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(), cSubject.c_str(),
7624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               cCc.c_str(), cBcc.c_str(), cMsg.c_str());
7634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->EndBlock();
7644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
7664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::author(IJS_Context* cc,
7694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
7704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
7714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "Author", sError);
7724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::info(IJS_Context* cc,
7754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
7764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
7774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
7784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
7794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
7804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
7824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
7834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
7844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo();
7864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDictionary)
7874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
7884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwAuthor = pDictionary->GetUnicodeTextFor("Author");
7904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwTitle = pDictionary->GetUnicodeTextFor("Title");
7914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwSubject = pDictionary->GetUnicodeTextFor("Subject");
7924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwKeywords = pDictionary->GetUnicodeTextFor("Keywords");
7934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwCreator = pDictionary->GetUnicodeTextFor("Creator");
7944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwProducer = pDictionary->GetUnicodeTextFor("Producer");
7954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwCreationDate =
7964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDictionary->GetUnicodeTextFor("CreationDate");
7974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate");
7984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwTrapped = pDictionary->GetUnicodeTextFor("Trapped");
7994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = (CJS_Context*)cc;
8014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
8024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1);
8044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Author", pRuntime->NewString(cwAuthor));
8054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Title", pRuntime->NewString(cwTitle));
8064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Subject", pRuntime->NewString(cwSubject));
8074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Keywords",
8084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              pRuntime->NewString(cwKeywords));
8094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Creator", pRuntime->NewString(cwCreator));
8104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Producer",
8114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              pRuntime->NewString(cwProducer));
8124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"CreationDate",
8134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              pRuntime->NewString(cwCreationDate));
8144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"ModDate", pRuntime->NewString(cwModDate));
8154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Trapped", pRuntime->NewString(cwTrapped));
8164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // It's to be compatible to non-standard info dictionary.
8184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& it : *pDictionary) {
8194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_ByteString& bsKey = it.first;
8204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDF_Object* pValueObj = it.second.get();
8214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC());
8224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pValueObj->IsString() || pValueObj->IsName()) {
8234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->PutObjectProperty(
8244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pObj, wsKey, pRuntime->NewString(pValueObj->GetUnicodeText()));
8254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pValueObj->IsNumber()) {
8264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->PutObjectProperty(pObj, wsKey,
8274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  pRuntime->NewNumber(pValueObj->GetNumber()));
8284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pValueObj->IsBoolean()) {
8294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->PutObjectProperty(
8304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pObj, wsKey, pRuntime->NewBoolean(!!pValueObj->GetInteger()));
8314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << pObj;
8344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
8354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getPropertyInternal(IJS_Context* cc,
8384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CJS_PropValue& vp,
8394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   const CFX_ByteString& propName,
8404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CFX_WideString& sError) {
8414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
8424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
8434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
8444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo();
8464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDictionary)
8474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
8484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
8504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << pDictionary->GetUnicodeTextFor(propName);
8514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
8524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) {
8534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
8544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
8554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString csProperty;
8574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> csProperty;
8584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDictionary->SetNewFor<CPDF_String>(propName, PDF_EncodeText(csProperty),
8594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        false);
8604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
8614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
8634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::creationDate(IJS_Context* cc,
8664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_PropValue& vp,
8674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
8684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "CreationDate", sError);
8694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::creator(IJS_Context* cc,
8724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
8734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
8744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "Creator", sError);
8754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::delay(IJS_Context* cc,
8784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
8794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
8804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
8814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
8824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
8834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
8854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << m_bDelay;
8864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
8874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) {
8884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
8894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
8904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> m_bDelay;
8924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (m_bDelay) {
8934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_DelayData.clear();
8944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
8954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      std::list<std::unique_ptr<CJS_DelayData>> DelayDataToProcess;
8964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      DelayDataToProcess.swap(m_DelayData);
8974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      for (const auto& pData : DelayDataToProcess)
8984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        Field::DoDelay(m_pFormFillEnv.Get(), pData.get());
8994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
9004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::keywords(IJS_Context* cc,
9054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "Keywords", sError);
9084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::modDate(IJS_Context* cc,
9114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
9124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
9134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "ModDate", sError);
9144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::producer(IJS_Context* cc,
9174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "Producer", sError);
9204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::subject(IJS_Context* cc,
9234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
9244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
9254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "Subject", sError);
9264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::title(IJS_Context* cc,
9294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
9304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
9314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv || !m_pFormFillEnv->GetUnderlyingDocument()) {
9324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return getPropertyInternal(cc, vp, "Title", sError);
9364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::numPages(IJS_Context* cc,
9394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
9424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
9434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
9464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << m_pFormFillEnv->GetPageCount();
9504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::external(IJS_Context* cc,
9544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // In Chrome case, should always return true.
9574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
9584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << true;
9594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::filesize(IJS_Context* cc,
9644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
9674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
9684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << 0;
9714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::mouseX(IJS_Context* cc,
9754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
9764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
9774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::mouseY(IJS_Context* cc,
9814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
9824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
9834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::URL(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
9874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
9884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
9894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
9924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << m_pFormFillEnv->JS_docGetFilePath();
9964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::baseURL(IJS_Context* cc,
10004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
10014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
10024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
10034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << m_cwBaseURL;
10044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
10054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> m_cwBaseURL;
10064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::calculate(IJS_Context* cc,
10114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_PropValue& vp,
10124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
10134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
10144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
10154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
10184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
10194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << !!pInterForm->IsCalculateEnabled();
10204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
10214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bool bCalculate;
10224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> bCalculate;
10234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pInterForm->EnableCalculate(bCalculate);
10244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::documentFileName(IJS_Context* cc,
10294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CJS_PropValue& vp,
10304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CFX_WideString& sError) {
10314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
10324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
10334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
10364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
10374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsFilePath = m_pFormFillEnv->JS_docGetFilePath();
10404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t i = wsFilePath.GetLength() - 1;
10414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; i >= 0; i--) {
10424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/')
10434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
10444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (i >= 0 && i < wsFilePath.GetLength() - 1) {
10464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1);
10474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
10484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << L"";
10494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::path(IJS_Context* cc,
10544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
10554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
10564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
10574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
10584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
10614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
10624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << app::SysPathToPDFPath(m_pFormFillEnv->JS_docGetFilePath());
10654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::pageWindowRect(IJS_Context* cc,
10694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_PropValue& vp,
10704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
10714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::layout(IJS_Context* cc,
10754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
10764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
10774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::addLink(IJS_Context* cc,
10814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
10824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
10834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
10844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::closeDoc(IJS_Context* cc,
10884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
10894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
10904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
10914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getPageBox(IJS_Context* cc,
10954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
10964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
10974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
10984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getAnnot(IJS_Context* cc,
11024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
11034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
11044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
11054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 2) {
11064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
11074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
11104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
11114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
11144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
11154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = params[0].ToInt(pRuntime);
11164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swAnnotName = params[1].ToCFXWideString(pRuntime);
11174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(nPageNo);
11184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pPageView)
11194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_AnnotIteration annotIteration(pPageView, false);
11224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_BAAnnot* pSDKBAAnnot = nullptr;
11234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pSDKAnnotCur : annotIteration) {
11244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_BAAnnot* pBAAnnot =
11254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur.Get());
11264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pBAAnnot && pBAAnnot->GetAnnotName() == swAnnotName) {
11274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pSDKBAAnnot = pBAAnnot;
11284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
11294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
11304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pSDKBAAnnot)
11324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pObj =
11354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID);
11364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pObj.IsEmpty())
11374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Annot* pJS_Annot =
11404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
11414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pJS_Annot)
11424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
11454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pAnnot)
11464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pAnnot->SetSDKAnnot(pSDKBAAnnot);
11494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pJS_Annot);
11504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getAnnots(IJS_Context* cc,
11544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const std::vector<CJS_Value>& params,
11554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_Value& vRet,
11564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
11574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
11584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
11594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
11624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
11634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(tonikitoo): Add support supported parameters as per
11654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // the PDF spec.
11664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = m_pFormFillEnv->GetPageCount();
11684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array annots;
11694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0; i < nPageNo; ++i) {
11714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(i);
11724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pPageView)
11734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
11744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_AnnotIteration annotIteration(pPageView, false);
11764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (const auto& pSDKAnnotCur : annotIteration) {
11774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pSDKAnnotCur) {
11784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
11794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
11804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
11814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      v8::Local<v8::Object> pObj =
11824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID);
11834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pObj.IsEmpty())
11844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
11854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CJS_Annot* pJS_Annot =
11874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
11884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pJS_Annot)
11894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
11904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
11924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pAnnot)
11934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
11944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pAnnot->SetSDKAnnot(static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur.Get()));
11964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      annots.SetElement(pRuntime, i, CJS_Value(pRuntime, pJS_Annot));
11974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
11984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, annots);
12004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getAnnot3D(IJS_Context* cc,
12044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
12054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
12064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
12074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet.SetNull(CJS_Runtime::FromContext(cc));
12084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getAnnots3D(IJS_Context* cc,
12124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
12134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
12144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
12154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getOCGs(IJS_Context* cc,
12194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
12204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
12214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
12224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getLinks(IJS_Context* cc,
12264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
12274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
12284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
12294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) {
12334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (rect.left <= LinkRect.left && rect.top <= LinkRect.top &&
12344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom);
12354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::addIcon(IJS_Context* cc,
12384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
12394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
12404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
12414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 2) {
12424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
12434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = static_cast<CJS_Context*>(cc);
12474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
12484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
12494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params[1].GetType() != CJS_Value::VT_object) {
12514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
12524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pJSIcon = params[1].ToV8Object(pRuntime);
12564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pRuntime->GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) {
12574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
12584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject(pRuntime)->GetEmbedObject();
12624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pEmbedObj) {
12634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
12644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_Icons.push_back(pdfium::MakeUnique<IconElement>(
12684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      swIconName, static_cast<Icon*>(pEmbedObj)));
12694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::icons(IJS_Context* cc,
12734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
12744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
12754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
12764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
12774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
12814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_Icons.empty()) {
12824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp.GetJSValue()->SetNull(pRuntime);
12834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
12844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array Icons;
12874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int i = 0;
12894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pIconElement : m_Icons) {
12904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj =
12914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID);
12924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pObj.IsEmpty())
12934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
12944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Icon* pJS_Icon =
12964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
12974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pJS_Icon)
12984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
12994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject());
13014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pIcon)
13024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
13034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pIcon->SetStream(pIconElement->IconStream->GetStream());
13054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pIcon->SetIconName(pIconElement->IconName);
13064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Icons.SetElement(pRuntime, i++, CJS_Value(pRuntime, pJS_Icon));
13074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << Icons;
13104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getIcon(IJS_Context* cc,
13144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
13154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
13164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
13174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
13184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
13194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_Icons.empty())
13234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
13264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
13274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pIconElement : m_Icons) {
13294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pIconElement->IconName != swIconName)
13304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
13314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj =
13334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID);
13344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pObj.IsEmpty())
13354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
13364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Icon* pJS_Icon =
13384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
13394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pJS_Icon)
13404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
13414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
13434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pIcon)
13444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
13454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pIcon->SetIconName(swIconName);
13474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pIcon->SetStream(pIconElement->IconStream->GetStream());
13484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vRet = CJS_Value(pRuntime, pJS_Icon);
13504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
13514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
13544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::removeIcon(IJS_Context* cc,
13574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
13584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
13594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
13604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, no supported.
13614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::createDataObject(IJS_Context* cc,
13654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                const std::vector<CJS_Value>& params,
13664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CJS_Value& vRet,
13674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CFX_WideString& sError) {
13684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not implemented.
13694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::media(IJS_Context* cc,
13734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
13744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
13754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::calculateNow(IJS_Context* cc,
13794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
13804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
13814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
13824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
13834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
13844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
13874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) ||
13884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) {
13894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
13904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv->GetInterForm()->OnCalculate();
13934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::Collab(IJS_Context* cc,
13974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
13984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
13994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
14004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getPageNthWord(IJS_Context* cc,
14034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              const std::vector<CJS_Value>& params,
14044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_Value& vRet,
14054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
14064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
14074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
14084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
14114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
14124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
14154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(tsepez): check maximum allowable params.
14174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
14194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWordNo = params.size() > 1 ? params[1].ToInt(pRuntime) : 0;
14204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bStrip = params.size() > 2 ? params[2].ToBool(pRuntime) : true;
14214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
14234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDocument)
14244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
14274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
14284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
14324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pPageDict)
14334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Page page(pDocument, pPageDict, true);
14364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  page.ParseContent();
14374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
14394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swRet;
14404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (auto& pPageObj : *page.GetPageObjectList()) {
14414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPageObj->IsText()) {
14424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CPDF_TextObject* pTextObj = pPageObj->AsText();
14434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int nObjWords = CountWords(pTextObj);
14444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (nWords + nObjWords >= nWordNo) {
14454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        swRet = GetObjWordStr(pTextObj, nWordNo - nWords);
14464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
14474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
14484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nWords += nObjWords;
14494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
14504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bStrip) {
14534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    swRet.TrimLeft();
14544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    swRet.TrimRight();
14554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, swRet.c_str());
14584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
14594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getPageNthWordQuads(IJS_Context* cc,
14624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   const std::vector<CJS_Value>& params,
14634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CJS_Value& vRet,
14644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CFX_WideString& sError) {
14654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
14664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
14674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
14704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
14714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
14744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getPageNumWords(IJS_Context* cc,
14774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               const std::vector<CJS_Value>& params,
14784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CJS_Value& vRet,
14794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CFX_WideString& sError) {
14804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
14814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
14824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
14854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
14864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
14894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
14904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
14914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
14924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
14934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
14974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pPageDict)
14984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Page page(pDocument, pPageDict, true);
15014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  page.ParseContent();
15024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
15044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (auto& pPageObj : *page.GetPageObjectList()) {
15054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPageObj->IsText())
15064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nWords += CountWords(pPageObj->AsText());
15074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, nWords);
15104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getPrintParams(IJS_Context* cc,
15144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              const std::vector<CJS_Value>& params,
15154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_Value& vRet,
15164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
15174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Context* pContext = (CJS_Context*)cc;
15184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
15194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pRetObj =
15204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_PrintParamsObj::g_nObjDefnID);
15214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not implemented yet.
15234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pRetObj);
15254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
15294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint Document::CountWords(CPDF_TextObject* pTextObj) {
15314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pTextObj)
15324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
15334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
15354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Font* pFont = pTextObj->GetFont();
15374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pFont)
15384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
15394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bIsLatin = false;
15414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
15434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t charcode = CPDF_Font::kInvalidCharCode;
15444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT kerning;
15454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pTextObj->GetCharInfo(i, charcode, kerning);
15474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
15484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint16_t unicode = 0;
15504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (swUnicode.GetLength() > 0)
15514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      unicode = swUnicode[0];
15524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (ISLATINWORD(unicode) && bIsLatin)
15544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
15554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bIsLatin = ISLATINWORD(unicode);
15574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (unicode != 0x20)
15584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nWords++;
15594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nWords;
15624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj,
15654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       int nWordIndex) {
15664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swRet;
15674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Font* pFont = pTextObj->GetFont();
15694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pFont)
15704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return L"";
15714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
15734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bIsLatin = false;
15744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
15764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t charcode = CPDF_Font::kInvalidCharCode;
15774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT kerning;
15784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pTextObj->GetCharInfo(i, charcode, kerning);
15804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
15814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint16_t unicode = 0;
15834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (swUnicode.GetLength() > 0)
15844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      unicode = swUnicode[0];
15854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (ISLATINWORD(unicode) && bIsLatin) {
15874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
15884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bIsLatin = ISLATINWORD(unicode);
15894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (unicode != 0x20)
15904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        nWords++;
15914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
15924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nWords - 1 == nWordIndex)
15944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      swRet += unicode;
15954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return swRet;
15984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::zoom(IJS_Context* cc,
16014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
16024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
16034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann/**
16074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(none,  NoVary)
16084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitP,  FitPage)
16094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitW,  FitWidth)
16104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitH,  FitHeight)
16114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitV,  FitVisibleWidth)
16124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(pref,  Preferred)
16134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(refW,  ReflowWidth)
16144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann*/
16154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::zoomType(IJS_Context* cc,
16174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
16184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
16194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::deletePages(IJS_Context* cc,
16234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
16244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
16254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
16264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, no supported.
16274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::extractPages(IJS_Context* cc,
16314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
16324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
16334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
16344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
16354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::insertPages(IJS_Context* cc,
16394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
16404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
16414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
16424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
16434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::replacePages(IJS_Context* cc,
16474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
16484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
16494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
16504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
16514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::getURL(IJS_Context* cc,
16554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      const std::vector<CJS_Value>& params,
16564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_Value& vRet,
16574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
16584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
16594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::gotoNamedDest(IJS_Context* cc,
16634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const std::vector<CJS_Value>& params,
16644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CJS_Value& vRet,
16654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CFX_WideString& sError) {
16664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
16674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
16684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
16714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
16724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
16754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
16764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString utf8Name = wideName.UTF8Encode();
16774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
16784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDocument)
16794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_NameTree nameTree(pDocument, "Dests");
16824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Array* destArray = nameTree.LookupNamedDest(pDocument, utf8Name);
16834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!destArray)
16844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dest dest(destArray);
16874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const CPDF_Array* arrayObject = ToArray(dest.GetObject());
16884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::unique_ptr<float[]> scrollPositionArray;
16904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int scrollPositionArraySize = 0;
16914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (arrayObject) {
16934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    scrollPositionArray.reset(new float[arrayObject->GetCount()]);
16944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int j = 0;
16954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (size_t i = 2; i < arrayObject->GetCount(); i++)
16964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      scrollPositionArray[j++] = arrayObject->GetFloatAt(i);
16974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    scrollPositionArraySize = j;
16984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->BeginBlock();
17014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv->DoGoToAction(dest.GetPageIndex(pDocument), dest.GetZoomMode(),
17024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               scrollPositionArray.get(),
17034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               scrollPositionArraySize);
17044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->EndBlock();
17054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
17074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
17084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid Document::AddDelayData(CJS_DelayData* pData) {
17104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_DelayData.push_back(std::unique_ptr<CJS_DelayData>(pData));
17114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
17124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid Document::DoFieldDelay(const CFX_WideString& sFieldName,
17144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            int nControlIndex) {
17154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<std::unique_ptr<CJS_DelayData>> DelayDataForFieldAndControlIndex;
17164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  auto iter = m_DelayData.begin();
17174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (iter != m_DelayData.end()) {
17184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    auto old = iter++;
17194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((*old)->sFieldName == sFieldName &&
17204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (*old)->nControlIndex == nControlIndex) {
17214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      DelayDataForFieldAndControlIndex.push_back(std::move(*old));
17224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_DelayData.erase(old);
17234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
17244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
17254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pData : DelayDataForFieldAndControlIndex)
17274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Field::DoDelay(m_pFormFillEnv.Get(), pData.get());
17284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
17294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
17304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCJS_Document* Document::GetCJSDoc() const {
17314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return static_cast<CJS_Document*>(m_pJSObject);
17324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1733