FX_BOOL CXFA_FFConfigAcc::GetFontInfo(int32_t index,
                                      CFX_WideString& wsFontFamily,
                                      CFX_WideString& wsPsName,
                                      FX_BOOL bBold,
                                      FX_BOOL bItalic) {
  if (index < 0 || index >= CountChildren()) {
    return FALSE;
  }
  CXFA_Node* pFontNode = m_pPsMapNode->GetChild(index, XFA_ELEMENT_Font);
  if (pFontNode == NULL) {
    return FALSE;
  }
  wsFontFamily.Empty();
  wsPsName.Empty();
  bBold = FALSE;
  bItalic = FALSE;
  pFontNode->GetAttribute(XFA_ATTRIBUTE_Typeface, wsFontFamily);
  pFontNode->GetAttribute(XFA_ATTRIBUTE_PsName, wsPsName);
  CFX_WideString wsValue;
  pFontNode->GetAttribute(XFA_ATTRIBUTE_Weight, wsValue);
  wsValue.MakeLower();
  if (wsValue == FX_WSTRC(L"bold")) {
    bBold = TRUE;
  }
  pFontNode->GetAttribute(XFA_ATTRIBUTE_Posture, wsValue);
  wsValue.MakeLower();
  if (wsValue == FX_WSTRC(L"italic")) {
    bItalic = TRUE;
  }
  return wsFontFamily.GetLength() > 0;
}
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetTraverseWidget(
    CXFA_FFWidget* pWidget) {
  CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
  CXFA_Node* pTraversal = pAcc->GetNode()->GetChild(0, XFA_Element::Traversal);
  if (pTraversal) {
    CXFA_Node* pTraverse = pTraversal->GetChild(0, XFA_Element::Traverse);
    if (pTraverse) {
      CFX_WideString wsTraverseWidgetName;
      if (pTraverse->GetAttribute(XFA_ATTRIBUTE_Ref, wsTraverseWidgetName)) {
        return FindWidgetByName(wsTraverseWidgetName, pWidget);
      }
    }
  }
  return nullptr;
}