Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1393 lines
48 KiB

Attribute VB_Name = "Main"
Option Explicit
Private Const FIRST_C As Long = 0
Private Const SECOND_C As Long = 1
Private Const SEP_C As String = "<SEPARATOR>"
Private Const TAXONOMY_HHT_C As String = "Taxonomy.hht"
Private Const STOP_SIGNS_HHT_C As String = "StopSigns.hht"
Private Const STOP_WORDS_HHT_C As String = "StopWords.hht"
Private Const SYN_TABLE_HHT_C As String = "SynTable.hht"
Private Const SCOPE_DEFINITION_HHT_C As String = "ScopeDefinition.hht"
Private Const NO_LOC_HHT_C As String = "NoLoc.hht"
Private Const OPERATORS_HHT_C As String = "OperatorEntries.hht"
Private Const ELEM_METADATA_C As String = "METADATA"
Private Const ELEM_STOPWORD_ENTRIES_C As String = "STOPWORD_ENTRIES"
Private Const ELEM_STOPWORD_C As String = "STOPWORD"
Private Const ELEM_SCOPE_DEFINITION_C As String = "SCOPE_DEFINITION"
Private Const ELEM_SCOPE_C As String = "SCOPE"
Private Const ELEM_OPERATOR_ENTRIES_C As String = "OPERATOR_ENTRIES"
Private Const ELEM_OPERATOR_C As String = "OPERATOR"
Private Const ELEM_STOPSIGN_ENTRIES_C As String = "STOPSIGN_ENTRIES"
Private Const ELEM_STOPSIGN_C As String = "STOPSIGN"
Private Const ELEM_FTS_C As String = "FTS"
Private Const ELEM_INDEX_C As String = "INDEX"
Private Const ELEM_HELPIMAGE_C As String = "HELPIMAGE"
Private Const ELEM_HELPFILE_C As String = "HELPFILE"
Private Const ELEM_SYNTABLE_C As String = "SYNTABLE"
Private Const ELEM_SYNSET_C As String = "SYNSET"
Private Const ELEM_SYNONYM_C As String = "SYNONYM"
Private Const ELEM_KEYWORD_C As String = "KEYWORD"
Private Const ELEM_TAXONOMY_ENTRIES_C As String = "TAXONOMY_ENTRIES"
Private Const ELEM_TAXONOMY_ENTRY_C As String = "TAXONOMY_ENTRY"
Private Const ELEM_HHT_C As String = "HHT"
Private Const ATTR_STOPWORD_C As String = "STOPWORD"
Private Const ATTR_ACTION_C As String = "ACTION"
Private Const ATTR_ID_C As String = "ID"
Private Const ATTR_DISPLAYNAME_C As String = "DISPLAYNAME"
Private Const ATTR_OPERATION_C As String = "OPERATION"
Private Const ATTR_OPERATOR_C As String = "OPERATOR"
Private Const ATTR_CONTEXT_C As String = "CONTEXT"
Private Const ATTR_STOPSIGN_C As String = "STOPSIGN"
Private Const ATTR_CHM_C As String = "CHM"
Private Const ATTR_CHQ_C As String = "CHQ"
Private Const ATTR_HHK_C As String = "HHK"
Private Const ATTR_SCOPE_C As String = "SCOPE"
Private Const ATTR_CATEGORY_C As String = "CATEGORY"
Private Const ATTR_ENTRY_C As String = "ENTRY"
Private Const ATTR_URI_C As String = "URI"
Private Const ATTR_ICONURI_C As String = "ICONURI"
Private Const ATTR_TITLE_C As String = "TITLE"
Private Const ATTR_DESCRIPTION_C As String = "DESCRIPTION"
Private Const ATTR_TYPE_C As String = "TYPE"
Private Const ATTR_VISIBLE_C As String = "VISIBLE"
Private Const ATTR_SUBSITE_C As String = "SUBSITE"
Private Const ATTR_NAVIGATIONMODEL_C As String = "NAVIGATIONMODEL"
Private Const ATTR_PRIORITY_C As String = "PRIORITY"
Private Const ATTR_VALUE_C As String = "VALUE"
Private Const ATTR_FILE_C As String = "FILE"
Private Const VALUE_ADD_C As String = "ADD"
Private Const VALUE_DEL_C As String = "DEL"
Private Const VALUE_AND_C As String = "AND"
Private Const VALUE_OR_C As String = "OR"
Private Const VALUE_NOT_C As String = "NOT"
Private Const VALUE_ANYWHERE_C As String = "ANYWHERE"
Private Const VALUE_ENDOFWORD_C As String = "ENDOFWORD"
Private p_dictStopWords(1) As Scripting.Dictionary
Private p_dictHelpImage(1) As Scripting.Dictionary
Private p_dictScopes(1) As Scripting.Dictionary
Private p_dictFTS(1) As Scripting.Dictionary
Private p_dictOperators(1) As Scripting.Dictionary
Private p_dictStopSigns(1) As Scripting.Dictionary
Private p_dictIndex(1) As Scripting.Dictionary
Private p_dictSynTable(1) As Scripting.Dictionary
Private p_dictTaxonomy(1) As Scripting.Dictionary
Private p_strVersion As String
Private p_blnIgnoreKeywords As Boolean
Public Sub MainFunction( _
ByVal i_strCab1 As String, _
ByVal i_strCab2 As String, _
ByVal i_strCabOut As String, _
ByVal i_strVersion As String, _
ByVal i_blnIgnoreKeywords As Boolean _
)
On Error GoTo LError
Dim strFolder1 As String
Dim strFolder2 As String
Dim strFolderOut As String
Dim intErrorNumber As Long
Dim FSO As Scripting.FileSystemObject
Dim Folder As Scripting.Folder
Dim File As Scripting.File
p_strVersion = i_strVersion
p_blnIgnoreKeywords = i_blnIgnoreKeywords
strFolder1 = Cab2Folder(i_strCab1)
strFolder2 = Cab2Folder(i_strCab2)
Set FSO = New Scripting.FileSystemObject
strFolderOut = Environ$("TEMP") & "\__HSCCAB"
If (FSO.FolderExists(strFolderOut)) Then
FSO.DeleteFolder strFolderOut, Force:=True
End If
FSO.CreateFolder strFolderOut
p_GatherData FIRST_C, strFolder1
p_GatherData SECOND_C, strFolder2
p_CreateDeltaHHTs strFolderOut
Set Folder = FSO.GetFolder(strFolder1)
For Each File In Folder.Files
File.Copy strFolderOut & "\" & File.Name
Next
p_FixPackageDescription strFolderOut
Folder2Cab strFolderOut, i_strCabOut
LEnd:
DeleteCabFolder strFolder1
DeleteCabFolder strFolder2
DeleteCabFolder strFolderOut
Exit Sub
LError:
frmMain.Output Err.Description, LOGGING_TYPE_ERROR_E
intErrorNumber = Err.Number
DeleteCabFolder strFolder1
DeleteCabFolder strFolder2
DeleteCabFolder strFolderOut
Err.Raise intErrorNumber
End Sub
Private Sub p_GatherData( _
ByVal i_intIndex As Long, _
ByVal i_strFolder As String _
)
Dim DOMDocPkgDesc As MSXML2.DOMDocument
Dim intNumHHTs As Long
Dim intIndex As Long
Dim strFile As String
Set p_dictStopWords(i_intIndex) = New Scripting.Dictionary
p_dictStopWords(i_intIndex).CompareMode = TextCompare
Set p_dictHelpImage(i_intIndex) = New Scripting.Dictionary
p_dictHelpImage(i_intIndex).CompareMode = TextCompare
Set p_dictScopes(i_intIndex) = New Scripting.Dictionary
p_dictScopes(i_intIndex).CompareMode = TextCompare
Set p_dictFTS(i_intIndex) = New Scripting.Dictionary
p_dictFTS(i_intIndex).CompareMode = TextCompare
Set p_dictOperators(i_intIndex) = New Scripting.Dictionary
p_dictOperators(i_intIndex).CompareMode = TextCompare
Set p_dictStopSigns(i_intIndex) = New Scripting.Dictionary
p_dictStopSigns(i_intIndex).CompareMode = TextCompare
Set p_dictIndex(i_intIndex) = New Scripting.Dictionary
p_dictIndex(i_intIndex).CompareMode = TextCompare
Set p_dictSynTable(i_intIndex) = New Scripting.Dictionary
p_dictSynTable(i_intIndex).CompareMode = TextCompare
Set p_dictTaxonomy(i_intIndex) = New Scripting.Dictionary
p_dictTaxonomy(i_intIndex).CompareMode = TextCompare
Set DOMDocPkgDesc = GetPackageDescription(i_strFolder)
intNumHHTs = GetNumberOfHHTsListedInPackageDescription(DOMDocPkgDesc)
For intIndex = 1 To intNumHHTs
strFile = GetNthHHTListedInPackageDescription(DOMDocPkgDesc, intIndex)
p_ReadFile i_intIndex, i_strFolder, strFile
Next
End Sub
Private Sub p_ReadFile( _
ByVal i_intIndex As Long, _
ByVal i_strFolder As String, _
ByVal i_strFile As String _
)
Dim strLocation As String
Dim strPath As String
Dim DOMDoc As MSXML2.DOMDocument
If (i_intIndex = FIRST_C) Then
strLocation = " in first CAB"
Else
strLocation = " in second CAB"
End If
frmMain.Output "Processing " & i_strFile & strLocation & "...", LOGGING_TYPE_NORMAL_E
strPath = i_strFolder & "\" & i_strFile
Set DOMDoc = GetFileAsDomDocument(strPath)
p_ReadStopWords i_intIndex, DOMDoc
p_ReadHelpImage i_intIndex, DOMDoc
p_ReadScopes i_intIndex, DOMDoc
p_ReadFTS i_intIndex, DOMDoc
p_ReadOperators i_intIndex, DOMDoc
p_ReadStopSigns i_intIndex, DOMDoc
p_ReadIndex i_intIndex, DOMDoc
p_ReadSynTable i_intIndex, DOMDoc
p_ReadTaxonomy i_intIndex, DOMDoc
End Sub
Private Sub p_ReadStopWords( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strStopWord As String
Dim strAction As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/STOPWORD_ENTRIES/STOPWORD")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strStopWord = p_GetAttribute(DOMNode, "STOPWORD")
p_CheckAction "StopWord " & strStopWord, strAction
If (Not p_dictStopWords(i_intIndex).Exists(strStopWord)) Then
p_dictStopWords(i_intIndex).Add strStopWord, True
Else
frmMain.Output _
"StopWord " & strStopWord & " is defined twice.", LOGGING_TYPE_WARNING_E
End If
Next
End Sub
Private Sub p_ReadHelpImage( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strChm As String
Dim strAction As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/HELPIMAGE/HELPFILE")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strChm = p_GetAttribute(DOMNode, "CHM")
p_CheckAction "HelpFile " & strChm, strAction
If (Not p_dictHelpImage(i_intIndex).Exists(strChm)) Then
p_dictHelpImage(i_intIndex).Add strChm, True
Else
frmMain.Output "HelpFile " & strChm & " is defined twice.", LOGGING_TYPE_WARNING_E
End If
Next
End Sub
Private Sub p_ReadScopes( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strId As String
Dim strAction As String
Dim strDisplayName As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/SCOPE_DEFINITION/SCOPE")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strId = p_GetAttribute(DOMNode, "ID")
strDisplayName = p_GetAttribute(DOMNode, "DISPLAYNAME")
p_CheckAction "Scope " & strId, strAction
If (Not p_dictScopes(i_intIndex).Exists(strId)) Then
p_dictScopes(i_intIndex).Add strId, strDisplayName
Else
p_dictScopes(i_intIndex).Remove strId
p_dictScopes(i_intIndex).Add strId, strDisplayName
frmMain.Output _
"Scope " & strId & " is defined twice; previous definition will be ignored.", LOGGING_TYPE_WARNING_E
End If
Next
End Sub
Private Sub p_ReadFTS( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strAction As String
Dim strChm As String
Dim strChq As String
Dim strKey As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/FTS/HELPFILE")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strChm = p_GetAttribute(DOMNode, "CHM")
strChq = p_GetAttribute(DOMNode, "CHQ", False)
strKey = strChm & SEP_C & strChq
p_CheckAction "FTS file " & strKey, strAction
If (Not p_dictFTS(i_intIndex).Exists(strKey)) Then
p_dictFTS(i_intIndex).Add strKey, True
Else
frmMain.Output "FTS file " & strKey & " is defined twice.", LOGGING_TYPE_WARNING_E
End If
Next
End Sub
Private Sub p_ReadOperators( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strOperator As String
Dim strAction As String
Dim strOperation As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/OPERATOR_ENTRIES/OPERATOR")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strOperation = p_GetAttribute(DOMNode, "OPERATION")
strOperator = p_GetAttribute(DOMNode, "OPERATOR")
p_CheckAction "Operator " & strOperator, strAction
p_CheckOperation "Operator " & strOperator, strOperation
If (Not p_dictOperators(i_intIndex).Exists(strOperator)) Then
p_dictOperators(i_intIndex).Add strOperator, strOperation
Else
Err.Raise E_FAIL, , "Operator " & strOperator & " is defined twice."
End If
Next
End Sub
Private Sub p_ReadStopSigns( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strStopSign As String
Dim strAction As String
Dim strContext As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/STOPSIGN_ENTRIES/STOPSIGN")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strContext = p_GetAttribute(DOMNode, "CONTEXT")
strStopSign = p_GetAttribute(DOMNode, "STOPSIGN")
p_CheckAction "StopSign " & strStopSign, strAction
p_CheckContext "StopSign " & strStopSign, strContext
If (Not p_dictStopSigns(i_intIndex).Exists(strStopSign)) Then
p_dictStopSigns(i_intIndex).Add strStopSign, strContext
Else
Err.Raise E_FAIL, , "StopSign " & strStopSign & " is defined twice."
End If
Next
End Sub
Private Sub p_ReadIndex( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim strAction As String
Dim strChm As String
Dim strHhk As String
Dim strScope As String
Dim strKey As String
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/INDEX/HELPFILE")
For Each DOMNode In DOMNodeList
DoEvents
strAction = p_GetAttribute(DOMNode, "ACTION")
strChm = p_GetAttribute(DOMNode, "CHM")
strHhk = p_GetAttribute(DOMNode, "HHK")
strScope = p_GetAttribute(DOMNode, "SCOPE", False)
strKey = strChm & SEP_C & strHhk
p_CheckAction "Index " & strKey, strAction
If (Not p_dictIndex(i_intIndex).Exists(strKey)) Then
p_dictIndex(i_intIndex).Add strKey, strScope
Else
Err.Raise E_FAIL, , "Index " & strChm & "/" & strHhk & " is defined twice."
End If
Next
End Sub
Private Sub p_ReadSynTable( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeSynSetList As MSXML2.IXMLDOMNodeList
Dim DOMNodeSynonymList As MSXML2.IXMLDOMNodeList
Dim DOMNodeSynSet As MSXML2.IXMLDOMNode
Dim DOMNodeSynonym As MSXML2.IXMLDOMNode
Dim dict As Scripting.Dictionary
Dim strId As String
Dim strSynonym As String
Dim strAction As String
Set DOMNodeSynSetList = i_DOMDoc.selectNodes("METADATA/SYNTABLE/SYNSET")
For Each DOMNodeSynSet In DOMNodeSynSetList
DoEvents
strId = p_GetAttribute(DOMNodeSynSet, "ID")
If (p_dictSynTable(i_intIndex).Exists(strId)) Then
Set dict = p_dictSynTable(i_intIndex)(strId)
Else
Set dict = New Scripting.Dictionary
dict.CompareMode = TextCompare
p_dictSynTable(i_intIndex).Add strId, dict
End If
Set DOMNodeSynonymList = DOMNodeSynSet.selectNodes("SYNONYM")
For Each DOMNodeSynonym In DOMNodeSynonymList
DoEvents
strSynonym = DOMNodeSynonym.Text
strAction = p_GetAttribute(DOMNodeSynonym, "ACTION")
p_CheckAction "SynSet " & strId & ": " & "Synonym " & strSynonym, strAction
If (Not dict.Exists(strSynonym)) Then
dict.Add strSynonym, True
Else
frmMain.Output "Synonym " & strSynonym & " is defined twice in SynSet " & strId & ".", _
LOGGING_TYPE_WARNING_E
End If
Next
Next
End Sub
Private Sub p_ReadTaxonomy( _
ByVal i_intIndex As Long, _
ByVal i_DOMDoc As MSXML2.DOMDocument _
)
Dim DOMNodeList As MSXML2.IXMLDOMNodeList
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMNodeListKW As MSXML2.IXMLDOMNodeList
Dim DOMNodeKW As MSXML2.IXMLDOMNode
Dim strCategory As String
Dim strEntry As String
Dim strURI As String
Dim strKey As String
Dim strKeyword As String
Dim strPriority As String
Dim Taxonomy As Taxonomy
Dim intIndex As Long
Dim blnNode As Boolean
Set DOMNodeList = i_DOMDoc.selectNodes("METADATA/TAXONOMY_ENTRIES/TAXONOMY_ENTRY")
If (DOMNodeList.length <> 0) Then
frmMain.ProgresBar_SetMax DOMNodeList.length
End If
For Each DOMNode In DOMNodeList
intIndex = intIndex + 1
frmMain.ProgresBar_SetValue intIndex
DoEvents
strCategory = p_GetAttribute(DOMNode, ATTR_CATEGORY_C)
strEntry = p_GetAttribute(DOMNode, ATTR_ENTRY_C, False)
strURI = p_GetAttribute(DOMNode, ATTR_URI_C, False)
Set Taxonomy = New Taxonomy
With Taxonomy
If (strEntry <> "") Then
blnNode = True
strKey = strCategory & SEP_C & strEntry
Else
blnNode = False
strKey = strCategory & SEP_C & strURI
End If
.strCategory = strCategory
.strEntry = strEntry
.strURI = strURI
.strIconURI = p_GetAttribute(DOMNode, ATTR_ICONURI_C, False)
.strTitle = p_GetAttribute(DOMNode, ATTR_TITLE_C, False)
.strDescription = p_GetAttribute(DOMNode, ATTR_DESCRIPTION_C, False)
.strType = p_GetAttribute(DOMNode, ATTR_TYPE_C, False)
.strVisible = p_GetAttribute(DOMNode, ATTR_VISIBLE_C, False)
.strSubSite = p_GetAttribute(DOMNode, ATTR_SUBSITE_C, False)
.strNavigationModel = p_GetAttribute(DOMNode, ATTR_NAVIGATIONMODEL_C, False)
If (Not blnNode) Then
Set .dictKeywords = New Scripting.Dictionary
Set DOMNodeListKW = DOMNode.selectNodes(ELEM_KEYWORD_C)
For Each DOMNodeKW In DOMNodeListKW
strKeyword = DOMNodeKW.Text
strPriority = p_GetAttribute(DOMNodeKW, ATTR_PRIORITY_C, False)
.dictKeywords.Add strKeyword, strPriority
Next
End If
End With
If (Not p_dictTaxonomy(i_intIndex).Exists(strKey)) Then
p_dictTaxonomy(i_intIndex).Add strKey, Taxonomy
Else
frmMain.Output "Taxonomy entry """ & strKey & """ is defined twice", LOGGING_TYPE_WARNING_E
End If
Next
frmMain.ProgresBar_SetValue 0
End Sub
Private Sub p_CheckAction( _
ByVal i_strPrefix As String, _
ByVal i_strAction As String _
)
If (UCase$(i_strAction) <> VALUE_ADD_C) Then
Err.Raise E_FAIL, , i_strPrefix & ": ACTION " & i_strAction & " cannot be handled."
End If
End Sub
Private Sub p_CheckOperation( _
ByVal i_strPrefix As String, _
ByVal i_strOperation As String _
)
Dim strOperation As String
strOperation = UCase$(i_strOperation)
If ((strOperation <> "AND") And (strOperation <> "OR") And (strOperation <> "NOT")) Then
Err.Raise E_FAIL, , i_strPrefix & ": Bad OPERATION: " & i_strOperation
End If
End Sub
Private Sub p_CheckContext( _
ByVal i_strPrefix As String, _
ByVal i_strContext As String _
)
Dim strContext As String
strContext = UCase$(i_strContext)
If ((strContext <> "ANYWHERE") And (strContext <> "ENDOFWORD")) Then
Err.Raise E_FAIL, , i_strPrefix & ": Bad CONTEXT: " & i_strContext
End If
End Sub
Private Function p_GetAttribute( _
ByVal i_DOMNode As MSXML2.IXMLDOMNode, _
ByVal i_strAttributeName As String, _
Optional ByVal i_blnRequired As Boolean = True _
) As String
Dim DOMAttribute As MSXML2.IXMLDOMAttribute
Set DOMAttribute = i_DOMNode.Attributes.getNamedItem(i_strAttributeName)
If (DOMAttribute Is Nothing) Then
If (Not i_blnRequired) Then
Exit Function
Else
Err.Raise E_FAIL, , "Attribute " & i_strAttributeName & " is missing in: " & i_DOMNode.xml
End If
End If
' p_GetAttribute = Replace$(DOMAttribute.Text, "\", "\\")
p_GetAttribute = DOMAttribute.Text
End Function
Private Sub p_CreateDeltaHHTs( _
ByVal i_strFolder As String _
)
p_CreateStopWordsDelta i_strFolder & "\" & p_strVersion & "_" & STOP_WORDS_HHT_C
p_CreateHelpImageFTSIndexDelta i_strFolder & "\" & p_strVersion & "_" & NO_LOC_HHT_C
p_CreateScopesDelta i_strFolder & "\" & p_strVersion & "_" & SCOPE_DEFINITION_HHT_C
p_CreateOperatorsDelta i_strFolder & "\" & p_strVersion & "_" & OPERATORS_HHT_C
p_CreateStopSignsDelta i_strFolder & "\" & p_strVersion & "_" & STOP_SIGNS_HHT_C
p_CreateSynTableDelta i_strFolder & "\" & p_strVersion & "_" & SYN_TABLE_HHT_C
p_CreateTaxonomyDelta i_strFolder & "\" & p_strVersion & "_" & TAXONOMY_HHT_C
End Sub
Private Function p_GetNewDomDoc( _
) As MSXML2.DOMDocument
Dim DOMDoc As MSXML2.DOMDocument
Dim PI As MSXML2.IXMLDOMProcessingInstruction
Dim DOMComment As MSXML2.IXMLDOMComment
Dim DOMElement As MSXML2.IXMLDOMElement
Set DOMDoc = New MSXML2.DOMDocument
DOMDoc.preserveWhiteSpace = True
Set PI = DOMDoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-16'")
DOMDoc.appendChild PI
Set DOMComment = DOMDoc.createComment("Insert your comments here")
DOMDoc.appendChild DOMComment
Set DOMElement = DOMDoc.createElement(ELEM_METADATA_C)
DOMDoc.appendChild DOMElement
Set p_GetNewDomDoc = DOMDoc
End Function
Private Sub p_CreateStopWordsDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strStopWord As Variant
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_STOPWORD_ENTRIES_C)
DOMNode.appendChild DOMElement
Set DOMNode = DOMElement
For Each strStopWord In p_dictStopWords(SECOND_C).Keys
p_dictStopWords(SECOND_C).Remove strStopWord
If (p_dictStopWords(FIRST_C).Exists(strStopWord)) Then
' StopWord exists in both CABs. Ignore.
p_dictStopWords(FIRST_C).Remove strStopWord
Else
' StopWord exists only in the new CAB. Add it in the Delta.
Set DOMElement = DOMDoc.createElement(ELEM_STOPWORD_C)
With DOMElement
.setAttribute ATTR_STOPWORD_C, strStopWord
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
DOMNode.appendChild DOMElement
End If
Next
For Each strStopWord In p_dictStopWords(FIRST_C).Keys
' StopWord exists only in the old CAB. Remove it in the Delta.
Set DOMElement = DOMDoc.createElement(ELEM_STOPWORD_C)
With DOMElement
.setAttribute ATTR_STOPWORD_C, strStopWord
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
DOMNode.appendChild DOMElement
Next
DOMDoc.Save i_strFile
End Sub
Private Sub p_CreateScopesDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strId As Variant
Dim strName1 As String
Dim strName2 As String
Dim blnAdd As Boolean
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_SCOPE_DEFINITION_C)
DOMNode.appendChild DOMElement
Set DOMNode = DOMElement
For Each strId In p_dictScopes(SECOND_C).Keys
strName2 = p_dictScopes(SECOND_C)(strId)
p_dictScopes(SECOND_C).Remove strId
If (p_dictScopes(FIRST_C).Exists(strId)) Then
strName1 = p_dictScopes(FIRST_C)(strId)
p_dictScopes(FIRST_C).Remove strId
If (strName1 = strName2) Then
blnAdd = False
Else
' Scope name changed. Add it in the Delta.
blnAdd = True
End If
Else
' Scope exists only in the new CAB. Add it in the Delta.
blnAdd = True
End If
If (blnAdd) Then
Set DOMElement = DOMDoc.createElement(ELEM_SCOPE_C)
With DOMElement
.setAttribute ATTR_ID_C, strId
.setAttribute ATTR_DISPLAYNAME_C, strName2
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
DOMNode.appendChild DOMElement
End If
Next
For Each strId In p_dictScopes(FIRST_C).Keys
' Scope exists only in the old CAB. Remove it in the Delta.
Set DOMElement = DOMDoc.createElement(ELEM_SCOPE_C)
With DOMElement
.setAttribute ATTR_ID_C, strId
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
DOMNode.appendChild DOMElement
Next
DOMDoc.Save i_strFile
End Sub
Private Sub p_CreateOperatorsDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strOperator As Variant
Dim strOperation1 As String
Dim strOperation2 As String
Dim blnAdd As Boolean
Dim blnDel As Boolean
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_OPERATOR_ENTRIES_C)
DOMNode.appendChild DOMElement
Set DOMNode = DOMElement
For Each strOperator In p_dictOperators(SECOND_C).Keys
strOperation2 = p_dictOperators(SECOND_C)(strOperator)
p_dictOperators(SECOND_C).Remove strOperator
blnDel = False
If (p_dictOperators(FIRST_C).Exists(strOperator)) Then
strOperation1 = p_dictOperators(FIRST_C)(strOperator)
p_dictOperators(FIRST_C).Remove strOperator
If (strOperation1 = strOperation2) Then
blnAdd = False
Else
' Operation changed. Add it in the Delta.
blnAdd = True
blnDel = True
End If
Else
' Operator exists only in the new CAB. Add it in the Delta.
blnAdd = True
End If
If (blnDel) Then
Set DOMElement = DOMDoc.createElement(ELEM_OPERATOR_C)
With DOMElement
.setAttribute ATTR_OPERATOR_C, strOperator
.setAttribute ATTR_OPERATION_C, strOperation1
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
DOMNode.appendChild DOMElement
End If
If (blnAdd) Then
Set DOMElement = DOMDoc.createElement(ELEM_OPERATOR_C)
With DOMElement
.setAttribute ATTR_OPERATOR_C, strOperator
.setAttribute ATTR_OPERATION_C, strOperation2
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
DOMNode.appendChild DOMElement
End If
Next
For Each strOperator In p_dictOperators(FIRST_C).Keys
strOperation1 = p_dictOperators(FIRST_C)(strOperator)
' Operator exists only in the old CAB. Remove it in the Delta.
Set DOMElement = DOMDoc.createElement(ELEM_OPERATOR_C)
With DOMElement
.setAttribute ATTR_OPERATOR_C, strOperator
.setAttribute ATTR_OPERATION_C, strOperation1
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
DOMNode.appendChild DOMElement
Next
DOMDoc.Save i_strFile
End Sub
Private Sub p_CreateStopSignsDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strStopSign As Variant
Dim strContext1 As String
Dim strContext2 As String
Dim blnAdd As Boolean
Dim blnDel As Boolean
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_STOPSIGN_ENTRIES_C)
DOMNode.appendChild DOMElement
Set DOMNode = DOMElement
For Each strStopSign In p_dictStopSigns(SECOND_C).Keys
strContext2 = p_dictStopSigns(SECOND_C)(strStopSign)
p_dictStopSigns(SECOND_C).Remove strStopSign
blnDel = False
If (p_dictStopSigns(FIRST_C).Exists(strStopSign)) Then
strContext1 = p_dictStopSigns(FIRST_C)(strStopSign)
p_dictStopSigns(FIRST_C).Remove strStopSign
If (strContext1 = strContext2) Then
blnAdd = False
Else
' Context changed. Add it in the Delta.
blnAdd = True
blnDel = True
End If
Else
' StopSign exists only in the new CAB. Add it in the Delta.
blnAdd = True
End If
If (blnDel) Then
Set DOMElement = DOMDoc.createElement(ELEM_STOPSIGN_C)
With DOMElement
.setAttribute ATTR_STOPSIGN_C, strStopSign
.setAttribute ATTR_CONTEXT_C, strContext1
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
DOMNode.appendChild DOMElement
End If
If (blnAdd) Then
Set DOMElement = DOMDoc.createElement(ELEM_STOPSIGN_C)
With DOMElement
.setAttribute ATTR_STOPSIGN_C, strStopSign
.setAttribute ATTR_CONTEXT_C, strContext2
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
DOMNode.appendChild DOMElement
End If
Next
For Each strStopSign In p_dictStopSigns(FIRST_C).Keys
strContext1 = p_dictStopSigns(FIRST_C)(strStopSign)
' StopSign exists only in the old CAB. Remove it in the Delta.
Set DOMElement = DOMDoc.createElement(ELEM_STOPSIGN_C)
With DOMElement
.setAttribute ATTR_STOPSIGN_C, strStopSign
.setAttribute ATTR_CONTEXT_C, strContext1
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
DOMNode.appendChild DOMElement
Next
DOMDoc.Save i_strFile
End Sub
Private Sub p_CreateHelpImageFTSIndexDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_HELPIMAGE_C)
DOMNode.appendChild DOMElement
p_CreateHelpImageDelta DOMDoc, DOMElement
Set DOMElement = DOMDoc.createElement(ELEM_FTS_C)
DOMNode.appendChild DOMElement
p_CreateFTSDelta DOMDoc, DOMElement
Set DOMElement = DOMDoc.createElement(ELEM_INDEX_C)
DOMNode.appendChild DOMElement
p_CreateIndexDelta DOMDoc, DOMElement
DOMDoc.Save i_strFile
End Sub
Private Sub p_CreateHelpImageDelta( _
ByVal u_DOMDoc As MSXML2.DOMDocument, _
ByVal u_DOMNode As MSXML2.IXMLDOMNode _
)
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strChm As Variant
For Each strChm In p_dictHelpImage(SECOND_C).Keys
p_dictHelpImage(SECOND_C).Remove strChm
If (p_dictHelpImage(FIRST_C).Exists(strChm)) Then
' HelpImage exists in both CABs. Ignore.
p_dictHelpImage(FIRST_C).Remove strChm
Else
' HelpImage exists only in the new CAB. Add it in the Delta.
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
With DOMElement
.setAttribute ATTR_CHM_C, strChm
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
u_DOMNode.appendChild DOMElement
End If
Next
For Each strChm In p_dictHelpImage(FIRST_C).Keys
' HelpImage exists only in the old CAB. Remove it in the Delta.
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
With DOMElement
.setAttribute ATTR_CHM_C, strChm
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
u_DOMNode.appendChild DOMElement
Next
End Sub
Private Sub p_CreateFTSDelta( _
ByVal u_DOMDoc As MSXML2.DOMDocument, _
ByVal u_DOMNode As MSXML2.IXMLDOMNode _
)
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strKey As Variant
Dim arr() As String
For Each strKey In p_dictFTS(SECOND_C).Keys
p_dictFTS(SECOND_C).Remove strKey
If (p_dictFTS(FIRST_C).Exists(strKey)) Then
' FTS exists in both CABs. Ignore.
p_dictFTS(FIRST_C).Remove strKey
Else
' FTS exists only in the new CAB. Add it in the Delta.
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
arr = Split(strKey, SEP_C)
With DOMElement
.setAttribute ATTR_CHM_C, arr(0)
If (arr(1) <> "") Then
.setAttribute ATTR_CHQ_C, arr(1)
End If
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
u_DOMNode.appendChild DOMElement
End If
Next
For Each strKey In p_dictFTS(FIRST_C).Keys
' FTS exists only in the old CAB. Remove it in the Delta.
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
arr = Split(strKey, SEP_C)
With DOMElement
.setAttribute ATTR_CHM_C, arr(0)
If (arr(1) <> "") Then
.setAttribute ATTR_CHQ_C, arr(1)
End If
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
u_DOMNode.appendChild DOMElement
Next
End Sub
Private Sub p_CreateIndexDelta( _
ByVal u_DOMDoc As MSXML2.DOMDocument, _
ByVal u_DOMNode As MSXML2.IXMLDOMNode _
)
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strKey As Variant
Dim arr() As String
Dim strScope1 As String
Dim strScope2 As String
Dim blnAdd As Boolean
Dim blnDel As Boolean
For Each strKey In p_dictIndex(SECOND_C).Keys
strScope2 = p_dictIndex(SECOND_C)(strKey)
p_dictIndex(SECOND_C).Remove strKey
blnDel = False
If (p_dictIndex(FIRST_C).Exists(strKey)) Then
strScope1 = p_dictIndex(FIRST_C)(strKey)
p_dictIndex(FIRST_C).Remove strKey
If (strScope1 = strScope2) Then
blnAdd = False
Else
' Scope changed. Add it in the Delta.
blnAdd = True
blnDel = True
End If
Else
' Index exists only in the new CAB. Add it in the Delta.
blnAdd = True
End If
arr = Split(strKey, SEP_C)
If (blnDel) Then
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
With DOMElement
.setAttribute ATTR_CHM_C, arr(0)
.setAttribute ATTR_HHK_C, arr(1)
If (strScope1 <> "") Then
.setAttribute ATTR_SCOPE_C, strScope1
End If
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
u_DOMNode.appendChild DOMElement
End If
If (blnAdd) Then
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
With DOMElement
.setAttribute ATTR_CHM_C, arr(0)
.setAttribute ATTR_HHK_C, arr(1)
If (strScope2 <> "") Then
.setAttribute ATTR_SCOPE_C, strScope2
End If
.setAttribute ATTR_ACTION_C, VALUE_ADD_C
End With
u_DOMNode.appendChild DOMElement
End If
Next
For Each strKey In p_dictIndex(FIRST_C).Keys
strScope1 = p_dictIndex(FIRST_C)(strKey)
arr = Split(strKey, SEP_C)
' Index exists only in the old CAB. Remove it in the Delta.
Set DOMElement = u_DOMDoc.createElement(ELEM_HELPFILE_C)
With DOMElement
.setAttribute ATTR_CHM_C, arr(0)
.setAttribute ATTR_HHK_C, arr(1)
If (strScope1 <> "") Then
.setAttribute ATTR_SCOPE_C, strScope1
End If
.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End With
u_DOMNode.appendChild DOMElement
Next
End Sub
Private Sub p_CreateSynTableDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMNodeSynSet As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strId As Variant
Dim dict1 As Scripting.Dictionary
Dim dict2 As Scripting.Dictionary
Dim strSynonym As Variant
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_SYNTABLE_C)
DOMNode.appendChild DOMElement
Set DOMNode = DOMElement
Dim strKey As Variant
Dim arr() As String
Dim strScope1 As String
Dim strScope2 As String
Dim blnAdd As Boolean
Dim blnDel As Boolean
For Each strId In p_dictSynTable(SECOND_C).Keys
Set dict2 = p_dictSynTable(SECOND_C)(strId)
If (p_dictSynTable(FIRST_C).Exists(strId)) Then
Set dict1 = p_dictSynTable(FIRST_C)(strId)
p_dictSynTable(FIRST_C).Remove strId
p_dictSynTable(SECOND_C).Remove strId
For Each strSynonym In dict2.Keys
If (dict1.Exists(strSynonym)) Then
dict1.Remove strSynonym
dict2.Remove strSynonym
End If
Next
If ((dict1.Count <> 0) Or (dict2.Count <> 0)) Then
Set DOMElement = DOMDoc.createElement(ELEM_SYNSET_C)
DOMElement.setAttribute ATTR_ID_C, strId
DOMNode.appendChild DOMElement
Set DOMNodeSynSet = DOMElement
For Each strSynonym In dict1.Keys
Set DOMElement = DOMDoc.createElement(ELEM_SYNONYM_C)
DOMElement.setAttribute ATTR_ACTION_C, VALUE_DEL_C
DOMElement.Text = strSynonym
DOMNodeSynSet.appendChild DOMElement
Next
For Each strSynonym In dict2.Keys
Set DOMElement = DOMDoc.createElement(ELEM_SYNONYM_C)
DOMElement.setAttribute ATTR_ACTION_C, VALUE_ADD_C
DOMElement.Text = strSynonym
DOMNodeSynSet.appendChild DOMElement
Next
End If
End If
Next
For Each strId In p_dictSynTable(FIRST_C).Keys
Set dict1 = p_dictSynTable(FIRST_C)(strId)
p_dictSynTable(FIRST_C).Remove strId
Set DOMElement = DOMDoc.createElement(ELEM_SYNSET_C)
DOMElement.setAttribute ATTR_ID_C, strId
DOMNode.appendChild DOMElement
Set DOMNodeSynSet = DOMElement
For Each strSynonym In dict1.Keys
Set DOMElement = DOMDoc.createElement(ELEM_SYNONYM_C)
DOMElement.setAttribute ATTR_ACTION_C, VALUE_DEL_C
DOMElement.Text = strSynonym
DOMNodeSynSet.appendChild DOMElement
Next
Next
For Each strId In p_dictSynTable(SECOND_C).Keys
Set dict2 = p_dictSynTable(SECOND_C)(strId)
p_dictSynTable(SECOND_C).Remove strId
Set DOMElement = DOMDoc.createElement(ELEM_SYNSET_C)
DOMElement.setAttribute ATTR_ID_C, strId
DOMNode.appendChild DOMElement
Set DOMNodeSynSet = DOMElement
For Each strSynonym In dict2.Keys
Set DOMElement = DOMDoc.createElement(ELEM_SYNONYM_C)
DOMElement.setAttribute ATTR_ACTION_C, VALUE_ADD_C
DOMElement.Text = strSynonym
DOMNodeSynSet.appendChild DOMElement
Next
Next
DOMDoc.Save i_strFile
End Sub
Private Sub p_CreateTaxonomyDelta( _
ByVal i_strFile As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMNode As MSXML2.IXMLDOMNode
Dim DOMElement As MSXML2.IXMLDOMElement
Dim strKey As Variant
Dim Taxonomy1 As Taxonomy
Dim Taxonomy2 As Taxonomy
Dim blnKeywordsRemoved As Boolean
Dim intIndex As Long
Set DOMDoc = p_GetNewDomDoc
Set DOMNode = DOMDoc.selectSingleNode(ELEM_METADATA_C)
Set DOMElement = DOMDoc.createElement(ELEM_TAXONOMY_ENTRIES_C)
DOMNode.appendChild DOMElement
Set DOMNode = DOMElement
If (p_dictTaxonomy(SECOND_C).Count <> 0) Then
frmMain.ProgresBar_SetMax p_dictTaxonomy(SECOND_C).Count
End If
For Each strKey In p_dictTaxonomy(SECOND_C).Keys
intIndex = intIndex + 1
frmMain.ProgresBar_SetValue intIndex
DoEvents
Set Taxonomy2 = p_dictTaxonomy(SECOND_C)(strKey)
p_dictTaxonomy(SECOND_C).Remove strKey
Set Taxonomy1 = Nothing
If (p_dictTaxonomy(FIRST_C).Exists(strKey)) Then
Set Taxonomy1 = p_dictTaxonomy(FIRST_C)(strKey)
p_dictTaxonomy(FIRST_C).Remove strKey
End If
blnKeywordsRemoved = False
If ((Taxonomy1 Is Nothing) Or _
(Not Taxonomy2.SameAs(Taxonomy1, p_blnIgnoreKeywords, blnKeywordsRemoved))) Then
If (blnKeywordsRemoved) Then
frmMain.Output "Keywords have been removed from Taxonomy entry """ & strKey & """.", _
LOGGING_TYPE_WARNING_E
frmMain.Output "Keyword removal is not supported.", LOGGING_TYPE_WARNING_E
Else
p_InsertTaxonomyEntry DOMDoc, DOMNode, Taxonomy2, True
End If
End If
Next
frmMain.ProgresBar_SetValue 0
If (p_dictTaxonomy(FIRST_C).Count <> 0) Then
frmMain.ProgresBar_SetMax p_dictTaxonomy(FIRST_C).Count
End If
intIndex = 0
For Each strKey In p_dictTaxonomy(FIRST_C).Keys
intIndex = intIndex + 1
frmMain.ProgresBar_SetValue intIndex
DoEvents
Set Taxonomy1 = p_dictTaxonomy(FIRST_C)(strKey)
If (Taxonomy1.strEntry <> "") Then
Err.Raise E_FAIL, , "Node """ & strKey & """ has been deleted. This is not supported."
End If
p_InsertTaxonomyEntry DOMDoc, DOMNode, Taxonomy1, False
Next
frmMain.ProgresBar_SetValue 0
DOMDoc.Save i_strFile
End Sub
Private Sub p_InsertTaxonomyEntry( _
ByRef u_DOMDoc As MSXML2.DOMDocument, _
ByRef u_DOMNode As MSXML2.IXMLDOMNode, _
ByRef i_Taxonomy As Taxonomy, _
ByVal i_blnAdd As Boolean _
)
Dim DOMElement As MSXML2.IXMLDOMElement
Dim DOMElementKw As MSXML2.IXMLDOMElement
Dim strKeyword As Variant
Dim strPriority As String
Set DOMElement = u_DOMDoc.createElement(ELEM_TAXONOMY_ENTRY_C)
With i_Taxonomy
DOMElement.setAttribute ATTR_CATEGORY_C, .strCategory
If (.strEntry <> "") Then
DOMElement.setAttribute ATTR_ENTRY_C, .strEntry
End If
DOMElement.setAttribute ATTR_URI_C, .strURI
DOMElement.setAttribute ATTR_TITLE_C, .strTitle
If (i_blnAdd) Then
DOMElement.setAttribute ATTR_ICONURI_C, .strIconURI
DOMElement.setAttribute ATTR_DESCRIPTION_C, .strDescription
If (.strType <> "") Then
DOMElement.setAttribute ATTR_TYPE_C, .strType
End If
If (.strVisible <> "") Then
DOMElement.setAttribute ATTR_VISIBLE_C, .strVisible
End If
If (.strSubSite <> "") Then
DOMElement.setAttribute ATTR_SUBSITE_C, .strSubSite
End If
If (.strNavigationModel <> "") Then
DOMElement.setAttribute ATTR_NAVIGATIONMODEL_C, .strNavigationModel
End If
End If
If (i_blnAdd) Then
DOMElement.setAttribute ATTR_ACTION_C, VALUE_ADD_C
Else
DOMElement.setAttribute ATTR_ACTION_C, VALUE_DEL_C
End If
If (i_blnAdd And (Not .dictKeywords Is Nothing)) Then
For Each strKeyword In .dictKeywords.Keys
Set DOMElementKw = u_DOMDoc.createElement(ELEM_KEYWORD_C)
DOMElementKw.Text = strKeyword
strPriority = .dictKeywords(strKeyword)
If (strPriority <> "") Then
DOMElementKw.setAttribute ATTR_PRIORITY_C, strPriority
End If
DOMElement.appendChild DOMElementKw
Next
End If
End With
u_DOMNode.appendChild DOMElement
End Sub
Private Sub p_FixPackageDescription( _
ByVal i_strFolder As String _
)
Dim DOMDoc As MSXML2.DOMDocument
Dim DOMElement As MSXML2.IXMLDOMElement
Dim DOMElementHHT As MSXML2.IXMLDOMElement
Set DOMDoc = GetPackageDescription(i_strFolder)
Set DOMElement = DOMDoc.selectSingleNode("HELPCENTERPACKAGE/VERSION")
DOMElement.setAttribute ATTR_VALUE_C, p_strVersion
Set DOMElement = DOMDoc.selectSingleNode("HELPCENTERPACKAGE/METADATA")
' The order in which the HHTs are listed is important.
' For example, The synonym table must appear before the taxonomy.
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & OPERATORS_HHT_C
DOMElement.appendChild DOMElementHHT
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & STOP_SIGNS_HHT_C
DOMElement.appendChild DOMElementHHT
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & STOP_WORDS_HHT_C
DOMElement.appendChild DOMElementHHT
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & SYN_TABLE_HHT_C
DOMElement.appendChild DOMElementHHT
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & TAXONOMY_HHT_C
DOMElement.appendChild DOMElementHHT
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & SCOPE_DEFINITION_HHT_C
DOMElement.appendChild DOMElementHHT
Set DOMElementHHT = DOMDoc.createElement(ELEM_HHT_C)
DOMElementHHT.setAttribute ATTR_FILE_C, p_strVersion & "_" & NO_LOC_HHT_C
DOMElement.appendChild DOMElementHHT
DOMDoc.Save i_strFolder & "\" & PKG_DESC_FILE_C
End Sub