Fold CXFA_ParaData into CXFA_Para

This CL removes the CXFA_ParaData wrapper and folds the code into
CXFA_Para.

Change-Id: I86d139f1df48dcc80d28c7516b1bda95a59e94bd
Reviewed-on: https://pdfium-review.googlesource.com/21270
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/BUILD.gn b/BUILD.gn
index 7ea6f5e..20c51c6 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -2528,8 +2528,6 @@
       "xfa/fxfa/parser/cxfa_paginationoverride.h",
       "xfa/fxfa/parser/cxfa_para.cpp",
       "xfa/fxfa/parser/cxfa_para.h",
-      "xfa/fxfa/parser/cxfa_paradata.cpp",
-      "xfa/fxfa/parser/cxfa_paradata.h",
       "xfa/fxfa/parser/cxfa_part.cpp",
       "xfa/fxfa/parser/cxfa_part.h",
       "xfa/fxfa/parser/cxfa_password.cpp",
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.cpp b/xfa/fxfa/cxfa_ffcheckbutton.cpp
index c3ac7f6..8dc2882 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/cxfa_ffcheckbutton.cpp
@@ -19,6 +19,7 @@
 #include "xfa/fxfa/cxfa_fffield.h"
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 
 CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_WidgetAcc* pDataAcc)
     : CXFA_FFField(pDataAcc), m_pOldDelegate(nullptr) {}
@@ -112,10 +113,10 @@
 
   XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left;
   XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top;
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (paraData.HasValidNode()) {
-    iHorzAlign = paraData.GetHorizontalAlign();
-    iVertAlign = paraData.GetVerticalAlign();
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (para) {
+    iHorzAlign = para->GetHorizontalAlign();
+    iVertAlign = para->GetVerticalAlign();
   }
 
   m_rtUI = rtWidget;
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index cc5569e..706c430 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -14,6 +14,7 @@
 #include "xfa/fwl/cfwl_notedriver.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffdocview.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 
 namespace {
 
@@ -139,12 +140,12 @@
 }
 
 uint32_t CXFA_FFComboBox::GetAlignment() {
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (!paraData.HasValidNode())
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (!para)
     return 0;
 
   uint32_t dwExtendedStyle = 0;
-  switch (paraData.GetHorizontalAlign()) {
+  switch (para->GetHorizontalAlign()) {
     case XFA_AttributeEnum::Center:
       dwExtendedStyle |=
           FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign;
@@ -164,7 +165,7 @@
       break;
   }
 
-  switch (paraData.GetVerticalAlign()) {
+  switch (para->GetVerticalAlign()) {
     case XFA_AttributeEnum::Middle:
       dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter;
       break;
diff --git a/xfa/fxfa/cxfa_ffdatetimeedit.cpp b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
index ddc1450..969d69c 100644
--- a/xfa/fxfa/cxfa_ffdatetimeedit.cpp
+++ b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
@@ -15,6 +15,7 @@
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/parser/cxfa_localevalue.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 #include "xfa/fxfa/parser/cxfa_value.h"
 #include "xfa/fxfa/parser/xfa_utils.h"
 
@@ -99,12 +100,12 @@
 }
 
 uint32_t CXFA_FFDateTimeEdit::GetAlignment() {
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (!paraData.HasValidNode())
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (!para)
     return 0;
 
   uint32_t dwExtendedStyle = 0;
-  switch (paraData.GetHorizontalAlign()) {
+  switch (para->GetHorizontalAlign()) {
     case XFA_AttributeEnum::Center:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHCenter;
       break;
@@ -122,7 +123,7 @@
       break;
   }
 
-  switch (paraData.GetVerticalAlign()) {
+  switch (para->GetVerticalAlign()) {
     case XFA_AttributeEnum::Middle:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVCenter;
       break;
diff --git a/xfa/fxfa/cxfa_ffimage.cpp b/xfa/fxfa/cxfa_ffimage.cpp
index 159c664..864d34e 100644
--- a/xfa/fxfa/cxfa_ffimage.cpp
+++ b/xfa/fxfa/cxfa_ffimage.cpp
@@ -11,6 +11,7 @@
 #include "xfa/fxfa/cxfa_ffdraw.h"
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 #include "xfa/fxfa/parser/cxfa_value.h"
 
 CXFA_FFImage::CXFA_FFImage(CXFA_WidgetAcc* pDataAcc) : CXFA_FFDraw(pDataAcc) {}
@@ -56,10 +57,10 @@
 
   XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left;
   XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top;
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (paraData.HasValidNode()) {
-    iHorzAlign = paraData.GetHorizontalAlign();
-    iVertAlign = paraData.GetVerticalAlign();
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (para) {
+    iHorzAlign = para->GetHorizontalAlign();
+    iVertAlign = para->GetVerticalAlign();
   }
 
   int32_t iImageXDpi = 0;
diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp
index 6d63514..3705241 100644
--- a/xfa/fxfa/cxfa_ffimageedit.cpp
+++ b/xfa/fxfa/cxfa_ffimageedit.cpp
@@ -18,6 +18,7 @@
 #include "xfa/fxfa/cxfa_fffield.h"
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 #include "xfa/fxfa/parser/cxfa_value.h"
 
 CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_WidgetAcc* pDataAcc)
@@ -71,10 +72,10 @@
   CFX_RectF rtImage = m_pNormalWidget->GetWidgetRect();
   XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left;
   XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top;
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (paraData.HasValidNode()) {
-    iHorzAlign = paraData.GetHorizontalAlign();
-    iVertAlign = paraData.GetVerticalAlign();
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (para) {
+    iHorzAlign = para->GetHorizontalAlign();
+    iVertAlign = para->GetVerticalAlign();
   }
 
   XFA_AttributeEnum iAspect = XFA_AttributeEnum::Fit;
diff --git a/xfa/fxfa/cxfa_fflistbox.cpp b/xfa/fxfa/cxfa_fflistbox.cpp
index ce9d26d..c8cb403 100644
--- a/xfa/fxfa/cxfa_fflistbox.cpp
+++ b/xfa/fxfa/cxfa_fflistbox.cpp
@@ -14,6 +14,7 @@
 #include "xfa/fwl/cfwl_notedriver.h"
 #include "xfa/fwl/cfwl_widget.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 
 namespace {
 
@@ -104,12 +105,12 @@
 }
 
 uint32_t CXFA_FFListBox::GetAlignment() {
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (!paraData.HasValidNode())
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (!para)
     return 0;
 
   uint32_t dwExtendedStyle = 0;
-  switch (paraData.GetHorizontalAlign()) {
+  switch (para->GetHorizontalAlign()) {
     case XFA_AttributeEnum::Center:
       dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign;
       break;
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index ea9e4db..bf25b8b 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -20,6 +20,7 @@
 #include "xfa/fxfa/cxfa_ffapp.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 
 namespace {
 
@@ -214,12 +215,12 @@
 }
 
 uint32_t CXFA_FFTextEdit::GetAlignment() {
-  CXFA_ParaData paraData = m_pDataAcc->GetParaData();
-  if (!paraData.HasValidNode())
+  CXFA_Para* para = m_pDataAcc->GetPara();
+  if (!para)
     return 0;
 
   uint32_t dwExtendedStyle = 0;
-  switch (paraData.GetHorizontalAlign()) {
+  switch (para->GetHorizontalAlign()) {
     case XFA_AttributeEnum::Center:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_HCenter;
       break;
@@ -237,7 +238,7 @@
       break;
   }
 
-  switch (paraData.GetVerticalAlign()) {
+  switch (para->GetVerticalAlign()) {
     case XFA_AttributeEnum::Middle:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_VCenter;
       break;
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index 88aeef6..8330ed4 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -24,6 +24,7 @@
 #include "xfa/fwl/cfwl_themetext.h"
 #include "xfa/fxfa/cxfa_ffapp.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 #include "xfa/fxgraphics/cxfa_gecolor.h"
 
 namespace {
@@ -154,11 +155,11 @@
   CXFA_LayoutItem* pItem = pWidget;
   CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
   rect = pWidgetAcc->GetUIMargin();
-  CXFA_ParaData paraData = pWidgetAcc->GetParaData();
-  if (paraData.HasValidNode()) {
-    rect.left += paraData.GetMarginLeft();
+  CXFA_Para* para = pWidgetAcc->GetPara();
+  if (para) {
+    rect.left += para->GetMarginLeft();
     if (pWidgetAcc->IsMultiLine())
-      rect.width += paraData.GetMarginRight();
+      rect.width += para->GetMarginRight();
   }
   if (!pItem->GetPrev()) {
     if (pItem->GetNext())
@@ -213,10 +214,10 @@
   CFX_SizeF sizeAboveBelow;
   if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
     CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
-    CXFA_ParaData paraData = pWidgetAcc->GetParaData();
-    if (paraData.HasValidNode()) {
-      sizeAboveBelow.width = paraData.GetSpaceAbove();
-      sizeAboveBelow.height = paraData.GetSpaceBelow();
+    CXFA_Para* para = pWidgetAcc->GetPara();
+    if (para) {
+      sizeAboveBelow.width = para->GetSpaceAbove();
+      sizeAboveBelow.height = para->GetSpaceBelow();
     }
   }
   return sizeAboveBelow;
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 85ec369..133f564 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -29,7 +29,7 @@
 #include "xfa/fxfa/cxfa_textuserdata.h"
 #include "xfa/fxfa/parser/cxfa_fontdata.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
-#include "xfa/fxfa/parser/cxfa_paradata.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 
 #define XFA_LOADERCNTXTFLG_FILTERSPACE 0x001
 
@@ -102,12 +102,12 @@
 }
 
 void CXFA_TextLayout::InitBreak(float fLineWidth) {
-  CXFA_ParaData paraData = m_pTextProvider->GetParaData();
+  CXFA_Para* para = m_pTextProvider->GetPara();
   float fStart = 0;
   float fStartPos = 0;
-  if (paraData.HasValidNode()) {
+  if (para) {
     CFX_RTFLineAlignment iAlign = CFX_RTFLineAlignment::Left;
-    switch (paraData.GetHorizontalAlign()) {
+    switch (para->GetHorizontalAlign()) {
       case XFA_AttributeEnum::Center:
         iAlign = CFX_RTFLineAlignment::Center;
         break;
@@ -129,18 +129,18 @@
     }
     m_pBreak->SetAlignment(iAlign);
 
-    fStart = paraData.GetMarginLeft();
+    fStart = para->GetMarginLeft();
     if (m_pTextProvider->IsCheckButtonAndAutoWidth()) {
       if (iAlign != CFX_RTFLineAlignment::Left)
-        fLineWidth -= paraData.GetMarginRight();
+        fLineWidth -= para->GetMarginRight();
     } else {
-      fLineWidth -= paraData.GetMarginRight();
+      fLineWidth -= para->GetMarginRight();
     }
     if (fLineWidth < 0)
       fLineWidth = fStart;
 
     fStartPos = fStart;
-    float fIndent = paraData.GetTextIndent();
+    float fIndent = para->GetTextIndent();
     if (fIndent > 0)
       fStartPos += fIndent;
   }
@@ -651,14 +651,14 @@
                                bool bSavePieces) {
   InitBreak(textWidth);
 
-  CXFA_ParaData paraData = m_pTextProvider->GetParaData();
+  CXFA_Para* para = m_pTextProvider->GetPara();
   float fSpaceAbove = 0;
-  if (paraData.HasValidNode()) {
-    fSpaceAbove = paraData.GetSpaceAbove();
+  if (para) {
+    fSpaceAbove = para->GetSpaceAbove();
     if (fSpaceAbove < 0.1f)
       fSpaceAbove = 0;
 
-    switch (paraData.GetVerticalAlign()) {
+    switch (para->GetVerticalAlign()) {
       case XFA_AttributeEnum::Top:
       case XFA_AttributeEnum::Middle:
       case XFA_AttributeEnum::Bottom: {
@@ -1099,14 +1099,14 @@
   if (dwStatus == CFX_BreakType::Paragraph) {
     m_pBreak->Reset();
     if (!pStyle && bEndBreak) {
-      CXFA_ParaData paraData = m_pTextProvider->GetParaData();
-      if (paraData.HasValidNode()) {
-        float fStartPos = paraData.GetMarginLeft();
-        float fIndent = paraData.GetTextIndent();
+      CXFA_Para* para = m_pTextProvider->GetPara();
+      if (para) {
+        float fStartPos = para->GetMarginLeft();
+        float fIndent = para->GetTextIndent();
         if (fIndent > 0)
           fStartPos += fIndent;
 
-        float fSpaceBelow = paraData.GetSpaceBelow();
+        float fSpaceBelow = para->GetSpaceBelow();
         if (fSpaceBelow < 0.1f)
           fSpaceBelow = 0;
 
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index 9260ab0..ecee36a 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -26,6 +26,7 @@
 #include "xfa/fxfa/cxfa_textprovider.h"
 #include "xfa/fxfa/cxfa_texttabstopscontext.h"
 #include "xfa/fxfa/parser/cxfa_measurement.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 
 namespace {
 
@@ -91,18 +92,18 @@
 
 RetainPtr<CFX_CSSComputedStyle> CXFA_TextParser::CreateRootStyle(
     CXFA_TextProvider* pTextProvider) {
-  CXFA_ParaData paraData = pTextProvider->GetParaData();
+  CXFA_Para* para = pTextProvider->GetPara();
   auto pStyle = m_pSelector->CreateComputedStyle(nullptr);
   float fLineHeight = 0;
   float fFontSize = 10;
 
-  if (paraData.HasValidNode()) {
-    fLineHeight = paraData.GetLineHeight();
+  if (para) {
+    fLineHeight = para->GetLineHeight();
     CFX_CSSLength indent;
-    indent.Set(CFX_CSSLengthUnit::Point, paraData.GetTextIndent());
+    indent.Set(CFX_CSSLengthUnit::Point, para->GetTextIndent());
     pStyle->SetTextIndent(indent);
     CFX_CSSTextAlign hAlign = CFX_CSSTextAlign::Left;
-    switch (paraData.GetHorizontalAlign()) {
+    switch (para->GetHorizontalAlign()) {
       case XFA_AttributeEnum::Center:
         hAlign = CFX_CSSTextAlign::Center;
         break;
@@ -124,12 +125,10 @@
     }
     pStyle->SetTextAlign(hAlign);
     CFX_CSSRect rtMarginWidth;
-    rtMarginWidth.left.Set(CFX_CSSLengthUnit::Point, paraData.GetMarginLeft());
-    rtMarginWidth.top.Set(CFX_CSSLengthUnit::Point, paraData.GetSpaceAbove());
-    rtMarginWidth.right.Set(CFX_CSSLengthUnit::Point,
-                            paraData.GetMarginRight());
-    rtMarginWidth.bottom.Set(CFX_CSSLengthUnit::Point,
-                             paraData.GetSpaceBelow());
+    rtMarginWidth.left.Set(CFX_CSSLengthUnit::Point, para->GetMarginLeft());
+    rtMarginWidth.top.Set(CFX_CSSLengthUnit::Point, para->GetSpaceAbove());
+    rtMarginWidth.right.Set(CFX_CSSLengthUnit::Point, para->GetMarginRight());
+    rtMarginWidth.bottom.Set(CFX_CSSLengthUnit::Point, para->GetSpaceBelow());
     pStyle->SetMarginWidth(rtMarginWidth);
   }
 
@@ -299,9 +298,8 @@
 
 XFA_AttributeEnum CXFA_TextParser::GetVAlign(
     CXFA_TextProvider* pTextProvider) const {
-  CXFA_ParaData paraData = pTextProvider->GetParaData();
-  return paraData.HasValidNode() ? paraData.GetVerticalAlign()
-                                 : XFA_AttributeEnum::Top;
+  CXFA_Para* para = pTextProvider->GetPara();
+  return para ? para->GetVerticalAlign() : XFA_AttributeEnum::Top;
 }
 
 float CXFA_TextParser::GetTabInterval(CFX_CSSComputedStyle* pStyle) const {
@@ -483,9 +481,9 @@
   if (pStyle) {
     fLineHeight = pStyle->GetLineHeight();
   } else {
-    CXFA_ParaData paraData = pTextProvider->GetParaData();
-    if (paraData.HasValidNode())
-      fLineHeight = paraData.GetLineHeight();
+    CXFA_Para* para = pTextProvider->GetPara();
+    if (para)
+      fLineHeight = para->GetLineHeight();
   }
 
   if (bFirst) {
diff --git a/xfa/fxfa/cxfa_textprovider.cpp b/xfa/fxfa/cxfa_textprovider.cpp
index 4795ab8..461fa5d 100644
--- a/xfa/fxfa/cxfa_textprovider.cpp
+++ b/xfa/fxfa/cxfa_textprovider.cpp
@@ -117,13 +117,13 @@
   return nullptr;
 }
 
-CXFA_ParaData CXFA_TextProvider::GetParaData() {
+CXFA_Para* CXFA_TextProvider::GetPara() {
   if (m_eType == XFA_TEXTPROVIDERTYPE_Text)
-    return m_pWidgetAcc->GetParaData();
+    return m_pWidgetAcc->GetPara();
 
   CXFA_Caption* pNode = m_pWidgetAcc->GetNode()->GetChild<CXFA_Caption>(
       0, XFA_Element::Caption, false);
-  return CXFA_ParaData(pNode->GetChild<CXFA_Para>(0, XFA_Element::Para, false));
+  return pNode->GetChild<CXFA_Para>(0, XFA_Element::Para, false);
 }
 
 CXFA_FontData CXFA_TextProvider::GetFontData() {
diff --git a/xfa/fxfa/cxfa_textprovider.h b/xfa/fxfa/cxfa_textprovider.h
index df4de8b..ae51fc3 100644
--- a/xfa/fxfa/cxfa_textprovider.h
+++ b/xfa/fxfa/cxfa_textprovider.h
@@ -11,7 +11,6 @@
 #include "xfa/fxfa/cxfa_textlayout.h"
 #include "xfa/fxfa/cxfa_widgetacc.h"
 #include "xfa/fxfa/parser/cxfa_fontdata.h"
-#include "xfa/fxfa/parser/cxfa_paradata.h"
 
 class CXFA_FFDoc;
 class CXFA_Node;
@@ -33,7 +32,7 @@
   ~CXFA_TextProvider() {}
 
   CXFA_Node* GetTextNode(bool& bRichText);
-  CXFA_ParaData GetParaData();
+  CXFA_Para* GetPara();
   CXFA_FontData GetFontData();
   bool IsCheckButtonAndAutoWidth();
   CXFA_FFDoc* GetDocNode() { return m_pWidgetAcc->GetDoc(); }
diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp
index 76b4f46..63f59dc 100644
--- a/xfa/fxfa/cxfa_widgetacc.cpp
+++ b/xfa/fxfa/cxfa_widgetacc.cpp
@@ -25,6 +25,7 @@
 #include "xfa/fxfa/parser/cxfa_layoutprocessor.h"
 #include "xfa/fxfa/parser/cxfa_localevalue.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
+#include "xfa/fxfa/parser/cxfa_para.h"
 #include "xfa/fxfa/parser/cxfa_script.h"
 #include "xfa/fxfa/parser/cxfa_validate.h"
 #include "xfa/fxfa/parser/cxfa_value.h"
@@ -772,9 +773,9 @@
     size.height += marginData.GetTopInset() + marginData.GetBottomInset();
   }
 
-  CXFA_ParaData paraData = GetParaData();
-  if (paraData.HasValidNode())
-    size.width += paraData.GetMarginLeft() + paraData.GetTextIndent();
+  CXFA_Para* para = GetPara();
+  if (para)
+    size.width += para->GetMarginLeft() + para->GetTextIndent();
 
   pdfium::Optional<float> width = TryWidth();
   if (width) {
@@ -1231,12 +1232,12 @@
   if (fHeight > 0.1f && iBlockIndex == 0) {
     fStartOffset = fTopInset;
     fHeight -= (fTopInset + fBottomInset);
-    CXFA_ParaData paraData = GetParaData();
-    if (paraData.HasValidNode()) {
-      fSpaceAbove = paraData.GetSpaceAbove();
-      float fSpaceBelow = paraData.GetSpaceBelow();
+    CXFA_Para* para = GetPara();
+    if (para) {
+      fSpaceAbove = para->GetSpaceAbove();
+      float fSpaceBelow = para->GetSpaceBelow();
       fHeight -= (fSpaceAbove + fSpaceBelow);
-      switch (paraData.GetVerticalAlign()) {
+      switch (para->GetVerticalAlign()) {
         case XFA_AttributeEnum::Top:
           fStartOffset += fSpaceAbove;
           break;
@@ -1503,9 +1504,9 @@
 
 float CXFA_WidgetAcc::GetLineHeight() {
   float fLineHeight = 0;
-  CXFA_ParaData paraData = GetParaData();
-  if (paraData.HasValidNode())
-    fLineHeight = paraData.GetLineHeight();
+  CXFA_Para* para = GetPara();
+  if (para)
+    fLineHeight = para->GetLineHeight();
   if (fLineHeight < 1)
     fLineHeight = GetFontSize() * 1.2f;
   return fLineHeight;
diff --git a/xfa/fxfa/parser/cxfa_para.cpp b/xfa/fxfa/parser/cxfa_para.cpp
index fa91eb6..ad7190d 100644
--- a/xfa/fxfa/parser/cxfa_para.cpp
+++ b/xfa/fxfa/parser/cxfa_para.cpp
@@ -8,6 +8,7 @@
 
 #include "fxjs/xfa/cjx_para.h"
 #include "third_party/base/ptr_util.h"
+#include "xfa/fxfa/parser/cxfa_measurement.h"
 
 namespace {
 
@@ -52,3 +53,41 @@
                 pdfium::MakeUnique<CJX_Para>(this)) {}
 
 CXFA_Para::~CXFA_Para() {}
+
+XFA_AttributeEnum CXFA_Para::GetHorizontalAlign() {
+  return JSObject()
+      ->TryEnum(XFA_Attribute::HAlign, true)
+      .value_or(XFA_AttributeEnum::Left);
+}
+
+XFA_AttributeEnum CXFA_Para::GetVerticalAlign() {
+  return JSObject()
+      ->TryEnum(XFA_Attribute::VAlign, true)
+      .value_or(XFA_AttributeEnum::Top);
+}
+
+float CXFA_Para::GetLineHeight() {
+  return JSObject()->GetMeasure(XFA_Attribute::LineHeight).ToUnit(XFA_Unit::Pt);
+}
+
+float CXFA_Para::GetMarginLeft() {
+  return JSObject()->GetMeasure(XFA_Attribute::MarginLeft).ToUnit(XFA_Unit::Pt);
+}
+
+float CXFA_Para::GetMarginRight() {
+  return JSObject()
+      ->GetMeasure(XFA_Attribute::MarginRight)
+      .ToUnit(XFA_Unit::Pt);
+}
+
+float CXFA_Para::GetSpaceAbove() {
+  return JSObject()->GetMeasure(XFA_Attribute::SpaceAbove).ToUnit(XFA_Unit::Pt);
+}
+
+float CXFA_Para::GetSpaceBelow() {
+  return JSObject()->GetMeasure(XFA_Attribute::SpaceBelow).ToUnit(XFA_Unit::Pt);
+}
+
+float CXFA_Para::GetTextIndent() {
+  return JSObject()->GetMeasure(XFA_Attribute::TextIndent).ToUnit(XFA_Unit::Pt);
+}
diff --git a/xfa/fxfa/parser/cxfa_para.h b/xfa/fxfa/parser/cxfa_para.h
index 47c4d85..afb48ce 100644
--- a/xfa/fxfa/parser/cxfa_para.h
+++ b/xfa/fxfa/parser/cxfa_para.h
@@ -13,6 +13,15 @@
  public:
   CXFA_Para(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Para() override;
+
+  XFA_AttributeEnum GetHorizontalAlign();
+  XFA_AttributeEnum GetVerticalAlign();
+  float GetLineHeight();
+  float GetMarginLeft();
+  float GetMarginRight();
+  float GetSpaceAbove();
+  float GetSpaceBelow();
+  float GetTextIndent();
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_PARA_H_
diff --git a/xfa/fxfa/parser/cxfa_paradata.cpp b/xfa/fxfa/parser/cxfa_paradata.cpp
deleted file mode 100644
index 7dfd924..0000000
--- a/xfa/fxfa/parser/cxfa_paradata.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2016 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_paradata.h"
-
-#include "xfa/fxfa/parser/cxfa_measurement.h"
-#include "xfa/fxfa/parser/cxfa_node.h"
-
-CXFA_ParaData::CXFA_ParaData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
-
-XFA_AttributeEnum CXFA_ParaData::GetHorizontalAlign() const {
-  return m_pNode->JSObject()
-      ->TryEnum(XFA_Attribute::HAlign, true)
-      .value_or(XFA_AttributeEnum::Left);
-}
-
-XFA_AttributeEnum CXFA_ParaData::GetVerticalAlign() const {
-  return m_pNode->JSObject()
-      ->TryEnum(XFA_Attribute::VAlign, true)
-      .value_or(XFA_AttributeEnum::Top);
-}
-
-float CXFA_ParaData::GetLineHeight() const {
-  return m_pNode->JSObject()
-      ->GetMeasure(XFA_Attribute::LineHeight)
-      .ToUnit(XFA_Unit::Pt);
-}
-
-float CXFA_ParaData::GetMarginLeft() const {
-  return m_pNode->JSObject()
-      ->GetMeasure(XFA_Attribute::MarginLeft)
-      .ToUnit(XFA_Unit::Pt);
-}
-
-float CXFA_ParaData::GetMarginRight() const {
-  return m_pNode->JSObject()
-      ->GetMeasure(XFA_Attribute::MarginRight)
-      .ToUnit(XFA_Unit::Pt);
-}
-
-float CXFA_ParaData::GetSpaceAbove() const {
-  return m_pNode->JSObject()
-      ->GetMeasure(XFA_Attribute::SpaceAbove)
-      .ToUnit(XFA_Unit::Pt);
-}
-
-float CXFA_ParaData::GetSpaceBelow() const {
-  return m_pNode->JSObject()
-      ->GetMeasure(XFA_Attribute::SpaceBelow)
-      .ToUnit(XFA_Unit::Pt);
-}
-
-float CXFA_ParaData::GetTextIndent() const {
-  return m_pNode->JSObject()
-      ->GetMeasure(XFA_Attribute::TextIndent)
-      .ToUnit(XFA_Unit::Pt);
-}
diff --git a/xfa/fxfa/parser/cxfa_paradata.h b/xfa/fxfa/parser/cxfa_paradata.h
deleted file mode 100644
index f5859f3..0000000
--- a/xfa/fxfa/parser/cxfa_paradata.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2016 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_PARSER_CXFA_PARADATA_H_
-#define XFA_FXFA_PARSER_CXFA_PARADATA_H_
-
-#include "core/fxcrt/fx_system.h"
-#include "xfa/fxfa/parser/cxfa_datadata.h"
-
-class CXFA_Node;
-
-class CXFA_ParaData : public CXFA_DataData {
- public:
-  explicit CXFA_ParaData(CXFA_Node* pNode);
-
-  XFA_AttributeEnum GetHorizontalAlign() const;
-  XFA_AttributeEnum GetVerticalAlign() const;
-  float GetLineHeight() const;
-  float GetMarginLeft() const;
-  float GetMarginRight() const;
-  float GetSpaceAbove() const;
-  float GetSpaceBelow() const;
-  float GetTextIndent() const;
-};
-
-#endif  // XFA_FXFA_PARSER_CXFA_PARADATA_H_
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index fd722ad..6e68ee3 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -280,9 +280,9 @@
       0, XFA_Element::Margin, false));
 }
 
-CXFA_ParaData CXFA_WidgetData::GetParaData() {
-  return CXFA_ParaData(
-      m_pNode->JSObject()->GetProperty<CXFA_Para>(0, XFA_Element::Para, false));
+CXFA_Para* CXFA_WidgetData::GetPara() {
+  return m_pNode->JSObject()->GetProperty<CXFA_Para>(0, XFA_Element::Para,
+                                                     false);
 }
 
 std::vector<CXFA_Node*> CXFA_WidgetData::GetEventList() {
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.h b/xfa/fxfa/parser/cxfa_widgetdata.h
index 21e4e84..2873ff9 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.h
+++ b/xfa/fxfa/parser/cxfa_widgetdata.h
@@ -21,7 +21,6 @@
 #include "xfa/fxfa/parser/cxfa_datadata.h"
 #include "xfa/fxfa/parser/cxfa_fontdata.h"
 #include "xfa/fxfa/parser/cxfa_margindata.h"
-#include "xfa/fxfa/parser/cxfa_paradata.h"
 
 enum XFA_CHECKSTATE {
   XFA_CHECKSTATE_On = 0,
@@ -37,6 +36,7 @@
 };
 
 class CXFA_Node;
+class CXFA_Para;
 class CXFA_Validate;
 class IFX_Locale;
 
@@ -62,7 +62,7 @@
   CXFA_CaptionData GetCaptionData();
   CXFA_FontData GetFontData(bool bModified);
   CXFA_MarginData GetMarginData();
-  CXFA_ParaData GetParaData();
+  CXFA_Para* GetPara();
   CXFA_Value* GetDefaultValue();
   CXFA_Value* GetFormValue();
   CXFA_CalculateData GetCalculateData();