1 // Copyright 2017 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 "xfa/fxfa/parser/cxfa_caption.h" 8 9 #include "fxjs/xfa/cjx_caption.h" 10 #include "third_party/base/ptr_util.h" 11 #include "xfa/fxfa/parser/cxfa_font.h" 12 #include "xfa/fxfa/parser/cxfa_margin.h" 13 #include "xfa/fxfa/parser/cxfa_measurement.h" 14 #include "xfa/fxfa/parser/cxfa_value.h" 15 16 namespace { 17 18 const CXFA_Node::PropertyData kPropertyData[] = { 19 {XFA_Element::Margin, 1, 0}, {XFA_Element::Para, 1, 0}, 20 {XFA_Element::Font, 1, 0}, {XFA_Element::Value, 1, 0}, 21 {XFA_Element::Extras, 1, 0}, {XFA_Element::Unknown, 0, 0}}; 22 const CXFA_Node::AttributeData kAttributeData[] = { 23 {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr}, 24 {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr}, 25 {XFA_Attribute::Reserve, XFA_AttributeType::Measure, (void*)L"-1un"}, 26 {XFA_Attribute::Presence, XFA_AttributeType::Enum, 27 (void*)XFA_AttributeEnum::Visible}, 28 {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr}, 29 {XFA_Attribute::Placement, XFA_AttributeType::Enum, 30 (void*)XFA_AttributeEnum::Left}, 31 {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}}; 32 33 constexpr wchar_t kName[] = L"caption"; 34 35 } // namespace 36 37 CXFA_Caption::CXFA_Caption(CXFA_Document* doc, XFA_PacketType packet) 38 : CXFA_Node(doc, 39 packet, 40 (XFA_XDPPACKET_Template | XFA_XDPPACKET_Form), 41 XFA_ObjectType::Node, 42 XFA_Element::Caption, 43 kPropertyData, 44 kAttributeData, 45 kName, 46 pdfium::MakeUnique<CJX_Caption>(this)) {} 47 48 CXFA_Caption::~CXFA_Caption() {} 49 50 bool CXFA_Caption::IsVisible() { 51 return JSObject() 52 ->TryEnum(XFA_Attribute::Presence, true) 53 .value_or(XFA_AttributeEnum::Visible) == 54 XFA_AttributeEnum::Visible; 55 } 56 57 bool CXFA_Caption::IsHidden() { 58 return JSObject() 59 ->TryEnum(XFA_Attribute::Presence, true) 60 .value_or(XFA_AttributeEnum::Visible) == XFA_AttributeEnum::Hidden; 61 } 62 63 XFA_AttributeEnum CXFA_Caption::GetPlacementType() { 64 return JSObject() 65 ->TryEnum(XFA_Attribute::Placement, true) 66 .value_or(XFA_AttributeEnum::Left); 67 } 68 69 float CXFA_Caption::GetReserve() const { 70 return JSObject()->GetMeasure(XFA_Attribute::Reserve).ToUnit(XFA_Unit::Pt); 71 } 72 73 CXFA_Margin* CXFA_Caption::GetMarginIfExists() { 74 return GetChild<CXFA_Margin>(0, XFA_Element::Margin, false); 75 } 76 77 CXFA_Font* CXFA_Caption::GetFontIfExists() { 78 return GetChild<CXFA_Font>(0, XFA_Element::Font, false); 79 } 80 81 CXFA_Value* CXFA_Caption::GetValueIfExists() { 82 return GetChild<CXFA_Value>(0, XFA_Element::Value, false); 83 } 84