blob: b534d2b393408e592a93566030732db63a74ed28 [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07001// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Lei Zhanga6d9f0e2015-06-13 00:48:38 -07004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "../../include/javascript/JavaScript.h"
8#include "../../include/javascript/IJavaScript.h"
9#include "../../include/javascript/JS_Define.h"
10#include "../../include/javascript/JS_Object.h"
11#include "../../include/javascript/JS_Value.h"
12#include "../../include/javascript/Consts.h"
13
14/* ------------------------------ border ------------------------------ */
15
16BEGIN_JS_STATIC_CONST(CJS_Border)
Tom Sepeze2bad472015-08-04 14:31:27 -070017JS_STATIC_CONST_ENTRY_STRING(L"s", L"solid")
18JS_STATIC_CONST_ENTRY_STRING(L"b", L"beveled")
19JS_STATIC_CONST_ENTRY_STRING(L"d", L"dashed")
20JS_STATIC_CONST_ENTRY_STRING(L"i", L"inset")
21JS_STATIC_CONST_ENTRY_STRING(L"u", L"underline")
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070022END_JS_STATIC_CONST()
23
Nico Weber9d8ec5a2015-08-04 13:00:21 -070024IMPLEMENT_JS_CLASS_CONST(CJS_Border, border)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070025
26/* ------------------------------ display ------------------------------ */
27
28BEGIN_JS_STATIC_CONST(CJS_Display)
Tom Sepeze2bad472015-08-04 14:31:27 -070029JS_STATIC_CONST_ENTRY_NUMBER(L"visible", 0)
30JS_STATIC_CONST_ENTRY_NUMBER(L"hidden", 1)
31JS_STATIC_CONST_ENTRY_NUMBER(L"noPrint", 2)
32JS_STATIC_CONST_ENTRY_NUMBER(L"noView", 3)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070033END_JS_STATIC_CONST()
34
Nico Weber9d8ec5a2015-08-04 13:00:21 -070035IMPLEMENT_JS_CLASS_CONST(CJS_Display, display)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070036
37/* ------------------------------ font ------------------------------ */
38
39BEGIN_JS_STATIC_CONST(CJS_Font)
Tom Sepeze2bad472015-08-04 14:31:27 -070040JS_STATIC_CONST_ENTRY_STRING(L"Times", L"Times-Roman")
41JS_STATIC_CONST_ENTRY_STRING(L"TimesB", L"Times-Bold")
42JS_STATIC_CONST_ENTRY_STRING(L"TimesI", L"Times-Italic")
43JS_STATIC_CONST_ENTRY_STRING(L"TimesBI", L"Times-BoldItalic")
44JS_STATIC_CONST_ENTRY_STRING(L"Helv", L"Helvetica")
45JS_STATIC_CONST_ENTRY_STRING(L"HelvB", L"Helvetica-Bold")
46JS_STATIC_CONST_ENTRY_STRING(L"HelvI", L"Helvetica-Oblique")
47JS_STATIC_CONST_ENTRY_STRING(L"HelvBI", L"Helvetica-BoldOblique")
48JS_STATIC_CONST_ENTRY_STRING(L"Cour", L"Courier")
49JS_STATIC_CONST_ENTRY_STRING(L"CourB", L"Courier-Bold")
50JS_STATIC_CONST_ENTRY_STRING(L"CourI", L"Courier-Oblique")
51JS_STATIC_CONST_ENTRY_STRING(L"CourBI", L"Courier-BoldOblique")
52JS_STATIC_CONST_ENTRY_STRING(L"Symbol", L"Symbol")
53JS_STATIC_CONST_ENTRY_STRING(L"ZapfD", L"ZapfDingbats")
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070054END_JS_STATIC_CONST()
55
Nico Weber9d8ec5a2015-08-04 13:00:21 -070056IMPLEMENT_JS_CLASS_CONST(CJS_Font, font)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070057
58/* ------------------------------ highlight ------------------------------ */
59
60BEGIN_JS_STATIC_CONST(CJS_Highlight)
Tom Sepeze2bad472015-08-04 14:31:27 -070061JS_STATIC_CONST_ENTRY_STRING(L"n", L"none")
62JS_STATIC_CONST_ENTRY_STRING(L"i", L"invert")
63JS_STATIC_CONST_ENTRY_STRING(L"p", L"push")
64JS_STATIC_CONST_ENTRY_STRING(L"o", L"outline")
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070065END_JS_STATIC_CONST()
66
Nico Weber9d8ec5a2015-08-04 13:00:21 -070067IMPLEMENT_JS_CLASS_CONST(CJS_Highlight, highlight)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070068
69/* ------------------------------ position ------------------------------ */
70
71BEGIN_JS_STATIC_CONST(CJS_Position)
Tom Sepeze2bad472015-08-04 14:31:27 -070072JS_STATIC_CONST_ENTRY_NUMBER(L"textOnly", 0)
73JS_STATIC_CONST_ENTRY_NUMBER(L"iconOnly", 1)
74JS_STATIC_CONST_ENTRY_NUMBER(L"iconTextV", 2)
75JS_STATIC_CONST_ENTRY_NUMBER(L"textIconV", 3)
76JS_STATIC_CONST_ENTRY_NUMBER(L"iconTextH", 4)
77JS_STATIC_CONST_ENTRY_NUMBER(L"textIconH", 5)
78JS_STATIC_CONST_ENTRY_NUMBER(L"overlay", 6)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070079END_JS_STATIC_CONST()
80
Nico Weber9d8ec5a2015-08-04 13:00:21 -070081IMPLEMENT_JS_CLASS_CONST(CJS_Position, position)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070082
83/* ------------------------------ scaleHow ------------------------------ */
84
85BEGIN_JS_STATIC_CONST(CJS_ScaleHow)
Tom Sepeze2bad472015-08-04 14:31:27 -070086JS_STATIC_CONST_ENTRY_NUMBER(L"proportional", 0)
87JS_STATIC_CONST_ENTRY_NUMBER(L"anamorphic", 1)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070088END_JS_STATIC_CONST()
89
Nico Weber9d8ec5a2015-08-04 13:00:21 -070090IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow, scaleHow)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070091
92/* ------------------------------ scaleWhen ------------------------------ */
93
94BEGIN_JS_STATIC_CONST(CJS_ScaleWhen)
Tom Sepeze2bad472015-08-04 14:31:27 -070095JS_STATIC_CONST_ENTRY_NUMBER(L"always", 0)
96JS_STATIC_CONST_ENTRY_NUMBER(L"never", 1)
97JS_STATIC_CONST_ENTRY_NUMBER(L"tooBig", 2)
98JS_STATIC_CONST_ENTRY_NUMBER(L"tooSmall", 3)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070099END_JS_STATIC_CONST()
100
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700101IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen, scaleWhen)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700102
103/* ------------------------------ style ------------------------------ */
104
105BEGIN_JS_STATIC_CONST(CJS_Style)
Tom Sepeze2bad472015-08-04 14:31:27 -0700106JS_STATIC_CONST_ENTRY_STRING(L"ch", L"check")
107JS_STATIC_CONST_ENTRY_STRING(L"cr", L"cross")
108JS_STATIC_CONST_ENTRY_STRING(L"di", L"diamond")
109JS_STATIC_CONST_ENTRY_STRING(L"ci", L"circle")
110JS_STATIC_CONST_ENTRY_STRING(L"st", L"star")
111JS_STATIC_CONST_ENTRY_STRING(L"sq", L"square")
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700112END_JS_STATIC_CONST()
113
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700114IMPLEMENT_JS_CLASS_CONST(CJS_Style, style)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700115
116/* ------------------------------ zoomtype ------------------------------ */
117
118BEGIN_JS_STATIC_CONST(CJS_Zoomtype)
Tom Sepeze2bad472015-08-04 14:31:27 -0700119JS_STATIC_CONST_ENTRY_STRING(L"none", L"NoVary")
120JS_STATIC_CONST_ENTRY_STRING(L"fitP", L"FitPage")
121JS_STATIC_CONST_ENTRY_STRING(L"fitW", L"FitWidth")
122JS_STATIC_CONST_ENTRY_STRING(L"fitH", L"FitHeight")
123JS_STATIC_CONST_ENTRY_STRING(L"fitV", L"FitVisibleWidth")
124JS_STATIC_CONST_ENTRY_STRING(L"pref", L"Preferred")
125JS_STATIC_CONST_ENTRY_STRING(L"refW", L"ReflowWidth")
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700126END_JS_STATIC_CONST()
127
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700128IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype, zoomtype)
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700129
Tom Sepez570875c2015-09-11 08:35:03 -0700130/* ------------------------------ CJS_GlobalConsts ------------------------- */
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700131
Tom Sepez570875c2015-09-11 08:35:03 -0700132#define DEFINE_GLOBAL_CONST(pIsolate, const_name, const_value) \
133 if (JS_DefineGlobalConst( \
134 pIsolate, JS_WIDESTRING(const_name), \
135 JS_NewString(pIsolate, JS_WIDESTRING(const_value)))) { \
136 return -1; \
137 }
138
139int CJS_GlobalConsts::DefineJSObjects(v8::Isolate* pIsolate) {
Tom Sepez808a99e2015-09-10 12:28:37 -0700140 DEFINE_GLOBAL_CONST(pIsolate, IDS_GREATER_THAN, Invalid value
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700141 : must be greater than or equal to % s.);
142 DEFINE_GLOBAL_CONST(
Tom Sepez808a99e2015-09-10 12:28:37 -0700143 pIsolate, IDS_GT_AND_LT, Invalid value
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700144 : must be greater than or equal to % s and less than or equal to % s.);
Tom Sepez808a99e2015-09-10 12:28:37 -0700145 DEFINE_GLOBAL_CONST(pIsolate, IDS_LESS_THAN, Invalid value
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700146 : must be less than or equal to % s.);
Tom Sepez808a99e2015-09-10 12:28:37 -0700147 DEFINE_GLOBAL_CONST(pIsolate, IDS_INVALID_MONTH, **Invalid**);
148 DEFINE_GLOBAL_CONST(pIsolate, IDS_INVALID_DATE, Invalid date / time
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700149 : please ensure that the date / time exists.Field);
Tom Sepez808a99e2015-09-10 12:28:37 -0700150 DEFINE_GLOBAL_CONST(pIsolate, IDS_INVALID_VALUE,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700151 The value entered does not match the format of the field);
Tom Sepez808a99e2015-09-10 12:28:37 -0700152 DEFINE_GLOBAL_CONST(pIsolate, IDS_AM, am);
153 DEFINE_GLOBAL_CONST(pIsolate, IDS_PM, pm);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700154 DEFINE_GLOBAL_CONST(
Tom Sepez808a99e2015-09-10 12:28:37 -0700155 pIsolate, IDS_MONTH_INFO,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700156 January[1] February[2] March[3] April[4] May[5] June[6] July[7] August
157 [8] September[9] October[10] November[11] December[12] Sept[9] Jan
158 [1] Feb[2] Mar[3] Apr[4] Jun[6] Jul[7] Aug[8] Sep[9] Oct[10] Nov
159 [11] Dec[12]);
Tom Sepez808a99e2015-09-10 12:28:37 -0700160 DEFINE_GLOBAL_CONST(pIsolate, IDS_STARTUP_CONSOLE_MSG, ** ^ _ ^ **);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700161
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700162 return 0;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700163}
164
Tom Sepez570875c2015-09-11 08:35:03 -0700165/* ------------------------------ CJS_GlobalArrays ------------------------ */
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700166
Tom Sepez570875c2015-09-11 08:35:03 -0700167#define DEFINE_GLOBAL_ARRAY(pIsolate) \
168 int size = FX_ArraySize(ArrayContent); \
169 \
170 CJS_Array array(pIsolate); \
171 for (int i = 0; i < size; i++) \
172 array.SetElement(i, CJS_Value(pIsolate, ArrayContent[i])); \
173 \
174 CJS_PropValue prop(pIsolate); \
175 prop << array; \
176 if (JS_DefineGlobalConst(pIsolate, (const wchar_t*)ArrayName, \
177 prop.ToV8Value()) < 0) { \
178 return -1; \
179 }
180
181int CJS_GlobalArrays::DefineJSObjects(v8::Isolate* pIsolate) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700182 {
183 const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_DOT_SEP";
184 const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*\\.?\\d*"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700185 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700186 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700187
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700188 {
189 const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_DOT_SEP";
190 const FX_WCHAR* ArrayContent[] = {
191 L"[+-]?\\d+(\\.\\d+)?", /* -1.0 or -1 */
192 L"[+-]?\\.\\d+", /* -.1 */
193 L"[+-]?\\d+\\." /* -1. */
194 };
Tom Sepez808a99e2015-09-10 12:28:37 -0700195 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700196 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700197
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700198 {
199 const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_COMMA_SEP";
200 const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*,?\\d*"};
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700201
Tom Sepez808a99e2015-09-10 12:28:37 -0700202 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700203 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700204
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700205 {
206 const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_COMMA_SEP";
207 const FX_WCHAR* ArrayContent[] = {
208 L"[+-]?\\d+([.,]\\d+)?", /* -1,0 or -1 */
209 L"[+-]?[.,]\\d+", /* -,1 */
210 L"[+-]?\\d+[.,]" /* -1, */
211 };
Tom Sepez808a99e2015-09-10 12:28:37 -0700212 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700213 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700214
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700215 {
216 const FX_WCHAR* ArrayName = L"RE_ZIP_ENTRY";
217 const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700218 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700219 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700220
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700221 {
222 const FX_WCHAR* ArrayName = L"RE_ZIP_COMMIT";
223 const FX_WCHAR* ArrayContent[] = {L"\\d{5}"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700224 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700225 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700226
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700227 {
228 const FX_WCHAR* ArrayName = L"RE_ZIP4_ENTRY";
229 const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}(\\.|[- ])?\\d{0,4}"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700230 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700231 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700232
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700233 {
234 const FX_WCHAR* ArrayName = L"RE_ZIP4_COMMIT";
235 const FX_WCHAR* ArrayContent[] = {L"\\d{5}(\\.|[- ])?\\d{4}"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700236 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700237 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700238
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700239 {
240 const FX_WCHAR* ArrayName = L"RE_PHONE_ENTRY";
241 const FX_WCHAR* ArrayContent[] = {
242 L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 555-1234 or 408
243 555-1234 */
244 L"\\(\\d{0,3}", /* (408 */
245 L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408)
246 555-1234 */
247 /* (allow the addition of parens as an afterthought) */
248 L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408 555-1234
249 */
250 L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 408) 555-1234
251 */
252 L"011(\\.|[- \\d])*" /* international */
253 };
Tom Sepez808a99e2015-09-10 12:28:37 -0700254 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700255 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700256
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700257 {
258 const FX_WCHAR* ArrayName = L"RE_PHONE_COMMIT";
259 const FX_WCHAR* ArrayContent[] = {
260 L"\\d{3}(\\.|[- ])?\\d{4}", /* 555-1234 */
261 L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* 408 555-1234 */
262 L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* (408) 555-1234 */
263 L"011(\\.|[- \\d])*" /* international */
264 };
Tom Sepez808a99e2015-09-10 12:28:37 -0700265 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700266 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700267
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700268 {
269 const FX_WCHAR* ArrayName = L"RE_SSN_ENTRY";
270 const FX_WCHAR* ArrayContent[] = {
271 L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700272 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700273 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700274
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700275 {
276 const FX_WCHAR* ArrayName = L"RE_SSN_COMMIT";
277 const FX_WCHAR* ArrayContent[] = {
278 L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"};
Tom Sepez808a99e2015-09-10 12:28:37 -0700279 DEFINE_GLOBAL_ARRAY(pIsolate);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700280 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700281
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700282 return 0;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700283}