int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Excalmatory( CXFA_ResolveNodesData& rnd) { if (rnd.m_nLevel > 0) { return 0; } CXFA_Node* datasets = ToNode(rnd.m_pSC->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets)); if (!datasets) { return 0; } CXFA_ResolveNodesData rndFind; rndFind.m_pSC = rnd.m_pSC; rndFind.m_CurNode = datasets; rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); rndFind.m_uHashName = FX_HashCode_String_GetW(rndFind.m_wsName, rndFind.m_wsName.GetLength()); rndFind.m_nLevel = rnd.m_nLevel + 1; rndFind.m_dwStyles = XFA_RESOLVENODE_Children; rndFind.m_wsCondition = rnd.m_wsCondition; XFA_ResolveNodes(rndFind); if (rndFind.m_Nodes.GetSize() > 0) { rnd.m_Nodes.Append(rndFind.m_Nodes); rndFind.m_Nodes.RemoveAll(); } return rnd.m_Nodes.GetSize(); }
int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( CXFA_ResolveNodesData& rnd) { CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); CFX_WideString wsCondition = rnd.m_wsCondition; CXFA_Node* curNode = ToNode(rnd.m_CurNode); if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName)) { return 1; } CXFA_ResolveNodesData rndFind; rndFind.m_pSC = rnd.m_pSC; rndFind.m_nLevel = rnd.m_nLevel + 1; rndFind.m_dwStyles = rnd.m_dwStyles; rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; rndFind.m_wsName = wsName; rndFind.m_uHashName = FX_HashCode_String_GetW(rndFind.m_wsName, rndFind.m_wsName.GetLength()); rndFind.m_wsCondition = wsCondition; rndFind.m_CurNode = curNode; XFA_ResolveNodes_Normal(rndFind); if (rndFind.m_Nodes.GetSize() > 0) { if (wsCondition.GetLength() == 0 && rndFind.m_Nodes.Find(curNode) >= 0) { rnd.m_Nodes.Add(curNode); } else { rnd.m_Nodes.Append(rndFind.m_Nodes); rndFind.m_Nodes.RemoveAll(); } } return rnd.m_Nodes.GetSize(); }
int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Dollar( CXFA_ResolveNodesData& rnd) { CXFA_ObjArray& nodes = rnd.m_Nodes; CFX_WideString wsName = rnd.m_wsName; CFX_WideString wsCondition = rnd.m_wsCondition; int32_t iNameLen = wsName.GetLength(); if (iNameLen == 1) { nodes.Add(rnd.m_CurNode); return 1; } if (rnd.m_nLevel > 0) { return -1; } FX_DWORD dwNameHash = FX_HashCode_String_GetW((const FX_WCHAR*)wsName + 1, iNameLen - 1); if (dwNameHash == XFA_HASHCODE_Xfa) { nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); } else { CXFA_Object* pObjNode = rnd.m_pSC->GetDocument()->GetXFAObject(dwNameHash); if (pObjNode) { rnd.m_Nodes.Add(pObjNode); } } if (rnd.m_Nodes.GetSize() > 0) { XFA_ResolveNode_FilterCondition(rnd, wsCondition); } return rnd.m_Nodes.GetSize(); }
CXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetOneChild( CXFA_Node* parent, const FX_WCHAR* pwsName, FX_BOOL bIsClassName) { if (parent == NULL) { return NULL; } CXFA_NodeArray siblings; uint32_t uNameHash = FX_HashCode_String_GetW(pwsName, FXSYS_wcslen(pwsName)); XFA_NodeAcc_TraverseAnySiblings(parent, uNameHash, &siblings, bIsClassName); if (siblings.GetSize() == 0) { return NULL; } return siblings[0]; }
void XFA_GetPlainTextFromRichText(IFDE_XMLNode* pXMLNode, CFX_WideString& wsPlainText) { if (pXMLNode == NULL) { return; } switch (pXMLNode->GetType()) { case FDE_XMLNODE_Element: { IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; CFX_WideString wsTag; pXMLElement->GetLocalTagName(wsTag); uint32_t uTag = FX_HashCode_String_GetW(wsTag, wsTag.GetLength(), TRUE); if (uTag == 0x0001f714) { wsPlainText += L"\n"; } else if (uTag == 0x00000070) { if (!wsPlainText.IsEmpty()) { wsPlainText += L"\n"; } } else if (uTag == 0xa48ac63) { if (!wsPlainText.IsEmpty() && wsPlainText[wsPlainText.GetLength() - 1] != '\n') { wsPlainText += L"\n"; } } } break; case FDE_XMLNODE_Text: { CFX_WideString wsContent; ((IFDE_XMLText*)pXMLNode)->GetText(wsContent); wsPlainText += wsContent; } break; case FDE_XMLNODE_CharData: { CFX_WideString wsCharData; ((IFDE_XMLCharData*)pXMLNode)->GetCharData(wsCharData); wsPlainText += wsCharData; } break; default: break; } for (IFDE_XMLNode* pChildXML = pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); pChildXML; pChildXML = pChildXML->GetNodeItem(IFDE_XMLNode::NextSibling)) { XFA_GetPlainTextFromRichText(pChildXML, wsPlainText); } }
FDE_LPCCSSCOLORTABLE FDE_GetCSSColorByName(const FX_WCHAR* pszName, int32_t iLength) { FXSYS_assert(pszName != NULL && iLength > 0); FX_DWORD dwHash = FX_HashCode_String_GetW(pszName, iLength, TRUE); int32_t iEnd = sizeof(g_FDE_CSSColors) / sizeof(FDE_CSSCOLORTABLE) - 1; int32_t iMid, iStart = 0; FX_DWORD dwMid; do { iMid = (iStart + iEnd) / 2; dwMid = g_FDE_CSSColors[iMid].dwHash; if (dwHash == dwMid) { return g_FDE_CSSColors + iMid; } else if (dwHash > dwMid) { iStart = iMid + 1; } else { iEnd = iMid - 1; } } while (iStart <= iEnd); return NULL; }
FDE_LPCCSSPROPERTYTABLE FDE_GetCSSPropertyByName(const FX_WCHAR* pszName, int32_t iLength) { FXSYS_assert(pszName != NULL && iLength > 0); FX_DWORD dwHash = FX_HashCode_String_GetW(pszName, iLength, TRUE); int32_t iEnd = FDE_CSSPROPERTY_MAX - 1; int32_t iMid, iStart = 0; FX_DWORD dwMid; do { iMid = (iStart + iEnd) / 2; dwMid = g_FDE_CSSProperties[iMid].dwHash; if (dwHash == dwMid) { return g_FDE_CSSProperties + iMid; } else if (dwHash > dwMid) { iStart = iMid + 1; } else { iEnd = iMid - 1; } } while (iStart <= iEnd); return NULL; }
FDE_LPCCSSLENGTHUNITTABLE FDE_GetCSSLengthUnitByName(const FX_WCHAR* pszName, int32_t iLength) { FXSYS_assert(pszName != NULL && iLength > 0); FX_WORD wHash = (FX_WORD)FX_HashCode_String_GetW(pszName, iLength, TRUE); int32_t iEnd = sizeof(g_FDE_CSSLengthUnits) / sizeof(FDE_CSSLENGTHUNITTABLE) - 1; int32_t iMid, iStart = 0; FX_WORD wMid; do { iMid = (iStart + iEnd) / 2; wMid = g_FDE_CSSLengthUnits[iMid].wHash; if (wHash == wMid) { return g_FDE_CSSLengthUnits + iMid; } else if (wHash > wMid) { iStart = iMid + 1; } else { iEnd = iMid - 1; } } while (iStart <= iEnd); return NULL; }
FDE_LPCCSSMEDIATYPETABLE FDE_GetCSSMediaTypeByName(const FX_WCHAR* pszName, int32_t iLength) { FXSYS_assert(pszName != NULL && iLength > 0); FX_WORD wHash = (FX_WORD)FX_HashCode_String_GetW(pszName, iLength, TRUE); int32_t iEnd = sizeof(g_FDE_CSSMediaTypes) / sizeof(FDE_CSSMEDIATYPETABLE) - 1; int32_t iMid, iStart = 0; FX_WORD uMid; do { iMid = (iStart + iEnd) / 2; uMid = g_FDE_CSSMediaTypes[iMid].wHash; if (wHash == uMid) { return g_FDE_CSSMediaTypes + iMid; } else if (wHash > uMid) { iStart = iMid + 1; } else { iEnd = iMid - 1; } } while (iStart <= iEnd); return NULL; }
static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName( const CFX_WideStringC& wsName) { int32_t iLength = wsName.GetLength(); if (iLength == 0) { return NULL; } uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength, TRUE); int32_t iStart = 0, iEnd = g_iXFABarcodeTypeCount - 1; do { int32_t iMid = (iStart + iEnd) / 2; XFA_LPCBARCODETYPEENUMINFO pInfo = g_XFABarCodeTypeEnumData + iMid; if (uHash == pInfo->uHash) { return pInfo; } else if (uHash < pInfo->uHash) { iEnd = iMid - 1; } else { iStart = iMid + 1; } } while (iStart <= iEnd); return NULL; }
int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_GetFilter( const CFX_WideStringC& wsExpression, int32_t nStart, CXFA_ResolveNodesData& rnd) { FXSYS_assert(nStart > -1); int32_t iLength = wsExpression.GetLength(); if (nStart >= iLength) { return 0; } CFX_WideString& wsName = rnd.m_wsName; CFX_WideString& wsCondition = rnd.m_wsCondition; FX_WCHAR* pNameBuf = wsName.GetBuffer(iLength - nStart); FX_WCHAR* pConditionBuf = wsCondition.GetBuffer(iLength - nStart); int32_t nNameCount = 0; int32_t nConditionCount = 0; CFX_Int32Array stack; int32_t nType = -1; const FX_WCHAR* pSrc = wsExpression.GetPtr(); FX_WCHAR wPrev = 0, wCur; FX_BOOL bIsCondition = FALSE; while (nStart < iLength) { wCur = pSrc[nStart++]; if (wCur == '.') { if (wPrev == '\\') { pNameBuf[nNameCount - 1] = wPrev = '.'; continue; } if (nNameCount == 0) { pNameBuf[nNameCount++] = wCur; continue; } FX_WCHAR wLookahead = nStart < iLength ? pSrc[nStart] : 0; if (wLookahead != '[' && wLookahead != '(') { if (nType < 0) { break; } } } if (wCur == '[' || wCur == '(') { bIsCondition = TRUE; } else if (wCur == '.' && nStart < iLength && (pSrc[nStart] == '[' || pSrc[nStart] == '(')) { bIsCondition = TRUE; } if (bIsCondition) { pConditionBuf[nConditionCount++] = wCur; } else { pNameBuf[nNameCount++] = wCur; } FX_BOOL bRecursive = TRUE; switch (nType) { case 0: if (wCur == ']') { nType = XFA_ResolveNodes_PopStack(stack); bRecursive = FALSE; } break; case 1: if (wCur == ')') { nType = XFA_ResolveNodes_PopStack(stack); bRecursive = FALSE; } break; case 2: if (wCur == '"') { nType = XFA_ResolveNodes_PopStack(stack); bRecursive = FALSE; } break; } if (bRecursive) { switch (wCur) { case '[': stack.Add(nType); nType = 0; break; case '(': stack.Add(nType); nType = 1; break; case '"': stack.Add(nType); nType = 2; break; } } wPrev = wCur; } if (stack.GetSize() > 0) { return -1; } wsName.ReleaseBuffer(nNameCount); wsName.TrimLeft(); wsName.TrimRight(); wsCondition.ReleaseBuffer(nConditionCount); wsCondition.TrimLeft(); wsCondition.TrimRight(); rnd.m_uHashName = FX_HashCode_String_GetW(wsName, wsName.GetLength()); return nStart; }
void CXFA_FFDocView::RunBindItems() { int32_t iCount = m_bindItems.GetSize(); for (int32_t i = 0; i < iCount; i++) { if (reinterpret_cast<CXFA_Node*>(m_bindItems[i]) ->HasFlag(XFA_NODEFLAG_HasRemoved)) { continue; } CXFA_Node* pWidgetNode = reinterpret_cast<CXFA_Node*>(m_bindItems[i]) ->GetNodeItem(XFA_NODEITEM_Parent); CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pWidgetNode->GetWidgetData(); if (!pAcc) { continue; } CXFA_BindItems binditems(reinterpret_cast<CXFA_Node*>(m_bindItems[i])); IXFA_ScriptContext* pScriptContext = pWidgetNode->GetDocument()->GetScriptContext(); CFX_WideStringC wsRef; binditems.GetRef(wsRef); FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_ALL; XFA_RESOLVENODE_RS rs; pScriptContext->ResolveObjects(pWidgetNode, wsRef, rs, dwStyle); int32_t iCount = rs.nodes.GetSize(); pAcc->DeleteItem(-1); if (rs.dwFlags != XFA_RESOVENODE_RSTYPE_Nodes || iCount < 1) { continue; } CFX_WideStringC wsValueRef, wsLabelRef; binditems.GetValueRef(wsValueRef); binditems.GetLabelRef(wsLabelRef); FX_BOOL bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef; FX_BOOL bLabelUseContent = wsLabelRef.IsEmpty() || wsLabelRef == FX_WSTRC(L"$"); FX_BOOL bValueUseContent = wsValueRef.IsEmpty() || wsValueRef == FX_WSTRC(L"$"); CFX_WideString wsValue, wsLabel; FX_DWORD uValueHash = FX_HashCode_String_GetW(CFX_WideString(wsValueRef), wsValueRef.GetLength()); for (int32_t i = 0; i < iCount; i++) { CXFA_Object* refObj = rs.nodes[i]; if (!refObj->IsNode()) { continue; } CXFA_Node* refNode = refObj->AsNode(); if (bValueUseContent) { wsValue = refNode->GetContent(); } else { CXFA_Node* nodeValue = refNode->GetFirstChildByName(uValueHash); if (nodeValue == NULL) { wsValue = refNode->GetContent(); } else { wsValue = nodeValue->GetContent(); } } if (!bUseValue) { if (bLabelUseContent) { wsLabel = refNode->GetContent(); } else { CXFA_Node* nodeLabel = refNode->GetFirstChildByName(wsLabelRef); if (nodeLabel != NULL) { wsLabel = nodeLabel->GetContent(); } } } else { wsLabel = wsValue; } pAcc->InsertItem(wsLabel, wsValue); } } m_bindItems.RemoveAll(); }
unsigned JS_CalcHash(const wchar_t* main) { return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main)); }
unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) { return (unsigned)FX_HashCode_String_GetW(main, nLen); }