// Copyright 2017 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 "xfa/fxfa/parser/cxfa_font.h"

namespace {

const CXFA_Node::PropertyData kPropertyData[] = {{XFA_Element::Fill, 1, 0},
                                                 {XFA_Element::Extras, 1, 0},
                                                 {XFA_Element::Unknown, 0, 0}};
const XFA_Attribute kAttributeData[] = {XFA_Attribute::Id,
                                        XFA_Attribute::LineThrough,
                                        XFA_Attribute::Typeface,
                                        XFA_Attribute::FontHorizontalScale,
                                        XFA_Attribute::Use,
                                        XFA_Attribute::KerningMode,
                                        XFA_Attribute::Underline,
                                        XFA_Attribute::BaselineShift,
                                        XFA_Attribute::OverlinePeriod,
                                        XFA_Attribute::LetterSpacing,
                                        XFA_Attribute::LineThroughPeriod,
                                        XFA_Attribute::FontVerticalScale,
                                        XFA_Attribute::PsName,
                                        XFA_Attribute::Size,
                                        XFA_Attribute::Posture,
                                        XFA_Attribute::Usehref,
                                        XFA_Attribute::Weight,
                                        XFA_Attribute::UnderlinePeriod,
                                        XFA_Attribute::Overline,
                                        XFA_Attribute::GenericFamily,
                                        XFA_Attribute::Unknown};

constexpr wchar_t kName[] = L"font";

}  // namespace

CXFA_Font::CXFA_Font(CXFA_Document* doc, XFA_XDPPACKET packet)
    : CXFA_Node(
          doc,
          packet,
          (XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form),
          XFA_ObjectType::Node,
          XFA_Element::Font,
          kPropertyData,
          kAttributeData,
          kName) {}

CXFA_Font::~CXFA_Font() {}
