// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "../../include/javascript/JavaScript.h"
#include "../../include/javascript/IJavaScript.h"
#include "../../include/javascript/JS_Define.h"
#include "../../include/javascript/JS_Object.h"
#include "../../include/javascript/JS_Value.h"
#include "../../include/javascript/Consts.h"

/* ------------------------------ border ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Border)
JS_STATIC_CONST_ENTRY_STRING(s, solid)
JS_STATIC_CONST_ENTRY_STRING(b, beveled)
JS_STATIC_CONST_ENTRY_STRING(d, dashed)
JS_STATIC_CONST_ENTRY_STRING(i, inset)
JS_STATIC_CONST_ENTRY_STRING(u, underline)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Border, border)

/* ------------------------------ display ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Display)
JS_STATIC_CONST_ENTRY_NUMBER(visible, 0)
JS_STATIC_CONST_ENTRY_NUMBER(hidden, 1)
JS_STATIC_CONST_ENTRY_NUMBER(noPrint, 2)
JS_STATIC_CONST_ENTRY_NUMBER(noView, 3)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Display, display)

/* ------------------------------ font ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Font)
JS_STATIC_CONST_ENTRY_STRING(Times, Times-Roman)
JS_STATIC_CONST_ENTRY_STRING(TimesB, Times-Bold)
JS_STATIC_CONST_ENTRY_STRING(TimesI, Times-Italic)
JS_STATIC_CONST_ENTRY_STRING(TimesBI, Times-BoldItalic)
JS_STATIC_CONST_ENTRY_STRING(Helv, Helvetica)
JS_STATIC_CONST_ENTRY_STRING(HelvB, Helvetica-Bold)
JS_STATIC_CONST_ENTRY_STRING(HelvI, Helvetica-Oblique)
JS_STATIC_CONST_ENTRY_STRING(HelvBI, Helvetica-BoldOblique)
JS_STATIC_CONST_ENTRY_STRING(Cour, Courier)
JS_STATIC_CONST_ENTRY_STRING(CourB, Courier-Bold)
JS_STATIC_CONST_ENTRY_STRING(CourI, Courier-Oblique)
JS_STATIC_CONST_ENTRY_STRING(CourBI, Courier-BoldOblique)
JS_STATIC_CONST_ENTRY_STRING(Symbol, Symbol)
JS_STATIC_CONST_ENTRY_STRING(ZapfD, ZapfDingbats)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Font, font)

/* ------------------------------ highlight ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Highlight)
JS_STATIC_CONST_ENTRY_STRING(n, none)
JS_STATIC_CONST_ENTRY_STRING(i, invert)
JS_STATIC_CONST_ENTRY_STRING(p, push)
JS_STATIC_CONST_ENTRY_STRING(o, outline)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Highlight, highlight)

/* ------------------------------ position ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Position)
JS_STATIC_CONST_ENTRY_NUMBER(textOnly, 0)
JS_STATIC_CONST_ENTRY_NUMBER(iconOnly, 1)
JS_STATIC_CONST_ENTRY_NUMBER(iconTextV, 2)
JS_STATIC_CONST_ENTRY_NUMBER(textIconV, 3)
JS_STATIC_CONST_ENTRY_NUMBER(iconTextH, 4)
JS_STATIC_CONST_ENTRY_NUMBER(textIconH, 5)
JS_STATIC_CONST_ENTRY_NUMBER(overlay, 6)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Position, position)

/* ------------------------------ scaleHow ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_ScaleHow)
JS_STATIC_CONST_ENTRY_NUMBER(proportional, 0)
JS_STATIC_CONST_ENTRY_NUMBER(anamorphic, 1)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow, scaleHow)

/* ------------------------------ scaleWhen ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_ScaleWhen)
JS_STATIC_CONST_ENTRY_NUMBER(always, 0)
JS_STATIC_CONST_ENTRY_NUMBER(never, 1)
JS_STATIC_CONST_ENTRY_NUMBER(tooBig, 2)
JS_STATIC_CONST_ENTRY_NUMBER(tooSmall, 3)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen, scaleWhen)

/* ------------------------------ style ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Style)
JS_STATIC_CONST_ENTRY_STRING(ch, check)
JS_STATIC_CONST_ENTRY_STRING(cr, cross)
JS_STATIC_CONST_ENTRY_STRING(di, diamond)
JS_STATIC_CONST_ENTRY_STRING(ci, circle)
JS_STATIC_CONST_ENTRY_STRING(st, star)
JS_STATIC_CONST_ENTRY_STRING(sq, square)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Style, style)

/* ------------------------------ zoomtype ------------------------------ */

BEGIN_JS_STATIC_CONST(CJS_Zoomtype)
JS_STATIC_CONST_ENTRY_STRING(none, NoVary)
JS_STATIC_CONST_ENTRY_STRING(fitP, FitPage)
JS_STATIC_CONST_ENTRY_STRING(fitW, FitWidth)
JS_STATIC_CONST_ENTRY_STRING(fitH, FitHeight)
JS_STATIC_CONST_ENTRY_STRING(fitV, FitVisibleWidth)
JS_STATIC_CONST_ENTRY_STRING(pref, Preferred)
JS_STATIC_CONST_ENTRY_STRING(refW, ReflowWidth)
END_JS_STATIC_CONST()

IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype, zoomtype)

/* ------------------------------ CJS_GlobalConsts
 * ------------------------------ */

int CJS_GlobalConsts::Init(IJS_Runtime* pRuntime) {
  DEFINE_GLOBAL_CONST(pRuntime, IDS_GREATER_THAN, Invalid value
                      : must be greater than or equal to % s.);
  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.);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_LESS_THAN, Invalid value
                      : must be less than or equal to % s.);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_MONTH, **Invalid**);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_DATE, Invalid date / time
                      : please ensure that the date / time exists.Field);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_VALUE,
                      The value entered does not match the format of the field);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_AM, am);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_PM, pm);
  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]);
  DEFINE_GLOBAL_CONST(pRuntime, IDS_STARTUP_CONSOLE_MSG, ** ^ _ ^ **);

  return 0;
}

/* ------------------------------ CJS_GlobalArrays
 * ------------------------------ */

int CJS_GlobalArrays::Init(IJS_Runtime* pRuntime) {
  {
    const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_DOT_SEP";
    const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*\\.?\\d*"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_DOT_SEP";
    const FX_WCHAR* ArrayContent[] = {
        L"[+-]?\\d+(\\.\\d+)?", /* -1.0 or -1 */
        L"[+-]?\\.\\d+",        /* -.1 */
        L"[+-]?\\d+\\."         /* -1. */
    };
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_COMMA_SEP";
    const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*,?\\d*"};

    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_COMMA_SEP";
    const FX_WCHAR* ArrayContent[] = {
        L"[+-]?\\d+([.,]\\d+)?", /* -1,0 or -1 */
        L"[+-]?[.,]\\d+",        /* -,1 */
        L"[+-]?\\d+[.,]"         /* -1, */
    };
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_ZIP_ENTRY";
    const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_ZIP_COMMIT";
    const FX_WCHAR* ArrayContent[] = {L"\\d{5}"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_ZIP4_ENTRY";
    const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}(\\.|[- ])?\\d{0,4}"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_ZIP4_COMMIT";
    const FX_WCHAR* ArrayContent[] = {L"\\d{5}(\\.|[- ])?\\d{4}"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_PHONE_ENTRY";
    const FX_WCHAR* ArrayContent[] = {
        L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 555-1234 or 408
                                                              555-1234 */
        L"\\(\\d{0,3}",                                    /* (408 */
        L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408)
                                                                    555-1234 */
        /* (allow the addition of parens as an afterthought) */
        L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408 555-1234
                                                                 */
        L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 408) 555-1234
                                                                 */
        L"011(\\.|[- \\d])*" /* international */
    };
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_PHONE_COMMIT";
    const FX_WCHAR* ArrayContent[] = {
        L"\\d{3}(\\.|[- ])?\\d{4}",                        /* 555-1234 */
        L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}",       /* 408 555-1234 */
        L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* (408) 555-1234 */
        L"011(\\.|[- \\d])*"                               /* international */
    };
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_SSN_ENTRY";
    const FX_WCHAR* ArrayContent[] = {
        L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  {
    const FX_WCHAR* ArrayName = L"RE_SSN_COMMIT";
    const FX_WCHAR* ArrayContent[] = {
        L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"};
    DEFINE_GLOBAL_ARRAY(pRuntime);
  }

  return 0;
}
