1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#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)
17	JS_STATIC_CONST_ENTRY_STRING(s,	solid)
18	JS_STATIC_CONST_ENTRY_STRING(b,	beveled)
19	JS_STATIC_CONST_ENTRY_STRING(d,	dashed)
20	JS_STATIC_CONST_ENTRY_STRING(i,	inset)
21	JS_STATIC_CONST_ENTRY_STRING(u,	underline)
22END_JS_STATIC_CONST()
23
24IMPLEMENT_JS_CLASS_CONST(CJS_Border,border)
25
26/* ------------------------------ display ------------------------------ */
27
28BEGIN_JS_STATIC_CONST(CJS_Display)
29	JS_STATIC_CONST_ENTRY_NUMBER(visible,	0)
30	JS_STATIC_CONST_ENTRY_NUMBER(hidden,	1)
31	JS_STATIC_CONST_ENTRY_NUMBER(noPrint,	2)
32	JS_STATIC_CONST_ENTRY_NUMBER(noView,	3)
33END_JS_STATIC_CONST()
34
35IMPLEMENT_JS_CLASS_CONST(CJS_Display,display)
36
37/* ------------------------------ font ------------------------------ */
38
39BEGIN_JS_STATIC_CONST(CJS_Font)
40	JS_STATIC_CONST_ENTRY_STRING(Times,		Times-Roman)
41	JS_STATIC_CONST_ENTRY_STRING(TimesB,	Times-Bold)
42	JS_STATIC_CONST_ENTRY_STRING(TimesI,	Times-Italic)
43	JS_STATIC_CONST_ENTRY_STRING(TimesBI,	Times-BoldItalic)
44	JS_STATIC_CONST_ENTRY_STRING(Helv,		Helvetica)
45	JS_STATIC_CONST_ENTRY_STRING(HelvB,		Helvetica-Bold)
46	JS_STATIC_CONST_ENTRY_STRING(HelvI,		Helvetica-Oblique)
47	JS_STATIC_CONST_ENTRY_STRING(HelvBI,	Helvetica-BoldOblique)
48	JS_STATIC_CONST_ENTRY_STRING(Cour,		Courier)
49	JS_STATIC_CONST_ENTRY_STRING(CourB,		Courier-Bold)
50	JS_STATIC_CONST_ENTRY_STRING(CourI,		Courier-Oblique)
51	JS_STATIC_CONST_ENTRY_STRING(CourBI,	Courier-BoldOblique)
52	JS_STATIC_CONST_ENTRY_STRING(Symbol,	Symbol)
53	JS_STATIC_CONST_ENTRY_STRING(ZapfD,		ZapfDingbats)
54END_JS_STATIC_CONST()
55
56IMPLEMENT_JS_CLASS_CONST(CJS_Font,font)
57
58/* ------------------------------ highlight ------------------------------ */
59
60BEGIN_JS_STATIC_CONST(CJS_Highlight)
61	JS_STATIC_CONST_ENTRY_STRING(n,	none)
62	JS_STATIC_CONST_ENTRY_STRING(i,	invert)
63	JS_STATIC_CONST_ENTRY_STRING(p,	push)
64	JS_STATIC_CONST_ENTRY_STRING(o,	outline)
65END_JS_STATIC_CONST()
66
67IMPLEMENT_JS_CLASS_CONST(CJS_Highlight,highlight)
68
69/* ------------------------------ position ------------------------------ */
70
71BEGIN_JS_STATIC_CONST(CJS_Position)
72	JS_STATIC_CONST_ENTRY_NUMBER(textOnly,		0)
73	JS_STATIC_CONST_ENTRY_NUMBER(iconOnly,		1)
74	JS_STATIC_CONST_ENTRY_NUMBER(iconTextV,		2)
75	JS_STATIC_CONST_ENTRY_NUMBER(textIconV,		3)
76	JS_STATIC_CONST_ENTRY_NUMBER(iconTextH,		4)
77	JS_STATIC_CONST_ENTRY_NUMBER(textIconH,		5)
78	JS_STATIC_CONST_ENTRY_NUMBER(overlay,		6)
79END_JS_STATIC_CONST()
80
81IMPLEMENT_JS_CLASS_CONST(CJS_Position,position)
82
83/* ------------------------------ scaleHow ------------------------------ */
84
85BEGIN_JS_STATIC_CONST(CJS_ScaleHow)
86	JS_STATIC_CONST_ENTRY_NUMBER(proportional,	0)
87	JS_STATIC_CONST_ENTRY_NUMBER(anamorphic,	1)
88END_JS_STATIC_CONST()
89
90IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow,scaleHow)
91
92/* ------------------------------ scaleWhen ------------------------------ */
93
94BEGIN_JS_STATIC_CONST(CJS_ScaleWhen)
95	JS_STATIC_CONST_ENTRY_NUMBER(always,	0)
96	JS_STATIC_CONST_ENTRY_NUMBER(never,		1)
97	JS_STATIC_CONST_ENTRY_NUMBER(tooBig,	2)
98	JS_STATIC_CONST_ENTRY_NUMBER(tooSmall,	3)
99END_JS_STATIC_CONST()
100
101IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen,scaleWhen)
102
103/* ------------------------------ style ------------------------------ */
104
105BEGIN_JS_STATIC_CONST(CJS_Style)
106	JS_STATIC_CONST_ENTRY_STRING(ch,	check)
107	JS_STATIC_CONST_ENTRY_STRING(cr,	cross)
108	JS_STATIC_CONST_ENTRY_STRING(di,	diamond)
109	JS_STATIC_CONST_ENTRY_STRING(ci,	circle)
110	JS_STATIC_CONST_ENTRY_STRING(st,	star)
111	JS_STATIC_CONST_ENTRY_STRING(sq,	square)
112END_JS_STATIC_CONST()
113
114IMPLEMENT_JS_CLASS_CONST(CJS_Style,style)
115
116
117/* ------------------------------ zoomtype ------------------------------ */
118
119BEGIN_JS_STATIC_CONST(CJS_Zoomtype)
120	JS_STATIC_CONST_ENTRY_STRING(none,	NoVary)
121	JS_STATIC_CONST_ENTRY_STRING(fitP,	FitPage)
122	JS_STATIC_CONST_ENTRY_STRING(fitW,	FitWidth)
123	JS_STATIC_CONST_ENTRY_STRING(fitH,	FitHeight)
124	JS_STATIC_CONST_ENTRY_STRING(fitV,	FitVisibleWidth)
125	JS_STATIC_CONST_ENTRY_STRING(pref,	Preferred)
126	JS_STATIC_CONST_ENTRY_STRING(refW,	ReflowWidth)
127END_JS_STATIC_CONST()
128
129IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype,zoomtype)
130
131/* ------------------------------ CJS_GlobalConsts ------------------------------ */
132
133int	CJS_GlobalConsts::Init(IJS_Runtime* pRuntime)
134{
135	DEFINE_GLOBAL_CONST(pRuntime, IDS_GREATER_THAN , Invalid value: must be greater than or equal to %s.);
136	DEFINE_GLOBAL_CONST(pRuntime, IDS_GT_AND_LT,Invalid value: must be greater than or equal to %s and less than or equal to %s.);
137	DEFINE_GLOBAL_CONST(pRuntime, IDS_LESS_THAN,Invalid value: must be less than or equal to %s.);
138	DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_MONTH,** Invalid **);
139	DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_DATE,Invalid date/time: please ensure that the date/time exists. Field);
140	DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_VALUE,The value entered does not match the format of the field);
141	DEFINE_GLOBAL_CONST(pRuntime, IDS_AM,am);
142	DEFINE_GLOBAL_CONST(pRuntime, IDS_PM,pm);
143	DEFINE_GLOBAL_CONST(pRuntime, IDS_MONTH_INFO,January[1]February[2]March[3]April[4]May[5]June[6]July[7]August[8]September[9]October[10]November[11]December[12]Sept[9]Jan[1]Feb[2]Mar[3]Apr[4]Jun[6]Jul[7]Aug[8]Sep[9]Oct[10]Nov[11]Dec[12]);
144	DEFINE_GLOBAL_CONST(pRuntime, IDS_STARTUP_CONSOLE_MSG, ** ^_^ **);
145
146	return 0;
147}
148
149/* ------------------------------ CJS_GlobalArrays ------------------------------ */
150
151int	CJS_GlobalArrays::Init(IJS_Runtime* pRuntime)
152{
153	{
154		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_NUMBER_ENTRY_DOT_SEP";
155		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"[+-]?\\d*\\.?\\d*"};
156		DEFINE_GLOBAL_ARRAY(pRuntime);
157	}
158
159	{
160		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_NUMBER_COMMIT_DOT_SEP";
161		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"[+-]?\\d+(\\.\\d+)?",                /* -1.0 or -1 */
162										(FX_LPCWSTR)L"[+-]?\\.\\d+",                            /* -.1 */
163										(FX_LPCWSTR)L"[+-]?\\d+\\."                             /* -1. */
164										};
165		DEFINE_GLOBAL_ARRAY(pRuntime);
166	}
167
168	{
169		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_NUMBER_ENTRY_COMMA_SEP";
170		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"[+-]?\\d*,?\\d*"};
171
172		DEFINE_GLOBAL_ARRAY(pRuntime);
173	}
174
175	{
176		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_NUMBER_COMMIT_COMMA_SEP";
177		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"[+-]?\\d+([.,]\\d+)?",               /* -1,0 or -1 */
178										(FX_LPCWSTR)L"[+-]?[.,]\\d+",                   /* -,1 */
179                                        (FX_LPCWSTR)L"[+-]?\\d+[.,]"                            /* -1, */
180                                        };
181		DEFINE_GLOBAL_ARRAY(pRuntime);
182	}
183
184	{
185		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_ZIP_ENTRY";
186        FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"\\d{0,5}"};
187		DEFINE_GLOBAL_ARRAY(pRuntime);
188	}
189
190	{
191		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_ZIP_COMMIT";
192		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"\\d{5}"};
193		DEFINE_GLOBAL_ARRAY(pRuntime);
194	}
195
196	{
197		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_ZIP4_ENTRY";
198		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"\\d{0,5}(\\.|[- ])?\\d{0,4}"};
199		DEFINE_GLOBAL_ARRAY(pRuntime);
200	}
201
202	{
203		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_ZIP4_COMMIT";
204		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"\\d{5}(\\.|[- ])?\\d{4}"};
205		DEFINE_GLOBAL_ARRAY(pRuntime);
206	}
207
208	{
209		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_PHONE_ENTRY";
210		FX_LPCWSTR ArrayContent[] = {
211				(FX_LPCWSTR)L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",		/* 555-1234 or 408 555-1234 */
212				(FX_LPCWSTR)L"\\(\\d{0,3}",											/* (408 */
213				(FX_LPCWSTR)L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",	/* (408) 555-1234 */
214					/* (allow the addition of parens as an afterthought) */
215				(FX_LPCWSTR)L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",	/* (408 555-1234 */
216				(FX_LPCWSTR)L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}",	/* 408) 555-1234 */
217				(FX_LPCWSTR)L"011(\\.|[- \\d])*"										/* international */
218			};
219		DEFINE_GLOBAL_ARRAY(pRuntime);
220	}
221
222	{
223		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_PHONE_COMMIT";
224		FX_LPCWSTR ArrayContent[] = {
225					(FX_LPCWSTR)L"\\d{3}(\\.|[- ])?\\d{4}",							/* 555-1234 */
226					(FX_LPCWSTR)L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}",			/* 408 555-1234 */
227					(FX_LPCWSTR)L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}",	/* (408) 555-1234 */
228					(FX_LPCWSTR)L"011(\\.|[- \\d])*"									/* international */
229				};
230		DEFINE_GLOBAL_ARRAY(pRuntime);
231	}
232
233	{
234		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_SSN_ENTRY";
235		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"};
236		DEFINE_GLOBAL_ARRAY(pRuntime);
237	}
238
239	{
240		FX_LPCWSTR ArrayName = (FX_LPCWSTR)L"RE_SSN_COMMIT";
241		FX_LPCWSTR ArrayContent[] = {(FX_LPCWSTR)L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"};
242		DEFINE_GLOBAL_ARRAY(pRuntime);
243	}
244
245	return 0;
246}
247
248