// 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

#ifndef XFA_FXFA_FXFA_BASIC_H_
#define XFA_FXFA_FXFA_BASIC_H_

#include <stdint.h>

class CXFA_Measurement;
enum class XFA_ObjectType;
struct XFA_SCRIPTATTRIBUTEINFO;

enum XFA_HashCode : uint32_t {
  XFA_HASHCODE_None = 0,

  XFA_HASHCODE_Config = 0x4e1e39b6,
  XFA_HASHCODE_ConnectionSet = 0xe14c801c,
  XFA_HASHCODE_Data = 0xbde9abda,
  XFA_HASHCODE_DataDescription = 0x2b5df51e,
  XFA_HASHCODE_Datasets = 0x99b95079,
  XFA_HASHCODE_DataWindow = 0x83a550d2,
  XFA_HASHCODE_Event = 0x185e41e2,
  XFA_HASHCODE_Form = 0xcd309ff4,
  XFA_HASHCODE_Group = 0xf7f75fcd,
  XFA_HASHCODE_Host = 0xdb075bde,
  XFA_HASHCODE_Layout = 0x7e7e845e,
  XFA_HASHCODE_LocaleSet = 0x5473b6dc,
  XFA_HASHCODE_Log = 0x0b1b3d22,
  XFA_HASHCODE_Name = 0x31b19c1,
  XFA_HASHCODE_Occur = 0xf7eebe1c,
  XFA_HASHCODE_Pdf = 0xb843dba,
  XFA_HASHCODE_Record = 0x5779d65f,
  XFA_HASHCODE_Signature = 0x8b036f32,
  XFA_HASHCODE_SourceSet = 0x811929d,
  XFA_HASHCODE_Stylesheet = 0x6038580a,
  XFA_HASHCODE_Template = 0x803550fc,
  XFA_HASHCODE_This = 0x2d574d58,
  XFA_HASHCODE_Xdc = 0xc56afbf,
  XFA_HASHCODE_XDP = 0xc56afcc,
  XFA_HASHCODE_Xfa = 0xc56b9ff,
  XFA_HASHCODE_Xfdf = 0x48d004a8,
  XFA_HASHCODE_Xmpmeta = 0x132a8fbc
};

enum class XFA_PacketType : uint8_t {
  User,
  SourceSet,
  Pdf,
  Xdc,
  Xdp,
  Xmpmeta,
  Xfdf,
  Config,
  LocaleSet,
  Stylesheet,
  Template,
  Signature,
  Datasets,
  Form,
  ConnectionSet,
};

enum XFA_XDPPACKET {
  XFA_XDPPACKET_UNKNOWN = 0,
  XFA_XDPPACKET_Config = 1 << static_cast<uint8_t>(XFA_PacketType::Config),
  XFA_XDPPACKET_Template = 1 << static_cast<uint8_t>(XFA_PacketType::Template),
  XFA_XDPPACKET_Datasets = 1 << static_cast<uint8_t>(XFA_PacketType::Datasets),
  XFA_XDPPACKET_Form = 1 << static_cast<uint8_t>(XFA_PacketType::Form),
  XFA_XDPPACKET_LocaleSet = 1
                            << static_cast<uint8_t>(XFA_PacketType::LocaleSet),
  XFA_XDPPACKET_ConnectionSet =
      1 << static_cast<uint8_t>(XFA_PacketType::ConnectionSet),
  XFA_XDPPACKET_SourceSet = 1
                            << static_cast<uint8_t>(XFA_PacketType::SourceSet),
  XFA_XDPPACKET_Xdc = 1 << static_cast<uint8_t>(XFA_PacketType::Xdc),
  XFA_XDPPACKET_Pdf = 1 << static_cast<uint8_t>(XFA_PacketType::Pdf),
  XFA_XDPPACKET_Xfdf = 1 << static_cast<uint8_t>(XFA_PacketType::Xfdf),
  XFA_XDPPACKET_Xmpmeta = 1 << static_cast<uint8_t>(XFA_PacketType::Xmpmeta),
  XFA_XDPPACKET_Signature = 1
                            << static_cast<uint8_t>(XFA_PacketType::Signature),
  XFA_XDPPACKET_Stylesheet =
      1 << static_cast<uint8_t>(XFA_PacketType::Stylesheet),
  XFA_XDPPACKET_USER = 1 << static_cast<uint8_t>(XFA_PacketType::User),
  XFA_XDPPACKET_XDP = 1 << static_cast<uint8_t>(XFA_PacketType::Xdp)
};

enum XFA_XDPPACKET_FLAGS {
  XFA_XDPPACKET_FLAGS_COMPLETEMATCH = 1,
  XFA_XDPPACKET_FLAGS_PREFIXMATCH = 2,
  XFA_XDPPACKET_FLAGS_NOMATCH = 4,
  XFA_XDPPACKET_FLAGS_SUPPORTONE = 8,
  XFA_XDPPACKET_FLAGS_SUPPORTMANY = 16,
};

enum class XFA_AttributeValue : uint16_t {
  Asterisk,
  Slash,
  Backslash,
  On,
  Tb,
  Up,
  MetaData,
  Delegate,
  PostSubmit,
  Name,
  Cross,
  Next,
  None,
  ShortEdge,
  Checksum_1mod10_1mod11,
  Height,
  CrossDiagonal,
  All,
  Any,
  ToRight,
  MatchTemplate,
  Dpl,
  Invisible,
  Fit,
  Width,
  PreSubmit,
  Ipl,
  FlateCompress,
  Med,
  Odd,
  Off,
  Pdf,
  Row,
  Top,
  Xdp,
  Xfd,
  Xml,
  Zip,
  Zpl,
  Visible,
  Exclude,
  MouseEnter,
  Pair,
  Filter,
  MoveLast,
  ExportAndImport,
  Push,
  Portrait,
  Default,
  StoredProc,
  StayBOF,
  StayEOF,
  PostPrint,
  UsCarrier,
  Right,
  PreOpen,
  Actual,
  Rest,
  TopCenter,
  StandardSymbol,
  Initialize,
  JustifyAll,
  Normal,
  Landscape,
  NonInteractive,
  MouseExit,
  Minus,
  DiagonalLeft,
  SimplexPaginated,
  Document,
  Warning,
  Auto,
  Below,
  BottomLeft,
  BottomCenter,
  Tcpl,
  Text,
  Grouping,
  SecureSymbol,
  PreExecute,
  DocClose,
  Keyset,
  Vertical,
  PreSave,
  PreSign,
  Bottom,
  ToTop,
  Verify,
  First,
  ContentArea,
  Solid,
  Pessimistic,
  DuplexPaginated,
  Round,
  Remerge,
  Ordered,
  Percent,
  Even,
  Exit,
  ToolTip,
  OrderedOccurrence,
  ReadOnly,
  Currency,
  Concat,
  Thai,
  Embossed,
  Formdata,
  Greek,
  Decimal,
  Select,
  LongEdge,
  Protected,
  BottomRight,
  Zero,
  ForwardOnly,
  DocReady,
  Hidden,
  Include,
  Dashed,
  MultiSelect,
  Inactive,
  Embed,
  Static,
  OnEntry,
  Cyrillic,
  NonBlank,
  TopRight,
  Hebrew,
  TopLeft,
  Center,
  MoveFirst,
  Diamond,
  PageOdd,
  Checksum_1mod10,
  Korean,
  AboveEmbedded,
  ZipCompress,
  Numeric,
  Circle,
  ToBottom,
  Inverted,
  Update,
  Isoname,
  Server,
  Position,
  MiddleCenter,
  Optional,
  UsePrinterSetting,
  Outline,
  IndexChange,
  Change,
  PageArea,
  Once,
  Only,
  Open,
  Caption,
  Raised,
  Justify,
  RefAndDescendants,
  Short,
  PageFront,
  Monospace,
  Middle,
  PrePrint,
  Always,
  Unknown,
  ToLeft,
  Above,
  DashDot,
  Gregorian,
  Roman,
  MouseDown,
  Symbol,
  PageEven,
  Sign,
  AddNew,
  Star,
  Optimistic,
  Rl_tb,
  MiddleRight,
  Maintain,
  Package,
  SimplifiedChinese,
  ToCenter,
  Back,
  Unspecified,
  BatchOptimistic,
  Bold,
  Both,
  Butt,
  Client,
  Checksum_2mod10,
  ImageOnly,
  Horizontal,
  Dotted,
  UserControl,
  DiagonalRight,
  ConsumeData,
  Check,
  Data,
  Down,
  SansSerif,
  Inline,
  TraditionalChinese,
  Warn,
  RefOnly,
  InteractiveForms,
  Word,
  Unordered,
  Required,
  ImportOnly,
  BelowEmbedded,
  Japanese,
  Full,
  Rl_row,
  Vietnamese,
  EastEuropeanRoman,
  MouseUp,
  ExportOnly,
  Clear,
  Click,
  Base64,
  Close,
  Host,
  Global,
  Blank,
  Table,
  Import,
  Custom,
  MiddleLeft,
  PostExecute,
  Radix,
  PostOpen,
  Enter,
  Ignore,
  Lr_tb,
  Fantasy,
  Italic,
  Author,
  ToEdge,
  Choice,
  Disabled,
  CrossHatch,
  DataRef,
  DashDotDot,
  Square,
  Dynamic,
  Manual,
  Etched,
  ValidationState,
  Cursive,
  Last,
  Left,
  Link,
  Long,
  InternationalCarrier,
  PDF1_3,
  PDF1_6,
  Serif,
  PostSave,
  Ready,
  PostSign,
  Arabic,
  Error,
  Urlencoded,
  Lowered
};

enum class XFA_Attribute : uint8_t {
#undef ATTR____
#define ATTR____(a, b, c) c,
#include "xfa/fxfa/parser/attributes.inc"
#undef ATTR____
  FIRST_UNUSED,
  Unknown = 255,
};
static_assert(XFA_Attribute::FIRST_UNUSED < XFA_Attribute::Unknown,
              "enumerated value collsion");

enum class XFA_Element : int16_t {
  Unknown = -1,

  Ps,
  To,
  Ui,
  RecordSet,
  SubsetBelow,
  SubformSet,
  AdobeExtensionLevel,
  Typeface,
  Break,
  FontInfo,
  NumberPattern,
  DynamicRender,
  PrintScaling,
  CheckButton,
  DatePatterns,
  SourceSet,
  Amd,
  Arc,
  Day,
  Era,
  Jog,
  Log,
  Map,
  Mdp,
  BreakBefore,
  Oid,
  Pcl,
  Pdf,
  Ref,
  Uri,
  Xdc,
  Xdp,
  Xfa,
  Xsl,
  Zpl,
  Cache,
  Margin,
  KeyUsage,
  Exclude,
  ChoiceList,
  Level,
  LabelPrinter,
  CalendarSymbols,
  Para,
  Part,
  Pdfa,
  Filter,
  Present,
  Pagination,
  Encoding,
  Event,
  Whitespace,
  DefaultUi,
  DataModel,
  Barcode,
  TimePattern,
  BatchOutput,
  Enforce,
  CurrencySymbols,
  AddSilentPrint,
  Rename,
  Operation,
  Typefaces,
  SubjectDNs,
  Issuers,
  SignaturePseudoModel,
  WsdlConnection,
  Debug,
  Delta,
  EraNames,
  ModifyAnnots,
  StartNode,
  Button,
  Format,
  Border,
  Area,
  Hyphenation,
  Text,
  Time,
  Type,
  Overprint,
  Certificates,
  EncryptionMethods,
  SetProperty,
  PrinterName,
  StartPage,
  PageOffset,
  DateTime,
  Comb,
  Pattern,
  IfEmpty,
  SuppressBanner,
  OutputBin,
  Field,
  Agent,
  OutputXSL,
  AdjustData,
  AutoSave,
  ContentArea,
  EventPseudoModel,
  WsdlAddress,
  Solid,
  DateTimeSymbols,
  EncryptionLevel,
  Edge,
  Stipple,
  Attributes,
  VersionControl,
  Meridiem,
  ExclGroup,
  ToolTip,
  Compress,
  Reason,
  Execute,
  ContentCopy,
  DateTimeEdit,
  Config,
  Image,
  SharpxHTML,
  NumberOfCopies,
  BehaviorOverride,
  TimeStamp,
  Month,
  ViewerPreferences,
  ScriptModel,
  Decimal,
  Subform,
  Select,
  Window,
  LocaleSet,
  Handler,
  HostPseudoModel,
  Presence,
  Record,
  Embed,
  Version,
  Command,
  Copies,
  Staple,
  SubmitFormat,
  Boolean,
  Message,
  Output,
  PsMap,
  ExcludeNS,
  Assist,
  Picture,
  Traversal,
  SilentPrint,
  WebClient,
  LayoutPseudoModel,
  Producer,
  Corner,
  MsgId,
  Color,
  Keep,
  Query,
  Insert,
  ImageEdit,
  Validate,
  DigestMethods,
  NumberPatterns,
  PageSet,
  Integer,
  SoapAddress,
  Equate,
  FormFieldFilling,
  PageRange,
  Update,
  ConnectString,
  Mode,
  Layout,
  Sharpxml,
  XsdConnection,
  Traverse,
  Encodings,
  Template,
  Acrobat,
  ValidationMessaging,
  Signing,
  DataWindow,
  Script,
  AddViewerPreferences,
  AlwaysEmbed,
  PasswordEdit,
  NumericEdit,
  EncryptionMethod,
  Change,
  PageArea,
  SubmitUrl,
  Oids,
  Signature,
  ADBE_JSConsole,
  Caption,
  Relevant,
  FlipLabel,
  ExData,
  DayNames,
  SoapAction,
  DefaultTypeface,
  Manifest,
  Overflow,
  Linear,
  CurrencySymbol,
  Delete,
  Deltas,
  DigestMethod,
  InstanceManager,
  EquateRange,
  Medium,
  TextEdit,
  TemplateCache,
  CompressObjectStream,
  DataValue,
  AccessibleContent,
  TreeList,
  IncludeXDPContent,
  XmlConnection,
  ValidateApprovalSignatures,
  SignData,
  Packets,
  DatePattern,
  DuplexOption,
  Base,
  Bind,
  Compression,
  User,
  Rectangle,
  EffectiveOutputPolicy,
  ADBE_JSDebugger,
  Acrobat7,
  Interactive,
  Locale,
  CurrentPage,
  Data,
  Date,
  Desc,
  Encrypt,
  Draw,
  Encryption,
  MeridiemNames,
  Messaging,
  Speak,
  DataGroup,
  Common,
  Sharptext,
  PaginationOverride,
  Reasons,
  SignatureProperties,
  Threshold,
  AppearanceFilter,
  Fill,
  Font,
  Form,
  MediumInfo,
  Certificate,
  Password,
  RunScripts,
  Trace,
  Float,
  RenderPolicy,
  LogPseudoModel,
  Destination,
  Value,
  Bookend,
  ExObject,
  OpenAction,
  NeverEmbed,
  BindItems,
  Calculate,
  Print,
  Extras,
  Proto,
  DSigData,
  Creator,
  Connect,
  Permissions,
  ConnectionSet,
  Submit,
  Range,
  Linearized,
  Packet,
  RootElement,
  PlaintextMetadata,
  NumberSymbols,
  PrintHighQuality,
  Driver,
  IncrementalLoad,
  SubjectDN,
  CompressLogicalStructure,
  IncrementalMerge,
  Radial,
  Variables,
  TimePatterns,
  EffectiveInputPolicy,
  NameAttr,
  Conformance,
  Transform,
  LockDocument,
  BreakAfter,
  Line,
  List,
  Source,
  Occur,
  PickTrayByPDFSize,
  MonthNames,
  Severity,
  GroupParent,
  DocumentAssembly,
  NumberSymbol,
  Tagged,
  Items
};

enum class XFA_AttributeType : uint8_t {
  Enum,
  CData,
  Boolean,
  Integer,
  Measure,
};

struct XFA_SCRIPTHIERARCHY {
  uint16_t wAttributeStart;
  uint16_t wAttributeCount;
  int16_t wParentIndex;
};

#define XFA_PROPERTYFLAG_OneOf 0x01
#define XFA_PROPERTYFLAG_DefaultOneOf 0x02

struct XFA_AttributeValueInfo {
  uint32_t uHash;  // |pName| hashed as WideString.
  XFA_AttributeValue eName;
  const char* pName;
};

enum class XFA_Unit : uint8_t {
  Percent = 0,
  Em,
  Pt,
  In,
  Pc,
  Cm,
  Mm,
  Mp,

  Unknown = 255,
};

enum class XFA_ScriptType : uint8_t {
  Basic,
  Object,
};

#endif  // XFA_FXFA_FXFA_BASIC_H_
