CXFA_Node* CXFA_TextProvider::GetTextNode(bool& bRichText) { bRichText = false; if (m_eType == XFA_TEXTPROVIDERTYPE_Text) { CXFA_Value* pValueNode = m_pNode->GetChild<CXFA_Value>(0, XFA_Element::Value, false); if (!pValueNode) return nullptr; CXFA_Node* pChildNode = pValueNode->GetFirstChild(); if (pChildNode && pChildNode->GetElementType() == XFA_Element::ExData) { Optional<WideString> contentType = pChildNode->JSObject()->TryAttribute( XFA_Attribute::ContentType, false); if (contentType.has_value() && contentType.value().EqualsASCII("text/html")) { bRichText = true; } } return pChildNode; } if (m_eType == XFA_TEXTPROVIDERTYPE_Datasets) { CXFA_Node* pBind = m_pNode->GetBindData(); CFX_XMLNode* pXMLNode = pBind->GetXMLMappingNode(); for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild; pXMLChild = pXMLChild->GetNextSibling()) { CFX_XMLElement* pElement = ToXMLElement(pXMLChild); if (pElement && XFA_RecognizeRichText(pElement)) { bRichText = true; break; } } return pBind; } if (m_eType == XFA_TEXTPROVIDERTYPE_Caption) { CXFA_Caption* pCaptionNode = m_pNode->GetChild<CXFA_Caption>(0, XFA_Element::Caption, false); if (!pCaptionNode) return nullptr; CXFA_Value* pValueNode = pCaptionNode->GetChild<CXFA_Value>(0, XFA_Element::Value, false); if (!pValueNode) return nullptr; CXFA_Node* pChildNode = pValueNode->GetFirstChild(); if (pChildNode && pChildNode->GetElementType() == XFA_Element::ExData) { Optional<WideString> contentType = pChildNode->JSObject()->TryAttribute( XFA_Attribute::ContentType, false); if (contentType.has_value() && contentType.value().EqualsASCII("text/html")) { bRichText = true; } } return pChildNode; } CXFA_Items* pItemNode = m_pNode->GetChild<CXFA_Items>(0, XFA_Element::Items, false); if (!pItemNode) return nullptr; CXFA_Node* pNode = pItemNode->GetFirstChild(); while (pNode) { WideString wsName = pNode->JSObject()->GetCData(XFA_Attribute::Name); if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover && wsName.EqualsASCII("rollover")) { return pNode; } if (m_eType == XFA_TEXTPROVIDERTYPE_Down && wsName.EqualsASCII("down")) return pNode; pNode = pNode->GetNextSibling(); } return nullptr; }