diff --git a/Docs/src/attributes.but b/Docs/src/attributes.but
index 3d347a96..56ae48b1 100644
--- a/Docs/src/attributes.but
+++ b/Docs/src/attributes.but
@@ -1,46 +1,48 @@
\C{instattribs} Installer Attributes
+\H{attribgen} General Attributes
+
The commands below all adjust attributes of the installer. These attributes control how the installer looks and functions, including which pages are present in the installer, as what text is displayed in each part of each page, how the installer is named, what icon the installer uses, the default installation directory, what file it writes out, and more. Note that these attributes can be set anywhere in the file except in a Section or Function. With the exception of InstallDir, none of these attributes allow use of Variables other than $\\r and $\\n in their strings.
\\Defaults are bold\\
-\H{aaddbrandingimage} AddBrandingImage
+\S{aaddbrandingimage} AddBrandingImage
\c (left|top) (width|height)
Adds a branding image on the top of the installer or on the left. Its size will be set according to the width/height sepcified, the installer width/height and the installer font. Because this depends on the installer font, you should put SetFont before AddBrandingImage.
-\H{aallowrootdirinstall} AllowRootDirInstall
+\S{aallowrootdirinstall} AllowRootDirInstall
\c true|\\false\\
Controls whether or not installs are enabled to the root directory of a drive, or directly into a network share. Set to 'true' to change the safe behavior, which prevents users from selecting C:\\ or \\\\Server\\Share as an install (and later on, uninstall) directory. For additional directory selection page customizability, see .onVerifyInstDir (\k{onverifyinstdir}).
-\H{aautoclosewindow} AutoCloseWindow
+\S{aautoclosewindow} AutoCloseWindow
\c true|\\false\\
Sets whether or not the install window automatically closes when completed. This is overrideable from a section using SetAutoClose.
-\H{abggradient} BGGradient
+\S{abggradient} BGGradient
\c [\\off\\]|[topc botc [textcolor|notext]]
Specifies whether or not to use a gradient background window. If 'off', the installer will not show a background window, if no parameters are specified, the default black to blue gradient is used, and otherwise the top_color or bottom_color are used to make a gradient. Top_color and bottom_color are specified using the form RRGGBB (in hexadecimal, as in HTML, only minus the leading '#', since # can be used for comments). 'textcolor' can be specified as well, or 'notext' can be specified to turn the big background text off.
-\H{abrandingtext} BrandingText
+\S{abrandingtext} BrandingText
\c [/LANG=lang_id] /TRIM(LEFT|RIGHT|CENTER) text
Sets the text that is shown (by default it is 'Nullsoft Install System vX.XX') in the bottom of the install window. Setting this to an empty string ("") uses the default; to set the string to blank, use " " (a space). If it doesn't matter to you, leave it the default so that everybody can know why the installer didn't suck. heh. Use /TRIMLEFT, /TRIMRIGHT or /TRIMCENTER to trim down the size of the control to the size of the string.
-\H{acaption} Caption
+\S{acaption} Caption
\c [/LANG=lang_id] caption
Sets what the titlebars of the installer will display. By default, it is 'Name Setup', where Name is specified with the Name command (See \k{aname}). You can, however, override it with 'MyApp Installer' or whatever. If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
-\H{achangeui} ChangeUI
+\S{achangeui} ChangeUI
\c dialog ui_file.exe
@@ -60,7 +62,7 @@ Replaces dialog (\e{IDD_LICENSE}, \e{IDD_DIR}, \e{IDD_SELCOM}, \e{IDD_INST}, \e{
\b \e{IDD_VERIFY} must contain \e{IDC_STR} (static).
-\H{acheckbitmap} CheckBitmap
+\S{acheckbitmap} CheckBitmap
\c bitmap.bmp
@@ -68,91 +70,91 @@ Specifies the bitmap with the images used for the checks of the component-select
This bitmap should have a size of 96x16 pixels and contain six 16x16 images for the different states (in order: selection mask, not checked, checked, greyed out, unchecked & read-only, checked & read-only). Use magenta as mask color (this area will be transparent).
-\H{acompletedtext} CompletedText
+\S{acompletedtext} CompletedText
\c [/LANG=lang_id] [Completed text]
Replaces the default text ("Completed") that is printed at the end of the install if parameter is specified. Otherwise, the default is used.
-\H{acomponenttext} ComponentText
+\S{acomponenttext} ComponentText
\c [/LANG=lang_id] [text] [subtext] [subtext2]
Specifies a string that is above the component list. This can be something that notifies the user what it is they are actually installing. Note that if no parameter is specified, or if the ComponentText command is omitted, then the component page will not be visible, and all of the sections will be installed. Note: if text is specified and non-empty and you leave subtext or subtext2 empty, the defaults will be used (to set one to blank, use a string like " "). empty strings mean default on subtext and subtext2. Likewise, if you wish to enable the component page, but don't want any text on the top line, set text to " ".
-\H{acrccheck} CRCCheck
+\S{acrccheck} CRCCheck
\c \\on\\|off|force
Specifies whether or not the installer will perform a CRC on itself before allowing an install. Note that if the user uses /NCRC on the command line when executing the installer, and you didn't specify 'force', the CRC will not occur, and the user will be allowed to install a (potentially) corrupted installer.
-\H{adetailsbuttontext} DetailsButtonText
+\S{adetailsbuttontext} DetailsButtonText
\c [/LANG=lang_id] [show details text]
Replaces the default details button text of "Show details", if parameter is specified (otherwise the default is used).
-\H{adirshow} DirShow
+\S{adirshow} DirShow
\c \\show\\|hide
Specifies whether or not the user will see the directory selection page. Note that if 'hide' is specified, the installer will still check the validity of the installation path (using internal logic and .onVerifyInstDir if it is declared). If the path is deemed invalid, the directory page will be shown. To completely disable the Directory page (and install without prompting, even if a valid installation path is not available), specify DirText with no parameter (this might be useful if the installer installs everything into $SYSDIR or something like that).
-\H{adirtext} DirText
+\S{adirtext} DirText
\c [/LANG=lang_id] [text] [subtext] [browse text]
Specifies a string that is above the directory selection area. If this command is not specified, or no parameter is specified, then the directory page is never visible to the user (even if DirShow show is specified). If subtext is specified and not empty, it overrides the default text above the path entry box ("Select the directory to install MyApp in:"). If browse button text is specified but not empty, it overrides the default browse button text ("Browse...").
-\H{a} FileErrorText
+\S{a} FileErrorText
\c [/LANG=lang_id] [file error text]
Replaces the default text that comes up when a file cannot be written to. This string can contain a reference to $0, which is the filename ($0 is temporarily changed to this value). Example: "Can not write to file $\\r$\\n$0$\\r$\\ngood luck, bitch.".
-\H{ainstallbuttontext} InstallButtonText
+\S{ainstallbuttontext} InstallButtonText
\c [/LANG=lang_id] [install button text]
If parameter is specified, overrides the default install button text (of "Install") with the specified text.
-\H{ainstallcolors} InstallColors
+\S{ainstallcolors} InstallColors
\c /windows | foreground background
Sets the colors to use for the install info screen (the default is 00FF00 000000. Use the form RRGGBB (in hexadecimal, as in HTML, only minus the leading '#', since # can be used for comments). Note that if "/windows" is specified as the only parameter, the default windows colors will be used.
-\H{ainstalldir} InstallDir
+\S{ainstalldir} InstallDir
\c definstdir
Sets the default installation directory is. See the variables section for variables that can be used to make this string (especially $PROGRAMFILES). Note that the part of this string following the last \\ will be used if the user selects 'browse', and may be appended back on to the string at install time (to disable this, end the directory with a \\ (which will require the entire parameter to be enclosed with quotes)). If this doesn't make any sense, play around with the browse button a bit.
-\H{ainstalldirregkey} InstallDirRegKey
+\S{ainstalldirregkey} InstallDirRegKey
\c root_key subkey key_name
This attribute tells the installer to check a string in the registry, and use it for the install dir if that string is valid. If this attribute is present, it will override the InstallDir attribute if the registry key is valid, otherwise it will fall back to the InstallDir default. When querying the registry, this command will automatically remove any quotes. If the string ends in ".exe", it will automatically remove the filename component of the string (i.e. if the string is "C:\\program files\\poop\\poop.exe", it will know to use "C:\\program files\\poop"). For more advanced install directory configuration, set $INSTDIR in .onInit.
-\H{ainstprogressflags} InstProgressFlags
+\S{ainstprogressflags} InstProgressFlags
\c [flag [...]]
Valid values for flag are "smooth" (smooth the progress bar) or "colored" (color the progress bar with the colors set by InstallColors. Examples: "InstProgressFlags" (default old-school windows look), "InstProgressFlags smooth" (new smooth look), "InstProgressFlags smooth colored" (colored smooth look whee).
-\H{ainsttype} InstType
+\S{ainsttype} InstType
\c install_type_name | /NOCUSTOM | ([/LANG=lang_id] /CUSTOMSTRING=str)| /COMPONENTS.. ..ONLYONCUSTOM
Adds an install type to the install type list, or disables the custom install type. There can be as many as 8 types, each one specifying the name of the install. The first type is the default (generally 'Typical'). Each type is numbered, starting at 1. See SectionIn for information on how those numbers are used. If the /NOCUSTOM switch is specified, then the "custom" install type is disabled, and the user has to choose one of the pre-defined install types. Alternatively, if the /CUSTOMSTRING switch is specified, the parameter will override the "Custom" install type text. Alternatively, if the /COMPONENTSONLYONCUSTOM flag is specified, the component list will only be shown if the "Custom" install type is selected.
-\H{alicensebkcolor} LicenseBkColor
+\S{alicensebkcolor} LicenseBkColor
\c color
Sets the background color of the license data. Color is specified using the form RRGGBB (in hexadecimal, as in HTML, only minus the leading '#', since # can be used for comments).
-\H{alicensedata} LicenseData
+\S{alicensedata} LicenseData
\c [/LANG=lang_id] licdata.(txt|rtf)
@@ -160,127 +162,127 @@ Specifies a text file or a RTF file to use for the license that the user can rea
If you make your license file a RTF file it is recommended you edit it with WordPad and not MS Word. Using WordPad will result in a much smaller file.
-\H{alicensetext} LicenseText
+\S{alicensetext} LicenseText
\c [/LANG=lang_id] text [button_text]
Specifies a string that is above the license text. Omit this to not have a license displayed. If button_text is specified, it will override the default button text of "I Agree".
-\H{aloadlanguagefile} LoadLanguageFile
+\S{aloadlanguagefile} LoadLanguageFile
\c lang_file.nlf
Loads a NLF (NSIS Language File) that will be used to create a string table for the specific language in that NLF.
-\H{amiscbuttontext} MiscButtonText
+\S{amiscbuttontext} MiscButtonText
\c [/LANG=lang_id] [back button text] [next button text] [cancel button text] [close button text]
Replaces the default text strings for the four buttons (< Back, Next >, Cancel and Close). If parameters are omitted, the defaults are used.
-\H{aname} Name
+\S{aname} Name
\c [/LANG=lang_id] name
Sets the name of the installer. The name is usually simply the product name such as 'MyApp' or 'CrapSoft MyApp'.
-\H{aicon} Icon
+\S{aicon} Icon
\c path_to_icon.ico
Sets the icon of the installer.
-\H{aoutfile} OutFile
+\S{aoutfile} OutFile
\c [path\]install.exe
Specifies the output file that the MakeNSIS should write the installer to. This is just the file that MakeNSIS writes, it doesn't affect the contents of the installer.
-\H{aplugindir} PluginDir
+\S{aplugindir} PluginDir
\c directory
Causes the NSIS compiler to scan the given directory for Plugin DLLs.
-\H{asetfont} SetFont
+\S{asetfont} SetFont
\c font_face_name font_size
Sets the installer font. Please remember that the font you choose must be present on the user's machine as well. Don't use rare fonts that only you have.
-\H{ashowinstdetails} ShowInstDetails
+\S{ashowinstdetails} ShowInstDetails
\c \\hide\\|show|nevershow
Sets whether or not the details of the install are shown. Can be 'hide' to hide the details by default, allowing the user to view them, or 'show' to show them by default, or 'nevershow', to prevent the user from ever seeing them. Note that sections can override this using SetDetailsView.
-\H{ashowuninstdetails} ShowUninstDetails
+\S{ashowuninstdetails} ShowUninstDetails
\c \\hide\\|show|nevershow
Sets whether or not the details of the uninstall are shown. Can be 'hide' to hide the details by default, allowing the user to view them, or 'show' to show them by default, or 'nevershow', to prevent the user from ever seeing them. Note that sections can override this using SetDetailsView.
-\H{asilentinstall} SilentInstall
+\S{asilentinstall} SilentInstall
\c \\normal\\|silent|silentlog
Specifies whether or not the installer should be silent. If it is 'silent' or 'silentlog', all sections are installed quietly, with no screen output from the installer itself (MessageBoxes are still displayed on error, and the script can still display whatever it wants). Note that if this is set to 'normal' and the user runs the installer with /S on the command line, it will behave as if SilentInstall 'silent' was used. Note: see also LogSet (\k{logset}).
-\H{asilentuninstall} SilentUnInstall
+\S{asilentuninstall} SilentUnInstall
\c \\normal\\|silent
Specifies whether or not the uninstaller should be silent. If it is 'silent' or 'silentlog', all sections are installed quietly, with no screen output from the installer itself (MessageBoxes are still displayed on error, and the script can still display whatever it wants). Note that if this is set to 'normal' and the user runs the installer with /S on the command line, it will behave as if SilentInstall 'silent' was used. Note: see also LogSet (\k{logset}).
-\H{aspacetexts} SpaceTexts
+\S{aspacetexts} SpaceTexts
\c [/LANG=lang_id] [req text] [avail text]
If parameters are specified, overrides the space required and space available text ("Space required: " and "Space available: " by default). If 'none' is specified as the required text no space texts will be shown.
-\H{asubcaption} SubCaption
+\S{asubcaption} SubCaption
\c [/LANG=lang_id] page_number subcaption
Overrides the subcaptions for each of the installer pages (0=": License Agreement",1=": Installation Options",2=": Installation Directory", 3=": Installing Files", 4=": Completed"). If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
-\H{auninstallbuttontext} UninstallButtonText
+\S{auninstallbuttontext} UninstallButtonText
\c [/LANG=lang_id] [button text]
Changes the text of the button that by default says "Uninstall" in the uninstaller. If no parameter is specified, the default text is used. See also WriteUninstaller (replaces UninstallEXEName).
-\H{auninstallcaption} UninstallCaption
+\S{auninstallcaption} UninstallCaption
\c [/LANG=lang_id] caption
Sets what the titlebars of the uninstaller will display. By default, it is 'Name Uninstall', where Name is specified with the Name command. You can, however, override it with 'MyApp uninstaller' or whatever. If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
-\H{auninstallicon} UninstallIcon
+\S{auninstallicon} UninstallIcon
\c path_to_icon.ico
Sets the icon of the uninstaller.
-\H{auninstallsubcaption} UninstallSubCaption
+\S{auninstallsubcaption} UninstallSubCaption
\c [/LANG=lang_id] page_number subcaption
Overrides the subcaptions for each of the uninstaller pages (0=": Confirmation",1=": Uninstalling Files",2=": Completed"). If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
-\H{auninstalltext} UninstallText
+\S{auninstalltext} UninstallText
\c [/LANG=lang_id] text [subtext]
Specifies the text on the first page of the uninstaller. If subtext is specified and not empty, it will replace the default secondary text on that page, "Uninstall from:".
-\H{awindowicon} WindowIcon
+\S{awindowicon} WindowIcon
\c \\on\\|off
Sets whether or not the installer's icon is being displayed.
-\H{axpstyle} XPStyle
+\S{axpstyle} XPStyle
\c on|\\off\\
diff --git a/Docs/src/basic.but b/Docs/src/basic.but
index 3843de75..f0911fe5 100644
--- a/Docs/src/basic.but
+++ b/Docs/src/basic.but
@@ -1,14 +1,14 @@
-\C{basicinstructions} Basic Instructions
+\H{basicinstructions} Basic Instructions
The instructions that NSIS uses for scripting are sort of a cross between PHP and assembly. There are no real high level language constructs, but the instructions themselves are (for the most part) high level, and you have handy string capability (i.e. you don't have to worry about concatenating strings, etc). You essentially have 25 registers (20 general purpose, 5 special purpose), and a stack.
-\H{delete} Delete
+\S{delete} Delete
\c [/REBOOTOK] file
Delete file (which can be a file or wildcard, but should be specified with a full path) from the target system. If /REBOOTOK is specified and the file cannot be deleted then the file is deleted when the system reboots -- if the file will be deleted on a reboot, the reboot flag will be set. The error flag is set if files are found and cannot be deleted. The error flag is not set from trying to delete a file that does not exist.
-\H{file} File
+\S{file} File
\c [/nonfatal] [/a] ([/r] (file|wildcard) [...] | /oname=file.dat infile.dat)
@@ -28,37 +28,37 @@ Adds file(s) to be extracted to the current output path ($OUTDIR).
\b If the /nonfatal switch is used, a warning will be issued if no files found instead of an error.
-\H{exec} Exec
+\S{exec} Exec
\c command
Execute the specfied program and continue immediately. Note that the file specified must exist on the target system, not the compiling system. $OUTDIR is used for the working directory. The error flag is set if the process could not be launched. Note, if the command could have spaces, you may with to put it in quotes to delimit it from parameters. i.e.: Exec '"$INSTDIR\\command.exe" parameters'.
-\H{execshell} ExecShell
+\S{execshell} ExecShell
\c action command [parameters] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED]
Execute the specfied program using ShellExecute. Note that action is usually "open", "print", etc, but can be an empty string to use the default action. Parameters and the show type are optional. $OUTDIR is used for the working directory. The error flag is set if the process could not be launched.
-\H{execwait} ExecWait
+\S{execwait} ExecWait
\c command [user_var(exit code)]
Execute the specfied program and wait for the executed process to quit. See Exec for more information. If no output variable is specified ExecWait sets the error flag if the program executed returns a nonzero error code, or if there is an error. If an output variable is specified, ExecWait sets the variable with the exit code (and only sets the error flag if an error occurs; if an error occurs the contents of the user variable are undefined). Note, if the command could have spaces, you may with to put it in quotes to delimit it from parameters. i.e.: ExecWait '"$INSTDIR\\command.exe" parameters'
-\H{rename} Rename
+\S{rename} Rename
\c [/REBOOTOK] source_file dest_file
Rename source_file to dest_file. Functions just like the Win32 API MoveFile, which means you can move a file from anywhere on the system to anywhere else, and you can move a directory to somewhere else on the same drive. If /REBOOTOK is specified, and the file cannot be overwritten, then the file is moved when the system reboots -- if the file will be moved on a reboot, the reboot flag will be set. The error flag is set if the file cannot be renamed (and /REBOOTOK is not used) or if the source file does not exist.
-\H{rmdir} RMDir
+\S{rmdir} RMDir
\c [/r] directory
Remove the specified directory (which should be a full path). Without /r, the directory will only be removed if it is completely empty. If /r is specified, the dictory will be removed recursively, so all directories and files in the specified directory will be removed. The error flag is set if the directory cannot be removed.
-\H{reservefile} ReserveFile
+\S{reservefile} ReserveFile
\c [/nonfatal] [/r] file [file...]
@@ -66,7 +66,7 @@ Reserves a file in the data block for later use. As files are added in the order
See File (\K{file}) for more information about the parameters.
-\H{setoutpath} SetOutPath
+\S{setoutpath} SetOutPath
\c outpath
diff --git a/Docs/src/bin/halibut.exe b/Docs/src/bin/halibut.exe
index 2c001259..dc8c7017 100644
Binary files a/Docs/src/bin/halibut.exe and b/Docs/src/bin/halibut.exe differ
diff --git a/Docs/src/bin/halibut/bk_xhtml.c b/Docs/src/bin/halibut/bk_xhtml.c
index 7a5feb98..f5119bb4 100644
--- a/Docs/src/bin/halibut/bk_xhtml.c
+++ b/Docs/src/bin/halibut/bk_xhtml.c
@@ -1074,7 +1074,7 @@ xhtml_add_contents_entry(FILE * fp, xhtmlsection * section, int limit)
fprintf(fp, "