When you publish or edit an article in the TechNet Wiki, you can include the [toc] tag in the body of the article to have a Table of Contents automatically created. The Table of Contents is created from the headings in the article.

When a TechNet Wiki article with the [toc] tag is saved, a script analyzes all of the headings. Headings are enclosed by <h1> and </h1> tags in the HTML, where the digit "1" can be any digit from 1 to 9. For example, a heading line in the HTML might be similar to below before being saved:

<h3>This is an Example</h3>

If a heading does not have an anchor tag (such as in my example), one is added when the article is saved. The name in the anchor tag will be the text of the heading, but with spaces and special characters replaced by underscores. For example, the above heading will be modified as follows when the Wiki article is saved:

<h3><a name="This_is_an_Example"></a>This is an Example</h3>

Each anchor name tag is enclosed by the <a name> and </a> tags. When a Wiki article with the [toc] tag is displayed in a browser, a script creates the Table of Contents from all headings in the article. When you click on an entry in the Table of Contents, the browser will jump to the appropriate heading line by referencing the anchor name tag. This makes it important that the anchor names be unique in the article. If two anchors have the same name, the Table of Contents will only jump to the first instance of the name.

Several problems in the HTML of TechNet Wiki articles can make the TOC (Table of Contents) feature not work properly. The VBScript program linked on this page is designed to parse the HTML to find these problems. The script finds the following problems:

1. Embedded "0" characters in headings. This character is no problem in the text of the heading. However, the script that runs when the article is saved will include the "0" in the anchor tag name. This causes the heading to not appear in the TOC at all. It is hoped that this bug will be fixed in the future, but for now the workaround is to replace all "0" characters in the anchor name tag with something else, such as the string "Oh". In addition, when the article is saved, the anchor tag with the "0" characters is not recognized, so the script creates another with the same problem. This adds to the "trash" in the HTML, making it harder to read. For example, HTML similar to the following can be found in a Wiki article when a heading has the zero character (this one line will be word wrapped):

<h3><a name="Windows_Server_2008_R2"></a><a name="Windows_Server_2008_R2"></a><a name="Windows_Server_2008_R2"></a><a name="Windows_Server_2008_R2"></a>Windows Server 2008 R2</h3>

This article was saved 4 times, and each time the anchor tag was not recognized and was re-created from the text of the heading. This heading line will not appear in the Table of Contents because the anchor tag name is still not recognized by the script that creates the TOC. The fix is to remove the extra anchor name tags (so there is only one) and replace the "0" character with something else, such as the string "Oh", in the remaining anchor tag. For example, the heading above could be fixed as follows:

<h3><a name="Windows_Server_TwentyOhEight_R2"></a>Windows Server 2008 R2</h3>

2. Foreign characters (extended ASCII) in headings. The same problem causes the TOC feature to not recognize foreign characters, such as "é", "í", "ç", or "ã".

3. Duplicate anchor name tags in headings. This can cause the Table of Contents feature to link to the wrong location in the article.

4. Blank headings (no text to be displayed). This can result in blanks in the Table of Contents, and the TOC may link to the blank line.

5. Leading digits in headings. This is usually not a problem. However any leading digits in the heading are not included in the anchor name tag created by the TOC script. This can in some cases cause the anchor name tag to be a duplicate, if two headings only differ by the leading digit.

6. RGB color values, either decimal or hexadecimal. These are no longer supported in the TechNet Wiki. The workaround is to replace these values with standard color names.

In addition, the VBScript program finds all duplicate anchor name tags in the TechNet Wiki article, whether in headings or not.

In preparation to run the script, open the TechNet Wiki article and click on the "Edit" tab. In the Wiki editor select "HTML" near the bottom (the default selection is "Design"). Copy the entire HTML of the article into a text file and save it. Then run this script and either specify the file with the HTML of the article as a parameter or let the script prompt you for the file.

The output of the script will display the headings where problems were found. However, the script does not fix the problems. You will need to edit the Wiki article, select HTML in the editor, find the problem lines, and fix them yourself. You can search on the string "<h" (without the quotes) to find all heading lines in the HTML.

The script output indicates the problem and the heading. If headings have duplicate anchor name tags, the script will list the duplicates twice, once as duplicate headings, then again as duplicate anchor tags. If the heading has embedded zero characters, only the first anchor name tag is displayed, to avoid the very long heading that results when the anchor tag is repeated many times. When decimal RGB color values are found, the script also outputs the closest standard color name in square brackets. Typical output can be similar to below:

----- Analyze Headings
 ## Embedded "0" in name tag: <h3><a name="Server 2008"></a>Server 2008</a></h3>
 ## Blank heading: <h4></h4>
 ## Blank heading: <h3><a name="see_also"></a></h3>
 ## Duplicate anchor name tag: <h1><a name="see_also"></a>see also</h1>
 Number of problems in headings: 4
 ----- Analyze Anchor Name Tags
 ## Duplicate anchor name tag: <a name="see_also"></a>
 Number of duplicate anchor name tags: 1
----- Search for color values
## Found rgb color: rgb(192, 0, 0) [best standard color: FireBrick]
## Found rgb color: rgb(42, 42, 42) [best standard color: DarkSlateGray]
## Found rgb color: rgb(255, 0, 0) [best standard color: Red]
Total color values found: 3

VB Script
Edit|Remove
' ParseWiki.vbs 
' VBScript program to parse TechNet Wiki Article HTML for heading 
' and anchor name tag problems. 
' Script Author: Richard L. Mueller 
' Version 1.0 - October 11, 2012 
' Version 1.1 - November 8, 2012 - Improve recognition of headings. 
' Version 1.2 - February 15, 2012 - Find foreign characters. Find: é í ç ã 
' Version 1.3 - April 10, 2013 - Find rgb and hex color values. 
' Version 1.4 - June 7, 2013 - Suggest best color to replace rgb color values. 
' Version 1.5 - December 2, 2013 - Find any extended ASCII characters. 
 
Option Explicit 
 
Dim strFile, objFSO, objFile, strText, objRE, objHeadings, objHeading 
Dim strHeading, objList, objRE2, objRE3, objRE4, objNames, objName, strName 
Dim strLeading, objTags, objTag, strTag, intCount, strHeading2 
Dim k, blnName, blnSpan, blnEndName, blnEndSpan, blnBlank, blnHeading 
Dim intIndex, strTemp, objRGBColors, objRGBColor, objHexColors, objHexColor 
Dim strColor, arrColors(1383) 
 
Const ForReading = 1 
 
' Check for file or prompt. 
' This file should be a copy of the Wiki article HTML. 
If (Wscript.Arguments.Count = 0Then 
    strFile = InputBox("Enter file name") 
    ' Check if user canceled. 
    If (strFile = ""Then 
        Wscript.Quit 
    End If 
Else 
    strFile = Wscript.Arguments(0End If 
 
' Open the file. 
Set objFSO = CreateObject("Scripting.FileSystemObject"On Error Resume Next 
Set objFile = objFSO.OpenTextFile(strFile, ForReading) 
If (Err.Number <> 0Then 
    Wscript.Echo "Unable to open file: " & strFile 
    Wscript.Echo "Error Number: " & Err.Number 
    Wscript.Echo "Description: " & Err.Description 
    Wscript.Quit 
End If 
On Error GoTo 0 
 
' Populate array with the standard color names and their decimal RGB values. 
arrColors(00) = "Red" 
arrColors(01) = "255" 
arrColors(02) = "0" 
arrColors(03) = "0" 
 
arrColors(10) = "DarkRed" 
arrColors(11) = "139" 
arrColors(12) = "0" 
arrColors(13) = "0" 
 
arrColors(20) = "FireBrick" 
arrColors(21) = "178" 
arrColors(22) = "34" 
arrColors(23) = "34" 
 
arrColors(30) = "Crimson" 
arrColors(31) = "220" 
arrColors(32) = "20" 
arrColors(33) = "60" 
 
arrColors(40) = "IndianRed" 
arrColors(41) = "205" 
arrColors(42) = "92" 
arrColors(43) = "92" 
 
arrColors(50) = "LightCoral" 
arrColors(51) = "240" 
arrColors(52) = "128" 
arrColors(53) = "128" 
 
arrColors(60) = "DarkSalmon" 
arrColors(61) = "233" 
arrColors(62) = "150" 
arrColors(63) = "122" 
 
arrColors(70) = "Salmon" 
arrColors(71) = "250" 
arrColors(72) = "128" 
arrColors(73) = "114" 
 
arrColors(80) = "LightSalmon" 
arrColors(81) = "255" 
arrColors(82) = "160" 
arrColors(83) = "122" 
 
arrColors(90) = "MediumVioletRed" 
arrColors(91) = "199" 
arrColors(92) = "21" 
arrColors(93) = "133" 
 
arrColors(100) = "PaleVioletRed" 
arrColors(101) = "219" 
arrColors(102) = "112" 
arrColors(103) = "147" 
 
arrColors(110) = "DeepPink" 
arrColors(111) = "255" 
arrColors(112) = "20" 
arrColors(113) = "147" 
 
arrColors(120) = "HotPink" 
arrColors(121) = "255" 
arrColors(122) = "105" 
arrColors(123) = "180" 
 
arrColors(130) = "LightPink" 
arrColors(131) = "255" 
arrColors(132) = "182" 
arrColors(133) = "193" 
 
arrColors(140) = "Pink" 
arrColors(141) = "255" 
arrColors(142) = "192" 
arrColors(143) = "203" 
 
arrColors(150) = "OrangeRed" 
arrColors(151) = "255" 
arrColors(152) = "69" 
arrColors(153) = "0" 
 
arrColors(160) = "Tomato" 
arrColors(161) = "255" 
arrColors(162) = "99" 
arrColors(163) = "71" 
 
arrColors(170) = "Coral" 
arrColors(171) = "255" 
arrColors(172) = "127" 
arrColors(173) = "80" 
 
arrColors(180) = "DarkOrange" 
arrColors(181) = "255" 
arrColors(182) = "140" 
arrColors(183) = "0" 
 
arrColors(190) = "Orange" 
arrColors(191) = "255" 
arrColors(192) = "165" 
arrColors(193) = "0" 
 
arrColors(200) = "Gold" 
arrColors(201) = "255" 
arrColors(202) = "215" 
arrColors(203) = "0" 
 
arrColors(210) = "Yellow" 
arrColors(211) = "255" 
arrColors(212) = "255" 
arrColors(213) = "0" 
 
arrColors(220) = "LightYellow" 
arrColors(221) = "255" 
arrColors(222) = "255" 
arrColors(223) = "224" 
 
arrColors(230) = "LemonChiffon" 
arrColors(231) = "255" 
arrColors(232) = "250" 
arrColors(233) = "205" 
 
arrColors(240) = "LightGoldenrodYellow" 
arrColors(241) = "250" 
arrColors(242) = "250" 
arrColors(243) = "210" 
 
arrColors(250) = "PapayaWhip" 
arrColors(251) = "255" 
arrColors(252) = "239" 
arrColors(253) = "213" 
 
arrColors(260) = "Moccasin" 
arrColors(261) = "255" 
arrColors(262) = "228" 
arrColors(263) = "181" 
 
arrColors(270) = "PeachPuff" 
arrColors(271) = "255" 
arrColors(272) = "218" 
arrColors(273) = "185" 
 
arrColors(280) = "PaleGoldenrod" 
arrColors(281) = "238" 
arrColors(282) = "232" 
arrColors(283) = "170" 
 
arrColors(290) = "Khaki" 
arrColors(291) = "240" 
arrColors(292) = "230" 
arrColors(293) = "140" 
 
arrColors(300) = "DarkKhaki" 
arrColors(301) = "189" 
arrColors(302) = "183" 
arrColors(303) = "107" 
 
arrColors(310) = "CornSilk" 
arrColors(311) = "255" 
arrColors(312) = "248" 
arrColors(313) = "220" 
 
arrColors(320) = "BlanchedAlmond" 
arrColors(321) = "255" 
arrColors(322) = "235" 
arrColors(323) = "205" 
 
arrColors(330) = "Bisque" 
arrColors(331) = "255" 
arrColors(332) = "228" 
arrColors(333) = "196" 
 
arrColors(340) = "NavajoWhite" 
arrColors(341) = "255" 
arrColors(342) = "222" 
arrColors(343) = "173" 
 
arrColors(350) = "Wheat" 
arrColors(351) = "245" 
arrColors(352) = "222" 
arrColors(353) = "179" 
 
arrColors(360) = "BurlyWood" 
arrColors(361) = "222" 
arrColors(362) = "184" 
arrColors(363) = "135" 
 
arrColors(370) = "Tan" 
arrColors(371) = "210" 
arrColors(372) = "180" 
arrColors(373) = "140" 
 
arrColors(380) = "RosyBrown" 
arrColors(381) = "188" 
arrColors(382) = "143" 
arrColors(383) = "143" 
 
arrColors(390) = "SandyBrown" 
arrColors(391) = "244" 
arrColors(392) = "164" 
arrColors(393) = "96" 
 
arrColors(400) = "Goldenrod" 
arrColors(401) = "218" 
arrColors(402) = "165" 
arrColors(403) = "32" 
 
arrColors(410) = "DarkGoldenrod" 
arrColors(411) = "184" 
arrColors(412) = "134" 
arrColors(413) = "11" 
 
arrColors(420) = "Peru" 
arrColors(421) = "205" 
arrColors(422) = "133" 
arrColors(423) = "63" 
 
arrColors(430) = "Chocolate" 
arrColors(431) = "210" 
arrColors(432) = "105" 
arrColors(433) = "30" 
 
arrColors(440) = "SaddleBrown" 
arrColors(441) = "139" 
arrColors(442) = "69" 
arrColors(443) = "19" 
 
arrColors(450) = "Sienna" 
arrColors(451) = "160" 
arrColors(452) = "82" 
arrColors(453) = "45" 
 
arrColors(460) = "Brown" 
arrColors(461) = "165" 
arrColors(462) = "42" 
arrColors(463) = "42" 
 
arrColors(470) = "Maroon" 
arrColors(471) = "128" 
arrColors(472) = "0" 
arrColors(473) = "0" 
 
arrColors(480) = "DarkOliveGreen" 
arrColors(481) = "85" 
arrColors(482) = "107" 
arrColors(483) = "47" 
 
arrColors(490) = "Olive" 
arrColors(491) = "128" 
arrColors(492) = "128" 
arrColors(493) = "0" 
 
arrColors(500) = "OliveDrab" 
arrColors(501) = "107" 
arrColors(502) = "142" 
arrColors(503) = "35" 
 
arrColors(510) = "YellowGreen" 
arrColors(511) = "154" 
arrColors(512) = "205" 
arrColors(513) = "50" 
 
arrColors(520) = "LimeGreen" 
arrColors(521) = "50" 
arrColors(522) = "205" 
arrColors(523) = "50" 
 
arrColors(530) = "Lime" 
arrColors(531) = "0" 
arrColors(532) = "255" 
arrColors(533) = "0" 
 
arrColors(540) = "LawnGreen" 
arrColors(541) = "124" 
arrColors(542) = "252" 
arrColors(543) = "0" 
 
arrColors(550) = "Chartreuse" 
arrColors(551) = "127" 
arrColors(552) = "255" 
arrColors(553) = "0" 
 
arrColors(560) = "GreenYellow" 
arrColors(561) = "173" 
arrColors(562) = "255" 
arrColors(563) = "47" 
 
arrColors(570) = "SpringGreen" 
arrColors(571) = "0" 
arrColors(572) = "255" 
arrColors(573) = "127" 
 
arrColors(580) = "MediumSpringGreen" 
arrColors(581) = "0" 
arrColors(582) = "250" 
arrColors(583) = "154" 
 
arrColors(590) = "LightGreen" 
arrColors(591) = "144" 
arrColors(592) = "238" 
arrColors(593) = "144" 
 
arrColors(600) = "PaleGreen" 
arrColors(601) = "152" 
arrColors(602) = "251" 
arrColors(603) = "152" 
 
arrColors(610) = "DarkSeaGreen" 
arrColors(611) = "143" 
arrColors(612) = "188" 
arrColors(613) = "143" 
 
arrColors(620) = "MediumSeaGreen" 
arrColors(621) = "60" 
arrColors(622) = "179" 
arrColors(623) = "113" 
 
arrColors(630) = "SeaGreen" 
arrColors(631) = "46" 
arrColors(632) = "139" 
arrColors(633) = "87" 
 
arrColors(640) = "ForestGreen" 
arrColors(641) = "34" 
arrColors(642) = "139" 
arrColors(643) = "34" 
 
arrColors(650) = "Green" 
arrColors(651) = "0" 
arrColors(652) = "128" 
arrColors(653) = "0" 
 
arrColors(660) = "DarkGreen" 
arrColors(661) = "0" 
arrColors(662) = "100" 
arrColors(663) = "0" 
 
arrColors(670) = "MediumAquamarine" 
arrColors(671) = "102" 
arrColors(672) = "205" 
arrColors(673) = "170" 
 
arrColors(680) = "Aqua" 
arrColors(681) = "0" 
arrColors(682) = "255" 
arrColors(683) = "255" 
 
arrColors(690) = "Cyan" 
arrColors(691) = "0" 
arrColors(692) = "255" 
arrColors(693) = "255" 
 
arrColors(700) = "LightCyan" 
arrColors(701) = "224" 
arrColors(702) = "255" 
arrColors(703) = "255" 
 
arrColors(710) = "PaleTurquoise" 
arrColors(711) = "175" 
arrColors(712) = "238" 
arrColors(713) = "238" 
 
arrColors(720) = "Aquamarine" 
arrColors(721) = "127" 
arrColors(722) = "255" 
arrColors(723) = "212" 
 
arrColors(730) = "Turquoise" 
arrColors(731) = "64" 
arrColors(732) = "224" 
arrColors(733) = "208" 
 
arrColors(740) = "MediumTurquoise" 
arrColors(741) = "72" 
arrColors(742) = "209" 
arrColors(743) = "204" 
 
arrColors(750) = "DarkTurquoise" 
arrColors(751) = "0" 
arrColors(752) = "206" 
arrColors(753) = "209" 
 
arrColors(760) = "LightSeaGreen" 
arrColors(761) = "32" 
arrColors(762) = "178" 
arrColors(763) = "170" 
 
arrColors(770) = "CadetBlue" 
arrColors(771) = "95" 
arrColors(772) = "158" 
arrColors(773) = "160" 
 
arrColors(780) = "DarkCyan" 
arrColors(781) = "0" 
arrColors(782) = "139" 
arrColors(783) = "139" 
 
arrColors(790) = "Teal" 
arrColors(791) = "0" 
arrColors(792) = "128" 
arrColors(793) = "128" 
 
arrColors(800) = "LightSteelBlue" 
arrColors(801) = "176" 
arrColors(802) = "196" 
arrColors(803) = "222" 
 
arrColors(810) = "PowderBlue" 
arrColors(811) = "176" 
arrColors(812) = "224" 
arrColors(813) = "230" 
 
arrColors(820) = "LightBlue" 
arrColors(821) = "173" 
arrColors(822) = "216" 
arrColors(823) = "230" 
 
arrColors(830) = "SkyBlue" 
arrColors(831) = "135" 
arrColors(832) = "206" 
arrColors(833) = "235" 
 
arrColors(840) = "LightSkyBlue" 
arrColors(841) = "135" 
arrColors(842) = "206" 
arrColors(843) = "250" 
 
arrColors(850) = "DeepSkyBlue" 
arrColors(851) = "0" 
arrColors(852) = "191" 
arrColors(853) = "255" 
 
arrColors(860) = "DodgerBlue" 
arrColors(861) = "30" 
arrColors(862) = "144" 
arrColors(863) = "255" 
 
arrColors(870) = "CornflowerBlue" 
arrColors(871) = "100" 
arrColors(872) = "149" 
arrColors(873) = "237" 
 
arrColors(880) = "SteelBlue" 
arrColors(881) = "70" 
arrColors(882) = "130" 
arrColors(883) = "180" 
 
arrColors(890) = "RoyalBlue" 
arrColors(891) = "65" 
arrColors(892) = "105" 
arrColors(893) = "225" 
 
arrColors(900) = "Blue" 
arrColors(901) = "0" 
arrColors(902) = "0" 
arrColors(903) = "255" 
 
arrColors(910) = "MediumBlue" 
arrColors(911) = "0" 
arrColors(912) = "0" 
arrColors(913) = "205" 
 
arrColors(920) = "DarkBlue" 
arrColors(921) = "0" 
arrColors(922) = "0" 
arrColors(923) = "139" 
 
arrColors(930) = "Navy" 
arrColors(931) = "0" 
arrColors(932) = "0" 
arrColors(933) = "128" 
 
arrColors(940) = "MidnightBlue" 
arrColors(941) = "25" 
arrColors(942) = "25" 
arrColors(943) = "112" 
 
arrColors(950) = "Lavender" 
arrColors(951) = "230" 
arrColors(952) = "230" 
arrColors(953) = "250" 
 
arrColors(960) = "Thistle" 
arrColors(961) = "216" 
arrColors(962) = "191" 
arrColors(963) = "216" 
 
arrColors(970) = "Plum" 
arrColors(971) = "221" 
arrColors(972) = "160" 
arrColors(973) = "221" 
 
arrColors(980) = "Violet" 
arrColors(981) = "238" 
arrColors(982) = "130" 
arrColors(983) = "238" 
 
arrColors(990) = "Orchid" 
arrColors(991) = "218" 
arrColors(992) = "112" 
arrColors(993) = "214" 
 
' Also called Fuchsia. 
arrColors(1000) = "Magenta" 
arrColors(1001) = "255" 
arrColors(1002) = "0" 
arrColors(1003) = "255" 
 
arrColors(1010) = "MediumOrchid" 
arrColors(1011) = "186" 
arrColors(1012) = "85" 
arrColors(1013) = "211" 
 
arrColors(1020) = "MediumPurple" 
arrColors(1021) = "147" 
arrColors(1022) = "112" 
arrColors(1023) = "219" 
 
arrColors(1030) = "BlueViolet" 
arrColors(1031) = "138" 
arrColors(1032) = "43" 
arrColors(1033) = "226" 
 
arrColors(1040) = "DarkViolet" 
arrColors(1041) = "148" 
arrColors(1042) = "0" 
arrColors(1043) = "211" 
 
arrColors(1050) = "DarkOrchid" 
arrColors(1051) = "153" 
arrColors(1052) = "50" 
arrColors(1053) = "204" 
 
arrColors(1060) = "DarkMagenta" 
arrColors(1061) = "139" 
arrColors(1062) = "0" 
arrColors(1063) = "139" 
 
arrColors(1070) = "Purple" 
arrColors(1071) = "128" 
arrColors(1072) = "0" 
arrColors(1073) = "128" 
 
arrColors(1080) = "Indigo" 
arrColors(1081) = "75" 
arrColors(1082) = "0" 
arrColors(1083) = "130" 
 
arrColors(1090) = "DarkSlateBlue" 
arrColors(1091) = "72" 
arrColors(1092) = "61" 
arrColors(1093) = "139" 
 
arrColors(1100) = "SlateBlue" 
arrColors(1101) = "106" 
arrColors(1102) = "90" 
arrColors(1103) = "205" 
 
arrColors(1110) = "MediumSlateBlue" 
arrColors(1111) = "123" 
arrColors(1112) = "104" 
arrColors(1113) = "238" 
 
arrColors(1120) = "White" 
arrColors(1121) = "255" 
arrColors(1122) = "255" 
arrColors(1123) = "255" 
 
arrColors(1130) = "Snow" 
arrColors(1131) = "255" 
arrColors(1132) = "250" 
arrColors(1133) = "250" 
 
arrColors(1140) = "HoneyDew" 
arrColors(1141) = "240" 
arrColors(1142) = "255" 
arrColors(1143) = "240" 
 
arrColors(1150) = "MintCream" 
arrColors(1151) = "245" 
arrColors(1152) = "255" 
arrColors(1153) = "250" 
 
arrColors(1160) = "Azure" 
arrColors(1161) = "240" 
arrColors(1162) = "255" 
arrColors(1163) = "255" 
 
arrColors(1170) = "AliceBlue" 
arrColors(1171) = "240" 
arrColors(1172) = "248" 
arrColors(1173) = "255" 
 
arrColors(1180) = "GhostWhite" 
arrColors(1181) = "248" 
arrColors(1182) = "248" 
arrColors(1183) = "255" 
 
arrColors(1190) = "WhiteSmoke" 
arrColors(1191) = "245" 
arrColors(1192) = "245" 
arrColors(1193) = "245" 
 
arrColors(1200) = "Seashell" 
arrColors(1201) = "255" 
arrColors(1202) = "245" 
arrColors(1203) = "238" 
 
arrColors(1210) = "Beige" 
arrColors(1211) = "245" 
arrColors(1212) = "245" 
arrColors(1213) = "220" 
 
arrColors(1220) = "OldLace" 
arrColors(1221) = "253" 
arrColors(1222) = "245" 
arrColors(1223) = "230" 
 
arrColors(1230) = "FloralWhite" 
arrColors(1231) = "255" 
arrColors(1232) = "250" 
arrColors(1233) = "240" 
 
arrColors(1240) = "Ivory" 
arrColors(1241) = "255" 
arrColors(1242) = "255" 
arrColors(1243) = "240" 
 
arrColors(1250) = "AntiqueWhite" 
arrColors(1251) = "250" 
arrColors(1252) = "235" 
arrColors(1253) = "215" 
 
arrColors(1260) = "Linen" 
arrColors(1261) = "250" 
arrColors(1262) = "240" 
arrColors(1263) = "230" 
 
arrColors(1270) = "LavenderBlush" 
arrColors(1271) = "255" 
arrColors(1272) = "240" 
arrColors(1273) = "245" 
 
arrColors(1280) = "MistyRose" 
arrColors(1281) = "255" 
arrColors(1282) = "228" 
arrColors(1283) = "225" 
 
arrColors(1290) = "Gainsboro" 
arrColors(1291) = "220" 
arrColors(1292) = "220" 
arrColors(1293) = "220" 
 
arrColors(1300) = "LightGray" 
arrColors(1301) = "211" 
arrColors(1302) = "211" 
arrColors(1303) = "211" 
 
arrColors(1310) = "Silver" 
arrColors(1311) = "192" 
arrColors(1312) = "192" 
arrColors(1313) = "192" 
 
arrColors(1320) = "DarkGray" 
arrColors(1321) = "169" 
arrColors(1322) = "169" 
arrColors(1323) = "169" 
 
arrColors(1330) = "Gray" 
arrColors(1331) = "128" 
arrColors(1332) = "128" 
arrColors(1333) = "128" 
 
arrColors(1340) = "DimGray" 
arrColors(1341) = "105" 
arrColors(1342) = "105" 
arrColors(1343) = "105" 
 
arrColors(1350) = "LightSlateGray" 
arrColors(1351) = "119" 
arrColors(1352) = "136" 
arrColors(1353) = "153" 
 
arrColors(1360) = "SlateGray" 
arrColors(1361) = "112" 
arrColors(1362) = "128" 
arrColors(1363) = "144" 
 
arrColors(1370) = "DarkSlateGray" 
arrColors(1371) = "47" 
arrColors(1372) = "79" 
arrColors(1373) = "79" 
 
arrColors(1380) = "Black" 
arrColors(1381) = "0" 
arrColors(1382) = "0" 
arrColors(1383) = "0" 
 
' Set up dictionary object. 
Set objList = CreateObject("Scripting.Dictionary") 
objList.CompareMode = vbTextCompare 
 
' Read the file contents. Convert to all lower case. 
strText = LCase(objFile.ReadAll) 
objFile.Close 
 
Set objRE = New RegExp 
objRE.Global = True 
Set objRE2 = New RegExp 
objRE2.Global = True 
Set objRE3 = New RegExp 
objRE3.Global = True 
Set objRE4 = New RegExp 
objRE4.Global = True 
 
' Parse headings. 
objRE.Pattern = "<h[0-9].*</h[0-9]>" 
Set objHeadings = objRE.Execute(strText) 
 
' Parse anchor name tags. 
objRE2.Pattern = "<a name=.*></a>" 
 
' Parse rgb color values. 
objRE3.Pattern = "rgb\([0-9]+, [0-9]+, [0-9]+\)" 
 
' Parse hex color values. 
objRE4.Pattern = "#[0-9a-f]{6}" 
 
' Read file for headings and anchor name tags. 
Wscript.Echo "----- Analyze Headings" 
intCount = 0 
For Each objHeading In objHeadings 
    strHeading = objHeading.Value 
    ' Find anchor name tags in the heading. 
    Set objNames = objRE2.Execute(strHeading) 
    For Each objName  In objNames 
        strName = objName.Value 
        ' Check leading character of the anchor name tag. 
        strLeading = Mid(strName, 101) 
        If (IsNumeric(strLeading) = TrueThen 
            Wscript.Echo "## Leading digit in anchor name tag: " & strHeading 
            intCount = intCount + 1 
        End If 
        ' Check for embedded "0" characters in the anchor name tag. 
        If (InStr(strName, "0") > 0Then 
            ' Remove any duplicate <a name>...</a> anchor tags for readability. 
            intIndex = InStr(strName, "</a>") 
            strTemp = Left(strName, intIndex + 3) 
            ' "0" characters are only a problem in the first <a name> tag. 
            If (InStr(strTemp, "0") > 0Then 
                Wscript.Echo "## Embedded ""0"" in name tag: " _ 
                    & Replace(strHeading, strName, strTemp) 
                intCount = intCount + 1 
            End If 
        End If 
        If (Foreign(strName) = TrueThen 
            Wscript.Echo "## Foreign character in anchor name tag: " & strHeading 
            intCount = intCount + 1 
        End If 
        ' Check for duplicate anchor name tags. 
        If (objList.Exists(strName) = FalseThen 
            objList.Add strName, True 
        Else 
            Wscript.Echo "## Duplicate anchor name tag: " & strHeading 
            intCount = intCount + 1 
        End If 
    Next 
    ' Check for blank heading (no characters outside name or span tags). 
    blnName = False 
    blnSpan = False 
    blnEndName = False 
    blnEndSpan = False 
    blnHeading = True 
    blnBlank = True 
    ' Ignore spaces when looking for blanks. 
    strHeading2 = Replace(strHeading, "&nbsp;""") 
    For k = 1 to Len(strHeading) 
        If (blnHeading = FalseThen 
            If (Mid(strHeading2, k, 3) = "</h"Then 
                Exit For 
            End If 
            If (blnName = TrueAnd (Mid(strHeading2, k, 1) = ">"Then 
                blnName = False 
            End If 
            If (Mid(strHeading2, k, 8) = "<a name="Then 
                blnName = True 
            End If 
            If (blnSpan = TrueAnd (Mid(strHeading2, k, 1) = ">"Then 
                blnSpan = False 
            End If 
            If (Mid(strHeading2, k, 12) = "<span style="Then 
                blnSpan = True 
            End If 
            If (blnEndName = TrueAnd (Mid(strHeading2, k, 1) = ">"Then 
                blnEndName = False 
            End If 
            If (Mid(strHeading2, k, 4) = "</a>"Then 
                blnEndName = True 
            End If 
            If (blnEndSpan = TrueAnd (Mid(strHeading2, k, 1) = ">"Then 
                blnEndSpan = False 
            End If 
            If (Mid(strHeading2, k, 7) = "</span>"Then 
                blnEndSpan = True 
            End If 
            If (blnName = FalseAnd (blnSpan = False) _ 
                    And (blnEndName = FalseAnd (blnEndSpan = FalseThen 
                If (Mid(strHeading2, k, 1) <> ">"Then 
                    blnBlank = False 
                    Exit For 
                End If 
            End If 
        End If 
        If (blnHeading = TrueAnd (Mid(strHeading2, k, 1) = ">"Then 
            blnHeading = False 
        End If 
    Next 
    If (blnBlank = TrueThen 
       Wscript.Echo "## Blank heading: " & strHeading 
        intCount = intCount + 1 
    End If 
Next 
Wscript.Echo "Number of problems in headings: " & CStr(intCount) 
 
' Read all anchor name tags in the file. 
Wscript.Echo "----- Analyze Anchor Name Tags" 
intCount = 0 
objList.RemoveAll 
Set objTags = objRE2.Execute(strText) 
For Each objTag In objTags 
    strTag = objTag.Value 
    ' Check for duplicates. 
    If (objList.Exists(strTag) = FalseThen 
        objList.Add strTag, True 
    Else 
        Wscript.Echo "## Duplicate anchor name tag: " & strTag 
        intCount = intCount + 1 
    End If 
    ' Check for embedded "0" characters in the anchor name tag. 
    If (InStr(strTag, "0") > 0Then 
        ' Remove any duplicate <a name>...</a> anchor tags for readability. 
        intIndex = InStr(strTag, "</a>") 
        strTemp = Left(strTag, intIndex + 3) 
        ' "0" characters are only a problem in the first <a name> tag. 
        If (InStr(strTemp, "0") > 0Then 
            Wscript.Echo "## Embedded ""0"" in name tag: " & strTemp 
            intCount = intCount + 1 
        End If 
    End If 
    If (Foreign(strTag) = TrueThen 
        ' Remove any duplicate <a name>...</a> anchor tags for readability. 
        intIndex = InStr(strTag, "</a>") 
        strTemp = Left(strTag, intIndex + 3) 
        Wscript.Echo "## Foreign character in anchor name tag: " & strTemp 
        intCount = intCount + 1 
    End If 
 
Next 
Wscript.Echo "Number of problems in anchor name tags: " & CStr(intCount) 
 
Wscript.Echo "----- Search for color values" 
objList.RemoveAll 
intCount = 0 
 
' To select digits from RGB values. 
objRE.Pattern = "[0-9]+" 
 
Set objRGBColors = objRE3.Execute(strText) 
For Each objRGBColor In objRGBColors 
    strColor = objRGBColor.Value 
    ' Check for duplicates. 
    If (objList.Exists(strColor) = FalseThen 
        objList.Add strColor, True 
        Wscript.Echo "## Found rgb color: " & strColor _ 
            & " [best standard color: " & BestColor(strColor) & "]" 
        intCount = intCount + 1 
    End If 
Next 
 
objList.RemoveAll 
Set objHexColors = objRE4.Execute(strText) 
For Each objHexColor In objHexColors 
    strColor = objHexColor.Value 
    ' Check for duplicates. 
    If (objList.Exists(strColor) = FalseThen 
        objList.Add strColor, True 
        Wscript.Echo "## Found hex color value: " & UCase(strColor) 
        intCount = intCount + 1 
    End If 
Next 
Wscript.Echo "Total color values found: " & CStr(intCount) 
 
Function BestColor(ByVal strRGBColor) 
    ' Select best color for RGB values. 
    ' The following must have global scope and be defined in the main 
    ' program: objRE, arrColors 
 
    Dim objMatches, objMatch, k, lngMin, lngValue, intColor, arrValues(2) 
 
    Set objMatches = objRE.Execute(strRGBColor) 
    k = 0 
    For Each objMatch In objMatches 
        arrValues(k) = objMatch.Value 
        k = k + 1 
    Next 
 
    ' Consider all of the standard colors. 
    lngMin = 3*255*255 
    For k = 0 To 138 
        ' Calculate the distance between this standard color and the RGB value. 
        lngValue = (arrColors(k, 1) - arrValues(0))^2 _ 
            + (arrColors(k, 2) - arrValues(1))^2 _ 
            + (arrColors(k, 3) - arrValues(2))^2 
        ' Keep track of the color with the smallest distance (least difference). 
        If (lngValue <= lngMin) Then 
            intColor = k 
            lngMin = lngValue 
        End If 
    Next 
    ' Select the best standard color name. 
    BestColor = arrColors(intColor, 0) 
 
End Function 
 
Function Foreign(strValue) 
    ' Function to detect foreign characters. 
    ' Returns True if the input string contains any extended ASCII characters, 
    ' otherwise returns False. 
    Dim k 
 
    Foreign = False 
    For k = 1 To Len(strValue) 
        If (Asc(Mid(strValue, k, 1)) > 127Then 
            Foreign = True 
            Exit Function 
        End If 
    Next 
End Function