VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "HHT" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = True Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes" Attribute VB_Ext_KEY = "Top_Level" ,"No" Option Explicit Private WithEvents p_clsTaxonomy As Taxonomy Attribute p_clsTaxonomy.VB_VarHelpID = -1 Private p_clsKeywords As Keywords Private p_clsStopSigns As StopSigns Private p_clsStopWords As StopWords Private Const LCID_ENGLISH As Long = 1033 Private Const PACKAGE_DESCRIPTION As String = "package_description.xml" Private Const CHQ_C As String = ".chq" Private Const CHM_C As String = ".chm" Private Const HHK_C As String = ".hhk" Public Event ReportStatus(ByVal strStatus As String, ByRef blnCancel As Boolean) Private Sub Class_Initialize() Set p_clsTaxonomy = New Taxonomy Set p_clsKeywords = New Keywords Set p_clsStopSigns = New StopSigns Set p_clsStopWords = New StopWords End Sub Private Sub Class_Terminate() Set p_clsTaxonomy = Nothing Set p_clsKeywords = Nothing Set p_clsStopSigns = Nothing Set p_clsStopWords = Nothing End Sub Public Sub GenerateCAB( _ ByVal i_strFileName As String, _ ByVal i_intSKU As Long _ ) Dim FSO As Scripting.FileSystemObject Dim WS As IWshShell Dim TSPackage As Scripting.TextStream Dim strTempDir As String Dim strHHTFileName As String Dim strPackage As String Dim strCmd As String Dim enumSKU As SKU_E Set FSO = New Scripting.FileSystemObject Set WS = CreateObject("Wscript.Shell") strTempDir = Environ$("TEMP") & "\__HSCCAB" If (FSO.FolderExists(strTempDir)) Then FSO.DeleteFolder strTempDir, Force:=True End If FSO.CreateFolder strTempDir strHHTFileName = XmlSKU(i_intSKU) & ".hht" GenerateHHT strTempDir & "\" & strHHTFileName, i_intSKU strPackage = strTempDir & "\" & PACKAGE_DESCRIPTION Set TSPackage = FSO.CreateTextFile(strPackage, Overwrite:=True, Unicode:=True) enumSKU = i_intSKU p_GeneratePackageDescription TSPackage, enumSKU, strHHTFileName Set TSPackage = Nothing ' Required for cabarc to work p_RaiseEventAndLookForCancel "CAB'ing the files." strCmd = "cabarc -r -s 6144 n """ & i_strFileName & """ " & strTempDir & "\*" WS.Run strCmd, , True End Sub Public Sub GenerateHHT( _ ByVal i_strFileName As String, _ ByVal i_intSKU As Long _ ) Dim FSO As Scripting.FileSystemObject Dim TS As Scripting.TextStream Dim colKeywords As Collection Dim intAG As Long Dim enumSKU As SKU_E Dim DOMNode As MSXML2.IXMLDOMNode Dim DOMNodeEntries As MSXML2.IXMLDOMNode Dim DOMNodeRoot As MSXML2.IXMLDOMNode Set FSO = New Scripting.FileSystemObject Set TS = FSO.CreateTextFile(i_strFileName, Unicode:=True) Set colKeywords = New Collection enumSKU = i_intSKU p_OutputHHTProlog TS, enumSKU intAG = g_clsParameters.AuthoringGroup If (intAG > AG_CORE_MAX_C) Then Set DOMNode = GenerateHHTForAuthoringGroup(i_intSKU) Set DOMNode = XMLFindFirstNode(DOMNode, HHT_TAXONOMY_ENTRIES_C) p_RemoveUnnecessaryAttributes DOMNode TS.WriteLine DOMNode.XML Else p_clsKeywords.GetAllKeywordsColl colKeywords Set DOMNode = p_clsTaxonomy.GetTaxonomyInXml Set DOMNodeEntries = XMLFindFirstNode(DOMNode, HHT_TAXONOMY_ENTRIES_C) Set DOMNodeRoot = XMLFindFirstNode(DOMNodeEntries, HHT_TAXONOMY_ENTRY_C) p_clsTaxonomy.TransformHHTTov10 DOMNodeRoot, colKeywords, "", _ ALL_SKUS_C, DOMNodeEntries, i_intSKU, False p_RemoveUnnecessaryAttributes DOMNodeEntries TS.WriteLine DOMNodeEntries.XML End If TS.WriteLine g_clsParameters.DomFragmentHHT(i_intSKU) If (intAG <= AG_CORE_MAX_C) Then If (i_intSKU <> SKU_WINDOWS_MILLENNIUM_E) Then p_OutputStopSigns TS p_OutputStopWords TS p_OutputSynonyms TS End If p_OutputOperators TS End If p_PrintWithIndentation TS, 0, "" End Sub Private Sub p_RemoveUnnecessaryAttributes( _ ByRef u_DOMNode As MSXML2.IXMLDOMNode _ ) Dim Element As MSXML2.IXMLDOMElement For Each Element In u_DOMNode.childNodes If (XMLGetAttribute(Element, HHT_URI_C) = "") Then Element.removeAttribute HHT_URI_C End If If (XMLGetAttribute(Element, HHT_ICONURI_C) = "") Then Element.removeAttribute HHT_ICONURI_C End If If (XMLGetAttribute(Element, HHT_DESCRIPTION_C) = "") Then Element.removeAttribute HHT_DESCRIPTION_C End If If (XMLGetAttribute(Element, HHT_VISIBLE_C) = "True") Then Element.removeAttribute HHT_VISIBLE_C End If If (XMLGetAttribute(Element, HHT_SUBSITE_C) = "False") Then Element.removeAttribute HHT_SUBSITE_C End If If (XMLGetAttribute(Element, HHT_NAVIGATIONMODEL_C) = "Default") Then Element.removeAttribute HHT_NAVIGATIONMODEL_C End If Next End Sub Private Function p_GetAllowedSKUs( _ ByRef i_DOMNode As MSXML2.IXMLDOMNode _ ) As SKU_E Dim DOMNode As MSXML2.IXMLDOMNode Dim DOMNodeParent As MSXML2.IXMLDOMNode Dim intTID As Long Dim enumParentAllowedSKUs As SKU_E Dim enumParentSKUs As SKU_E p_GetAllowedSKUs = ALL_SKUS_C If (i_DOMNode.nodeName <> HHT_TAXONOMY_ENTRY_C) Then Exit Function End If intTID = XMLGetAttribute(i_DOMNode, HHT_tid_C) If (intTID = ROOT_TID_C) Then Exit Function End If Set DOMNodeParent = i_DOMNode.parentNode If (DOMNodeParent Is Nothing) Then Exit Function End If enumParentAllowedSKUs = p_GetAllowedSKUs(DOMNodeParent) enumParentSKUs = XMLGetAttribute(DOMNodeParent, HHT_skus_C) p_GetAllowedSKUs = enumParentAllowedSKUs And enumParentSKUs End Function Private Sub p_AddDBParameters( _ ByRef i_DOMDoc As MSXML2.DOMDocument, _ ByRef u_DOMNode As MSXML2.IXMLDOMNode _ ) Dim Element As MSXML2.IXMLDOMElement Dim DOMNodeParameters As MSXML2.IXMLDOMNode Dim DOMNodeParameter As MSXML2.IXMLDOMNode Dim arrNames() As String Dim strName As String Dim vntValue As Variant Dim intIndex As Long Set Element = i_DOMDoc.createElement(HHT_dbparameters_C) Set DOMNodeParameters = u_DOMNode.appendChild(Element) ReDim arrNames(55) arrNames(0) = MINIMUM_KEYWORD_VALIDATION_C arrNames(1) = VENDOR_STRING_C arrNames(2) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_STANDARD_E) arrNames(3) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_PROFESSIONAL_E) arrNames(4) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_SERVER_E) arrNames(5) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_ADVANCED_SERVER_E) arrNames(6) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_DATA_CENTER_SERVER_E) arrNames(7) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_PROFESSIONAL_64_E) arrNames(8) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_ADVANCED_SERVER_64_E) arrNames(9) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_DATA_CENTER_SERVER_64_E) arrNames(10) = BROKEN_LINK_WORKING_DIR_C & Hex(SKU_WINDOWS_MILLENNIUM_E) arrNames(11) = PRODUCT_ID_C & Hex(SKU_STANDARD_E) arrNames(12) = PRODUCT_ID_C & Hex(SKU_PROFESSIONAL_E) arrNames(13) = PRODUCT_ID_C & Hex(SKU_SERVER_E) arrNames(14) = PRODUCT_ID_C & Hex(SKU_ADVANCED_SERVER_E) arrNames(15) = PRODUCT_ID_C & Hex(SKU_DATA_CENTER_SERVER_E) arrNames(16) = PRODUCT_ID_C & Hex(SKU_PROFESSIONAL_64_E) arrNames(17) = PRODUCT_ID_C & Hex(SKU_ADVANCED_SERVER_64_E) arrNames(18) = PRODUCT_ID_C & Hex(SKU_DATA_CENTER_SERVER_64_E) arrNames(19) = PRODUCT_ID_C & Hex(SKU_WINDOWS_MILLENNIUM_E) arrNames(20) = PRODUCT_VERSION_C & Hex(SKU_STANDARD_E) arrNames(21) = PRODUCT_VERSION_C & Hex(SKU_PROFESSIONAL_E) arrNames(22) = PRODUCT_VERSION_C & Hex(SKU_SERVER_E) arrNames(23) = PRODUCT_VERSION_C & Hex(SKU_ADVANCED_SERVER_E) arrNames(24) = PRODUCT_VERSION_C & Hex(SKU_DATA_CENTER_SERVER_E) arrNames(25) = PRODUCT_VERSION_C & Hex(SKU_PROFESSIONAL_64_E) arrNames(26) = PRODUCT_VERSION_C & Hex(SKU_ADVANCED_SERVER_64_E) arrNames(27) = PRODUCT_VERSION_C & Hex(SKU_DATA_CENTER_SERVER_64_E) arrNames(28) = PRODUCT_VERSION_C & Hex(SKU_WINDOWS_MILLENNIUM_E) arrNames(29) = DISPLAY_NAME_C & Hex(SKU_STANDARD_E) arrNames(30) = DISPLAY_NAME_C & Hex(SKU_PROFESSIONAL_E) arrNames(31) = DISPLAY_NAME_C & Hex(SKU_SERVER_E) arrNames(32) = DISPLAY_NAME_C & Hex(SKU_ADVANCED_SERVER_E) arrNames(33) = DISPLAY_NAME_C & Hex(SKU_DATA_CENTER_SERVER_E) arrNames(34) = DISPLAY_NAME_C & Hex(SKU_PROFESSIONAL_64_E) arrNames(35) = DISPLAY_NAME_C & Hex(SKU_ADVANCED_SERVER_64_E) arrNames(36) = DISPLAY_NAME_C & Hex(SKU_DATA_CENTER_SERVER_64_E) arrNames(37) = DISPLAY_NAME_C & Hex(SKU_WINDOWS_MILLENNIUM_E) arrNames(38) = DOM_FRAGMENT_PKG_C & Hex(SKU_STANDARD_E) arrNames(39) = DOM_FRAGMENT_PKG_C & Hex(SKU_PROFESSIONAL_E) arrNames(40) = DOM_FRAGMENT_PKG_C & Hex(SKU_SERVER_E) arrNames(41) = DOM_FRAGMENT_PKG_C & Hex(SKU_ADVANCED_SERVER_E) arrNames(42) = DOM_FRAGMENT_PKG_C & Hex(SKU_DATA_CENTER_SERVER_E) arrNames(43) = DOM_FRAGMENT_PKG_C & Hex(SKU_PROFESSIONAL_64_E) arrNames(44) = DOM_FRAGMENT_PKG_C & Hex(SKU_ADVANCED_SERVER_64_E) arrNames(45) = DOM_FRAGMENT_PKG_C & Hex(SKU_DATA_CENTER_SERVER_64_E) arrNames(46) = DOM_FRAGMENT_PKG_C & Hex(SKU_WINDOWS_MILLENNIUM_E) arrNames(47) = DOM_FRAGMENT_HHT_C & Hex(SKU_STANDARD_E) arrNames(48) = DOM_FRAGMENT_HHT_C & Hex(SKU_PROFESSIONAL_E) arrNames(49) = DOM_FRAGMENT_HHT_C & Hex(SKU_SERVER_E) arrNames(50) = DOM_FRAGMENT_HHT_C & Hex(SKU_ADVANCED_SERVER_E) arrNames(51) = DOM_FRAGMENT_HHT_C & Hex(SKU_DATA_CENTER_SERVER_E) arrNames(52) = DOM_FRAGMENT_HHT_C & Hex(SKU_PROFESSIONAL_64_E) arrNames(53) = DOM_FRAGMENT_HHT_C & Hex(SKU_ADVANCED_SERVER_64_E) arrNames(54) = DOM_FRAGMENT_HHT_C & Hex(SKU_DATA_CENTER_SERVER_64_E) arrNames(55) = DOM_FRAGMENT_HHT_C & Hex(SKU_WINDOWS_MILLENNIUM_E) For intIndex = LBound(arrNames) To UBound(arrNames) strName = arrNames(intIndex) vntValue = g_clsParameters.Value(strName) If (Not IsNull(vntValue)) Then Set Element = i_DOMDoc.createElement(HHT_dbparameter_C) Set DOMNodeParameter = DOMNodeParameters.appendChild(Element) XMLSetAttribute DOMNodeParameter, HHT_name_C, strName XMLSetAttribute DOMNodeParameter, HHT_value_C, XMLEscape(vntValue) End If Next End Sub Private Function p_GetHHTForAuthoringGroup( _ ByRef i_DOMNode As MSXML2.IXMLDOMNode, _ ByRef i_colKeywords As Collection, _ ByVal i_intAuthoringGroup As Long, _ ByVal i_intAllowedSKUs As Long _ ) As MSXML2.IXMLDOMNode Dim DOMDoc As MSXML2.DOMDocument Dim DOMNode As MSXML2.IXMLDOMNode Dim DOMNodeParent As MSXML2.IXMLDOMNode Dim DOMElement As MSXML2.IXMLDOMElement Dim strCategory As String Dim intAllowedSKUs As Long Dim intAuthoringGroup As Long Set DOMDoc = New MSXML2.DOMDocument Set DOMNode = HhtPreamble(DOMDoc, True) XMLCopyDOMTree i_DOMNode, DOMNode p_RaiseEventAndLookForCancel "Saving database parameters..." Set DOMNode = DOMNode.parentNode p_AddDBParameters DOMDoc, DOMNode Set DOMNode = XMLFindFirstNode(DOMNode, HHT_TAXONOMY_ENTRY_C) Set DOMNodeParent = DOMNode.parentNode strCategory = p_clsTaxonomy.GetCategory(i_DOMNode) intAllowedSKUs = p_GetAllowedSKUs(i_DOMNode) p_RaiseEventAndLookForCancel "Flattening HHT..." p_clsTaxonomy.TransformHHTTov10 DOMNode, i_colKeywords, strCategory, _ intAllowedSKUs, DOMNodeParent, i_intAllowedSKUs, True For Each DOMNode In DOMNodeParent.childNodes p_RaiseEventAndLookForCancel "Processing title: " & _ XMLGetAttribute(DOMNode, HHT_TITLE_C) intAuthoringGroup = XMLGetAttribute(DOMNode, HHT_authoringgroup_C) If (intAuthoringGroup <> i_intAuthoringGroup) Then DOMNodeParent.removeChild DOMNode Else Set DOMElement = DOMNode DOMElement.removeAttribute HHT_authoringgroup_C If (i_intAllowedSKUs = SKU_WINDOWS_MILLENNIUM_E) Then DOMElement.removeAttribute HHT_ICONURI_C DOMElement.removeAttribute HHT_VISIBLE_C DOMElement.removeAttribute HHT_INSERTMODE_C DOMElement.removeAttribute HHT_INSERTLOCATION_C DOMElement.removeAttribute HHT_SUBSITE_C DOMElement.removeAttribute HHT_NAVIGATIONMODEL_C End If End If Next Set p_GetHHTForAuthoringGroup = DOMDoc End Function Public Sub ExportHHT( _ ByVal i_strFileName As String, _ Optional ByVal i_intAuthoringGroup As Long = INVALID_ID_C _ ) Dim DOMNode As MSXML2.IXMLDOMNode Dim colKeywords As Collection Dim intAG As Long Set DOMNode = p_clsTaxonomy.GetTaxonomyInXml p_RaiseEventAndLookForCancel "Reading keywords..." Set colKeywords = New Collection p_clsKeywords.GetAllKeywordsColl colKeywords If (i_intAuthoringGroup = INVALID_ID_C) Then intAG = g_clsParameters.AuthoringGroup Else intAG = i_intAuthoringGroup End If Set DOMNode = XMLFindFirstNode(DOMNode, HHT_TAXONOMY_ENTRY_C) Set DOMNode = p_GetHHTForAuthoringGroup(DOMNode, colKeywords, intAG, ALL_SKUS_C) FileWrite i_strFileName, DOMNode.XML, False, True End Sub Public Function GenerateHHTForAuthoringGroup( _ ByVal i_intSKU As Long _ ) As MSXML2.IXMLDOMNode Dim DOMNode As MSXML2.IXMLDOMNode Dim DOMNodeEntries As MSXML2.IXMLDOMNode Dim DOMNodeChild As MSXML2.IXMLDOMNode Dim DOMElement As MSXML2.IXMLDOMElement Dim colKeywords As Collection Dim intAG As Long Set DOMNode = p_clsTaxonomy.GetTaxonomyInXml Set colKeywords = New Collection p_clsKeywords.GetAllKeywordsColl colKeywords intAG = g_clsParameters.AuthoringGroup Set DOMNode = XMLFindFirstNode(DOMNode, HHT_TAXONOMY_ENTRY_C) Set DOMNode = p_GetHHTForAuthoringGroup(DOMNode, colKeywords, intAG, i_intSKU) Set DOMNodeEntries = XMLFindFirstNode(DOMNode, HHT_TAXONOMY_ENTRIES_C) For Each DOMNodeChild In DOMNodeEntries.childNodes Set DOMElement = DOMNodeChild DOMElement.removeAttribute HHT_skus_C Next Set GenerateHHTForAuthoringGroup = DOMNode End Function Private Function p_GetOrphanedNodesTopics( _ ByRef u_DOMNodeMain As MSXML2.IXMLDOMNode, _ ByVal i_intAuthoringGroup As Long _ ) As MSXML2.IXMLDOMNode Dim DOMNode As MSXML2.IXMLDOMNode Dim DOMDoc As MSXML2.DOMDocument Dim DOMNodeNew As MSXML2.IXMLDOMNode Dim strTitle As String Dim blnLeaf As Boolean For Each DOMNode In u_DOMNodeMain.childNodes strTitle = XMLGetAttribute(DOMNode, HHT_TITLE_C) blnLeaf = XMLGetAttribute(DOMNode, HHT_leaf_C) If ((strTitle = NODE_FOR_ORPHANS_C) And (Not blnLeaf)) Then Set p_GetOrphanedNodesTopics = DOMNode Exit Function End If Next Set DOMDoc = u_DOMNodeMain.ownerDocument p_clsTaxonomy.CreateFast NODE_FOR_ORPHANS_C, "", 0, NAVMODEL_DEFAULT_NUM_C, _ "", "", ALL_SKUS_C, False, _ ROOT_TID_C, LOC_INCLUDE_ALL_C, False, False, "", "", "", "", _ DOMDoc, DOMNodeNew, i_intAuthoringGroup u_DOMNodeMain.appendChild DOMNodeNew Set p_GetOrphanedNodesTopics = DOMNodeNew End Function Private Function p_GetCategoryNode( _ ByRef u_DOMNodeMain As MSXML2.IXMLDOMNode, _ ByRef i_strCategory As String, _ ByVal i_enumSKUs As SKU_E, _ ByRef u_DOMNodeOrphans As MSXML2.IXMLDOMNode, _ ByVal i_intAuthoringGroup As Long _ ) As MSXML2.IXMLDOMNode Dim DOMDoc As MSXML2.DOMDocument Dim DOMNodeList As MSXML2.IXMLDOMNodeList Dim DOMNode As MSXML2.IXMLDOMNode Dim DOMNodeNew As MSXML2.IXMLDOMNode Dim intIndex As Long Dim strQuery As String Dim enumSKUs As SKU_E Dim intTIDOrphans As Long strQuery = "descendant::TAXONOMY_ENTRY[" strQuery = strQuery & "attribute::" & HHT_category2_C & "=""" & i_strCategory & """]" Set DOMDoc = u_DOMNodeMain.ownerDocument DOMDoc.setProperty "SelectionLanguage", "XPath" Set DOMNodeList = u_DOMNodeMain.selectNodes(strQuery) For intIndex = 0 To DOMNodeList.length - 1 Set DOMNode = DOMNodeList(intIndex) enumSKUs = XMLGetAttribute(DOMNode, HHT_skus_C) If ((enumSKUs And i_enumSKUs) <> 0) Then Set p_GetCategoryNode = DOMNode Exit Function End If Next If (u_DOMNodeOrphans Is Nothing) Then Set u_DOMNodeOrphans = p_GetOrphanedNodesTopics(u_DOMNodeMain, i_intAuthoringGroup) End If intTIDOrphans = XMLGetAttribute(u_DOMNodeOrphans, HHT_tid_C) p_clsTaxonomy.CreateFast i_strCategory, "", 0, NAVMODEL_DEFAULT_NUM_C, _ "", "", i_enumSKUs, False, _ intTIDOrphans, LOC_INCLUDE_ALL_C, True, False, "", "", "", "", _ DOMDoc, DOMNodeNew, i_intAuthoringGroup XMLSetAttribute DOMNodeNew, HHT_category2_C, i_strCategory u_DOMNodeOrphans.appendChild DOMNodeNew Set p_GetCategoryNode = DOMNodeNew End Function Private Sub p_GetBeforeAndAfterNodes( _ ByRef i_DOMNodeCategory As MSXML2.IXMLDOMNode, _ ByRef i_strInsertMode As String, _ ByRef i_strInsertLocation As String, _ ByRef o_DOMNodeBefore As MSXML2.IXMLDOMNode, _ ByRef o_DOMNodeAfter As MSXML2.IXMLDOMNode _ ) Dim DOMNode As MSXML2.IXMLDOMNode Dim strAttribute As String Dim str As String Select Case i_strInsertMode Case HHTVAL_TOP_C Set o_DOMNodeBefore = Nothing Set o_DOMNodeAfter = i_DOMNodeCategory.firstChild Case HHTVAL_AFTER_NODE_C, HHTVAL_AFTER_TOPIC_C If (i_strInsertMode = HHTVAL_AFTER_NODE_C) Then strAttribute = HHT_ENTRY_C Else strAttribute = HHT_URI_C End If For Each DOMNode In i_DOMNodeCategory.childNodes str = XMLGetAttribute(DOMNode, strAttribute) If (str = i_strInsertLocation) Then Set o_DOMNodeBefore = DOMNode Set o_DOMNodeAfter = DOMNode.nextSibling End If Next Case Else Set o_DOMNodeBefore = Nothing Set o_DOMNodeAfter = Nothing End Select End Sub Private Function p_CreateKeyword( _ ByRef i_strKeyword As String _ ) As Long On Error GoTo LErrorHandler p_CreateKeyword = p_clsKeywords.Create(i_strKeyword) Exit Function LErrorHandler: p_CreateKeyword = INVALID_ID_C End Function Private Function p_GetKID( _ ByRef i_strKeyword As String, _ ByRef u_dictKeywords As Scripting.Dictionary _ ) As String Dim intKID As Long If (u_dictKeywords.Exists(i_strKeyword)) Then p_GetKID = u_dictKeywords(i_strKeyword) Else intKID = p_CreateKeyword(i_strKeyword) If (intKID <> INVALID_ID_C) Then u_dictKeywords.Add i_strKeyword, intKID p_GetKID = intKID End If End If End Function Private Function p_GetKeywords( _ ByRef i_DOMNodeHHT As MSXML2.IXMLDOMNode, _ ByRef u_dictKeywords As Scripting.Dictionary _ ) As String Dim DOMNode As MSXML2.IXMLDOMNode If (Not i_DOMNodeHHT.firstChild Is Nothing) Then For Each DOMNode In i_DOMNodeHHT.childNodes p_GetKeywords = p_GetKeywords & p_GetKID(DOMNode.Text, u_dictKeywords) & " " Next p_GetKeywords = FormatKeywordsForTaxonomy(p_GetKeywords) End If End Function Private Sub p_CreateTaxonomyEntry( _ ByRef i_DOMNodeHHT As MSXML2.IXMLDOMNode, _ ByRef u_DOMNodeMain As MSXML2.IXMLDOMNode, _ ByRef u_dictKeywords As Scripting.Dictionary, _ ByRef u_DOMNodeOrphans As MSXML2.IXMLDOMNode, _ ByVal i_intAuthoringGroup As Long _ ) Dim strCategory As String Dim enumSKUs As SKU_E Dim DOMNodeCategory As MSXML2.IXMLDOMNode Dim DOMDoc As MSXML2.DOMDocument Dim DOMNodeNew As MSXML2.IXMLDOMNode Dim DOMNodeBefore As MSXML2.IXMLDOMNode Dim DOMNodeAfter As MSXML2.IXMLDOMNode Dim strTitle As String Dim strURI As String Dim strIconURI As String Dim strDescription As String Dim intType As Long Dim intNavModel As Long Dim blnVisible As Boolean Dim blnSubSite As Boolean Dim strEntry As String Dim blnLeaf As Boolean Dim intParentTID As Long Dim strInsertMode As String Dim strInsertLocation As String Dim intTID As Long Dim intRefTID As Long Dim intOrderUnderParent As Long Dim strKeywords As String strCategory = XMLGetAttribute(i_DOMNodeHHT, HHT_CATEGORY_C) enumSKUs = XMLGetAttribute(i_DOMNodeHHT, HHT_skus_C) If (Len(strCategory) = 0) Then Set DOMNodeCategory = u_DOMNodeMain Else Set DOMNodeCategory = p_GetCategoryNode(u_DOMNodeMain, strCategory, _ enumSKUs, u_DOMNodeOrphans, i_intAuthoringGroup) End If strTitle = XMLGetAttribute(i_DOMNodeHHT, HHT_TITLE_C) p_RaiseEventAndLookForCancel "Creating " & strTitle strURI = XMLGetAttribute(i_DOMNodeHHT, HHT_URI_C) strIconURI = XMLGetAttribute(i_DOMNodeHHT, HHT_ICONURI_C) strDescription = XMLGetAttribute(i_DOMNodeHHT, HHT_DESCRIPTION_C) intType = XMLGetAttribute(i_DOMNodeHHT, HHT_TYPE_C) intNavModel = NavModelNumber(XMLGetAttribute(i_DOMNodeHHT, HHT_NAVIGATIONMODEL_C)) blnVisible = XMLGetAttribute(i_DOMNodeHHT, HHT_VISIBLE_C) blnSubSite = XMLGetAttribute(i_DOMNodeHHT, HHT_SUBSITE_C) strEntry = XMLGetAttribute(i_DOMNodeHHT, HHT_ENTRY_C) If (Len(strEntry) = 0) Then blnLeaf = True End If intParentTID = XMLGetAttribute(DOMNodeCategory, HHT_tid_C) Set DOMDoc = u_DOMNodeMain.ownerDocument strKeywords = p_GetKeywords(i_DOMNodeHHT, u_dictKeywords) p_clsTaxonomy.CreateFast strTitle, strDescription, intType, intNavModel, strURI, strIconURI, _ enumSKUs, blnLeaf, intParentTID, LOC_INCLUDE_ALL_C, blnVisible, blnSubSite, _ strKeywords, "", "", strEntry, DOMDoc, DOMNodeNew, i_intAuthoringGroup p_clsTaxonomy.SetCategory2AndEntry DOMNodeNew, strCategory strInsertMode = XMLGetAttribute(i_DOMNodeHHT, HHT_INSERTMODE_C) strInsertLocation = XMLGetAttribute(i_DOMNodeHHT, HHT_INSERTLOCATION_C) p_GetBeforeAndAfterNodes DOMNodeCategory, strInsertMode, strInsertLocation, _ DOMNodeBefore, DOMNodeAfter intTID = XMLGetAttribute(DOMNodeNew, HHT_tid_C) If (Not DOMNodeBefore Is Nothing) Then intRefTID = XMLGetAttribute(DOMNodeBefore, HHT_tid_C) p_clsTaxonomy.Move intTID, intRefTID, False, 0, intOrderUnderParent If (DOMNodeAfter Is Nothing) Then DOMNodeCategory.appendChild DOMNodeNew Else DOMNodeCategory.insertBefore DOMNodeNew, DOMNodeAfter End If ElseIf (Not DOMNodeAfter Is Nothing) Then intRefTID = XMLGetAttribute(DOMNodeAfter, HHT_tid_C) p_clsTaxonomy.Move intTID, intRefTID, True, 0, intOrderUnderParent DOMNodeCategory.insertBefore DOMNodeNew, DOMNodeAfter Else DOMNodeCategory.appendChild DOMNodeNew End If End Sub Private Sub p_RestoreDBParameters( _ ByRef i_DOMNode As MSXML2.IXMLDOMNode _ ) Dim DOMNode As MSXML2.IXMLDOMNode Dim strName As String Dim strValue As String If (i_DOMNode Is Nothing) Then Exit Sub End If For Each DOMNode In i_DOMNode.childNodes strName = XMLGetAttribute(DOMNode, HHT_name_C) strValue = XMLGetAttribute(DOMNode, HHT_value_C) g_clsParameters.Value(strName) = XMLUnEscape(strValue) Next End Sub Public Sub ImportHHT( _ ByVal i_strFileName As String, _ Optional ByVal i_intAuthoringGroup As Long = INVALID_ID_C _ ) Dim DOMDoc As MSXML2.DOMDocument Dim DOMNodeHHT As MSXML2.IXMLDOMNode Dim DOMNodeMain As MSXML2.IXMLDOMNode Dim DOMNodeEntries As MSXML2.IXMLDOMNode Dim DOMNode As MSXML2.IXMLDOMNode Dim dictKeywords As Scripting.Dictionary Dim DOMNodeOrphans As MSXML2.IXMLDOMNode Dim DOMNodeParameters As MSXML2.IXMLDOMNode Set DOMDoc = New MSXML2.DOMDocument DOMDoc.Load i_strFileName Set DOMNodeHHT = DOMDoc Set DOMNodeMain = p_clsTaxonomy.GetTaxonomyInXml Set DOMNodeMain = XMLFindFirstNode(DOMNodeMain, HHT_TAXONOMY_ENTRY_C) Set dictKeywords = New Scripting.Dictionary p_clsKeywords.GetAllKeywordsDict dictKeywords p_clsTaxonomy.SetCategory2AndEntry DOMNodeMain, "" Set DOMNodeEntries = XMLFindFirstNode(DOMNodeHHT, HHT_TAXONOMY_ENTRIES_C) If (DOMNodeEntries Is Nothing) Then Exit Sub End If For Each DOMNode In DOMNodeEntries.childNodes p_CreateTaxonomyEntry DOMNode, DOMNodeMain, dictKeywords, DOMNodeOrphans, _ i_intAuthoringGroup Next p_RaiseEventAndLookForCancel "Restoring database parameters..." Set DOMNodeParameters = XMLFindFirstNode(DOMNodeHHT, HHT_dbparameters_C) p_RestoreDBParameters DOMNodeParameters End Sub Private Sub p_OutputStopSigns( _ ByVal i_TS As Scripting.TextStream _ ) Dim dictStopSigns As Scripting.Dictionary Dim intSSID As Variant Dim strContext As String Set dictStopSigns = New Scripting.Dictionary p_clsStopSigns.GetAllStopSignsDict dictStopSigns p_PrintWithIndentation i_TS, 1, "" p_RaiseEventAndLookForCancel "Adding new Stop Signs" For Each intSSID In dictStopSigns.Keys If (dictStopSigns(intSSID)(1) = CONTEXT_ANYWHERE_E) Then strContext = "ANYWHERE" Else strContext = "ENDOFWORD" End If p_PrintWithIndentation i_TS, 2, _ "" Next p_PrintWithIndentation i_TS, 1, "" End Sub Private Sub p_OutputStopWords( _ ByVal i_TS As Scripting.TextStream _ ) Dim dictStopWords As Scripting.Dictionary Dim intSWID As Variant Set dictStopWords = New Scripting.Dictionary p_clsStopWords.GetAllStopWordsDict dictStopWords p_PrintWithIndentation i_TS, 1, "" p_RaiseEventAndLookForCancel "Adding new Stop Words" For Each intSWID In dictStopWords.Keys p_PrintWithIndentation i_TS, 2, _ "" Next p_PrintWithIndentation i_TS, 1, "" End Sub Private Sub p_OutputSynonyms( _ ByVal i_TS As Scripting.TextStream _ ) Dim clsSynonymSets As SynonymSets Dim rs As ADODB.Recordset Dim intLastEID As Long Dim intEID As Long Set clsSynonymSets = New SynonymSets Set rs = New ADODB.Recordset clsSynonymSets.GetSynonymsRs rs p_PrintWithIndentation i_TS, 1, "" Do While (Not rs.EOF) intEID = rs("EID") If (intEID <> intLastEID) Then If (intLastEID <> 0) Then p_PrintWithIndentation i_TS, 2, "" End If intLastEID = intEID p_PrintWithIndentation i_TS, 2, "" End If p_PrintWithIndentation i_TS, 3, "" & XMLEscape(rs("Keyword")) & "" rs.MoveNext Loop If (rs.RecordCount <> 0) Then p_PrintWithIndentation i_TS, 2, "" End If p_PrintWithIndentation i_TS, 1, "" End Sub Private Sub p_OutputOperators( _ ByVal i_TS As Scripting.TextStream _ ) p_PrintWithIndentation i_TS, 1, "" p_PrintWithIndentation i_TS, 2, _ "" p_PrintWithIndentation i_TS, 2, _ "" p_PrintWithIndentation i_TS, 2, _ "" p_PrintWithIndentation i_TS, 1, "" End Sub Private Sub p_GeneratePackageDescription( _ ByVal i_TS As Scripting.TextStream, _ ByVal i_enumSKU As SKU_E, _ ByVal i_strHHT As String _ ) p_RaiseEventAndLookForCancel "Generating " & PACKAGE_DESCRIPTION p_PrintWithIndentation i_TS, 0, "" p_PrintWithIndentation i_TS, 0, "" p_PrintWithIndentation i_TS, 1, "" p_PrintWithIndentation i_TS, 1, "" If (i_enumSKU <> SKU_WINDOWS_MILLENNIUM_E) Then p_PrintWithIndentation i_TS, 1, "" p_PrintWithIndentation i_TS, 1, "" End If p_PrintWithIndentation i_TS, 1, "" p_PrintWithIndentation i_TS, 2, "" p_PrintWithIndentation i_TS, 1, "" i_TS.WriteLine g_clsParameters.DomFragmentPackageDesc(i_enumSKU) p_PrintWithIndentation i_TS, 0, "" End Sub Private Sub p_OutputHHTProlog( _ ByVal i_TS As Scripting.TextStream, _ ByVal i_enumSKU As SKU_E _ ) Dim strDateTime As String strDateTime = FormatDateTime(Now, vbLongDate) & " " & FormatDateTime(Now, vbLongTime) p_PrintWithIndentation i_TS, 0, "" p_PrintWithIndentation i_TS, 0, "" p_PrintWithIndentation i_TS, 0, "" End Sub Private Sub p_PrintWithIndentation( _ ByVal i_TS As Scripting.TextStream, _ ByVal i_intNumIndents As Long, _ ByVal i_strText As String _ ) i_TS.Write Space(i_intNumIndents * 4) i_TS.WriteLine i_strText End Sub Private Sub p_RaiseEventAndLookForCancel( _ ByVal strStatus As String _ ) Dim blnCancel As Boolean blnCancel = False RaiseEvent ReportStatus(strStatus, blnCancel) If (blnCancel) Then Err.Raise errCancel End If End Sub Private Sub p_clsTaxonomy_ReportStatus(ByVal strStatus As String, blnCancel As Boolean) p_RaiseEventAndLookForCancel strStatus End Sub