[SCM] Render HTML and CSS content with tk branch, upstream, updated. 03f985498ecd3d90ae2c80eb8de88b84425594e0

Ole Streicher debian at liska.ath.cx
Mon Feb 20 14:25:49 UTC 2012


The following commit has been merged in the upstream branch:
commit 03f985498ecd3d90ae2c80eb8de88b84425594e0
Author: Ole Streicher <debian at liska.ath.cx>
Date:   Mon Feb 20 15:25:22 2012 +0100

    Remove old files (mostly CVS junk)

diff --git a/CVS/Entries b/CVS/Entries
deleted file mode 100644
index b9e81ae..0000000
--- a/CVS/Entries
+++ /dev/null
@@ -1,20 +0,0 @@
-D/doc////
-D/hv////
-D/src////
-D/tclconfig////
-D/tests////
-D/tools////
-D/webpage////
-/COMPILE.txt/1.10/Thu Aug  2 04:29:39 2007//
-/COPYRIGHT/1.4/Thu Aug 10 10:30:33 2006//
-/ChangeLog/1.2/Sat Feb 25 13:55:38 2006//
-/Makefile.in/1.32/Mon Jun 11 17:43:33 2007//
-/README/1.2/Tue Dec 17 20:53:58 2002//
-/aclocal.m4/1.1/Tue Dec 17 18:31:04 2002//
-/configure/1.32/Sun Jul 22 07:28:24 2007//
-/configure.in/1.30/Sun Jul 22 06:45:49 2007//
-/mingw.mk/1.12/Mon Sep 17 06:15:30 2007//
-/puppy.sh/1.3/Fri Sep 28 18:39:00 2007//
-/nightly.sh/1.5/Sat Sep 29 10:58:14 2007//
-/main.mk/1.57/Wed Oct  3 13:45:28 2007//
-/linux-gcc.mk/1.48/Wed Oct  3 16:27:55 2007//
diff --git a/CVS/Repository b/CVS/Repository
deleted file mode 100644
index ec1a9d3..0000000
--- a/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget
diff --git a/CVS/Root b/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/doc/CVS/Entries b/doc/CVS/Entries
deleted file mode 100644
index 43e4b29..0000000
--- a/doc/CVS/Entries
+++ /dev/null
@@ -1,7 +0,0 @@
-/html.man/1.36/Sat Sep 15 05:10:28 2007//
-/hv3.man/1.2/Sun Apr 23 11:25:03 2006//
-/macros.tcl/1.6/Thu Aug  3 18:11:40 2006//
-/tkhtml_requirements.tcl/1.1/Thu Jun 30 13:17:51 2005//
-/tree.fig/1.1/Thu Jun 30 13:17:51 2005//
-/tree.gif/1.1/Thu Jun 30 13:17:51 2005//
-D
diff --git a/doc/CVS/Repository b/doc/CVS/Repository
deleted file mode 100644
index 2e033b5..0000000
--- a/doc/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/doc
diff --git a/doc/CVS/Root b/doc/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/doc/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/doc/tree_notes.txt b/doc/tree_notes.txt
deleted file mode 100644
index 68f7192..0000000
--- a/doc/tree_notes.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-
-State:
-  [1] Stack of open elements,
-  [2] List of active formatting elements,
-  [3] Head element pointer,
-  [4] Form element pointer,
-  [5] Insertion mode
-	-> in select
-	-> in cell
-	-> in row
-	-> in table body
-	-> in caption
-	-> in column group
-	-> in table
-	-> in body
-
-	-> in frameset
-	-> in head
-	-> before head
-
-Algorithms [1] (can result in match or failure):
-  Has an element in scope?
-  Has an element in table scope?
-
-
diff --git a/htmllayout.c b/htmllayout.c
deleted file mode 100644
index 1b45708..0000000
--- a/htmllayout.c
+++ /dev/null
@@ -1,4033 +0,0 @@
-/*
- * htmllayout.c --
- *
- *     This file contains code to layout a document for display using
- *     the CSS box model.
- *
- *     This is a rewrite of the layout engine from Tkhtml 2.0. Many 
- *     ideas from the original are reused. The main differences are
- *     that:
- *     
- *     * This version renders in terms of CSS properties, which are
- *       assigned to document nodes using stylesheets based on HTML
- *       attributes and tag types.
- *     * This version is written to the CSS specification with the
- *       goal of being "pixel-perfect". The HTML spec did not contain
- *       sufficient detail to do this when the original module was
- *       created.
- *
- *--------------------------------------------------------------------------
- * Copyright (c) 2005 Dan Kennedy.
- * All rights reserved.
- *
- * This Open Source project was made possible through the financial support
- * of Eolas Technologies Inc.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Eolas Technologies Inc. nor the names of its
- *       contributors may be used to endorse or promote products derived from
- *       this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-static const char rcsid[] = "$Id: htmllayout.c,v 1.258 2007/09/25 11:21:42 danielk1977 Exp $";
-
-#include "htmllayout.h"
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define LOG(X) if ( \
-(X)->iNode >= 0 && pLayout->pTree->options.logcmd && 0 == pLayout->minmaxTest)
-
-/* Used for debugging the layout cache. Some output appears on stdout. */
-/* #define LAYOUT_CACHE_DEBUG */
-
-/*
- * The code to lay out a "normal-flow" is located in this file:
- *
- * A new normal flow is established by:
- *     - the root node of the document,
- *     - a floating box,
- *     - a table cell.
- */
-
-typedef struct NormalFlowCallback NormalFlowCallback;
-typedef struct NormalFlow NormalFlow;
-typedef struct LayoutCache LayoutCache;
-
-/*
- * This structure is (fairly obviously) used to link node structures into a
- * linked list. This is used as part of the process to layout a node with the
- * 'position' property set to "absolute".
- */
-struct NodeList {
-    HtmlNode *pNode;
-    NodeList *pNext;
-    HtmlCanvasItem *pMarker;       /* Static position marker */
-};
-
-/*
- * The iMaxMargin, iMinMargin and isValid variables are used to manage
- * collapsing vertical margins. Each margin that collapses at a given
- * point in the vertical flow is added to the structure using
- * normalFlowMarginAdd(). iMaxMargin stores the largest positive value seen 
- * (or zero) and iMinMargin stores the largest negative value seen (or zero).
- */
-struct NormalFlow {
-    int iMaxMargin;          /* Most positive margin value in pixels */
-    int iMinMargin;          /* Most negative margin value in pixels */
-    int isValid;             /* True if iMaxMargin and iMinMargin are valid */
-    int nonegative;          /* Do not return negative from Collapse() */
-    NormalFlowCallback *pCallbackList;
-    HtmlFloatList *pFloat;   /* Floating margins */
-};
-
-struct NormalFlowCallback {
-    void (*xCallback)(NormalFlow *, NormalFlowCallback *, int);
-    ClientData clientData;
-    NormalFlowCallback *pNext;
-};
-
-struct LayoutCache {
-    /* Cached input values for normalFlowLayout() */
-    NormalFlow normalFlowIn;
-    int iContaining;
-    int iFloatLeft;
-    int iFloatRight;
-
-    /* Cached output values for normalFlowLayout() */
-    NormalFlow normalFlowOut;
-    int iWidth;
-    int iHeight;
-    HtmlCanvas canvas;
-  
-    /* If not PIXELVAL_AUTO, value for normal-flow callbacks */
-    int iMarginCollapse;
-};
-
-struct HtmlLayoutCache {
-    unsigned char flags;     /* Mask indicating validity of aCache[] entries */
-    LayoutCache aCache[3];
-    int iMinWidth;
-    int iMaxWidth;
-};
-#define CACHED_MINWIDTH_OK ((int)1<<3)
-#define CACHED_MAXWIDTH_OK ((int)1<<4)
-
-
-/*
- * Public functions:
- *
- *     HtmlLayoutInvalidateCache
- *     HtmlLayout
- *
- * Functions declared in htmllayout.h:
- *
- *     HtmlLayoutNodeContent
- *
- *     blockMinMaxWidth
- *     nodeGetMargins
- *     nodeGetBoxProperties
- */
-
-/*
- * These are prototypes for all the static functions in this file. We
- * don't need most of them, but the help with error checking that normally
- * wouldn't happen because of the old-style function declarations. Also
- * they function as a table of contents for this file.
- */
-
-static int inlineLayoutDrawLines
-    (LayoutContext*,BoxContext*,InlineContext*,int,int*, NormalFlow*);
-
-/* 
- * nodeIsReplaced() returns a boolean value, true if the node should be
- * layed out as if it were a replaced object (i.e. if there is a value for
- * '-tkhtml-replacement-image' or a replaced window).
- */
-static int nodeIsReplaced(HtmlNode *);
-
-
-typedef int (FlowLayoutFunc) (
-    LayoutContext *, 
-    BoxContext *, 
-    HtmlNode *, 
-    int *, 
-    InlineContext *, 
-    NormalFlow *
-);
-
-static void normalFlowLayout(LayoutContext*,BoxContext*,HtmlNode*,NormalFlow*);
-
-static FlowLayoutFunc normalFlowLayoutNode;
-static FlowLayoutFunc normalFlowLayoutFloat;
-static FlowLayoutFunc normalFlowLayoutBlock;
-static FlowLayoutFunc normalFlowLayoutReplaced;
-static FlowLayoutFunc normalFlowLayoutTable;
-static FlowLayoutFunc normalFlowLayoutText;
-static FlowLayoutFunc normalFlowLayoutInline;
-static FlowLayoutFunc normalFlowLayoutReplacedInline;
-static FlowLayoutFunc normalFlowLayoutAbsolute;
-static FlowLayoutFunc normalFlowLayoutOverflow;
-
-/* Manage collapsing vertical margins in a normal-flow */
-static void normalFlowMarginCollapse(LayoutContext*,HtmlNode*,NormalFlow*,int*);
-static void normalFlowMarginAdd(LayoutContext *, HtmlNode *, NormalFlow *, int);
-static int  normalFlowMarginQuery(NormalFlow *);
-
-/* Hooks to attach the list-marker drawing callback to a NormalFlow */
-static void normalFlowCbAdd(NormalFlow *, NormalFlowCallback *);
-static void normalFlowCbDelete(NormalFlow *, NormalFlowCallback *);
-
-/* Utility function to format an integer as a roman number (I, II, etc.). */
-static void getRomanIndex(char *, int, int);
-
-/* Function to invoke the -configurecmd of a replaced object. */
-static void doConfigureCmd(HtmlTree *, HtmlElementNode *, int);
-
-static void drawReplacement(LayoutContext*, BoxContext*, HtmlNode*);
-static void drawReplacementContent(LayoutContext*, BoxContext*, HtmlNode*);
-
-/* Add a border to a rendered content area */
-static void wrapContent(LayoutContext*, BoxContext*, BoxContext*, HtmlNode*);
-
-/*
- *---------------------------------------------------------------------------
- *
- * nodeGetBoxProperties --
- *    
- *     Calculate and return the border and padding widths of a node as exact
- *     pixel values based on the width of the containing block (parameter
- *     iContaining) and the computed values of the following properties:
- *
- *         'padding'
- *         'border-width'
- *         'border-style'
- *
- *     Four non-negative integer pixel values are returned, the sum of the
- *     padding and border pixel widths for the top, right, bottom and left
- *     sides of the box.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     The four calculated values are written into *pBoxProperties before
- *     returning.
- *
- *---------------------------------------------------------------------------
- */
-void 
-nodeGetBoxProperties(pLayout, pNode, iContaining, pBoxProperties)
-    LayoutContext *pLayout;            /* Unused */
-    HtmlNode *pNode;                   /* Node to calculate values for */
-    int iContaining;                   /* Width of pNode's containing block */
-    BoxProperties *pBoxProperties;     /* OUT: Write pixel values here */
-{
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-
-    /* Under some circumstance, a negative value may be passed for iContaining.
-     * If this happens, use 0 as the containing width when calculating padding
-     * widths with computed percentage values. Otherwise we will return a
-     * negative padding width, which is illegal.
-     *
-     * Also, if we are running a min-max text, percentage widths are zero.
-     */
-    int c = iContaining;
-    if (pLayout->minmaxTest || c < 0) {
-        c = 0;
-    }
-
-    assert(pV);
-    pBoxProperties->iTop    = PIXELVAL(pV, PADDING_TOP, c);
-    pBoxProperties->iRight  = PIXELVAL(pV, PADDING_RIGHT, c);
-    pBoxProperties->iBottom = PIXELVAL(pV, PADDING_BOTTOM, c);
-    pBoxProperties->iLeft   = PIXELVAL(pV, PADDING_LEFT, c);
-
-    /* For each border width, use the computed value if border-style is
-     * something other than 'none', otherwise use 0. The PIXELVAL macro is not
-     * used because 'border-width' properties may not be set to % values.
-     */
-    pBoxProperties->iTop += (
-        (pV->eBorderTopStyle != CSS_CONST_NONE) ? pV->border.iTop : 0);
-    pBoxProperties->iRight += (
-        (pV->eBorderRightStyle != CSS_CONST_NONE) ? pV->border.iRight : 0);
-    pBoxProperties->iBottom += (
-        (pV->eBorderBottomStyle != CSS_CONST_NONE) ? pV->border.iBottom : 0);
-    pBoxProperties->iLeft += (
-        (pV->eBorderLeftStyle != CSS_CONST_NONE) ?  pV->border.iLeft : 0);
-
-    assert(
-        pBoxProperties->iTop >= 0 &&
-        pBoxProperties->iRight >= 0 &&
-        pBoxProperties->iBottom >= 0 &&
-        pBoxProperties->iLeft >= 0 
-    );
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * nodeGetMargins --
- *
- *     Get the margin properties for a node.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-void 
-nodeGetMargins(pLayout, pNode, iContaining, pMargins)
-    LayoutContext *pLayout;
-    HtmlNode *pNode;
-    int iContaining;
-    MarginProperties *pMargins;
-{
-    int iMarginTop;
-    int iMarginRight;
-    int iMarginBottom;
-    int iMarginLeft;
-
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-    assert(pV);
-
-    /* Margin properties do not apply to table cells or rows. So return zero
-     * for all. We have to do this sort of thing here in the layout engine, not
-     * in the styler code, because a table-cell can still have a computed value
-     * of a margin property (which may be inherited from), just not an actual
-     * one.
-     */
-    if (
-        pV->eDisplay == CSS_CONST_TABLE_CELL ||
-        pV->eDisplay == CSS_CONST_TABLE_ROW
-    ) {
-       memset(pMargins, 0, sizeof(MarginProperties));
-       return;
-    }
-
-    /* If we are running a min-max text, percentage widths are zero. */
-    if (pLayout->minmaxTest) {
-        iContaining = 0;
-    }
-
-    iMarginTop =    PIXELVAL(pV, MARGIN_TOP, iContaining);
-    iMarginRight =  PIXELVAL(pV, MARGIN_RIGHT, iContaining);
-    iMarginBottom = PIXELVAL(pV, MARGIN_BOTTOM, iContaining);
-    iMarginLeft =   PIXELVAL(pV, MARGIN_LEFT, iContaining);
-
-    pMargins->margin_top = ((iMarginTop > MAX_PIXELVAL)?iMarginTop:0);
-    pMargins->margin_bottom = ((iMarginBottom > MAX_PIXELVAL)?iMarginBottom:0);
-    pMargins->margin_left = ((iMarginLeft > MAX_PIXELVAL)?iMarginLeft:0);
-    pMargins->margin_right = ((iMarginRight > MAX_PIXELVAL)?iMarginRight:0);
-
-    pMargins->leftAuto = ((iMarginLeft == PIXELVAL_AUTO) ? 1 : 0);
-    pMargins->rightAuto = ((iMarginRight == PIXELVAL_AUTO) ? 1 : 0);
-    pMargins->topAuto = ((iMarginTop == PIXELVAL_AUTO) ? 1 : 0);
-    pMargins->bottomAuto = ((iMarginBottom == PIXELVAL_AUTO) ? 1 : 0);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowMarginCollapse --
- * normalFlowMarginQuery --
- * normalFlowMarginAdd --
- *
- *     The following three functions are used to manage collapsing vertical
- *     margins within a normal flow.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowMarginQuery(pNormal) 
-    NormalFlow *pNormal;
-{
-    int iMargin = pNormal->iMinMargin + pNormal->iMaxMargin;
-    if (pNormal->nonegative) {
-        iMargin = MAX(0, iMargin);
-    }
-    return iMargin;
-}
-static void 
-normalFlowMarginCollapse(pLayout, pNode, pNormal, pY) 
-    LayoutContext *pLayout;
-    HtmlNode *pNode;
-    NormalFlow *pNormal;
-    int *pY;
-{
-    NormalFlowCallback *pCallback = pNormal->pCallbackList;
-    int iMargin = pNormal->iMinMargin + pNormal->iMaxMargin;
-    if (pNormal->nonegative) {
-        iMargin = MAX(0, iMargin);
-    }
-    while (pCallback) {
-        pCallback->xCallback(pNormal, pCallback, iMargin);
-        pCallback = pCallback->pNext;
-    }
-    *pY += iMargin;
-
-    assert(pNormal->isValid || (!pNormal->iMaxMargin && !pNormal->iMaxMargin));
-    pNormal->isValid = 1;
-    pNormal->iMaxMargin = 0;
-    pNormal->iMinMargin = 0;
-    pNormal->nonegative = 0;
-
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-        HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowMarginCollapse()"
-            "<p>Margins collapse to: %dpx", zNode, iMargin
-		, NULL);
-    }
-}
-static void 
-normalFlowMarginAdd(pLayout, pNode, pNormal, y) 
-    LayoutContext *pLayout;
-    HtmlNode *pNode;
-    NormalFlow *pNormal;
-    int y;
-{
-    if (pNormal->isValid && (!pNormal->nonegative || y >= 0)) {
-        assert(pNormal->iMaxMargin >= 0);
-        assert(pNormal->iMinMargin <= 0);
-        pNormal->iMaxMargin = MAX(pNormal->iMaxMargin, y);
-        pNormal->iMinMargin = MIN(pNormal->iMinMargin, y);
-    }
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-        HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowMarginAdd()"
-            "<p>Add margin of %dpx" 
-            "<ul><li>positive-margin = %dpx"
-            "    <li>negative-margin = %dpx"
-            "    <li>is-valid = %s"
-            "    <li>no-negative = %s",
-            zNode, y, pNormal->iMaxMargin, pNormal->iMinMargin,
-            pNormal->isValid ? "true" : "false",
-            pNormal->nonegative ? "true" : "false"
-		, NULL);
-    }
-}
-
-static void 
-normalFlowCbAdd(pNormal, pCallback)
-    NormalFlow *pNormal;
-    NormalFlowCallback *pCallback;
-{
-    pCallback->pNext = pNormal->pCallbackList;
-    pNormal->pCallbackList = pCallback;
-}
-static void 
-normalFlowCbDelete(pNormal, pCallback)
-    NormalFlow *pNormal;
-    NormalFlowCallback *pCallback;
-{
-    NormalFlowCallback *pCallbackList = pNormal->pCallbackList;
-    if (pCallback == pCallbackList) {
-        pNormal->pCallbackList = pCallback->pNext;
-    } else {
-        NormalFlowCallback *p;
-        for (p = pCallbackList; p && p->pNext != pCallback; p = p->pNext);
-        if (p) {
-            assert(p->pNext && p->pNext == pCallback);
-            p->pNext = p->pNext->pNext;
-        }
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * nodeIsReplaced --
- *
- *     Return true if the node should be handled as a replaced node, 
- *     false otherwise. A node is handled as a replaced node if a 
- *     replacement widget has been supplied via [node replace], or
- *     if the custom -tkhtml-replacement-image property is defined.
- *
- * Results:
- *     1 or 0.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int
-nodeIsReplaced(pNode)
-    HtmlNode *pNode;
-{
-    HtmlElementNode *pElem = HtmlNodeAsElement(pNode);
-    assert(!pElem || pElem->pPropertyValues);
-    return ((
-        pElem && (
-            (pElem->pReplacement && pElem->pReplacement->win) ||
-            (pElem->pPropertyValues->imReplacementImage != 0)
-        )
-    ) ? 1 : 0);
-}
-
-static void
-considerMinMaxHeight(pNode, iContaining, piHeight)
-    HtmlNode *pNode;
-    int iContaining;
-    int *piHeight;
-{
-    int iHeight = *piHeight;
-    if (iHeight != PIXELVAL_AUTO) {
-        HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-        int iMinHeight;
-        int iMaxHeight;
- 
-        iMinHeight = PIXELVAL(pV, MIN_HEIGHT, iContaining);
-        iMaxHeight = PIXELVAL(pV, MAX_HEIGHT, iContaining);
-
-        if (iMinHeight < MAX_PIXELVAL) iMinHeight = 0;
-        if (iMaxHeight < MAX_PIXELVAL) iMaxHeight = PIXELVAL_NONE;
- 
-        if (iMaxHeight != PIXELVAL_NONE) {
-            iHeight = MIN(iHeight, iMaxHeight);
-        }
-        iHeight = MAX(iHeight, iMinHeight);
-
-        *piHeight = iHeight;
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * getHeight --
- *
- *     The second parameter is the content-height in pixels of node pNode. 
- *     This function returns the actual pixel height of the node content
- *     area considering both the supplied value and the computed value
- *     of the height property:
- *
- *         IF ('height' == "auto") 
- *             return iHeight
- *         ELSE
- *             return 'height'
- *
- * Results:
- *     See above.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-int
-getHeight(pNode, iHeight, iContainingHeight)
-    HtmlNode *pNode;             /* Node to determine height of */
-    int iHeight;                 /* Natural Content height */
-    int iContainingHeight;       /* Containing height, or PIXELVAL_AUTO */
-{
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-
-    int height = PIXELVAL(pV, HEIGHT, iContainingHeight);
-    if (height == PIXELVAL_AUTO) {
-        height = iHeight;
-    }
-
-    considerMinMaxHeight(pNode, iContainingHeight, &height);
-    return height;
-}
-
-static int
-getWidth(iWidthCalculated, iWidthContent) 
-    int iWidthCalculated;
-    int iWidthContent;
-{
-    if (iWidthCalculated < 0) {
-        return iWidthContent;
-    }
-    return iWidthCalculated;
-}
-
-static int
-getWidthProperty(pLayout, pComputed, iContaining) 
-    LayoutContext *pLayout;
-    HtmlComputedValues *pComputed;
-    int iContaining;
-{
-    return PIXELVAL(
-        pComputed, WIDTH, pLayout->minmaxTest ? PIXELVAL_AUTO : iContaining
-    );
-}
-
-static void
-considerMinMaxWidth(pNode, iContaining, piWidth)
-    HtmlNode *pNode;
-    int iContaining;
-    int *piWidth;
-{
-    int iWidth = *piWidth;
-    if (iWidth != PIXELVAL_AUTO) {
-        HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-        int iMinWidth;
-        int iMaxWidth;
- 
-        iMinWidth = PIXELVAL(pV, MIN_WIDTH, iContaining);
-        iMaxWidth = PIXELVAL(pV, MAX_WIDTH, iContaining);
-
-        assert(iMaxWidth == PIXELVAL_NONE || iMaxWidth >= MAX_PIXELVAL);
-        assert(iMinWidth >= MAX_PIXELVAL);
- 
-        if (iMaxWidth != PIXELVAL_NONE) {
-            iWidth = MIN(iWidth, iMaxWidth);
-        }
-        iWidth = MAX(iWidth, iMinWidth);
-
-        *piWidth = iWidth;
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * doHorizontalBlockAlign --
- *
- *     This function is used to horizontally align a block box in the
- *     normal flow. i.e. a table or regular block (including blocks with
- *     the 'overflow' property set).
- * 
- *     The first three argument are the layout-context, node object and
- *     the MarginProperties structure associated with the node (the
- *     margin-properties can be derived from the node, but it's slightly more
- *     efficient to pass them in, as anyone calling this function requires
- *     them anyway). The final argument is the number of "spare" pixels
- *     that will be placed to the left or the right of the box generated
- *     by pNode. For example, if pNode generates a box 500px wide (including
- *     horizontal padding, borders and margins) and is being layed out
- *     in a normal-flow context 800px wide, iSpareWidth should be 300.
- *
- * Results:
- *     The value returned is the number of pixels that should be added
- *     to the left of the box generated by pNode when it is layed out
- *     into it's context. In the example above (500px and 800px), if the
- *     box should be centered, 150 is returned. If it should be left-aligned,
- *     0. If it should be right-aligned, 300.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int
-doHorizontalBlockAlign(pLayout, pNode, pMargin, iSpareWidth)
-    LayoutContext *pLayout;
-    HtmlNode *pNode;
-    MarginProperties *pMargin;
-    int iSpareWidth;
-{
-    int iRet = 0;
-
-    /* Do not do horizontal-alignment of blocks when figuring out minimum
-     * or maximum widths. It just confuses everybody.
-     */
-    if (pLayout->minmaxTest) return 0;
-    if (iSpareWidth <= 0) return 0;
-
-    if (pMargin->leftAuto && pMargin->rightAuto) {
-        /* Both horizontal margins are "auto". Center the block. */
-        iRet = iSpareWidth / 2;
-    } else if (pMargin->leftAuto) {
-        /* The 'margin-left' property is "auto" and 'margin-right' is not.
-         * The block is therefore right-aligned.
-         */
-        iRet = iSpareWidth;
-    } else if (!pMargin->rightAuto) {
-        /* If neither margin is set to "auto", then consider the following
-         * special values of the 'text-align' attribute on the parent 
-         * block:
-         * 
-         *     "-tkhtml-right"
-         *     "-tkhtml-center"
-         *
-         * These may be set by the default stylesheet (html.css file in the 
-         * src directory) in response to a <div align="center|right">
-         * construction (or a <center> element).  This is non-standard stuff
-         * inherited from Netscape 4. Gecko and webkit use "-moz-center" and
-         * "-webkit-center" respectively.
-         */
-        HtmlNode *pParent = HtmlNodeParent(pNode);
-        if (pParent) {
-            switch (HtmlNodeComputedValues(pParent)->eTextAlign) {
-                case CSS_CONST__TKHTML_CENTER:
-                    iRet = iSpareWidth / 2;
-                    break;
-                case CSS_CONST__TKHTML_RIGHT:
-                    iRet = iSpareWidth;
-                   break;
-            }
-        }
-    }
-
-    return iRet;
-}
-
-#define SCROLLBAR_WIDTH 15
-
-/*
- *---------------------------------------------------------------------------
- *
- * createScrollbars --
- *
- *     This function creates scrollbar widgets to scroll the content
- *     generated by pNode. If argument "v" is non-zero, a vertical scrollbar
- *     is created. If "h" is non-zero, a horizontal scrollbar is also
- *     created.
- * 
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void
-createScrollbars(pTree, pNode, iWidth, iHeight, iHorizontal, iVertical)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-    int iWidth;
-    int iHeight;
-    int iHorizontal;
-    int iVertical;
-{
-    HtmlElementNode *pElem = (HtmlElementNode *)pNode;
-    HtmlNodeScrollbars *p;
-    if (HtmlNodeIsText(pNode) || !pElem->pScrollbar) return;
-    p = pElem->pScrollbar;
-
-    p->iWidth = iWidth;
-    p->iHeight = iHeight;
-    p->iVerticalMax = iVertical;
-    p->iHorizontalMax = iHorizontal;
-
-    if (iVertical > 0) {
-        if (!p->vertical.win) {
-            char zTmp[256];
-            Tcl_Obj *pName;
-            Tk_Window win;
-            snprintf(zTmp, 255, "::tkhtml::vscrollbar %s %s",
-                Tk_PathName(pTree->tkwin), 
-                Tcl_GetString(HtmlNodeCommand(pTree, pNode))
-            );
-            zTmp[255] = '\0';
-            Tcl_Eval(pTree->interp, zTmp);
-            pName = Tcl_GetObjResult(pTree->interp);
-            win = Tk_NameToWindow(
-                pTree->interp, Tcl_GetString(pName), pTree->tkwin
-            );
-            assert(win);
-            Tcl_IncrRefCount(pName);
-            p->vertical.pReplace = pName;
-            p->vertical.win = win;
-        }
-        p->vertical.iWidth = SCROLLBAR_WIDTH;
-        p->vertical.iHeight = iHeight;
-    }
-    if (iHorizontal > 0) {
-        if (!p->horizontal.win) {
-            char zTmp[256];
-            Tcl_Obj *pName;
-            Tk_Window win;
-            snprintf(zTmp, 255, "::tkhtml::hscrollbar %s %s",
-                Tk_PathName(pTree->tkwin), 
-                Tcl_GetString(HtmlNodeCommand(pTree, pNode))
-            );
-            zTmp[255] = '\0';
-            Tcl_Eval(pTree->interp, zTmp);
-            pName = Tcl_GetObjResult(pTree->interp);
-            win = Tk_NameToWindow(
-                pTree->interp, Tcl_GetString(pName), pTree->tkwin
-            );
-            assert(win);
-            Tcl_IncrRefCount(pName);
-            p->horizontal.pReplace = pName;
-            p->horizontal.win = win;
-        }
-        p->horizontal.iWidth = iWidth;
-        p->horizontal.iWidth -= p->vertical.iWidth;
-        p->horizontal.iHeight = SCROLLBAR_WIDTH;
-    }
-    p->iHorizontalMax += p->vertical.iWidth;
-    p->iVerticalMax += p->horizontal.iHeight;
-
-    HtmlNodeScrollbarDoCallback(pTree, pNode);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutOverflow --
- *
- *     This FlowLayoutFunc is called to handle an in-flow block with the
- *     'overflow' property set to something other than "visible" - i.e.
- *     "scroll", "hidden" or "auto".
- *
- *     At least some of the code in this function should be combined with
- *     that in normalFlowLayoutBlock() (and possibly normalFlowLayoutTable()
- *     for that matter).
- * 
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutOverflow(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-    int eOverflow = pV->eOverflow;
-
-    MarginProperties margin;
-    BoxProperties box;
-    BoxContext sBox;
-    BoxContext sContent;
-    HtmlFloatList *pFloat = pNormal->pFloat;
-    int y;
-    int iMPB;              /* Horizontal margins, padding, borders */
-    int iLeft;             /* Left floating margin where box is drawn */
-    int iRight;            /* Right floating margin where box is drawn */
-    int iMinContentWidth;  /* Minimum content width */
-    int iMin;              /* Minimum width as used for vertical positioning */
-    int iSpareWidth;
-
-    int iComputedWidth;    /* Return value of getWidthProperty() */
-    int iWidth;            /* Content width of box */
-    int iHeight;           /* Content height of box */
-
-    int useVertical = 0;   /* True to use a vertical scrollbar */
-    int useHorizontal = 0; /* True to use a horizontal scrollbar */
-
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-    nodeGetBoxProperties(pLayout, pNode, pBox->iContaining, &box);
-    iComputedWidth = getWidthProperty(pLayout, pV, pBox->iContaining);
-    iWidth = iComputedWidth;
-
-    iMPB = margin.margin_left + margin.margin_right + box.iLeft + box.iRight;
-
-    /* Collapse the vertical margins above this box. */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_top);
-    normalFlowMarginCollapse(pLayout, pNode, pNormal, pY);
-
-    /* Do vertical positioning. (i.e. move the block downwards to accomadate
-     * the minimum or specified width if there are floating margins). 
-     * After this block has executed, variable iWidth contains the number
-     * of pixels between the horizontal padding edges of the box. If a 
-     * vertical scrollbar is used, it has to fit into this space along with
-     * the content.
-     */
-    iMin = iWidth;
-    blockMinMaxWidth(pLayout, pNode, &iMinContentWidth, 0);
-    if (iWidth == PIXELVAL_AUTO) {
-        iMin = iMinContentWidth;
-    }
-    iMin += iMPB;
-    y = HtmlFloatListPlace(pFloat, pBox->iContaining, iMin, 1000, *pY);
-    iLeft = 0;
-    iRight = pBox->iContaining;
-    HtmlFloatListMargins(pFloat, y, y+1000, &iLeft, &iRight);
-    if (iWidth == PIXELVAL_AUTO) {
-        iWidth = iRight - iLeft - iMPB;
-    }
-    considerMinMaxWidth(pNode, pBox->iContaining, &iWidth);
-
-    /* Set variable iHeight to the specified height of the block. If
-     * there is no specified height "height:auto", set iHeight to 
-     * PIXELVAL_AUTO.
-     */
-    iHeight = PIXELVAL(pV, HEIGHT, pBox->iContainingHeight);
-   
-    /* Figure out whether or not this block uses a vertical scrollbar. */
-    if (eOverflow == CSS_CONST_SCROLL) {
-        useVertical = 1;
-    } else if (eOverflow == CSS_CONST_AUTO && iHeight != PIXELVAL_AUTO) {
-        memset(&sContent, 0, sizeof(BoxContext));
-        sContent.iContaining = iWidth;
-        sContent.iContainingHeight = iHeight;
-        HtmlLayoutNodeContent(pLayout, &sContent, pNode);
-        if ((sContent.height + SCROLLBAR_WIDTH) > iHeight) {
-            useVertical = 1;
-        }
-        HtmlDrawCleanup(pLayout->pTree, &sContent.vc);
-    }
-
-    /* Figure out whether or not this block uses a horizontal scrollbar. */
-    if (eOverflow == CSS_CONST_SCROLL || (
-            eOverflow == CSS_CONST_AUTO && 
-            iMinContentWidth > (iWidth - (useVertical ? SCROLLBAR_WIDTH : 0))
-        )
-    ) {
-        useHorizontal = 1;
-    }
-   
-    memset(&sBox, 0, sizeof(BoxContext));
-    memset(&sContent, 0, sizeof(BoxContext));
-    sContent.iContaining = iWidth - (useVertical?SCROLLBAR_WIDTH:0);
-    sContent.iContainingHeight = iHeight;
-    if (iHeight != PIXELVAL_AUTO) {
-        sContent.iContainingHeight -= (useHorizontal ? SCROLLBAR_WIDTH : 0);
-    }
-    HtmlLayoutNodeContent(pLayout, &sContent, pNode);
-    sContent.height = getHeight(pNode, sContent.height, iHeight);
-    if (!pLayout->minmaxTest) {
-        sContent.width = iWidth;
-    } else if (iComputedWidth >= 0) {
-        sContent.width = iComputedWidth;
-    }
-   
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-        HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowLayoutOverflow()"
-            "containing width for content = %dpx",
-            zNode, sContent.iContaining
-		, NULL);
-    }
-
-    if (
-        pV->eOverflow == CSS_CONST_SCROLL || 
-        (pV->eOverflow == CSS_CONST_AUTO && (useHorizontal || useVertical))
-    ) {
-        HtmlElementNode *pElem = (HtmlElementNode *)pNode;
-        if (pElem->pScrollbar == 0) {
-            pElem->pScrollbar = HtmlNew(HtmlNodeScrollbars);
-        }
-        createScrollbars(pLayout->pTree, pNode, 
-            sContent.width, sContent.height,
-            useHorizontal ? sContent.vc.right : -1, 
-            useVertical ? sContent.vc.bottom : -1
-        );
-    }
-
-    /* Wrap an overflow primitive around the content of this box. This
-     * has to be done after the createScrollbars() call above, because
-     * it modifies the sContent.vc.right and sContent.vc.bottom variables.
-     */
-    if (
-        sContent.width < sContent.vc.right ||
-        sContent.height < sContent.vc.bottom
-    ) {
-        HtmlDrawOverflow(&sContent.vc, pNode, sContent.width, sContent.height);
-    }
-
-    sBox.iContaining = pBox->iContaining;
-    wrapContent(pLayout, &sBox, &sContent, pNode);
-
-    iSpareWidth = iRight - iLeft - sBox.width;
-    iLeft += doHorizontalBlockAlign(pLayout, pNode, &margin, iSpareWidth);
-
-    DRAW_CANVAS(&pBox->vc, &sBox.vc, iLeft, y, pNode);
-
-    *pY = y + sBox.height;
-    pBox->width = MAX(pBox->width, sBox.width);
-    pBox->height = MAX(pBox->height, *pY);
-
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutFloat --
- *
- *     This FlowLayoutFunc is called to add a floating box to a normal 
- *     flow. pNode is the node with the 'float' property set.
- *
- *     Parameter pY is a pointer to the current Y coordinate in pBox.
- *     The top-edge of the floating box is drawn at or below *pY. Unlike
- *     other normalFlowLayoutXXX() functions, *pY is never modified by
- *     this function. Floating boxes do not increase the current Y 
- *     coordinate.
- * 
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutFloat(pLayout, pBox, pNode, pY, pDoNotUse, pNormal)
-    LayoutContext *pLayout;   /* Layout context */
-    BoxContext *pBox;         /* Containing box context */
-    HtmlNode *pNode;          /* Node that generates floating box */
-    int *pY;                  /* IN/OUT: y-coord to draw float at */
-    InlineContext *pDoNotUse; /* Unused by this function */
-    NormalFlow *pNormal;
-{
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-    int eFloat = pV->eFloat;
-    int iContaining = pBox->iContaining;
-    HtmlFloatList *pFloat = pNormal->pFloat;
-
-    int iTotalHeight;        /* Height of floating box (incl. margins) */
-    int iTotalWidth;         /* Width of floating box (incl. margins) */
-
-    int x, y;                /* Coords for content to be drawn */
-    int iLeft;               /* Left floating margin where box is drawn */
-    int iRight;              /* Right floating margin where box is drawn */
-    int iTop;                /* Top of top margin of box */
-
-    MarginProperties margin; /* Margin properties of pNode */
-    BoxContext sBox;         /* Box context for content to be drawn into */
-
-    memset(&sBox, 0, sizeof(BoxContext));
-    sBox.iContaining = iContaining;
-
-    if (pLayout->minmaxTest) {
-        eFloat = CSS_CONST_LEFT;
-    }
-
-    /* The following two lines set variable 'y' to the y-coordinate for the top
-     * outer-edge of the floating box. This might be increased (but not
-     * decreased) if the existing floating-margins at y are too narrow for this
-     * floating box.
-     *
-     * If the 'clear' property is set to other than "none", this is handled
-     * by adding the following constraint (from CSS 2.1, section 9.5.2):
-     *
-     *     The top outer edge of the float must be below the bottom outer edge
-     *     of all earlier left-floating boxes (in the case of 'clear: left'),
-     *     or all earlier right-floating boxes (in the case of 'clear: right'),
-     *     or both ('clear: both').
-     *
-     * Note: "outer-edge" means including the the top and bottom margins.
-     */
-    normalFlowMarginCollapse(pLayout, pNode, pNormal, pY);
-    pBox->height = MAX(pBox->height, *pY);
-    y = (*pY);
-    y = HtmlFloatListClear(pNormal->pFloat, pV->eClear, y);
-    y = HtmlFloatListClearTop(pNormal->pFloat, y);
-
-    nodeGetMargins(pLayout, pNode, iContaining, &margin);
-
-    /* The code that calculates computed values (htmlprop.c) should have
-     * ensured that all floating boxes have a 'display' value of "block",
-     * "table" or "list-item".
-     */
-    assert(
-      DISPLAY(pV) == CSS_CONST_BLOCK || 
-      DISPLAY(pV) == CSS_CONST_TABLE ||
-      DISPLAY(pV) == CSS_CONST_LIST_ITEM
-    );
-    assert(eFloat == CSS_CONST_LEFT || eFloat == CSS_CONST_RIGHT);
-
-    /* Draw the floating element to sBox. The procedure for determining the
-     * width to use for the element is described in sections 10.3.5
-     * (non-replaced) and 10.3.6 (replaced) of the CSS 2.1 spec.
-     */
-    if (nodeIsReplaced(pNode)) {
-        /* For a replaced element, the drawReplacement() function takes care of
-         * calculating the actual width and height, and of drawing borders
-         * etc. As usual horizontal margins are included, but vertical are not.
-         */
-        drawReplacement(pLayout, &sBox, pNode);
-    } else {
-        /* A non-replaced element. */
-        BoxProperties box;   /* Box properties of pNode */
-        BoxContext sContent;
-        int c = pLayout->minmaxTest ? PIXELVAL_AUTO : iContaining;
-        int iWidth = PIXELVAL(pV, WIDTH, c);
-        int iHeight = PIXELVAL(pV, HEIGHT, pBox->iContainingHeight);
-        int isAuto = 0;
-
-        nodeGetBoxProperties(pLayout, pNode, iContaining, &box);
-
-        /* If the computed value if iWidth is "auto", calculate the
-         * shrink-to-fit content width and use that instead.  */
-        if (iWidth == PIXELVAL_AUTO) {
-            int iMax;            /* Preferred maximum width */
-            int iMin;            /* Preferred minimum width */
-            int iAvailable;      /* Available width */
-    
-            iAvailable = sBox.iContaining;
-            iAvailable -= (margin.margin_left + margin.margin_right);
-            iAvailable -= (box.iLeft + box.iRight);
-            blockMinMaxWidth(pLayout, pNode, &iMin, &iMax);
-            iWidth = MIN(MAX(iMin, iAvailable), iMax);
-            isAuto = 1;
-        }
-        considerMinMaxWidth(pNode, iContaining, &iWidth);
-
-        /* Layout the node content into sContent. Then add the border and
-         * transfer the result to sBox. 
-         */
-        memset(&sContent, 0, sizeof(BoxContext));
-        sContent.iContaining = iWidth;
-        sContent.iContainingHeight = iHeight;
-        HtmlLayoutNodeContent(pLayout, &sContent, pNode);
-
-        iHeight = getHeight(
-            pNode, sContent.height, pBox->iContainingHeight
-        );
-        if (pV->eDisplay == CSS_CONST_TABLE) {
-            sContent.height = MAX(iHeight, sContent.height);
-        } else {
-            sContent.height = iHeight;
-        }
-
-        if (!isAuto && DISPLAY(pV) != CSS_CONST_TABLE) {
-            sContent.width = iWidth;
-        } else {
-            sContent.width = MAX(iWidth, sContent.width);
-        }
-        considerMinMaxWidth(pNode, iContaining, &sContent.width);
-
-        wrapContent(pLayout, &sBox, &sContent, pNode);
-    }
-
-    iTotalWidth = sBox.width;
-    iTotalHeight = sBox.height + margin.margin_top + margin.margin_bottom;
-    iTotalHeight = MAX(iTotalHeight, 0);
-
-    iLeft = 0;
-    iRight = iContaining;
-
-    iTop = y;
-    iTop = HtmlFloatListPlace(
-            pFloat, iContaining, iTotalWidth, iTotalHeight, iTop);
-    HtmlFloatListMargins(pFloat, iTop, iTop+iTotalHeight, &iLeft, &iRight);
-
-    y = iTop + margin.margin_top;
-    if (eFloat == CSS_CONST_LEFT) {
-        x = iLeft;
-    } else {
-        x = iRight - iTotalWidth;
-    }
-    DRAW_CANVAS(&pBox->vc, &sBox.vc, x, y, pNode);
-
-    /* If the right-edge of this floating box exceeds the current actual
-     * width of the box it is drawn in, set the actual width to the 
-     * right edge. Floating boxes do not affect the height of the parent
-     * box.
-     */
-    pBox->width = MAX(x + iTotalWidth, pBox->width);
-
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-        char const *zCaption = "normalFlowLayoutFloat() Float list before:";
-        HtmlFloatListLog(pTree, zCaption, zNode, pNormal->pFloat);
-    }
-
-    /* Fix the float list in the parent block so that nothing overlaps
-     * this floating box. Only add an entry if the height of the box including
-     * margins is greater than zero pixels. Partly because it's not required,
-     * and partly I'm worried the float list code will get confused. ;)
-     *
-     * A floating box may have a total height of less than zero if the
-     * top or bottom margins are negative.
-     */
-    if (iTotalHeight > 0) {
-        HtmlFloatListAdd(pNormal->pFloat, eFloat, 
-            ((eFloat == CSS_CONST_LEFT) ? x + iTotalWidth : x),
-            iTop, iTop + iTotalHeight);
-    }
-
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-        char const *zCaption = "normalFlowLayoutFloat() Float list after:";
-        HtmlLog(pTree, "LAYOUTENGINE", "%s (Float) %dx%d (%d,%d)", 
-		zNode, iTotalWidth, iTotalHeight, x, iTop, NULL);
-        HtmlFloatListLog(pTree, zCaption, zNode, pNormal->pFloat);
-    }
-
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * getRomanIndex --
- *
- *     Print an ordered list index into the given buffer.  Use roman
- *     numerals.  For indices greater than a few thousand, revert to
- *     decimal.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-getRomanIndex(zBuf, index, isUpper)
-    char *zBuf;
-    int index;
-    int isUpper;
-{
-    int i = 0;
-    int j;
-    static struct {
-        int value;
-        char *name;
-    } values[] = {
-        { 1000, "m" },
-        { 999, "im" },
-        { 990, "xm" },
-        { 900, "cm" },
-        { 500, "d"  },
-        { 499, "id" },
-        { 490, "xd" },
-        { 400, "cd" },
-        { 100, "c"  },
-        { 99, "ic"  },
-        { 90, "xc"  },
-        { 50, "l"   },
-        { 49, "il"  },
-        { 40, "xl"  },
-        { 10, "x"   },
-        { 9, "ix"   },
-        { 5, "v"    },
-        { 4, "iv"   },
-        { 1, "i"    },
-    };
-    if (index<1 || index>=5000) {
-        sprintf(zBuf, "%d", index);
-        return;
-    }
-    for (j = 0; index > 0 && j < sizeof(values)/sizeof(values[0]); j++) {
-        int k;
-        while (index >= values[j].value) {
-            for (k = 0; values[j].name[k]; k++) {
-                zBuf[i++] = values[j].name[k];
-            }
-            index -= values[j].value;
-        }
-    }
-    zBuf[i] = 0;
-    if (isUpper) {
-        for(i=0; zBuf[i]; i++){
-            zBuf[i] += 'A' - 'a';
-        }
-    }
-    strcat(zBuf,".");
-}
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * markerBoxLayout --
- *
- *     This is called to generate the marker-box for an element with
- *     "display:list-item". The contents of the marker box are drawn
- *     to pBox.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Draws to pBox. Sets *pVerticalOffset.
- *
- *---------------------------------------------------------------------------
- */
-static int
-markerBoxLayout(pLayout, pBox, pNode, pVerticalOffset)
-    LayoutContext *pLayout;       /* IN: Layout context */
-    HtmlNode *pNode;              /* IN: Node with "display:list-item" */
-    BoxContext *pBox;             /* OUT: Generated box */
-    int *pVerticalOffset;         /* OUT: Ascent of generated box */
-{
-    HtmlComputedValues *pComputed = HtmlNodeComputedValues(pNode);
-    int mmt = pLayout->minmaxTest;
-    int voffset = 0;
-
-    if (
-        0 == pComputed->imListStyleImage && 
-        pComputed->eListStyleType == CSS_CONST_NONE
-    ) {
-        return 0;
-    }
-
-    if (pComputed->imListStyleImage) {
-        HtmlImage2 *pImg = pComputed->imListStyleImage;
-        int iWidth = PIXELVAL_AUTO;
-        int iHeight = PIXELVAL_AUTO;
-        pImg = HtmlImageScale(pComputed->imListStyleImage, &iWidth, &iHeight,1);
-        /* voffset = iHeight * -1; */
-        HtmlDrawImage(
-            &pBox->vc, pImg, 0, -1 * iHeight, iWidth, iHeight, pNode, mmt
-        );
-        HtmlImageFree(pImg);      /* Canvas has it's own reference */
-        pBox->width = iWidth;
-        pBox->height = iHeight;
-    } else {
-        HtmlCanvas *pCanvas = &pBox->vc;
-        int eStyle;             /* Copy of pComputed->eListStyleType */
-        Tk_Font font;           /* Font to draw list marker in */
-        char zBuf[128];         /* Buffer for string to use as list marker */
-        int iList = 1;
-
-        HtmlNode *pParent = HtmlNodeParent(pNode);
-        eStyle = pComputed->eListStyleType;
-
-        /* Figure out the numeric index of this list element in it's parent.
-         * i.e. the number to draw in the marker box if the list-style-type is
-         * "decimal". Store the value in local variable iList.
-         */
-        if (pParent) {
-            int ii;
-            for (ii = 0; ii < HtmlNodeNumChildren(pParent); ii++) {
-                HtmlNode *pSibling = HtmlNodeChild(pParent, ii);
-                HtmlComputedValues *pSibProp = HtmlNodeComputedValues(pSibling);
-                if (pSibling == pNode) {
-                    break;
-                }
-                if (DISPLAY(pSibProp) == CSS_CONST_LIST_ITEM) {
-                    iList++;
-                }
-            }
-        }
-
-        /* If the document has requested an alpha marker, switch to decimal
-         * after item 26. (i.e. item markers will be "x", "y", "z", "27".
-         */
-        if (eStyle == CSS_CONST_LOWER_ALPHA || eStyle == CSS_CONST_UPPER_ALPHA)
-            if (iList > 26) {
-                eStyle = CSS_CONST_DECIMAL;
-            }
-
-        switch (eStyle) {
-            case CSS_CONST_SQUARE:
-                 strcpy(zBuf, "\xe2\x96\xa1");      /* Unicode 0x25A1 */ 
-                 break;
-            case CSS_CONST_CIRCLE:
-                 strcpy(zBuf, "\xe2\x97\x8b");      /* Unicode 0x25CB */ 
-                 break;
-            case CSS_CONST_DISC:
-                 strcpy(zBuf ,"\xe2\x80\xa2");      /* Unicode 0x25CF */ 
-                 break;
-    
-            case CSS_CONST_LOWER_ALPHA:
-                 sprintf(zBuf, "%c.", iList + 96);
-                 break;
-            case CSS_CONST_UPPER_ALPHA:
-                 sprintf(zBuf, "%c.", iList + 64);
-                 break;
-    
-            case CSS_CONST_LOWER_ROMAN:
-                 getRomanIndex(zBuf, iList, 0);
-                 break;
-            case CSS_CONST_UPPER_ROMAN:
-                 getRomanIndex(zBuf, iList, 1);
-                 break;
-            case CSS_CONST_DECIMAL:
-                 sprintf(zBuf, "%d.", iList);
-                 break;
-        }
-
-        font = pComputed->fFont->tkfont;
-        /* voffset = pComputed->fFont->metrics.ascent; */
-        pBox->height = voffset + pComputed->fFont->metrics.descent;
-        pBox->width = Tk_TextWidth(font, zBuf, strlen(zBuf));
-
-        HtmlDrawText(
-            pCanvas, zBuf, strlen(zBuf), 0, voffset, pBox->width, mmt, pNode, -1
-        );
-    }
-
-    pBox->width += pComputed->fFont->ex_pixels;
-    *pVerticalOffset = voffset;
-    return 1;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * inlineLayoutDrawLines --
- *
- *     This function extracts zero or more line-boxes from an InlineContext
- *     object and draws them to a BoxContext. Variable *pY holds the
- *     Y-coordinate to draw line-boxes at in pBox. It is incremented by the
- *     height of each line box drawn before this function returns.
- *
- *     If parameter 'forceflag' is true, then all inline-boxes currently
- *     held by pContext are layed out, even if this means laying out an
- *     incomplete line. This is used (for example) at the end of a
- *     paragraph.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-inlineLayoutDrawLines(pLayout, pBox, pContext, forceflag, pY, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    InlineContext *pContext;
-    int forceflag;               /* True to lay out final, incomplete line. */
-    int *pY;                     /* IN/OUT: Y-coordinate in sBox.vc. */
-    NormalFlow *pNormal;
-{
-    int have;
-    do {
-        HtmlCanvas lc;             /* Line-Canvas */
-        int w;
-        int forcebox;              /* Force at least one inline-box per line */
-        int closeborders = 0;
-        int f;
-        int y = *pY;               /* Y coord for line-box baseline. */
-        int leftFloat = 0;
-        int rightFloat = pBox->iContaining;
-        int nV = 0;                /* Vertical height of line. */
-        int nA = 0;                /* Ascent of line box. */
-
-        /* If the inline-context is not completely empty, we collapse any
-         * vertical margin here. Even though a line box may not be drawn by
-         * this routine, at least one will be drawn by this InlineContext
-         * eventually. Therefore it is safe to collapse the vertical margin.
-         */
-        if (!HtmlInlineContextIsEmpty(pContext)) {
-            HtmlNode *pNode = HtmlInlineContextCreator(pContext);
-            normalFlowMarginCollapse(pLayout, pNode, pNormal, &y);
-        }
-
-        /* Todo: We need a real line-height here, not a hard-coded '10' */
-        HtmlFloatListMargins(pNormal->pFloat, y, y+10, &leftFloat, &rightFloat);
-        forcebox = (rightFloat==pBox->iContaining && leftFloat==0);
-
-        memset(&lc, 0, sizeof(HtmlCanvas));
-        w = rightFloat - leftFloat;
-        f = (forcebox ? LINEBOX_FORCEBOX : 0) | 
-            (forceflag ? LINEBOX_FORCELINE : 0) |
-            (closeborders ? LINEBOX_CLOSEBORDERS : 0);
-        have = HtmlInlineContextGetLineBox(pLayout,pContext,f,&w,&lc,&nV,&nA);
-
-        if (have) {
-            DRAW_CANVAS(&pBox->vc, &lc, leftFloat, y, 0);
-            if (pLayout->minmaxTest == 0) {
-                HtmlDrawAddLinebox(&pBox->vc, leftFloat, y + nA);
-            }
-            y += nV;
-            pBox->width = MAX(pBox->width, lc.right + leftFloat);
-            pBox->height = MAX(pBox->height, y);
-        } else if( w ) {
-            /* If have==0 but w has been set to some non-zero value, then
-             * there are inline-boxes in the inline-context, but there is
-             * not enough space for the first inline-box in the width
-             * provided. Increase the Y-coordinate and try the loop again.
-             *
-             * TODO: Pass the minimum height of the line-box to
-             * HtmlFloatListPlace().
-             */
-            assert(!(f & LINEBOX_FORCEBOX));
-            y = HtmlFloatListPlace(pNormal->pFloat, pBox->iContaining,w,10,y);
-            have = 1;
-        } 
-
-        /* floatListClear(pBox->pFloats, y); */
-        *pY = y;
-    } while (have);
-
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlLayoutNodeContent --
- *
- *     Draw the content area of node pNode into the box context pBox. If pNode
- *     has the 'display' property set to "table", it generates a table context.
- *     Otherwise, pNode is assumed to generate a normal flow context. According
- *     to CSS2.1 section 9.4.1, the following elements should use this
- *     function (as well as the root element):
- *
- *         Floats
- *         Absolutely positioned elements
- *         Table cells
- *         Elements with 'display' set to "inline-block" (not supported yet)
- *         Elements with 'overflow' other than "visible".
- *
- *     It is illegal to pass a replaced element (according to nodeIsReplaced())
- *     to this function.
- *
- *     When this function is called, pBox->iContaining should contain the pixel
- *     width available for the content.  The top-left hand corner of the
- *     content is placed at the (0,0) coordinate of canvas pBox->vc.
- *     pBox->width and height are set to the intrinsic width and height of the
- *     content when rendered with containing block width pBox->iContaining.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     If pNode is a replaced element, a Tcl script may be invoked to
- *     configured the element.
- *
- *---------------------------------------------------------------------------
- */
-int 
-HtmlLayoutNodeContent(pLayout, pBox, pNode)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-{
-    int eDisplay = DISPLAY(HtmlNodeComputedValues(pNode));
-    assert(!nodeIsReplaced(pNode));
-
-    if (eDisplay == CSS_CONST_NONE) {
-        /* Do nothing */
-    } else if (eDisplay == CSS_CONST_TABLE) {
-        /* All the work for tables is done in htmltable.c */
-        HtmlTableLayout(pLayout, pBox, pNode);
-    } else {
-        /* Set up a new NormalFlow for this flow */
-        HtmlFloatList *pFloat;
-        NormalFlow sNormal;
-    
-        /* Set up the new normal-flow context */
-        memset(&sNormal, 0, sizeof(NormalFlow));
-        pFloat = HtmlFloatListNew();
-        sNormal.pFloat = pFloat;
-
-        /* TODO: Not sure about this. sNormal.isValid used to be initialized to
-         * zero. If this line stays in, then the isValid variable can be
-         * eliminated entirely (a very good thing).
-         */
-        sNormal.isValid = 1;
-    
-        /* Layout the contents of the node */
-        normalFlowLayout(pLayout, pBox, pNode, &sNormal);
-
-        normalFlowMarginCollapse(pLayout, pNode, &sNormal, &pBox->height);
-    
-        /* Increase the height of the box to cover any floating boxes that
-         * extend down past the end of the content. 
-         */
-        pBox->height = HtmlFloatListClear(pFloat, CSS_CONST_BOTH, pBox->height);
-    
-        /* Clean up the float list */
-        HtmlFloatListDelete(pFloat);
-    }
-
-    assert(!pLayout->minmaxTest || !pBox->vc.pFirst);
-    assert(pBox->width < 100000);
-    return 0;
-}
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * drawReplacementContent --
- *
- *     pNode must be a replaced element according to nodeIsReplaced() (either
- *     it has a value set for -tkhtml-replacement-image or the Tcl [nodeHandle
- *     replace] has been used to replace the element with a Tk window).
- *
- *     The replaced content is drawn into pBox, with it's top left corner at
- *     (0, 0). Only content is drawn, no borders or backgrounds. The
- *     pBox->width and pBox->height variables are set to the size of the
- *     content.
- *
- *     If the 'width' property of pNode is set to a percentage it is calculated
- *     with respect to pBox->iContaining.
- *
- *     See drawReplacement() for a wrapper around this function that also 
- *     draws borders and backgrounds.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-drawReplacementContent(pLayout, pBox, pNode)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-{
-    int iWidth;
-    int height;
-
-    HtmlComputedValues *pV= HtmlNodeComputedValues(pNode);
-    HtmlElementNode *pElem = HtmlNodeAsElement(pNode);
-
-    assert(pNode && pElem);
-    assert(nodeIsReplaced(pNode));
-
-    /* Read the values of the 'width' and 'height' properties of the node.
-     * PIXELVAL either returns a value in pixels (0 or greater) or the constant
-     * PIXELVAL_AUTO. A value of less than 1 pixel that is not PIXELVAL_AUTO
-     * is treated as exactly 1 pixel.
-     */
-    iWidth = PIXELVAL(
-        pV, WIDTH, pLayout->minmaxTest ? PIXELVAL_AUTO : pBox->iContaining
-    );
-    height = PIXELVAL(pV, HEIGHT, PIXELVAL_AUTO);
-    if (height != PIXELVAL_AUTO) height = MAX(height, 1);
-    if (iWidth != PIXELVAL_AUTO) iWidth = MAX(iWidth, 1);
-    assert(iWidth != 0);
-
-    if (pElem->pReplacement && pElem->pReplacement->win) {
-        CONST char *zReplace = Tcl_GetString(pElem->pReplacement->pReplace);
-        Tk_Window win = pElem->pReplacement->win;
-        if (win) {
-            Tcl_Obj *pWin = 0;
-            int iOffset;
-            int mmt = pLayout->minmaxTest;
-
-            /* At this point local variable iWidth may be either a pixel 
-             * width or PIXELVAL_AUTO. If it is PIXELVAL_AUTO we need to
-             * figure out the actual width to use. This block does that
-             * and sets iWidth to a pixel value.
-             */
-            assert(iWidth != 0);
-            if (iWidth == PIXELVAL_AUTO) {
-                switch (mmt) {
-                    case MINMAX_TEST_MIN: {
-                        int isPercent = ((PIXELVAL(pV, WIDTH, 0) == 0) ? 1 : 0);
-                        if (!isPercent && pV->eDisplay == CSS_CONST_INLINE) {
-                            iWidth = Tk_ReqWidth(win);
-                        }
-                        break;
-                    }
-                    default: 
-                        iWidth = MIN(pBox->iContaining, Tk_ReqWidth(win));
-                }
-            }
-            iWidth = MAX(iWidth, Tk_MinReqWidth(win));
-
-            if (height == PIXELVAL_AUTO) {
-                switch (mmt) {
-                    case MINMAX_TEST_MIN: height = Tk_MinReqHeight(win); break;
-                    default: height = Tk_ReqHeight(win);
-                }
-            }
-            height = MAX(height, Tk_MinReqHeight(win));
-
-            if (!pLayout->minmaxTest) {
-                doConfigureCmd(pLayout->pTree, pElem, pBox->iContaining);
-                pWin = Tcl_NewStringObj(zReplace, -1);
-            }
-
-            iOffset = pElem->pReplacement->iOffset;
-            DRAW_WINDOW(&pBox->vc, pNode, 0, 0, iWidth, height);
-        }
-    } else {
-        int t = pLayout->minmaxTest;
-        HtmlImage2 *pImg = pV->imReplacementImage;
-        pImg = HtmlImageScale(pImg, &iWidth, &height, (t ? 0 : 1));
-        HtmlDrawImage(&pBox->vc, pImg, 0, 0, iWidth, height, pNode, t);
-        HtmlImageFree(pImg);
-    }
-
-    if ( pNode->iNode >= 0 && pLayout->pTree->options.logcmd ){
-        HtmlTree *pTree = pLayout->pTree;
-        HtmlLog(pTree, "LAYOUTENGINE", 
-            "%s drawReplacementContent() (%s) %dx%d descent=%d",
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-            (pLayout->minmaxTest == MINMAX_TEST_MIN ? "mintest" : 
-             pLayout->minmaxTest == MINMAX_TEST_MAX ? "maxtest" : "regular"),
-             iWidth, height, 
-             (pElem->pReplacement ? pElem->pReplacement->iOffset : 0)
-		, NULL);
-    }
-
-    /* Note that width and height may still be PIXELVAL_AUTO here (if we failed
-     * to find the named replacement image or window). This makes no difference
-     * because PIXELVAL_AUTO is a large negative number.
-     */
-    assert(PIXELVAL_AUTO < 0);
-    pBox->width = MAX(pBox->width, iWidth);
-    pBox->height = MAX(pBox->height, height);
-}
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * drawReplacement --
- *
- *     pNode must be a replaced element. 
- *
- *     The node content, background and borders are drawn into argument pBox.
- *     The pBox coordinates (0, 0) correspond to the outside edge of the left
- *     margin and the upper edge of the top border. That is, horizontal margins
- *     are included but vertical are not.
- *
- *     Any percentage lengths are calculated with respect to pBox->iContaining.
- *
- *     When this function returns, pBox->width is set to the width between
- *     outer edges of the right and left margins. pBox->height is set to the
- *     distance between the outside edges of the top and bottom borders. Again,
- *     horizontal margins are included but vertical are not.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-drawReplacement(pLayout, pBox, pNode)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-{
-    BoxProperties box;                /* Box properties of pNode */
-    MarginProperties margin;          /* Margin properties of pNode */
-    BoxContext sBox;
-
-    nodeGetBoxProperties(pLayout, pNode, pBox->iContaining, &box);
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-
-    memset(&sBox, 0, sizeof(BoxContext));
-    sBox.iContaining = pBox->iContaining;
-    drawReplacementContent(pLayout, &sBox, pNode);
-    wrapContent(pLayout, pBox, &sBox, pNode);
-}
-
-
-static void
-drawAbsolute(pLayout, pBox, pStaticCanvas, x, y)
-    LayoutContext *pLayout;       /* Layout context */
-    BoxContext *pBox;             /* Padding edge box to draw to */
-    HtmlCanvas *pStaticCanvas;    /* Canvas containing static positions */
-    int x;                        /* Offset of padding edge in pStaticCanvas */
-    int y;                        /* Offset of padding edge in pStaticCanvas */
-{
-    NodeList *pList;
-    NodeList *pNext;
-    int iBoxHeight = pBox->height;
-    for (pList = pLayout->pAbsolute; pList; pList = pNext) {
-        int s_x;               /* Static X offset */
-        int s_y;               /* Static Y offset */
-
-        MarginProperties margin;
-        BoxProperties box;
-
-        BoxContext sBox;
-        BoxContext sContent;
-
-        HtmlNode *pNode = pList->pNode;
-        HtmlComputedValues *pV= HtmlNodeComputedValues(pNode);
-        int isReplaced = nodeIsReplaced(pList->pNode);
-
-        int iLeft   = PIXELVAL(pV, LEFT, pBox->iContaining);
-        int iRight  = PIXELVAL(pV, RIGHT, pBox->iContaining);
-        int iWidth  = PIXELVAL(pV, WIDTH, pBox->iContaining);
-        int iTop    = PIXELVAL(pV, TOP, iBoxHeight);
-        int iBottom = PIXELVAL(pV, BOTTOM, iBoxHeight);
-        int iHeight = PIXELVAL(pV, HEIGHT, iBoxHeight);
-        int iSpace;
-
-        pNext = pList->pNext;
-
-        considerMinMaxWidth(pNode, pBox->iContaining, &iWidth);
-        considerMinMaxHeight(pNode, iBoxHeight, &iHeight);
-
-        if (HtmlDrawGetMarker(pStaticCanvas, pList->pMarker, &s_x, &s_y)) {
-            /* If GetMarker() returns non-zero, then pList->pMarker is not
-             * a part of pStaticCanvas. In this case do not draw the box
-             * or remove the entry from the list either.
-             */
-            continue;
-        }
-        pList->pMarker = 0;
-
-        nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-        nodeGetBoxProperties(pLayout, pNode, pBox->iContaining, &box);
-
-        /* Correct the static position for the padding edge offset. After the
-         * correction the point (s_x, s_y) is the static position in pBox.
-         */
-        s_x -= x;
-        s_y -= y;
-
-        LOG(pNode) {
-            HtmlTree *pTree = pLayout->pTree;
-            char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-            HtmlLog(pTree, "LAYOUTENGINE", "%s drawAbsolute() -> "
-                "containing block is %dx%d", zNode, pBox->width, iBoxHeight
-		    , NULL);
-            HtmlLog(pTree, "LAYOUTENGINE", "%s "
-                "static position is (%d,%d) (includes correction of (%d,%d))", 
-                zNode, s_x, s_y, x, y
-		    , NULL);
-        }
-
-        memset(&sContent, 0, sizeof(BoxContext));
-        if (isReplaced) {
-            sContent.iContaining = pBox->iContaining;
-            drawReplacementContent(pLayout, &sContent, pNode);
-            iWidth = sContent.width;
-        }
-
-        /* Determine a content-width for pNode, according to the following:
-         *
-         * The sum of the following quantities is equal to the width of the
-         * containing block.
-         *
-         *     + 'left' (may be "auto")
-         *     + 'width' (may be "auto")
-         *     + 'right' (may be "auto")
-         *     + horizontal margins (one or both may be "auto")
-         *     + horizontal padding and borders.
-         */
-        iSpace = pBox->iContaining - box.iLeft - box.iRight;
-        if (
-            iLeft != PIXELVAL_AUTO && 
-            iRight != PIXELVAL_AUTO &&  
-            iWidth != PIXELVAL_AUTO
-        ) {
-            iSpace -= (iLeft + iRight + iWidth);
-            if (margin.leftAuto && margin.rightAuto) {
-                if (iSpace < 0) {
-                    margin.margin_right = iSpace;
-                } else {
-                    margin.margin_left = iSpace / 2;
-                    margin.margin_right = iSpace - margin.margin_left;
-                }
-            } else if (margin.leftAuto) {
-                margin.margin_left = iSpace;
-            } else if (margin.rightAuto) {
-                margin.margin_right = iSpace;
-            } else {
-                /* Box is overconstrained. Set 'right' to auto */
-                iRight = PIXELVAL_AUTO;
-            }
-        }
-        if (iLeft == PIXELVAL_AUTO && iRight == PIXELVAL_AUTO) {
-            /* Box is underconstrained. Set 'left' to the static position */
-            iLeft = s_x;
-        }
-
-        iSpace -= (margin.margin_left + margin.margin_right);
-        iSpace -= (iLeft == PIXELVAL_AUTO ? 0: iLeft);
-        iSpace -= (iRight == PIXELVAL_AUTO ? 0: iRight);
-        iSpace -= (iWidth == PIXELVAL_AUTO ? 0: iWidth);
-
-        if (
-            iWidth == PIXELVAL_AUTO &&
-            (iLeft == PIXELVAL_AUTO || iRight == PIXELVAL_AUTO)
-        ) {
-            int min;
-            int max;
-            assert(iRight != PIXELVAL_AUTO || iLeft != PIXELVAL_AUTO);
-            blockMinMaxWidth(pLayout, pNode, &min, &max);
-            iWidth = MIN(MAX(min, iSpace), max);
-            LOG(pNode) {
-                HtmlTree *pTree = pLayout->pTree;
-                char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree,pNode));
-                HtmlLog(pTree, "LAYOUTENGINE", "%s drawAbsolute() -> "
-                    "Box is under-constrained and width is auto. "
-                    "Using shrink-to-fit width: %dpx "
-                    "(min=%dpx max=%dpx available=%dpx)", zNode, 
-                    iWidth, min, max, iSpace
-			, NULL);
-            }
-            iSpace -= iWidth;
-        }
-
-        /* At this point at most 1 of iWidth, iLeft and iRight can be "auto" */
-        if (iWidth == PIXELVAL_AUTO) {
-            assert(iLeft != PIXELVAL_AUTO && iRight != PIXELVAL_AUTO);
-            iWidth = iSpace;
-        } else if (iLeft == PIXELVAL_AUTO) {
-            assert(iWidth != PIXELVAL_AUTO && iRight != PIXELVAL_AUTO);
-            iLeft = iSpace;
-        } else if (iRight == PIXELVAL_AUTO) {
-            assert(iWidth != PIXELVAL_AUTO && iLeft != PIXELVAL_AUTO);
-            iRight = iSpace;
-        }
-
-        /* Layout the content into sContent */
-        if (!isReplaced) {
-            considerMinMaxWidth(pNode, pBox->iContaining, &iWidth);
-            sContent.iContaining = iWidth;
-            HtmlLayoutNodeContent(pLayout, &sContent, pNode);
-        }
-
-        /* Determine a content-height for pNode, according to the following:
-         *
-         * The sum of the following quantities is equal to the width of the
-         * containing block.
-         *
-         *     + 'top' (may be "auto")
-         *     + 'height' (may be "auto")
-         *     + 'bottom' (may be "auto")
-         *     + vertical margins (one or both may be "auto")
-         *     + vertical padding and borders.
-         */
-        iSpace = iBoxHeight - box.iTop - box.iBottom;
-        if (
-            iTop != PIXELVAL_AUTO && 
-            iBottom != PIXELVAL_AUTO &&  
-            iHeight != PIXELVAL_AUTO
-        ) {
-            iSpace -= (iTop + iBottom + iHeight);
-            if (margin.topAuto && margin.bottomAuto) {
-                if (iSpace < 0) {
-                    margin.margin_bottom = iSpace;
-                } else {
-                    margin.margin_top = iSpace / 2;
-                    margin.margin_bottom = iSpace - margin.margin_top;
-                }
-            } else if (margin.topAuto) {
-                margin.margin_top = iSpace;
-            } else if (margin.bottomAuto) {
-                margin.margin_bottom = iSpace;
-            } else {
-                iBottom = PIXELVAL_AUTO;
-            }
-        }
-        if (iTop == PIXELVAL_AUTO && iBottom == PIXELVAL_AUTO) {
-            /* Box is underconstrained. Set 'top' to the static position */
-            iTop = s_y;
-        }
-
-        iSpace -= (margin.margin_top + margin.margin_bottom);
-        iSpace -= (iTop == PIXELVAL_AUTO ? 0: iTop);
-        iSpace -= (iBottom == PIXELVAL_AUTO ? 0: iBottom);
-        iSpace -= (iHeight == PIXELVAL_AUTO ? 0: iHeight);
-
-        if (
-            iHeight == PIXELVAL_AUTO &&
-            (iTop == PIXELVAL_AUTO || iBottom == PIXELVAL_AUTO)
-        ) {
-            assert(iTop != PIXELVAL_AUTO || iBottom != PIXELVAL_AUTO);
-            iHeight = sContent.height;
-            iSpace -= iHeight;
-        }
-
-        /* At this point at most 1 of iWidth, iLeft and iRight can be "auto" */
-        if (iHeight == PIXELVAL_AUTO) {
-            assert(iTop != PIXELVAL_AUTO && iBottom != PIXELVAL_AUTO);
-            iHeight = iSpace;
-        } else if (iTop == PIXELVAL_AUTO) {
-            assert(iHeight != PIXELVAL_AUTO && iBottom != PIXELVAL_AUTO);
-            iTop = iSpace;
-        } else if (iBottom == PIXELVAL_AUTO) {
-            assert(iHeight != PIXELVAL_AUTO && iTop != PIXELVAL_AUTO);
-            iBottom = iSpace;
-        }
-
-        considerMinMaxHeight(pNode, iBoxHeight, &iHeight);
-        sContent.height = iHeight;
-        sContent.width = iWidth;
-
-        memset(&sBox, 0, sizeof(BoxContext));
-        sBox.iContaining = pBox->iContaining;
-        /* Wrap an overflow primitive around the content of this box. At
-         * the moment this just clips the displayed content. But eventually
-         * the HtmlCanvas module will automatically insert scrollbars if 
-         * required.
-         */
-        if (pV->eOverflow == CSS_CONST_HIDDEN) {
-            HtmlDrawOverflow(&sContent.vc,pNode,sContent.width,sContent.height);
-        }
-        wrapContent(pLayout, &sBox, &sContent, pNode);
-
-        LOG(pNode) {
-            HtmlTree *pTree = pLayout->pTree;
-            char const *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-            HtmlLog(pTree, "LAYOUTENGINE", "%s Calculated values: "
-                "left=%d right=%d top=%d bottom=%d width=%d height=%d", 
-                zNode, iLeft, iRight, iTop, iBottom, iWidth, iHeight
-		    , NULL);
-        }
-
-        DRAW_CANVAS(&pBox->vc, &sBox.vc, iLeft, iTop+margin.margin_top, pNode);
-        pBox->height = MAX(pBox->height, 
-            iTop + margin.margin_top + margin.margin_bottom + sBox.height
-        );
-
-        if (pLayout->pAbsolute == pList) {
-            pLayout->pAbsolute = pList->pNext;
-        } else {
-            NodeList *pTmp = pLayout->pAbsolute;
-            for (; pTmp->pNext != pList; pTmp = pTmp->pNext);
-            pTmp->pNext = pList->pNext;
-        }
-        HtmlFree(pList);
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * wrapContent --
- *
- *     BORDERS + BACKGROUND
- *
- *         The box context pointed to by pContent contains a content block
- *         with it's top-left at coordinates (0, 0). The width and height
- *         of the content are given by pContent->width and pContent->height,
- *         respectively. This function adds the background/borders box to
- *         the content and moves the result into box context pBox.
- *
- *         After this function returns, the point (0, 0) in pBox->vc
- *         corresponds to the top-left of the box including padding,
- *         borders and horizontal (but not vertical) margins. The values
- *         stored in pBox->width and pBox->height apply to the same box
- *         (including horizontal, but not vertical, margins).
- *
- *         Any percentage padding or margin values are calculated with
- *         respect to the value in pBox->iContaining. A value of "auto" for
- *         the left or right margin is treated as 0.
- *
- *     RELATIVE POSITIONING
- *
- *         If the value of the 'position' property for pNode is "relative",
- *         then the required offset (if any) is taken into account when
- *         drawing to pBox->vc. The static position of the element is still
- *         described by the (0, 0) point, pBox->width and pBox->height.
- *         Percentage values of properties 'left' and 'right', are
- *         calculated with respect to pBox->iContaining. 
- *
- *         Percentage values for 'top' and 'bottom' are treated as zero.
- *         TODO: This is a bug.
- *
- *     ABSOLUTE POSITIONING
- *
- *         If the value of the 'position' property is anything other than
- *         "static", then any absolutely positioned nodes accumulated in
- *         pLayout->pAbsolute are laid out into pBox with respect to the
- *         padding edge of pNode.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Many and varied.
- *---------------------------------------------------------------------------
- */
-static void
-wrapContent(pLayout, pBox, pContent, pNode)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    BoxContext *pContent;
-    HtmlNode *pNode;
-{
-    HtmlComputedValues *pV= HtmlNodeComputedValues(pNode);
-    MarginProperties margin;      /* Margin properties of pNode */
-    BoxProperties box;            /* Box properties of pNode */
-    int iRelLeft = 0;
-    int iRelTop = 0;
-    int x;
-    int y;
-    int w;
-    int h;
-
-    /* We do not want to generate a box for an implicit table-node
-     * created to wrap around a stray "display:table-cell" or
-     * "display:table-row" box. In this case, just copy the content
-     * directly into the output box (without a border).
-     */
-    if (!pNode->pParent && pNode != pLayout->pTree->pRoot) {
-        int iContaining = pBox->iContaining;
-        memcpy(pBox, pContent, sizeof(BoxContext));
-        pBox->iContaining = iContaining;
-        memset(pContent, 0x55, sizeof(BoxContext));
-        return;
-    }
-
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-    nodeGetBoxProperties(pLayout, pNode, pBox->iContaining, &box);
-
-    x = margin.margin_left;
-    y = 0;
-
-    if (pV->ePosition == CSS_CONST_RELATIVE) {
-        assert(pV->position.iLeft != PIXELVAL_AUTO);
-        assert(pV->position.iTop != PIXELVAL_AUTO);
-        assert(pV->position.iLeft == -1 * pV->position.iRight);
-        assert(pV->position.iTop == -1 * pV->position.iBottom);
-        iRelLeft = PIXELVAL(pV, LEFT, pBox->iContaining);
-        iRelTop = PIXELVAL(pV, TOP, 0);
-        x += iRelLeft;
-        y += iRelTop;
-    }
-
-    w = box.iLeft + pContent->width + box.iRight;
-    h = box.iTop + pContent->height + box.iBottom;
-
-    HtmlLayoutDrawBox(
-        pLayout->pTree, &pBox->vc, x, y, w, h, pNode, 0, pLayout->minmaxTest
-    );
-
-    x += box.iLeft;
-    y += box.iTop;
-    DRAW_CANVAS(&pBox->vc, &pContent->vc, x, y, pNode);
-
-    pBox->width = MAX(pBox->width, 
-        margin.margin_left + box.iLeft + 
-        pContent->width + 
-        box.iRight + margin.margin_right
-    );
-    pBox->height = MAX(pBox->height, 
-        box.iTop + pContent->height + box.iBottom
-    );
-
-    LOG(pNode) {
-        char zNotes[] = "<ol>"
-            "<li>The content-block is the size of the content, as "
-            "    determined by the 'width' and 'height' properties, or by"
-            "    the intrinsic size of the block contents."
-            "<li>The wrapped-block includes all space for padding and"
-            "    borders, and horizontal (but not vertical) margins."
-        "</ol>";
-
-        char zDim[128];
-        HtmlTree *pTree = pLayout->pTree;
-        Tcl_Obj *pLog = Tcl_NewObj();
-        Tcl_IncrRefCount(pLog);
-
-        Tcl_AppendToObj(pLog, zNotes, -1);
-        sprintf(zDim, 
-            "<p>Size of content block: <b>%dx%d</b></p>", 
-            pContent->width, pContent->height
-        );
-        Tcl_AppendToObj(pLog, zDim, -1);
-
-        sprintf(zDim, 
-            "<p>Size of wrapped block: <b>%dx%d</b></p>", 
-            pBox->width, pBox->height
-        );
-        Tcl_AppendToObj(pLog, zDim, -1);
-
-        HtmlLog(pTree, "LAYOUTENGINE", "%s wrapContent() %s",
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-            Tcl_GetString(pLog)
-		, NULL);
-        Tcl_DecrRefCount(pLog);
-    }
-
-    if (
-        (pV->ePosition != CSS_CONST_STATIC || pNode == pLayout->pTree->pRoot) &&
-        pLayout->pAbsolute
-    ) {
-        BoxContext sAbsolute;
-        int iLeftBorder = 0;
-        int iTopBorder = 0;
-
-        memset(&sAbsolute, 0, sizeof(BoxContext));
-        sAbsolute.height = pContent->height;
-        sAbsolute.height += box.iTop;
-        sAbsolute.height += box.iBottom;
-        if (pV->eBorderTopStyle != CSS_CONST_NONE) {
-            iTopBorder = pV->border.iTop;
-            sAbsolute.height -= iTopBorder;
-        }
-        if (pV->eBorderBottomStyle != CSS_CONST_NONE) {
-            sAbsolute.height -= pV->border.iBottom;
-        }
-        sAbsolute.width = pContent->width;
-        sAbsolute.width += box.iLeft;
-        sAbsolute.width += box.iRight;
-        if (pV->eBorderLeftStyle != CSS_CONST_NONE) {
-            iLeftBorder = pV->border.iLeft;
-            sAbsolute.width -= iLeftBorder;
-        }
-        if (pV->eBorderRightStyle != CSS_CONST_NONE) {
-            sAbsolute.width -= pV->border.iRight;
-        }
-        sAbsolute.iContaining = sAbsolute.width;
-        drawAbsolute(pLayout, &sAbsolute, &pBox->vc,
-            iLeftBorder + margin.margin_left, iTopBorder
-        );
-        DRAW_CANVAS(&pBox->vc, &sAbsolute.vc, 
-            iRelLeft + margin.margin_left + iLeftBorder, 
-            iRelTop + iTopBorder, pNode
-        );
-    }
-}
-
-void 
-HtmlLayoutDrawBox(pTree, pCanvas, x, y, w, h, pNode, flags, size_only)
-    HtmlTree *pTree;
-    HtmlCanvas *pCanvas;
-    int x;
-    int y;
-    int w;
-    int h;
-    HtmlNode *pNode;
-    int flags;
-    int size_only;
-{
-    if (size_only) {
-        HtmlDrawBox(pCanvas, x, y, w, h, pNode, flags, size_only, 0);
-    } else {
-        HtmlElementNode *pElem = HtmlNodeAsElement(pNode); 
-        HtmlCanvasItem *pNew;
-        HtmlCanvasItem *pItem = pElem->pBox;
-        pNew = HtmlDrawBox(pCanvas, x, y, w, h, pNode, flags, size_only, pItem);
-        HtmlDrawCanvasItemRelease(pTree, pItem);
-        HtmlDrawCanvasItemReference(pNew);
-        pElem->pBox = pNew;
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutTable --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutTable(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    int iMinWidth;                     /* Minimum from blockMinMaxWidth */
-    int iMaxWidth;                     /* Maximum from blockMinMaxWidth */
-    int iContaining = pBox->iContaining;
-    HtmlFloatList *pFloat = pNormal->pFloat;
-
-    int iLeftFloat = 0;
-    int iRightFloat = pBox->iContaining;
-
-    int iWidth;                        /* Specified content width */
-    int iCalcWidth;                    /* Calculated content width */
-
-    int x, y;                     /* Coords for content to be drawn */
-    BoxContext sContent;          /* Box context for content to be drawn into */
-    BoxContext sBox;              /* Box context for sContent + borders */
-    MarginProperties margin;      /* Margin properties of pNode */
-    BoxProperties box;            /* Box properties of pNode */
-    int iMPB;                     /* Sum of margins, padding and borders */
-
-    nodeGetMargins(pLayout, pNode, iContaining, &margin);
-    nodeGetBoxProperties(pLayout, pNode, iContaining, &box);
-
-    iMPB = box.iLeft + box.iRight + margin.margin_left + margin.margin_right;
-
-    /* Account for the 'margin-top' property of this node. The margin always
-     * collapses for a table element.
-     */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_top);
-    normalFlowMarginCollapse(pLayout, pNode, pNormal, pY);
-
-    iWidth = PIXELVAL(
-        HtmlNodeComputedValues(pNode), WIDTH,
-        pLayout->minmaxTest ? PIXELVAL_AUTO : pBox->iContaining
-    );
-    if (iWidth == PIXELVAL_AUTO) {
-        /* Move down if the minimum rendered width of this  table cannot fit at
-         * the current Y coordinate due to floating boxes. Then we can
-         * figure out exactly how much room is available where the table
-         * will actually be drawn. Of course, this only matters if the table
-         * has 'width:auto'. Otherwise we'll go with the specified width
-         * regardless.
-         *
-         * Note: Passing 10000 as the required height means in some (fairly
-         * unlikely) circumstances the table will be placed lower in the flow
-         * than would have been necessary. But it's not that big of a deal.
-         */
-        blockMinMaxWidth(pLayout, pNode, &iMinWidth, &iMaxWidth);
-        *pY = HtmlFloatListPlace(pFloat,iContaining,iMPB+iMinWidth,10000,*pY);
-        HtmlFloatListMargins(pFloat, *pY, *pY+10000, &iLeftFloat, &iRightFloat);
-        iCalcWidth = MIN(iMaxWidth, iRightFloat - iLeftFloat - iMPB);
-    } else {
-        /* Astonishingly, the 'width' property when applied to an element
-         * with "display:table" includes the horizontal borders (but not the
-         * margins). So subtract the border widths from iWidth here.
-         * 
-         * See section 17 of CSS 2.1. It's something to do with the table
-         * element generating an anonymous block box wrapped around itself and
-         * it's captions (we don't implement captions yet).
-         *
-         * Note that for a "display:table" element, all padding values are
-         * automatically zero so we don't have to worry about that when using
-         * box.iLeft and box.iRight.
-         */
-        iCalcWidth = iWidth - iMPB;
-    }
-
-    memset(&sContent, 0, sizeof(BoxContext));
-    memset(&sBox, 0, sizeof(BoxContext));
-    sContent.iContaining = iCalcWidth;
-    HtmlLayoutNodeContent(pLayout, &sContent, pNode);
-
-    sContent.height = MAX(sContent.height, 
-        getHeight(pNode, sContent.height, PIXELVAL_AUTO)
-    );
-    if (iWidth != PIXELVAL_AUTO) {
-        sContent.width = MAX(sContent.width, iWidth - iMPB);
-    }
-
-    sBox.iContaining = iContaining;
-    wrapContent(pLayout, &sBox, &sContent, pNode);
-
-    y = HtmlFloatListPlace(
-        pFloat, pBox->iContaining, sBox.width, sBox.height, *pY
-    );
-    *pY = y + sBox.height;
-    HtmlFloatListMargins(pFloat, y, *pY, &iLeftFloat, &iRightFloat);
- 
-    x = iLeftFloat + doHorizontalBlockAlign(
-        pLayout, pNode, &margin, iRightFloat - iLeftFloat - sBox.width
-    );
-    x = MAX(0, x);
-
-    DRAW_CANVAS(&pBox->vc, &sBox.vc, x, y, pNode);
-    pBox->height = MAX(pBox->height, *pY);
-    pBox->width = MAX(pBox->width, x + sBox.width);
-
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        Tcl_Obj *pLog = Tcl_NewObj();
-        Tcl_IncrRefCount(pLog);
-
-        /* Log the table blocks final position in it's parent */
-        Tcl_AppendToObj(pLog, "<p> Wrapped box coords in parent: (", -1);
-        Tcl_AppendObjToObj(pLog, Tcl_NewIntObj(x));
-        Tcl_AppendToObj(pLog, ", ", -1);
-        Tcl_AppendObjToObj(pLog, Tcl_NewIntObj(y));
-        Tcl_AppendToObj(pLog, ")", -1);
-
-        HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowLayoutTable() %s",
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-            Tcl_GetString(pLog),
-            x, y
-		, NULL);
-        Tcl_DecrRefCount(pLog);
-    }
-
-    /* Account for the 'margin-bottom' property of this node. */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_bottom);
-
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutTableComponent --
- *
- *     This function is called when a table-row or table-cell is encountered
- *     in the normal-flow (i.e not inside a table block the way they should
- *     be.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutTableComponent(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    int nChild;
-    int ii;
-    int idx;
-    HtmlNode *pParent = HtmlNodeParent(pNode);
-    HtmlElementNode sTable;            /* The fabricated "display:table" */
-
-    for (ii = 0; ii < HtmlNodeNumChildren(pParent); ii++) {
-        if (pNode == HtmlNodeChild(pParent, ii)) break;
-    }
-    idx = ii;
-
-    for (; ii < HtmlNodeNumChildren(pParent); ii++) {
-        HtmlNode *pChild = HtmlNodeChild(pParent, ii);
-        int eDisp = DISPLAY(HtmlNodeComputedValues(pChild));
-        if (
-            0 == HtmlNodeIsWhitespace(pChild) &&
-            eDisp != CSS_CONST_TABLE_CELL && eDisp != CSS_CONST_TABLE_ROW
-        ) {
-            break;
-        }
-        LOG(pNode) {
-            HtmlTree *pTree = pLayout->pTree;
-            const char *zFmt = 
-                    "%s normalFlowLayoutTableComponent() -> "
-                    "Child %d of implicit display:table";
-            const char *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pChild));
-            HtmlLog(pTree, "LAYOUTENGINE", zFmt, zNode, ii - idx, NULL);
-        }
-    }
-    nChild = ii - idx;
-    assert(nChild > 0);
-
-    memset(&sTable, 0, sizeof(HtmlElementNode));
-    sTable.apChildren = &((HtmlElementNode *)pParent)->apChildren[idx];
-    sTable.nChild = nChild;
-    sTable.node.iNode = -1;
-
-    if (!pLayout->pImplicitTableProperties) {
-        HtmlComputedValuesCreator sCreator;
-        CssProperty sProp;
-        sProp.eType = CSS_CONST_TABLE;
-        sProp.v.zVal = "table";
-        HtmlComputedValuesInit(pLayout->pTree, &sTable.node, 0, &sCreator);
-        HtmlComputedValuesSet(&sCreator, CSS_PROPERTY_DISPLAY, &sProp);
-        pLayout->pImplicitTableProperties = HtmlComputedValuesFinish(&sCreator);
-    }
-    sTable.pPropertyValues = pLayout->pImplicitTableProperties;
-
-    normalFlowLayoutTable(pLayout, pBox, &sTable.node, pY, pContext, pNormal);
-
-    /* Make sure the pretend node has not accumulated a layout-cache or
-     * node-command (which can happen in a LOG block).  */
-    HtmlLayoutInvalidateCache(pLayout->pTree, (HtmlNode *)&sTable);
-    HtmlNodeDeleteCommand(pLayout->pTree, (HtmlNode *)&sTable);
-
-    return nChild - 1;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutReplaced --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutReplaced(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    MarginProperties margin;          /* Margin properties of pNode */
-
-    int x;             /* X-coord for content to be drawn */
-    BoxContext sBox;   /* Box context for replacement to be drawn into */
-
-    int iLeftFloat = 0;
-    int iRightFloat = pBox->iContaining;
-
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-
-    /* First lay out the content of the element into sBox. Then figure out
-     * where to put it in the parent box. 
-     */
-    memset(&sBox, 0, sizeof(BoxContext));
-    sBox.iContaining = pBox->iContaining;
-    drawReplacement(pLayout, &sBox, pNode);
-
-    /* Account for the 'margin-top' property of this node. The margin always
-     * collapses for a replaced block node.
-     */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_top);
-    normalFlowMarginCollapse(pLayout, pNode, pNormal, pY);
-
-    *pY = HtmlFloatListPlace(
-        pNormal->pFloat, pBox->iContaining, sBox.width, sBox.height, *pY);
-    HtmlFloatListMargins(
-        pNormal->pFloat, *pY, *pY + sBox.height, &iLeftFloat, &iRightFloat);
-
-    if (margin.leftAuto && margin.rightAuto) {
-        x = (iRightFloat - iLeftFloat - sBox.width) / 2;
-    } else if (margin.leftAuto) {
-        x = (iRightFloat - sBox.width);
-    } else {
-        x = iLeftFloat;
-    }
-
-    DRAW_CANVAS(&pBox->vc, &sBox.vc, x, *pY, pNode);
-    *pY += sBox.height;
-    pBox->height = MAX(pBox->height, *pY);
-    pBox->width = MAX(pBox->width, sBox.width);
-
-    /* Account for the 'margin-bottom' property of this node. */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_bottom);
-
-    return 0;
-}
-
-static void
-setValueCallback(pNormal, pCallback, y)
-    NormalFlow *pNormal;
-    NormalFlowCallback *pCallback;
-    int y;
-{
-    *(int *)(pCallback->clientData) = y;
-    normalFlowCbDelete(pNormal, pCallback);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutBlock --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int
-normalFlowLayoutBlock(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-
-    BoxProperties box;                /* Box properties of pNode */
-    MarginProperties margin;          /* Margin properties of pNode */
-    int iMPB;                         /* Sum of margins, padding borders */
-    int iWidth;                       /* Content width of pNode in pixels */
-    int iUsedWidth;
-    int iWrappedX = 0;                /* X-offset of wrapped content */
-    int iContHeight;                  /* Containing height for % 'height' val */
-    int iSpareWidth;
-
-    int yBorderOffset;     /* Y offset for top of block border */
-    int x, y;              /* Coords for content to be drawn in pBox */
-    BoxContext sContent;   /* Box context for content to be drawn into */
-    BoxContext sBox;       /* sContent + borders */
-    BoxContext sTmp;       /* Used to offset content */
-
-    NormalFlowCallback sNormalFlowCallback;
-
-    memset(&sContent, 0, sizeof(BoxContext));
-    memset(&sBox, 0, sizeof(BoxContext));
-    memset(&sTmp, 0, sizeof(BoxContext));
-
-    nodeGetBoxProperties(pLayout, pNode, pBox->iContaining, &box);
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-
-    iContHeight = pBox->iContainingHeight;
-
-    /* Calculate iWidth and xBorderLeft. Both are interpreted as pixel values.
-     * For a non-replaced block element, the width is always as calculated
-     * here, even if the content is not as wide.
-     */
-    iWidth = PIXELVAL(
-        pV, WIDTH, pLayout->minmaxTest ? PIXELVAL_AUTO : pBox->iContaining
-    );
-
-    iMPB = box.iLeft + box.iRight + margin.margin_left + margin.margin_right;
-    if (iWidth == PIXELVAL_AUTO) {
-        /* If 'width' is set to "auto", then treat an "auto" value for
-         * 'margin-left' or 'margin-right' as 0. Then calculate the width
-         * available for the content by subtracting the margins, padding and
-         * borders from the width of the containing block.
-         */
-        iUsedWidth = pBox->iContaining - iMPB;
-    } else {
-        iUsedWidth = iWidth;
-    }
-
-    considerMinMaxWidth(pNode, pBox->iContaining, &iUsedWidth);
-    sContent.iContaining = iUsedWidth;
-
-    iSpareWidth = pBox->iContaining - iUsedWidth - iMPB;
-    iWrappedX = doHorizontalBlockAlign(pLayout, pNode, &margin, iSpareWidth);
-
-    if (!pLayout->minmaxTest) {
-        /* Unless this is part of a min-max width test, then the content is at
-         * least as wide as it's containing block. The call to
-         * normalFlowLayout() below may increase sContent.width, but not
-         * decrease it.
-         */
-        sContent.width = sContent.iContaining;
-    }
-
-    /* Account for the 'margin-top' property of this node. */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_top);
-
-    /* If this box has either top-padding or a top border, then collapse the
-     * vertical margin between this block and the one above now. In this
-     * case, the top-left of the wrapContent() box will be at coordinates
-     * (0, 0) of sContent.
-     *
-     * Otherwise, we have to wait for the vertical margins at the current
-     * point to collapse before we know where the top of the box is drawn.
-     * Do this by setting up a callback on the normal-flow object.
-     */
-    yBorderOffset = 0;
-    if (box.iTop > 0 || pLayout->pTree->pRoot == pNode) {
-        normalFlowMarginCollapse(pLayout, pNode, pNormal, pY); 
-    } else {
-        sNormalFlowCallback.xCallback = setValueCallback;
-        sNormalFlowCallback.clientData = (ClientData)(&yBorderOffset);
-        sNormalFlowCallback.pNext = 0;
-        normalFlowCbAdd(pNormal, &sNormalFlowCallback);
-    }
-
-    /* Calculate x and y as pixel values. */
-    *pY += box.iTop;
-    y = *pY;
-    x = iWrappedX + margin.margin_left + box.iLeft;
-
-    /* Set up the box-context used to draw the content. */
-    HtmlFloatListNormalize(pNormal->pFloat, -1 * x, -1 * y);
-
-    /* Layout the content of this non-replaced block box. For this kind
-     * of box, we treat any computed 'height' value apart from "auto" as a
-     * minimum height.
-     */
-    sContent.iContainingHeight = PIXELVAL(pV, HEIGHT, iContHeight);
-    normalFlowLayout(pLayout, &sContent, pNode, pNormal);
-
-    /* Remove any margin-collapse callback added to the normal flow context. */
-    normalFlowCbDelete(pNormal, &sNormalFlowCallback);
-
-    /* Special case. If the intrinsic height of the box is 0 (i.e. 
-     * it is empty) but the 'height' or 'min-height' properties cause
-     * the height to be non-zero, then we need to collapse the vertical 
-     * margins above this box.
-     */
-    if (sContent.height == 0 && getHeight(pNode, 0, iContHeight) > 0) {
-        int iMargin = 0;
-        normalFlowMarginCollapse(pLayout, pNode, pNormal, &iMargin); 
-        *pY += iMargin;
-        HtmlFloatListNormalize(pNormal->pFloat, 0, -1 * iMargin);
-        y += iMargin;
-    }
-
-    /* Adjust for 'height', 'min-height' and 'max-height' properties */
-    sContent.height = yBorderOffset + 
-            getHeight(pNode, sContent.height - yBorderOffset, iContHeight);
-    sContent.width = getWidth(iWidth, sContent.width);
-    considerMinMaxWidth(pNode, pBox->iContaining, &sContent.width);
-
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        const char *zFmt = "%s normalFlowLayoutBlock() -> "
-                "content size: %dx%d (y-border-offset: %d)";
-        const char *zNode = Tcl_GetString(HtmlNodeCommand(pTree, pNode));
-        HtmlLog(pTree, "LAYOUTENGINE", zFmt, zNode, sContent.width, 
-		sContent.height - yBorderOffset, yBorderOffset, NULL);
-    }
-
-    /* Re-normalize the float-list. */
-    HtmlFloatListNormalize(pNormal->pFloat, x, y);
-
-    if (box.iBottom > 0) {
-        pNormal->nonegative = 1;
-        normalFlowMarginCollapse(pLayout, pNode, pNormal, &sContent.height);
-    } 
-    *pY += sContent.height;
-    *pY += box.iBottom;
-
-    sBox.iContaining = pBox->iContaining;
-    DRAW_CANVAS(&sTmp.vc, &sContent.vc, 0, -1 * yBorderOffset, pNode);
-    sTmp.width = sContent.width;
-
-    sTmp.height = sContent.height - yBorderOffset;
-
-    wrapContent(pLayout, &sBox, &sTmp, pNode);
-    DRAW_CANVAS(&pBox->vc, &sBox.vc,iWrappedX, y-box.iTop+yBorderOffset, pNode);
-    pBox->width = MAX(pBox->width, sBox.width);
-    pBox->height = MAX(pBox->height, *pY);
-
-    /* Account for the 'margin-bottom' property of this node. */
-    normalFlowMarginAdd(pLayout, pNode, pNormal, margin.margin_bottom);
-
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowClearFloat --
- *
- *     This is called when a node with the 'clear' property set is 
- *     encountered in the normal flow.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int
-normalFlowClearFloat(pBox, pNode, pNormal, y)
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    NormalFlow *pNormal;
-    int y;
-{
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-    int eClear = pV->eClear;
-    int ynew = y;
-    if (eClear != CSS_CONST_NONE) {
-        int ydiff;
-        ynew = HtmlFloatListClear(pNormal->pFloat, eClear, ynew);
-        ydiff = ynew - y;
-        assert(ydiff >= 0);
-        pNormal->iMaxMargin = MAX(pNormal->iMaxMargin - ydiff, 0);
-        /* if (!pNormal->nonegative) pNormal->iMinMargin = 0; */
-        pNormal->iMinMargin -= ydiff;
-        pNormal->nonegative = 1;
-        pBox->height = MAX(ynew, pBox->height);
-    }
-    return ynew;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutText --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutText(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    HtmlInlineContextAddText(pContext, pNode);
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutReplacedInline --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutReplacedInline(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    BoxContext sBox;
-    HtmlCanvas canvas;
-    int w, h;
-    int iOffset;
-
-    MarginProperties margin;
-    BoxProperties box;
-    HtmlNodeReplacement *pReplace = HtmlNodeAsElement(pNode)->pReplacement;
-
-    memset(&sBox, 0, sizeof(BoxContext));
-    sBox.iContaining = pBox->iContaining;
-    drawReplacement(pLayout, &sBox, pNode);
-
-    /* Include the top and bottom margins in the box passed to the 
-     * inline context code. 
-     */
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-    nodeGetBoxProperties(pLayout, pNode, pBox->iContaining, &box);
-    h = sBox.height + margin.margin_top + margin.margin_bottom;
-    w = sBox.width;
-    iOffset = box.iBottom + (pReplace ? pReplace->iOffset : 0);
-    memset(&canvas, 0, sizeof(HtmlCanvas));
-    DRAW_CANVAS(&canvas, &sBox.vc, 0, margin.margin_top, pNode);
-    HtmlInlineContextAddBox(pContext, pNode, &canvas, w, h, iOffset);
-
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * layoutChildren --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void
-layoutChildren(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    int ii;
-
-    HtmlNode *pBefore = HtmlNodeBefore(pNode);
-    HtmlNode *pAfter = HtmlNodeAfter(pNode);
-
-    /* Layout the :before pseudo-element */
-    normalFlowLayoutNode(pLayout, pBox, pBefore, pY, pContext, pNormal);
-
-    /* Layout each of the child nodes. */
-    for(ii = 0; ii < HtmlNodeNumChildren(pNode) ; ii++) {
-        HtmlNode *p = HtmlNodeChild(pNode, ii);
-        int r;
-        r = normalFlowLayoutNode(pLayout, pBox, p, pY, pContext, pNormal);
-        assert(r >= 0);
-        ii += r;
-    }
-
-    /* Layout the :after pseudo-element */
-    normalFlowLayoutNode(pLayout, pBox, pAfter, pY, pContext, pNormal);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutInline --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutInline(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    InlineBorder *pBorder;
-    pBorder = HtmlGetInlineBorder(pLayout, pContext, pNode);
-    HtmlInlineContextPushBorder(pContext, pBorder);
-    layoutChildren(pLayout, pBox, pNode, pY, pContext, pNormal);
-    HtmlInlineContextPopBorder(pContext, pBorder);
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutInlineBlock --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutInlineBlock(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    BoxContext sBox;           /* Content */
-    BoxContext sBox2;          /* After wrapContent() */
-    BoxContext sBox3;          /* Adjusted for vertical margins */
-
-    int iWidth;                /* Calculated value of 'width' */
-    int iContaining;
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-
-    int w;                     /* Width of wrapped inline-block */
-    int h;                     /* Height of wrapped inline-block */
-    int dummy;
-    int iLineBox;
-
-    HtmlCanvas canvas;
-
-    MarginProperties margin;
-    nodeGetMargins(pLayout, pNode, pBox->iContaining, &margin);
-
-    memset(&sBox, 0, sizeof(BoxContext));
-    memset(&sBox2, 0, sizeof(BoxContext));
-    memset(&sBox3, 0, sizeof(BoxContext));
-
-    if (pV->eDisplay == CSS_CONST__TKHTML_INLINE_BUTTON) {
-        iWidth = PIXELVAL_AUTO;
-    } else {
-        iWidth = PIXELVAL(pV, WIDTH, pBox->iContaining);
-    }
-    iContaining = iWidth;
-    if (iContaining == PIXELVAL_AUTO) {
-        blockMinMaxWidth(pLayout, pNode, &iContaining, 0);
-    }
-
-    sBox.iContaining = iContaining;
-    HtmlLayoutNodeContent(pLayout, &sBox, pNode);
-    if (iWidth != PIXELVAL_AUTO) {
-        sBox.width = iWidth;
-    }
-    wrapContent(pLayout, &sBox2, &sBox, pNode);
-
-    /* Include the vertical margins in the box. */
-    memset(&canvas, 0, sizeof(HtmlCanvas));
-    DRAW_CANVAS(&canvas, &sBox2.vc, 0, margin.margin_top, pNode);
-    w = sBox2.width;
-    h = sBox2.height + margin.margin_top + margin.margin_bottom;
-    iLineBox = h;
-    HtmlDrawFindLinebox(&canvas, &dummy, &iLineBox);
-
-    HtmlInlineContextAddBox(pContext, pNode, &canvas, w, h, h - iLineBox);
-    return 0;
-}
-
-static int 
-normalFlowLayoutAbsolute(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    /* If this call is part of a min-max test, then ignore the absolutely
-     * positioned block completely. It does not contribute to the width or
-     * height of the parent anyway.
-     */
-    if (pLayout->minmaxTest == 0) {
-        int iLeft = 0;
-        int iDummy = 0;
-
-        int y = *pY + normalFlowMarginQuery(pNormal);
-
-        NodeList *pNew = (NodeList *)HtmlClearAlloc(0, sizeof(NodeList));
-        pNew->pNode = pNode;
-        pNew->pNext = pLayout->pAbsolute;
-
-        /* Place a marker in the canvas that will be used to determine
-         * the "static position" of the element. Two values are currently
-         * stored:
-         *
-         *     * The static 'left' position
-         *     * The static 'top' position
-         *
-         * See sections 10.3.7 and 10.6.4 of CSS2.1 for further details.
-         * Technically the static 'right' position should be stored also
-         * (this would only matter if right-to-left text was supported).
-         */
-        HtmlFloatListMargins(pNormal->pFloat, y, y, &iLeft, &iDummy);
-        pNew->pMarker = HtmlDrawAddMarker(&pBox->vc, iLeft, y, 0);
-
-        pLayout->pAbsolute = pNew;
-    }
-    return 0;
-}
-
-static int 
-normalFlowLayoutFixed(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    if (pLayout->minmaxTest == 0) {
-        int y = *pY + normalFlowMarginQuery(pNormal);
-        NodeList *pNew = (NodeList *)HtmlClearAlloc(0, sizeof(NodeList));
-        pNew->pNode = pNode;
-        pNew->pNext = pLayout->pFixed;
-        pNew->pMarker = HtmlDrawAddMarker(&pBox->vc, 0, y, 0);
-        pLayout->pFixed = pNew;
-    }
-    return 0;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * appendVerticalMarginsToObj --
- *
- *     This function is used with LOG {...} blocks only. It appends
- *     a description of the current vertical margins stored in pNormal
- *     to Tcl object pObj.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Appends to pObj.
- *
- *---------------------------------------------------------------------------
- */
-static void
-appendVerticalMarginsToObj(pObj, pNormal)
-    Tcl_Obj *pObj;
-    NormalFlow *pNormal;
-{
-    char zBuf[1024];
-    sprintf(zBuf, "min=%d max=%d isValid=%d nonegative=%d", 
-        pNormal->iMinMargin,
-        pNormal->iMaxMargin,
-        pNormal->isValid,
-        pNormal->nonegative
-    );
-    Tcl_AppendToObj(pObj, zBuf, -1);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutNode --
- *
- * Results:
- *     If pNode only is layed out, 0 is returned. If right-siblings of
- *     pNode are also layed out (this can happen when an implicit <table>
- *     is inserted) then the number of extra siblings layed out is returned.
- * 
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutNode(pLayout, pBox, pNode, pY, pContext, pNormal)
-    LayoutContext *pLayout;
-    BoxContext *pBox;
-    HtmlNode *pNode;
-    int *pY;
-    InlineContext *pContext;
-    NormalFlow *pNormal;
-{
-    typedef struct FlowType FlowType;
-    struct FlowType {
-        char *z;
-        int doDrawLines;          /* True to call inlineLayoutDrawLines() */
-        int doClearFloat;         /* True to call normalFlowClearFloat() */
-        int doLineBreak;          /* Make a line-break (i.e. for <br>) */
-        FlowLayoutFunc *xLayout;  /* Layout function to invoke */
-    };
-
-    /* Look-up table used by this function. */
-    #define F(z, d, c, l, x) static FlowType FT_ ## z = {#z, d, c, l, x}
-    F( NONE,            0, 0, 0, 0);
-    F( BLOCK,           1, 1, 0, normalFlowLayoutBlock);
-    F( BR,              1, 1, 1, normalFlowLayoutBlock);
-    F( FLOAT,           0, 0, 0, normalFlowLayoutFloat);
-    F( TABLE,           1, 1, 0, normalFlowLayoutTable);
-    F( BLOCK_REPLACED,  1, 1, 0, normalFlowLayoutReplaced);
-    F( TEXT,            0, 0, 0, normalFlowLayoutText);
-    F( INLINE,          0, 0, 0, normalFlowLayoutInline);
-    F( INLINE_BLOCK,    0, 0, 0, normalFlowLayoutInlineBlock);
-    F( INLINE_REPLACED, 0, 0, 0, normalFlowLayoutReplacedInline);
-    F( ABSOLUTE,        0, 0, 0, normalFlowLayoutAbsolute);
-    F( FIXED,           0, 0, 0, normalFlowLayoutFixed);
-    F( OVERFLOW,        1, 1, 0, normalFlowLayoutOverflow);
-    F( TABLE_COMPONENT, 0, 0, 0, normalFlowLayoutTableComponent);
-    #undef F
-
-    /* 
-     * Note about FT_NONE : The CSS 2.1 spec says, in section 9.2.4,
-     * that an element with display 'none' has no effect on layout at all.
-     * But rendering of http://slashdot.org depends on honouring the
-     * 'clear' property on an element with display 'none'. And Mozilla,
-     * KHTML and Opera do so.  Find out about this and if there are any
-     * other properties that need handling here.
-     *
-     * Another question: Is this a quirks mode thing?
-     */
-
-    HtmlComputedValues *pV;               /* Property values of pNode */
-    int eDisplay;                         /* Value of 'display' property */
-    FlowType *pFlow = &FT_NONE;
-    int ret = 0;                          /* Return value */
-
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.bottom);
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.right);
-
-    /* If there is no node, do nothing */
-    if (!pNode) return 0;
-    pV = HtmlNodeComputedValues(pNode);
-    eDisplay = DISPLAY(pV);
-
-    if (HtmlNodeIsText(pNode)) {
-        pFlow = &FT_TEXT;
-    } else if (eDisplay == CSS_CONST_NONE) {
-        /* Do nothing */
-    } else if (eDisplay == CSS_CONST_INLINE) {
-        pFlow = &FT_INLINE;
-        if (nodeIsReplaced(pNode)) {
-            pFlow = &FT_INLINE_REPLACED;
-        } 
-    } else if (
-        eDisplay == CSS_CONST_INLINE_BLOCK ||
-        eDisplay == CSS_CONST__TKHTML_INLINE_BUTTON
-    ) {
-        pFlow = &FT_INLINE_BLOCK;
-        if (nodeIsReplaced(pNode)) {
-            pFlow = &FT_INLINE_REPLACED;
-        } 
-    } else if (pV->ePosition == CSS_CONST_ABSOLUTE) {
-        pFlow = &FT_ABSOLUTE;
-    } else if (pV->ePosition == CSS_CONST_FIXED) {
-        pFlow = &FT_FIXED;
-    } else if (pV->eFloat != CSS_CONST_NONE) {
-        pFlow = &FT_FLOAT;
-    } else if (nodeIsReplaced(pNode)) {
-        pFlow = &FT_BLOCK_REPLACED;
-    } else if (eDisplay == CSS_CONST_BLOCK || eDisplay == CSS_CONST_LIST_ITEM) {
-        pFlow = &FT_BLOCK;
-        if (HtmlNodeTagType(pNode) == Html_BR) {
-            pFlow = &FT_BR;
-        } else if (pV->eOverflow != CSS_CONST_VISIBLE) {
-            pFlow = &FT_OVERFLOW;
-        }
-    } else if (eDisplay == CSS_CONST_TABLE) {
-        /* Todo: 'inline-table' is currently handled as 'table' */
-        pFlow = &FT_TABLE;
-    } else if (
-        eDisplay == CSS_CONST_TABLE_CELL || 
-        eDisplay == CSS_CONST_TABLE_ROW
-    ) {
-        /* Special case - we need to wrap an implicit table block 
-         * around this and any other table-cell or table-row components
-         * that are right-siblings of pNode. This is not dealt with
-         * using a FlowType instruction because it may consume more than
-         * single node.
-         */
-        pFlow = &FT_TABLE_COMPONENT;
-    }
-
-    /* Log the state of the normal-flow context before this node */
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        Tcl_Obj *pLog = Tcl_NewObj();
-        Tcl_IncrRefCount(pLog);
-
-        Tcl_AppendToObj(pLog, "<ul style=\"list-item-style:none\">", -1);
-        Tcl_AppendToObj(pLog, "<li>Layout as type: ", -1);
-        Tcl_AppendToObj(pLog, pFlow->z, -1);
-        Tcl_AppendToObj(pLog, "<li>Current y-coordinate: ", -1);
-        Tcl_AppendObjToObj(pLog, Tcl_NewIntObj(*pY));
-        Tcl_AppendToObj(pLog, "<li>Containing width: ", -1);
-        Tcl_AppendObjToObj(pLog, Tcl_NewIntObj(pBox->iContaining));
-        Tcl_AppendToObj(pLog, "<li>Vertical margins: ", -1);
-        appendVerticalMarginsToObj(pLog, pNormal);
-        Tcl_AppendToObj(pLog, "</ul>", -1);
-
-        HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowLayoutNode() Before: %s",
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-            Tcl_GetString(pLog)
-		, NULL);
-
-        HtmlFloatListLog(pTree, "Float list Before:", 
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-            pNormal->pFloat
-        );
-
-        Tcl_DecrRefCount(pLog);
-    }
-
-    if (pFlow->doLineBreak && HtmlInlineContextIsEmpty(pContext)) {
-        *pY += pV->fFont->em_pixels;
-    }
-    if (pFlow->doDrawLines) {
-        inlineLayoutDrawLines(pLayout, pBox, pContext, 1, pY, pNormal);
-    }
-    if (pFlow->doClearFloat) {
-        *pY = normalFlowClearFloat(pBox, pNode, pNormal, *pY);
-    }
-    if (pFlow->xLayout) {
-        ret = pFlow->xLayout(pLayout, pBox, pNode, pY, pContext, pNormal);
-    }
-
-    /* See if there are any complete line-boxes to copy to the main canvas. */
-    inlineLayoutDrawLines(pLayout, pBox, pContext, 0, pY, pNormal);
-
-    /* Log the state of the normal-flow context after this node */
-    LOG(pNode) {
-        HtmlTree *pTree = pLayout->pTree;
-        Tcl_Obj *pLog = Tcl_NewObj();
-        Tcl_IncrRefCount(pLog);
-
-        Tcl_AppendToObj(pLog, "<ul style=\"list-item-style:none\">", -1);
-        Tcl_AppendToObj(pLog, "<li>Current y-coordinate: ", -1);
-        Tcl_AppendObjToObj(pLog, Tcl_NewIntObj(*pY));
-        Tcl_AppendToObj(pLog, "<li>Vertical margins: ", -1);
-        appendVerticalMarginsToObj(pLog, pNormal);
-        Tcl_AppendToObj(pLog, "</ul>", -1);
-
-        HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowLayoutNode() After: %s",
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-            Tcl_GetString(pLog)
-		, NULL);
-
-        Tcl_DecrRefCount(pLog);
-    }
-
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.bottom);
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.right);
-
-    return ret;
-}
-
-
-#define LAYOUT_CACHE_N_USE_COND 6
-#ifdef LAYOUT_CACHE_DEBUG
-#define LAYOUT_CACHE_N_STORE_COND 9
-static int aDebugUseCacheCond[LAYOUT_CACHE_N_USE_COND + 1];
-static int aDebugStoreCacheCond[LAYOUT_CACHE_N_STORE_COND + 1];
-#endif
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayoutFromCache --
- *
- *     This routine is strictly a helper function for normalFlowLayout().
- *     It is never called from anywhere else. The arguments are the
- *     same as those passed to normalFlowLayout().
- *
- *     This function tries to do the job of normalFlowLayout() (see comments
- *     above that function) using data stored in the layout-cache associated
- *     with pNode (the structure *pNode->pLayoutCache). If successful, it
- *     returns non-zero. In this case normalFlowLayout() will return
- *     immediately, it's job having been performed using cached data.
- *     If the cache is not present or cannot be used, this function returns
- *     zero. In this case normalFlowLayout() should proceed.
- * 
- *     See also normalFlowLayoutToCache(), the function that creates
- *     the layout-cache used by this routine.
- *
- *         1. The widget -layoutcache option is set to true.
- *         2. A valid layout cache exists for pNode.
- *         3. The width allocated for node content is the same as when the
- *            the cache was generated.
- *         4. The vertical margins that will collapse with the top margin of 
- *            the first block in this flow are the same as they were when the
- *            cache was generated.
- *         5. The current floating margins are the same as they were when 
- *            the cache was generated and there are no new floating margins
- *            in the float list that affect the area where the cached 
- *            layout is to be placed.
- *
- * Results:
- *     Non-zero if the cache associated with pNode contained a usable
- *     layout, else zero.
- *
- * Side effects:
- *     May render content of pNode into pBox. See above.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-normalFlowLayoutFromCache(pLayout, pBox, pElem, pNormal, iLeft, iRight)
-    LayoutContext *pLayout;       /* Layout context */
-    BoxContext *pBox;             /* Box context to draw to */
-    HtmlElementNode *pElem;       /* Node to start drawing at */
-    NormalFlow *pNormal;
-    int iLeft;
-    int iRight;
-{
-    int cache_mask = (1 << pLayout->minmaxTest);
-
-    HtmlFloatList   *pFloat = pNormal->pFloat;
-    HtmlLayoutCache *pLayoutCache = pElem->pLayoutCache;
-    LayoutCache     *pCache = &pLayoutCache->aCache[pLayout->minmaxTest];
-
-    assert(pNormal->isValid == 0 || pNormal->isValid == 1);
-
-#ifdef LAYOUT_CACHE_DEBUG
-  #define COND(x, y) ( (y) || ((aDebugUseCacheCond[x]++) < 0) )
-#else
-  #define COND(x, y) (y)
-#endif
-
-    if ( 0 && 0 == (
-        COND(1, pLayout->pTree->options.layoutcache) &&
-        COND(2, pLayoutCache && (pLayoutCache->flags & cache_mask)) &&
-        COND(3, pBox->iContaining == pCache->iContaining) &&
-        COND(4,
-            pNormal->isValid    == pCache->normalFlowIn.isValid &&
-            pNormal->iMinMargin == pCache->normalFlowIn.iMinMargin &&   
-            pNormal->iMaxMargin == pCache->normalFlowIn.iMaxMargin &&
-            pNormal->nonegative == pCache->normalFlowIn.nonegative
-        ) &&
-        COND(5, iLeft == pCache->iFloatLeft && iRight == pCache->iFloatRight) &&
-        COND(6, HtmlFloatListIsConstant(pFloat, 0, pCache->iHeight))
-    )) {
-        if (pLayoutCache) {
-            HtmlDrawCleanup(pLayout->pTree, &pCache->canvas);
-        }
-        return 0;
-    }
-
-#ifdef LAYOUT_CACHE_DEBUG
-    aDebugUseCacheCond[0]++;
-#endif
-
-    /* Hooray! A cached layout can be used. */
-    assert(!pBox->vc.pFirst);
-    if (pCache->iMarginCollapse != PIXELVAL_AUTO) {
-        NormalFlowCallback *pCallback = pNormal->pCallbackList;
-        int iMargin = pCache->iMarginCollapse;
-        while (pCallback) {
-            pCallback->xCallback(pNormal, pCallback, iMargin);
-            pCallback = pCallback->pNext;
-        }
-    }
-    HtmlDrawCopyCanvas(&pBox->vc, &pCache->canvas);
-    pBox->width = pCache->iWidth;
-    assert(pCache->iHeight >= pBox->height);
-    pBox->height = pCache->iHeight;
-    pNormal->iMaxMargin = pCache->normalFlowOut.iMaxMargin;
-    pNormal->iMinMargin = pCache->normalFlowOut.iMinMargin;
-    pNormal->isValid = pCache->normalFlowOut.isValid;
-    pNormal->nonegative = pCache->normalFlowOut.nonegative;
-
-    return 1;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * normalFlowLayout --
- *
- *     This function is called in two circumstances:
- *
- *         1. When pNode creates a new normal flow context and
- *         2. When pNode is a non-replaced, non-floating block box in a normal
- *            flow (recursively from normalFlowLayoutBlock()).
- *
- *     In either case, the content of pNode is drawn to pBox->vc with the
- *     top-left hand corner at canvas coordinates (0, 0). It is the callers
- *     responsibility to deal with margins, border padding and background. 
- *
- *     When this function is called, pBox->iContaining should contain the width
- *     available for the content of pNode (*not* the width of pNode's
- *     containing block as for FlowLayoutFunc functions).
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-normalFlowLayout(pLayout, pBox, pNode, pNormal)
-    LayoutContext *pLayout;       /* Layout context */
-    BoxContext *pBox;             /* Box context to draw to */
-    HtmlNode *pNode;              /* Node to start drawing at */
-    NormalFlow *pNormal;
-{
-    InlineContext *pContext;
-    int y = 0;
-    int rc = 0;                       /* Return Code */
-    InlineBorder *pBorder;
-    HtmlFloatList *pFloat = pNormal->pFloat;
-    NodeList *pAbsolute = pLayout->pAbsolute;
-    NodeList *pFixed = pLayout->pFixed;
-
-    int left = 0; 
-    int right = pBox->iContaining;
-    int overhang;
-
-    HtmlComputedValues *pV = HtmlNodeComputedValues(pNode);
-    int isSizeOnly = pLayout->minmaxTest;
-    int iTextIndent = PIXELVAL(pV, TEXT_INDENT, pBox->iContaining);
-
-    HtmlLayoutCache *pLayoutCache = 0;
-    LayoutCache *pCache = 0;
-    int cache_mask = (1 << pLayout->minmaxTest);
-
-    NormalFlowCallback sCallback;
-
-    HtmlElementNode *pElem = (HtmlElementNode *)pNode;
-    assert(!HtmlNodeIsText(pNode));
-
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.bottom);
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.right);
-
-    /* TODO: Should the fourth case ("display:inline") really be here? */
-    assert( 
-        DISPLAY(pV) == CSS_CONST_BLOCK ||
-        DISPLAY(pV) == CSS_CONST_INLINE_BLOCK ||
-        DISPLAY(pV) == CSS_CONST_TABLE_CELL ||
-        DISPLAY(pV) == CSS_CONST_LIST_ITEM ||
-        DISPLAY(pV) == CSS_CONST_INLINE ||
-        DISPLAY(pV) == CSS_CONST__TKHTML_INLINE_BUTTON
-    );
-    assert(!nodeIsReplaced(pNode));
-
-    /* Attempt to use a layout cache */
-    HtmlFloatListMargins(pFloat, 0, 1, &left, &right);
-    if (normalFlowLayoutFromCache(pLayout, pBox, pElem, pNormal, left, right)) {
-        return;
-    }
-
-    /* If the structure for cached layout has not yet been allocated,
-     * allocate it now. The corresponding call to HtmlFree() is in
-     * the HtmlLayoutInvalidateCache() function.
-     * 
-     * Set pCache to point at the LayoutCache object used to cache
-     * this call. Boolean variable isCacheValid indicates whether or
-     * not the contents of pCache are currently valid.
-     */
-    if (!pElem->pLayoutCache) {
-        pElem->pLayoutCache = HtmlNew(HtmlLayoutCache);
-    }
-    pLayoutCache = pElem->pLayoutCache;
-    pCache = &pLayoutCache->aCache[pLayout->minmaxTest];
-
-    HtmlDrawCleanup(pLayout->pTree, &pCache->canvas);
-    pLayoutCache->flags &= ~(cache_mask);
-    pCache->normalFlowIn.iMaxMargin = pNormal->iMaxMargin;
-    pCache->normalFlowIn.iMinMargin = pNormal->iMinMargin;
-    pCache->normalFlowIn.isValid = pNormal->isValid;
-    pCache->normalFlowIn.nonegative = pNormal->nonegative;
-    pCache->iContaining = pBox->iContaining;
-    pCache->iFloatLeft = left;
-    pCache->iFloatRight = right;
-    pCache->iMarginCollapse = PIXELVAL_AUTO;
-
-    sCallback.xCallback = setValueCallback;
-    sCallback.clientData = (ClientData) &pCache->iMarginCollapse;
-    sCallback.pNext = 0;
-    normalFlowCbAdd(pNormal, &sCallback);
-
-    /* Create the InlineContext object for this containing box */
-    pContext = HtmlInlineContextNew(
-            pLayout->pTree, pNode, isSizeOnly, iTextIndent
-    );
-
-    /* Add any inline-border created by the node that generated this
-     * normal-flow to the InlineContext. Actual border attributes do not apply
-     * in this case, but the 'text-decoration' attribute may.
-     */
-    pBorder = HtmlGetInlineBorder(pLayout, pContext, pNode);
-    HtmlInlineContextPushBorder(pContext, pBorder);
-
-    /* If this element is a list-item with "list-style-position:inside", 
-     * then add the list-marker as the first box in the new inline-context.
-     */
-    if (
-        DISPLAY(pV) == CSS_CONST_LIST_ITEM &&
-        pV->eListStylePosition == CSS_CONST_INSIDE
-    ) {
-        BoxContext sMarker;
-        int iAscent;
-        memset(&sMarker, 0, sizeof(BoxContext));
-        if (markerBoxLayout(pLayout, &sMarker, pNode, &iAscent)) {
-            HtmlInlineContextAddBox(pContext, pNode, 
-                &sMarker.vc, sMarker.width, sMarker.height, 
-                sMarker.height - iAscent
-            );
-        }
-    }
-
-    layoutChildren(pLayout, pBox, pNode, &y, pContext, pNormal);
-    
-    /* Finish the inline-border started by the parent, if any. */
-    HtmlInlineContextPopBorder(pContext, pBorder);
-
-    rc = inlineLayoutDrawLines(pLayout, pBox, pContext, 1, &y, pNormal);
-    HtmlInlineContextCleanup(pContext);
-
-    /* If this element is a list-item with "list-style-position:outside", 
-     * and at least one line box was drawn, line up the list marker
-     * with the baseline of the first line box.
-     */
-    if (
-        DISPLAY(pV) == CSS_CONST_LIST_ITEM &&
-        pV->eListStylePosition == CSS_CONST_OUTSIDE
-    ) {
-        BoxContext sMarker;
-        int iAscent;
-        int xline, yline;
-        memset(&sMarker, 0, sizeof(BoxContext));
-        if( 
-            HtmlDrawFindLinebox(&pBox->vc, &xline, &yline) &&
-            markerBoxLayout(pLayout, &sMarker, pNode, &iAscent)
-        ) {
-            int xlist = xline - sMarker.width;
-            int ylist = yline - iAscent;
-            assert(iAscent == 0);
-            DRAW_CANVAS(&pBox->vc, &sMarker.vc, xlist, ylist, pNode);
-        }
-    }
-
-    left = 0;
-    right = pBox->iContaining;
-    HtmlFloatListMargins(pFloat, pBox->height-1, pBox->height, &left, &right);
-
-    /* TODO: Danger! elements with "position:relative" might break this? */
-    overhang = MAX(0, pBox->vc.bottom - pBox->height);
-
-    normalFlowCbDelete(pNormal, &sCallback);
-
-#undef COND
-#ifdef LAYOUT_CACHE_DEBUG
-  #define COND(x, y) ( (y) || ((aDebugStoreCacheCond[x]++) < 0) )
-#else
-  #define COND(x, y) (y)
-#endif
-
-    if (
-        COND(1, pLayout->pTree->options.layoutcache) && 
-        COND(2, pCache->iFloatLeft == left) &&
-        COND(3, pCache->iFloatRight == right) &&
-        COND(4, HtmlFloatListIsConstant(pFloat, pBox->height, overhang)) &&
-        COND(5, pLayout->pAbsolute == pAbsolute) &&
-        COND(6, pLayout->pFixed == pFixed) &&
-        COND(7, !HtmlNodeBefore(pNode) && !HtmlNodeAfter(pNode)) && 
-        COND(8, pNode->pParent) &&
-        COND(9, pNode->iNode >= 0)
-    ) {
-        HtmlDrawOrigin(&pBox->vc);
-        HtmlDrawCopyCanvas(&pCache->canvas, &pBox->vc);
-        pCache->iWidth = pBox->width;
-        pCache->iHeight = pBox->height;
-        pCache->normalFlowOut.iMaxMargin = pNormal->iMaxMargin;
-        pCache->normalFlowOut.iMinMargin = pNormal->iMinMargin;
-        pCache->normalFlowOut.isValid = pNormal->isValid;
-        pCache->normalFlowOut.nonegative = pNormal->nonegative;
-        pLayoutCache->flags |= cache_mask;
-
-        LOG(pNode) {
-            HtmlTree *pTree = pLayout->pTree;
-            HtmlLog(pTree, "LAYOUTENGINE", "%s normalFlowLayout() "
-                "Cached layout for node:"
-                "<ul><li>width = %d"
-                "    <li>height = %d"
-                "</ul>",
-                Tcl_GetString(HtmlNodeCommand(pTree, pNode)),
-                pCache->iWidth, pCache->iHeight
-		    , NULL);
-        }
-
-#ifdef LAYOUT_CACHE_DEBUG
-        aDebugStoreCacheCond[0]++;
-#endif
-    }
-
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.bottom);
-    CHECK_INTEGER_PLAUSIBILITY(pBox->vc.right);
-    return;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * blockMinMaxWidth --
- *
- *     Figure out the minimum and maximum widths that the content generated 
- *     by pNode may use. This is used during table and floating box layout.
- *
- *     The returned widths do not include the borders, padding or margins of
- *     the node. Just the content.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-int 
-blockMinMaxWidth(pLayout, pNode, pMin, pMax)
-    LayoutContext *pLayout;
-    HtmlNode *pNode;
-    int *pMin;
-    int *pMax;
-{
-    BoxContext sBox;
-    HtmlLayoutCache *pCache;
-    int minmaxTestOrig = pLayout->minmaxTest;
-
-    HtmlElementNode *pElem = (HtmlElementNode *)pNode;
-    assert(!HtmlNodeIsText(pNode));
-
-    /* If there is no layout-cache allocated, allocate one now */
-    if (!pElem->pLayoutCache) {
-        pElem->pLayoutCache = (HtmlLayoutCache *)HtmlClearAlloc(
-            "HtmlLayoutCache", sizeof(HtmlLayoutCache)
-        );
-    }
-    pCache = pElem->pLayoutCache;
-
-    /* Figure out the minimum width of the box by
-     * pretending to lay it out with a parent-width of 0.
-     */
-    if (pMin) {
-        if (!(pCache->flags & CACHED_MINWIDTH_OK)) {
-            pLayout->minmaxTest = MINMAX_TEST_MIN;
-            memset(&sBox, 0, sizeof(BoxContext));
-            HtmlLayoutNodeContent(pLayout, &sBox, pNode);
-            HtmlDrawCleanup(0, &sBox.vc);
-            pCache->iMinWidth = sBox.width;
-            pCache->flags |= CACHED_MINWIDTH_OK;
-        }
-        *pMin = pCache->iMinWidth;
-    }
-
-    /* Figure out the maximum width of the box by pretending to lay it
-     * out with a very large parent width. It is not expected to
-     * be a problem that tables may be layed out incorrectly on
-     * displays wider than 10000 pixels.
-     */
-    if (pMax) {
-        if (!(pCache->flags & CACHED_MAXWIDTH_OK)) {
-            pLayout->minmaxTest = MINMAX_TEST_MAX;
-            memset(&sBox, 0, sizeof(BoxContext));
-            sBox.iContaining = 10000;
-            HtmlLayoutNodeContent(pLayout, &sBox, pNode);
-            HtmlDrawCleanup(0, &sBox.vc);
-            pCache->iMaxWidth = sBox.width;
-            pCache->flags |= CACHED_MAXWIDTH_OK;
-        }
-        *pMax = pCache->iMaxWidth;
-    }
-
-    pLayout->minmaxTest = minmaxTestOrig;
-
-    /* It is, surprisingly, possible for the minimum width to be greater
-     * than the maximum width at this point. For example, consider the
-     * following:
-     *
-     *   div { font: fixed ; text-indent: -2.5ex }
-     *   <div>x x</div>
-     *
-     * The "max-width" layout puts the two 'x' characters on the same line,
-     * for a width of (0.5ex). The "min-width" puts the second 'x' on a
-     * second line-box, for a width of (1.0ex).
-     *
-     * First encountered in october 2006 at:
-     *     http://root.cern.ch/root/htmldoc/TF1.html
-     */
-    if (
-        pCache->flags & CACHED_MAXWIDTH_OK &&
-        pCache->flags & CACHED_MINWIDTH_OK &&
-        pCache->iMaxWidth < pCache->iMinWidth
-    ) {
-        pCache->iMaxWidth = MAX(pCache->iMaxWidth, pCache->iMinWidth);
-        if (pMax) {
-            *pMax = pCache->iMaxWidth;
-        }
-    }
-
-    LOG(pNode) {
-        char zMin[24];
-        char zMax[24];
-        HtmlTree *pTree = pLayout->pTree;
-
-        if (pMax) sprintf(zMax, "%d", *pMax);
-        else      sprintf(zMax, "N/A");
-        if (pMin) sprintf(zMin, "%d", *pMin);
-        else      sprintf(zMin, "N/A");
-
-        HtmlLog(pTree, "LAYOUTENGINE", "%s blockMinMaxWidth() -> "
-            "min=%s max=%s",
-            Tcl_GetString(HtmlNodeCommand(pTree, pNode)), 
-            zMin, zMax
-		, NULL);
-    }
-
-    return TCL_OK;
-}
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * doConfigureCmd --
- *
- *     Argument pNode must be a pointer to a node that has been replaced (i.e.
- *     using the [$node replace] interface) with a Tk window.  This function
- *     executes the "-configurecmd" script to configure the window based on the
- *     actual CSS property values for the node.
- *
- *     Currently, the configuration array contains the following:
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     If the -configurecmd script returns an error, Tcl_BackgroundError() is
- *     called.
- *---------------------------------------------------------------------------
- */
-static void 
-doConfigureCmd(pTree, pElem, iContaining)
-    HtmlTree *pTree;
-    HtmlElementNode *pElem;
-    int iContaining;
-{
-    Tcl_Obj *pConfigure;                           /* -configurecmd script */
-
-    assert(pElem && pElem->pReplacement);
-    pConfigure = pElem->pReplacement->pConfigureCmd;
-    pElem->pReplacement->iOffset = 0;
-
-    if (pConfigure) {
-        Tcl_Interp *interp = pTree->interp;
-        HtmlComputedValues *pV = pElem->pPropertyValues;
-        HtmlComputedValues *pTmpComputed;
-        HtmlNode *pTmp;
-        Tcl_Obj *pArray;
-        Tcl_Obj *pScript;
-        Tcl_Obj *pRes;
-        int rc;
-        int iWidth;
-        int iHeight;
-
-        pArray = Tcl_NewObj();
-        Tcl_ListObjAppendElement(interp, pArray, Tcl_NewStringObj("color",-1));
-        Tcl_ListObjAppendElement(interp, pArray, 
-                Tcl_NewStringObj(Tk_NameOfColor(pV->cColor->xcolor), -1)
-        );
-
-        pTmp = (HtmlNode *)pElem;
-        pTmpComputed = pV;
-        while (pTmp && pTmpComputed->cBackgroundColor->xcolor == 0) {
-            pTmp = HtmlNodeParent(pTmp);
-            if (pTmp) {
-                pTmpComputed = HtmlNodeComputedValues(pTmp);
-            }
-        }
-        if (pTmp) {
-            XColor *xcolor = pTmpComputed->cBackgroundColor->xcolor;
-            Tcl_ListObjAppendElement(interp, pArray, 
-                    Tcl_NewStringObj("background-color", -1)
-            );
-            Tcl_ListObjAppendElement(interp, pArray, 
-                    Tcl_NewStringObj(Tk_NameOfColor(xcolor), -1)
-            );
-        }
-
-        Tcl_ListObjAppendElement(interp, pArray, Tcl_NewStringObj("font",-1));
-        Tcl_ListObjAppendElement(interp, pArray, 
-                Tcl_NewStringObj(pV->fFont->zFont, -1)
-        );
-
-        /* If the 'width' attribute is not PIXELVAL_AUTO, pass it to the
-         * replacement window.  */
-        if (PIXELVAL_AUTO != (iWidth = PIXELVAL(pV, WIDTH, iContaining))) {
-            Tcl_Obj *pWidth = Tcl_NewStringObj("width",-1);
-            iWidth = MAX(iWidth, 1);
-            Tcl_ListObjAppendElement(interp, pArray, pWidth);
-            Tcl_ListObjAppendElement(interp, pArray, Tcl_NewIntObj(iWidth));
-        }
-
-        /* If the 'height' attribute is not PIXELVAL_AUTO, pass it to the
-         * replacement window.  */
-        if (PIXELVAL_AUTO != (iHeight = PIXELVAL(pV, HEIGHT, PIXELVAL_AUTO))) {
-            Tcl_Obj *pHeight = Tcl_NewStringObj("height",-1);
-            iHeight = MAX(iHeight, 1);
-            Tcl_ListObjAppendElement(interp, pArray, pHeight);
-            Tcl_ListObjAppendElement(interp, pArray, Tcl_NewIntObj(iHeight));
-        }
-
-        pScript = Tcl_DuplicateObj(pConfigure);
-        Tcl_IncrRefCount(pScript);
-        Tcl_ListObjAppendElement(interp, pScript, pArray);
-        rc = Tcl_EvalObjEx(interp, pScript, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
-        if (rc != TCL_OK) {
-            Tcl_BackgroundError(interp);
-        }
-        Tcl_DecrRefCount(pScript);
-
-        pRes = Tcl_GetObjResult(interp);
-        pElem->pReplacement->iOffset = 0;
-        Tcl_GetIntFromObj(0, pRes, &pElem->pReplacement->iOffset);
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlLayout --
- * 
- *     Build the internal representation of the formatted document (document
- *     layout). The document layout is stored in the HtmlTree.canvas and
- *     HtmlTree.iCanvasWidth variables.
- *
- * Results:
- *
- * Side effects:
- *     Destroys the existing document layout, if one exists.
- *
- *---------------------------------------------------------------------------
- */
-int 
-HtmlLayout(pTree)
-    HtmlTree *pTree;
-{
-    HtmlNode *pBody = 0;
-    int rc = TCL_OK;
-    int nWidth;
-    int nHeight;
-    LayoutContext sLayout;
-
-    /* TODO: At this point we are assuming that the computed style 
-     * information in HtmlElementNode.pPropertyValues is complete
-     * and up to date. It would be good to run the style engine
-     * on the document tree here and assert() none of the pPropertyValues
-     * structures change.
-     *
-     * Of course, such an assert() would be pretty expensive. It would
-     * normally be disabled... 
-     */
-
-    /* Set variable nWidth to the pixel width of the viewport to render 
-     * to. This code should use the actual width of the window if the
-     * widget is displayed, or the configured width if it is not (i.e. if 
-     * the widget is never packed).
-     *
-     * It would be better to use the Tk_IsMapped() function here, but for
-     * some reason I can't make it work. So instead depend on the observed 
-     * behaviour that Tk_Width() returns 1 if the window is not mapped.
-     */
-    nWidth = Tk_Width(pTree->tkwin);
-    if (nWidth < 5 || pTree->options.forcewidth) {
-        nWidth = pTree->options.width;
-    }
-    nHeight = Tk_Height(pTree->tkwin);
-    if (nHeight < 5) {
-        nHeight = PIXELVAL_AUTO;
-    }
-
-    /* Delete any existing document layout. */
-    HtmlDrawCleanup(pTree, &pTree->canvas);
-    memset(&pTree->canvas, 0, sizeof(HtmlCanvas));
-
-    /* Set up the layout context object. */
-    memset(&sLayout, 0, sizeof(LayoutContext));
-    sLayout.pTree = pTree;
-    sLayout.interp = pTree->interp;
-
-#ifdef LAYOUT_CACHE_DEBUG
-    memset(aDebugUseCacheCond, 0, sizeof(int) * (LAYOUT_CACHE_N_USE_COND + 1));
-    memset(aDebugStoreCacheCond, 0, sizeof(int)*(LAYOUT_CACHE_N_STORE_COND+1));
-#endif
-
-    HtmlLog(pTree, "LAYOUTENGINE", "START", NULL);
-
-    /* Call HtmlLayoutNodeContent() to layout the top level box, generated 
-     * by the root node.  
-     */
-    pBody = pTree->pRoot;
-    if (pBody) {
-        int y = 0;
-        MarginProperties margin;
-        BoxProperties box;
-
-        BoxContext sBox;
-        NormalFlow sNormal;
-
-        nodeGetMargins(&sLayout, pBody, nWidth, &margin);
-        nodeGetBoxProperties(&sLayout, pBody, nWidth, &box);
-
-        memset(&sBox, 0, sizeof(BoxContext));
-        memset(&sNormal, 0, sizeof(NormalFlow));
-        sNormal.pFloat = HtmlFloatListNew();
-        sNormal.isValid = 1;
-
-        /* Layout content */
-        sBox.iContaining =  nWidth;
-        sBox.iContainingHeight = nHeight;
-        normalFlowLayoutBlock(&sLayout, &sBox, pBody, &y, 0, &sNormal);
-        normalFlowMarginCollapse(&sLayout, pBody, &sNormal, &sBox.height);
-
-        /* Copy the content into the tree-canvas (the thing htmldraw.c 
-         * actually uses to draw the pretty pictures that were the point
-         * of all the shenanigans in this file).
-         */
-        HtmlDrawCanvas(&pTree->canvas, &sBox.vc, 0, 0, pBody);
-
-        /* This loop takes care of nested "position:fixed" elements. */
-        HtmlDrawAddMarker(&pTree->canvas, 0, 0, 1);
-        while (sLayout.pFixed) {
-            BoxContext sFixed;
-            memset(&sFixed, 0, sizeof(BoxContext));
-            sFixed.height = Tk_Height(pTree->tkwin);
-            if (sFixed.height < 5) sFixed.height = pTree->options.height;
-            sFixed.width = Tk_Width(pTree->tkwin);
-            sFixed.iContaining = sFixed.width;
-
-            assert(sLayout.pAbsolute == 0);
-            sLayout.pAbsolute = sLayout.pFixed;
-            sLayout.pFixed = 0;
-
-            drawAbsolute(&sLayout, &sFixed, &pTree->canvas, 0, 0);
-            HtmlDrawCanvas(&pTree->canvas, &sFixed.vc, 0, 0, pBody);
-        }
-
-        /* Note: Changed to using the actual size of the <body> element 
-         * (including margins) for scrolling purposes to avoid a problem
-         * with code like:
-         *
-         *   .class { padding-bottom: 30000px; margin-bottom: -30000px }
-         *
-         * Example (november 2006): http://www.readwriteweb.com/
-         */
-        pTree->canvas.right = MAX(pTree->canvas.right, sBox.width);
-        pTree->canvas.bottom = MAX(pTree->canvas.bottom, sBox.height);
-
-        HtmlFloatListDelete(sNormal.pFloat);
-    }
-
-#ifdef LAYOUT_CACHE_DEBUG
-    {
-        int ii;
-        printf("LayoutCacheDebug: USE: ");
-        for (ii = 0; ii <= LAYOUT_CACHE_N_USE_COND; ii++) {
-            printf("%d ", aDebugUseCacheCond[ii]);
-        }
-        printf("\n");
-        printf("LayoutCacheDebug: STORE: ");
-        for (ii = 0; ii <= LAYOUT_CACHE_N_STORE_COND; ii++) {
-            printf("%d ", aDebugStoreCacheCond[ii]);
-        }
-        printf("\n");
-    }
-#endif
-
-    HtmlComputedValuesRelease(pTree, sLayout.pImplicitTableProperties);
-
-    if (rc == TCL_OK) {
-        pTree->iCanvasWidth = Tk_Width(pTree->tkwin);
-        if (pTree->options.shrink) {
-            Tk_GeometryRequest(
-                pTree->tkwin, pTree->canvas.right, pTree->canvas.bottom
-            );
-            Tk_SetMinimumRequestSize(
-                pTree->tkwin, pTree->canvas.right, pTree->canvas.bottom
-            );
-        }
-    }
-
-    return rc;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlLayoutInvalidateCache --
- * 
- *     Invalidate the layout-cache for the specified node. 
- *
- *     Note that the layout-caches of the parent and ancestor nodes are NOT
- *     invalidated. If the caller wants the layout to be recomputed next time
- *     HtmlLayout() is called, the layout-caches of the parent and ancestor
- *     nodes must also be invalidated (by calling this function).
- * 
- * Results:
- *     None.
- *
- * Side effects:
- *     Deletes the layout cache for node pNode.
- *
- *---------------------------------------------------------------------------
- */
-void 
-HtmlLayoutInvalidateCache(pTree, pNode)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-{
-    if (!HtmlNodeIsText(pNode)) {
-        HtmlElementNode *pElem = (HtmlElementNode *)pNode;
-        if (pElem->pLayoutCache) {
-            HtmlDrawCleanup(pTree, &pElem->pLayoutCache->aCache[0].canvas);
-            HtmlDrawCleanup(pTree, &pElem->pLayoutCache->aCache[1].canvas);
-            HtmlDrawCleanup(pTree, &pElem->pLayoutCache->aCache[2].canvas);
-            HtmlFree(pElem->pLayoutCache);
-            pElem->pLayoutCache = 0;
-        }
-    }
-}
diff --git a/hv/CVS/Entries b/hv/CVS/Entries
deleted file mode 100644
index 6fceea3..0000000
--- a/hv/CVS/Entries
+++ /dev/null
@@ -1,45 +0,0 @@
-/README/1.21/Wed Sep 26 10:03:49 2007//
-/combobox.tcl/1.3/Tue Sep 25 17:05:34 2007//
-/hv3_doctype.tcl/1.7/Tue Jun 26 14:41:27 2007//
-/hv3_dom_compiler.tcl/1.31/Sun Aug  5 06:54:47 2007//
-/hv3_dom_containers.tcl/1.7/Mon Jul 23 07:15:41 2007//
-/hv3_dom_core.tcl/1.29/Sat Aug  4 17:15:25 2007//
-/hv3_dom_events.tcl/1.27/Mon Jul  2 12:31:33 2007//
-/hv3_dom_html.tcl/1.33/Wed Sep 19 18:43:42 2007//
-/hv3_dom_ns.tcl/1.26/Wed Sep 19 18:43:42 2007//
-/hv3_dom_style.tcl/1.13/Sat Aug  4 17:15:25 2007//
-/hv3_dom_xmlhttp.tcl/1.12/Sat Sep  1 14:21:28 2007//
-/hv3_encodings.tcl/1.6/Tue Sep 18 17:30:15 2007//
-/hv3_file.tcl/1.8/Fri Sep 28 14:23:37 2007//
-/hv3_icons.tcl/1.5/Mon Sep 17 14:22:39 2007//
-/hv3_log.tcl/1.18/Fri Sep 28 14:23:37 2007//
-/hv3_object.tcl/1.10/Fri Sep 28 14:23:37 2007//
-/hv3_polipo.tcl/1.15/Tue Sep 18 08:56:53 2007//
-/hv3_profile.tcl/1.3/Fri Sep 21 18:44:59 2007//
-/hv3events.c/1.9/Thu Aug  2 17:18:47 2007//
-/hv3format.c/1.4/Thu Apr 19 16:24:14 2007//
-/hv3see.c/1.48/Sun Aug  5 06:27:36 2007//
-/hv3timeout.c/1.5/Sun Jul 22 11:47:11 2007//
-/index.html/1.36/Tue Jul 10 18:13:00 2007//
-/license.txt/1.1/Fri Apr 27 16:06:00 2007//
-/main.tcl/1.7/Sat Jun 10 15:25:37 2006//
-/snit.tcl/1.1/Wed Mar  8 10:41:39 2006//
-/snit2.tcl/1.1/Sat Sep 22 17:40:38 2007//
-/tst_main.tcl/1.2/Fri Apr 27 16:05:52 2007//
-/hv3_bugreport.tcl/1.1/Fri Sep 28 16:14:40 2007//
-/hv3_dom.tcl/1.77/Fri Sep 28 16:33:32 2007//
-/hv3_history.tcl/1.26/Wed Oct  3 10:06:38 2007//
-/hv3_home.tcl/1.31/Wed Oct  3 10:06:38 2007//
-/hv3_prop.tcl/1.62/Wed Oct  3 10:06:38 2007//
-/hv3_db.tcl/1.19/Thu Oct  4 11:08:12 2007//
-/hv3_bookmarks.tcl/1.8/Sun Oct  7 06:14:44 2007//
-/hv3_frameset.tcl/1.15/Sun Sep 30 17:53:54 2007//
-/hv3_string.tcl/1.7/Sat Sep 29 15:18:26 2007//
-/hv3_widgets.tcl/1.52/Sun Oct  7 06:14:44 2007//
-/hv3function.c/1.1/Fri Sep 28 15:30:12 2007//
-/hv3.tcl/1.205/Mon Oct  8 07:24:27 2007//
-/hv3_form.tcl/1.86/Mon Oct  8 07:24:28 2007//
-/hv3_http.tcl/1.54/Mon Oct  8 07:24:28 2007//
-/hv3_main.tcl/1.159/Mon Oct  8 07:24:28 2007//
-/hv3_request.tcl/1.11/Mon Oct  8 07:24:28 2007//
-D
diff --git a/hv/CVS/Repository b/hv/CVS/Repository
deleted file mode 100644
index 951adb3..0000000
--- a/hv/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/hv
diff --git a/hv/CVS/Root b/hv/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/hv/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/hv/hv3_safewidgets.tcl b/hv/hv3_safewidgets.tcl
deleted file mode 100644
index 139597f..0000000
--- a/hv/hv3_safewidgets.tcl
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/hv/tags b/hv/tags
deleted file mode 100644
index 1fbc940..0000000
--- a/hv/tags
+++ /dev/null
@@ -1,219 +0,0 @@
-!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR	Darren Hiebert	/dhiebert at users.sourceforge.net/
-!_TAG_PROGRAM_NAME	Exuberant Ctags	//
-!_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
-!_TAG_PROGRAM_VERSION	5.5.4	//
-CALLED_LISTENER	hv3events.c	30;"	d	file:
-EventTarget	hv3events.c	/^struct EventTarget {$/;"	s	file:
-EventTarget	hv3events.c	/^typedef struct EventTarget EventTarget;$/;"	t	file:
-EventType	hv3events.c	/^struct EventType {$/;"	s	file:
-EventType	hv3see.c	/^typedef struct EventType EventType;$/;"	t	file:
-GC_FREE	hv3see.c	148;"	d	file:
-GC_MALLOC_UNCOLLECTABLE	hv3see.c	147;"	d	file:
-GC_register_finalizer	hv3see.c	149;"	d	file:
-GC_register_finalizer_no_order	hv3see.c	150;"	d	file:
-Hv3GlobalEnum	hv3see.c	/^struct Hv3GlobalEnum {$/;"	s	file:
-Hv3GlobalEnum	hv3see.c	/^typedef struct Hv3GlobalEnum Hv3GlobalEnum;$/;"	t	file:
-Hv3GlobalEnumVtbl	hv3see.c	/^static struct SEE_enumclass Hv3GlobalEnumVtbl = {$/;"	v	file:
-Hv3GlobalEnum_Next	hv3see.c	/^Hv3GlobalEnum_Next(pSeeInterp, pEnum, pFlags)$/;"	f	file:
-Hv3GlobalObject	hv3see.c	/^struct Hv3GlobalObject {$/;"	s	file:
-Hv3GlobalObject	hv3see.c	/^typedef struct Hv3GlobalObject Hv3GlobalObject;$/;"	t	file:
-Hv3GlobalObjectVtbl	hv3see.c	/^static struct SEE_objectclass Hv3GlobalObjectVtbl = {$/;"	v	file:
-Hv3Global_CanPut	hv3see.c	/^Hv3Global_CanPut(pInterp, pObj, pProp)$/;"	f	file:
-Hv3Global_DefaultValue	hv3see.c	/^Hv3Global_DefaultValue(pInterp, pObj, pHint, pRes)$/;"	f	file:
-Hv3Global_Delete	hv3see.c	/^Hv3Global_Delete(pInterp, pObj, pProp)$/;"	f	file:
-Hv3Global_Enumerator	hv3see.c	/^Hv3Global_Enumerator(pInterp, pObj)$/;"	f	file:
-Hv3Global_Get	hv3see.c	/^Hv3Global_Get(pInterp, pObj, pProp, pRes)$/;"	f	file:
-Hv3Global_HasProperty	hv3see.c	/^Hv3Global_HasProperty(pInterp, pObj, pProp)$/;"	f	file:
-Hv3Global_Put	hv3see.c	/^Hv3Global_Put(pInterp, pObj, pProp, pVal, flags)$/;"	f	file:
-JSTOKEN_CLOSE_BRACE	hv3format.c	15;"	d	file:
-JSTOKEN_CLOSE_BRACKET	hv3format.c	13;"	d	file:
-JSTOKEN_NEWLINE	hv3format.c	17;"	d	file:
-JSTOKEN_OPEN_BRACE	hv3format.c	14;"	d	file:
-JSTOKEN_OPEN_BRACKET	hv3format.c	12;"	d	file:
-JSTOKEN_PUNC	hv3format.c	21;"	d	file:
-JSTOKEN_SEMICOLON	hv3format.c	16;"	d	file:
-JSTOKEN_SPACE	hv3format.c	18;"	d	file:
-JSTOKEN_WORD	hv3format.c	20;"	d	file:
-JsBlob	hv3format.c	/^struct JsBlob {$/;"	s	file:
-JsBlob	hv3format.c	/^typedef struct JsBlob JsBlob;$/;"	t	file:
-ListenerContainer	hv3events.c	/^struct ListenerContainer {$/;"	s	file:
-ListenerContainer	hv3events.c	/^typedef struct ListenerContainer ListenerContainer;$/;"	t	file:
-MAX	hv3see.c	161;"	d	file:
-MIN	hv3see.c	162;"	d	file:
-OBJECT_HASH_SIZE	hv3see.c	179;"	d	file:
-PREVENT_DEFAULT	hv3events.c	29;"	d	file:
-SEE_scope	hv3see.c	/^struct SEE_scope {$/;"	s	file:
-STOP_PROPAGATION	hv3events.c	28;"	d	file:
-SeeInterp	hv3see.c	/^struct SeeInterp {$/;"	s	file:
-SeeInterp	hv3see.c	/^typedef struct SeeInterp SeeInterp;$/;"	t	file:
-SeeJsObject	hv3see.c	/^struct SeeJsObject {$/;"	s	file:
-SeeJsObject	hv3see.c	/^typedef struct SeeJsObject SeeJsObject;$/;"	t	file:
-SeeTclEnum	hv3see.c	/^struct SeeTclEnum {$/;"	s	file:
-SeeTclEnum	hv3see.c	/^typedef struct SeeTclEnum SeeTclEnum;$/;"	t	file:
-SeeTclEnumVtbl	hv3see.c	/^static struct SEE_enumclass SeeTclEnumVtbl = {$/;"	v	file:
-SeeTclEnum_Next	hv3see.c	/^SeeTclEnum_Next(pSeeInterp, pEnum, pFlags)$/;"	f	file:
-SeeTclObject	hv3see.c	/^struct SeeTclObject {$/;"	s	file:
-SeeTclObject	hv3see.c	/^typedef struct SeeTclObject SeeTclObject;$/;"	t	file:
-SeeTclObjectVtbl	hv3see.c	/^static struct SEE_objectclass SeeTclObjectVtbl = {$/;"	v	file:
-SeeTcl_Call	hv3see.c	/^SeeTcl_Call(pInterp, pObj, pThis, argc, argv, pRes)$/;"	f	file:
-SeeTcl_CanPut	hv3see.c	/^SeeTcl_CanPut(pInterp, pObj, pProp)$/;"	f	file:
-SeeTcl_Construct	hv3see.c	/^SeeTcl_Construct(pInterp, pObj, pThis, argc, argv, pRes)$/;"	f	file:
-SeeTcl_DefaultValue	hv3see.c	/^SeeTcl_DefaultValue(pInterp, pObj, pHint, pRes)$/;"	f	file:
-SeeTcl_Delete	hv3see.c	/^SeeTcl_Delete(pInterp, pObj, pProp)$/;"	f	file:
-SeeTcl_Enumerator	hv3see.c	/^SeeTcl_Enumerator(pInterp, pObj)$/;"	f	file:
-SeeTcl_Get	hv3see.c	/^SeeTcl_Get(pInterp, pObj, pProp, pRes)$/;"	f	file:
-SeeTcl_GetSecDomain	hv3see.c	/^SeeTcl_GetSecDomain(pInterp, pObj)$/;"	f	file:
-SeeTcl_HasInstance	hv3see.c	/^SeeTcl_HasInstance(pInterp, pObj, pInstance)$/;"	f	file:
-SeeTcl_HasProperty	hv3see.c	/^SeeTcl_HasProperty(pInterp, pObj, pProp)$/;"	f	file:
-SeeTcl_Put	hv3see.c	/^SeeTcl_Put(pInterp, pObj, pProp, pValue, flags)$/;"	f	file:
-SeeTimeout	hv3see.c	/^typedef struct SeeTimeout SeeTimeout;$/;"	t	file:
-SeeTimeout	hv3timeout.c	/^struct SeeTimeout {$/;"	s	file:
-TRANSIENT	hv3see.c	1076;"	d	file:
-Tclsee_Init	hv3see.c	/^Tclsee_Init(interp)$/;"	f
-aString	hv3see.c	/^  struct SEE_string **aString;$/;"	m	struct:SeeTclEnum	file:
-aTclObject	hv3see.c	/^    SeeTclObject *aTclObject[OBJECT_HASH_SIZE];$/;"	m	struct:SeeInterp	file:
-addEventListenerFunc	hv3events.c	/^addEventListenerFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-allocWordArray	hv3see.c	/^allocWordArray(p, pSeeTclObject, nExtra)$/;"	f	file:
-apArg	hv3timeout.c	/^  struct SEE_value **apArg;$/;"	m	struct:SeeTimeout	file:
-apWord	hv3see.c	/^    Tcl_Obj **apWord;$/;"	m	struct:SeeTclObject	file:
-argValueToTcl	hv3see.c	/^argValueToTcl(pTclSeeInterp, pValue, piObject)$/;"	f	file:
-backupEmptyLine	hv3format.c	/^backupEmptyLine(pBlob)$/;"	f	file:
-base	hv3see.c	/^    struct SEE_enum base;$/;"	m	struct:Hv3GlobalEnum	file:
-base	hv3see.c	/^  struct SEE_enum base;$/;"	m	struct:SeeTclEnum	file:
-callSeeTclMethod	hv3see.c	/^callSeeTclMethod(pTcl, pLog, p, zMethod, pProperty, pVal)$/;"	f	file:
-cancelTimeout	hv3timeout.c	/^static void cancelTimeout(pSeeInterp, isInterval, argc, argv, res)$/;"	f	file:
-clearIntervalFunc	hv3timeout.c	/^clearIntervalFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-clearTimeoutFunc	hv3timeout.c	/^clearTimeoutFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-createObjectRef	hv3see.c	/^createObjectRef(pTclSeeInterp, pObject)$/;"	f	file:
-createTransient	hv3see.c	/^createTransient(pTclSeeInterp, pTclCommand)$/;"	f	file:
-delInterpCmd	hv3see.c	/^delInterpCmd(clientData)$/;"	f	file:
-delTimeout	hv3timeout.c	/^static void delTimeout(p)$/;"	f	file:
-dispatchEventFunc	hv3events.c	/^dispatchEventFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-evalObjv	hv3see.c	/^static int evalObjv(pTcl, nWord, apWord)$/;"	f	file:
-eventDispatchCmd	hv3events.c	/^eventDispatchCmd(clientData, pTcl, objc, objv)$/;"	f	file:
-eventDispatchCmd	hv3see.c	/^static Tcl_ObjCmdProc eventDispatchCmd;$/;"	v	file:
-eventDumpCmd	hv3events.c	/^eventDumpCmd(clientData, pTcl, objc, objv)$/;"	f	file:
-eventDumpCmd	hv3see.c	/^static Tcl_ObjCmdProc eventDumpCmd;$/;"	v	file:
-eventTargetInit	hv3events.c	/^eventTargetInit(pTclSeeInterp, p)$/;"	f	file:
-finalizeObject	hv3see.c	/^finalizeObject(pPtr, pContext)$/;"	f	file:
-findOrCreateObject	hv3see.c	/^findOrCreateObject(pTclSeeInterp, pTclCommand, isGlobal)$/;"	f	file:
-formatAlphanumeric	hv3format.c	/^formatAlphanumeric(pBlob)$/;"	f	file:
-formatBlockClose	hv3format.c	/^formatBlockClose(pBlob)$/;"	f	file:
-formatBlockOpen	hv3format.c	/^formatBlockOpen(pBlob)$/;"	f	file:
-formatBracketClose	hv3format.c	/^formatBracketClose(pBlob)$/;"	f	file:
-formatBracketOpen	hv3format.c	/^formatBracketOpen(pBlob)$/;"	f	file:
-formatColon	hv3format.c	/^formatColon(pBlob)$/;"	f	file:
-formatComma	hv3format.c	/^formatComma(pBlob)$/;"	f	file:
-formatDot	hv3format.c	/^formatDot(pBlob)$/;"	f	file:
-formatLessthan	hv3format.c	/^formatLessthan(pBlob)$/;"	f	file:
-formatLinefeed	hv3format.c	/^formatLinefeed(pBlob)$/;"	f	file:
-formatQuotedstring	hv3format.c	/^formatQuotedstring(pBlob)$/;"	f	file:
-formatSemicolon	hv3format.c	/^formatSemicolon(pBlob)$/;"	f	file:
-formatSlash	hv3format.c	/^formatSlash(pBlob)$/;"	f	file:
-formatSpace	hv3format.c	/^formatSpace(pBlob)$/;"	f	file:
-formatSquareClose	hv3format.c	/^formatSquareClose(pBlob)$/;"	f	file:
-formatSquareOpen	hv3format.c	/^formatSquareOpen(pBlob)$/;"	f	file:
-formatSymbol	hv3format.c	/^formatSymbol(pBlob)$/;"	f	file:
-func	hv3timeout.c	/^  struct SEE_value func;$/;"	m	struct:SeeTimeout	file:
-getBooleanFlag	hv3events.c	/^getBooleanFlag(interp, pObj, zName)$/;"	f	file:
-getEventList	hv3events.c	/^getEventList(interp, pObj)$/;"	f	file:
-getSeeTclObject	hv3see.c	/^getSeeTclObject(pSeeObject)$/;"	f	file:
-getVtbl	hv3see.c	/^static struct SEE_objectclass *getVtbl() {$/;"	f	file:
-handleJavascriptError	hv3see.c	/^handleJavascriptError(pTclSeeInterp, pTry)$/;"	f	file:
-hashCommand	hv3see.c	/^hashCommand(zCommand)$/;"	f	file:
-hv3GlobalPick	hv3see.c	/^hv3GlobalPick(pInterp, pObj, pProp)$/;"	f	file:
-iCurrent	hv3see.c	/^  int iCurrent;$/;"	m	struct:SeeTclEnum	file:
-iId	hv3timeout.c	/^  int iId;$/;"	m	struct:SeeTimeout	file:
-iInterval	hv3timeout.c	/^  int iInterval;$/;"	m	struct:SeeTimeout	file:
-iKey	hv3see.c	/^    int iKey;$/;"	m	struct:SeeJsObject	file:
-iLevel	hv3format.c	/^  int iLevel;                      \/* Current block level *\/$/;"	m	struct:JsBlob	file:
-iNextJsObject	hv3see.c	/^    int iNextJsObject;$/;"	m	struct:SeeInterp	file:
-iNextTimeout	hv3see.c	/^    int iNextTimeout;$/;"	m	struct:SeeInterp	file:
-iNumSeeTclObject	hv3see.c	/^static int iNumSeeTclObject = 0;$/;"	v	file:
-iSeeInterp	hv3see.c	/^static int iSeeInterp = 0;$/;"	v	file:
-installHv3Global	hv3see.c	/^installHv3Global(pTclSeeInterp, pWindow)$/;"	f	file:
-interp	hv3see.c	/^    struct SEE_interpreter interp;$/;"	m	struct:SeeInterp	file:
-interpCmd	hv3see.c	/^interpCmd(clientData, pTclInterp, objc, objv)$/;"	f	file:
-interpDebug	hv3see.c	/^interpDebug(pTclSeeInterp, objc, objv)$/;"	f	file:
-interpEval	hv3see.c	/^interpEval(pTclSeeInterp, pCode, pFile)$/;"	f	file:
-interpTimeoutCleanup	hv3timeout.c	/^interpTimeoutCleanup(pSeeInterp)$/;"	f	file:
-interpTimeoutInit	hv3timeout.c	/^interpTimeoutInit(pSeeInterp)$/;"	f	file:
-isCapture	hv3events.c	/^  int isCapture;                  \/* True if a capturing event *\/$/;"	m	struct:ListenerContainer	file:
-iswordchar	hv3format.c	24;"	d	file:
-listenerToString	hv3events.c	/^listenerToString(pSeeInterp, pListener)$/;"	f	file:
-lookupObjectRef	hv3see.c	/^lookupObjectRef(pTclSeeInterp, iKey)$/;"	f	file:
-makeObjectPersistent	hv3see.c	/^makeObjectPersistent(pTclSeeInterp, pCommand)$/;"	f	file:
-makeObjectTransient	hv3see.c	/^makeObjectTransient(pTclSeeInterp, pCommand)$/;"	f	file:
-nAllocWord	hv3see.c	/^    int nAllocWord;$/;"	m	struct:SeeTclObject	file:
-nArg	hv3timeout.c	/^  int nArg;$/;"	m	struct:SeeTimeout	file:
-nPrevWord	hv3format.c	/^  int nPrevWord;$/;"	m	struct:JsBlob	file:
-nString	hv3see.c	/^  int nString;$/;"	m	struct:SeeTclEnum	file:
-nWord	hv3see.c	/^    int nWord;$/;"	m	struct:SeeTclObject	file:
-newSeeTclObject	hv3see.c	/^newSeeTclObject(pTclSeeInterp, pTclCommand)$/;"	f	file:
-newTimeout	hv3timeout.c	/^static void newTimeout(pSeeInterp, isInterval, argc, argv, res)$/;"	f	file:
-next	hv3see.c	/^    struct SEE_scope *next;$/;"	m	struct:SEE_scope	file:
-obj	hv3see.c	/^    struct SEE_object *obj;$/;"	m	struct:SEE_scope	file:
-objToValue	hv3see.c	/^objToValue(pInterp, pObj, pValue)$/;"	f	file:
-object	hv3see.c	/^    struct SEE_object object;     \/* Base class - Object *\/$/;"	m	struct:SeeTclObject	file:
-object	hv3see.c	/^    struct SEE_object object;$/;"	m	struct:Hv3GlobalObject	file:
-pEventPrototype	hv3see.c	/^    struct SEE_object *pEventPrototype;$/;"	m	struct:SeeInterp	file:
-pGlobal	hv3see.c	/^    struct SEE_object *pGlobal;$/;"	m	struct:Hv3GlobalObject	file:
-pGlobalEnum	hv3see.c	/^    struct SEE_enum *pGlobalEnum;$/;"	m	struct:Hv3GlobalEnum	file:
-pJsObject	hv3see.c	/^    SeeJsObject *pJsObject;$/;"	m	struct:SeeInterp	file:
-pLine	hv3format.c	/^  Tcl_Obj *pLine;                  \/* Current output line *\/$/;"	m	struct:JsBlob	file:
-pListener	hv3events.c	/^  struct SEE_object *pListener;   \/* Listener function *\/$/;"	m	struct:ListenerContainer	file:
-pListenerList	hv3events.c	/^  ListenerContainer *pListenerList;$/;"	m	struct:EventType	file:
-pLog	hv3see.c	/^    Tcl_Obj *pLog;$/;"	m	struct:SeeInterp	file:
-pNative	hv3see.c	/^    struct SEE_native *pNative;   \/* Store native properties here *\/$/;"	m	struct:SeeTclObject	file:
-pNativeEnum	hv3see.c	/^  struct SEE_enum *pNativeEnum;$/;"	m	struct:SeeTclEnum	file:
-pNext	hv3events.c	/^  EventType *pNext;$/;"	m	struct:EventType	file:
-pNext	hv3events.c	/^  ListenerContainer *pNext;       \/* Next listener on this event type *\/$/;"	m	struct:ListenerContainer	file:
-pNext	hv3see.c	/^    SeeJsObject *pNext;$/;"	m	struct:SeeJsObject	file:
-pNext	hv3see.c	/^    SeeTclObject *pNext;$/;"	m	struct:SeeTclObject	file:
-pNext	hv3timeout.c	/^  SeeTimeout *pNext;$/;"	m	struct:SeeTimeout	file:
-pObj	hv3see.c	/^    Tcl_Obj *pObj;                \/* Tcl script for object *\/$/;"	m	struct:SeeTclObject	file:
-pObject	hv3see.c	/^    struct SEE_object *pObject;$/;"	m	struct:SeeJsObject	file:
-pOut	hv3format.c	/^  Tcl_Obj *pOut;                   \/* Tcl list of output lines *\/$/;"	m	struct:JsBlob	file:
-pTclError	hv3see.c	/^    Tcl_Obj *pTclError;$/;"	m	struct:SeeInterp	file:
-pTclInterp	hv3see.c	/^    Tcl_Interp *pTclInterp;$/;"	m	struct:SeeInterp	file:
-pTclSeeInterp	hv3events.c	/^  SeeInterp *pTclSeeInterp;$/;"	m	struct:EventTarget	file:
-pTclSeeInterp	hv3timeout.c	/^  SeeInterp *pTclSeeInterp;$/;"	m	struct:SeeTimeout	file:
-pTimeout	hv3see.c	/^    SeeTimeout *pTimeout;$/;"	m	struct:SeeInterp	file:
-pTrace	hv3see.c	/^    Tcl_Obj *pTrace;$/;"	m	struct:SeeInterp	file:
-pTraceContext	hv3see.c	/^    struct SEE_context *pTraceContext;$/;"	m	struct:SeeInterp	file:
-pTypeList	hv3events.c	/^  EventType *pTypeList;$/;"	m	struct:EventTarget	file:
-pTypeList	hv3see.c	/^    EventType *pTypeList;$/;"	m	struct:SeeTclObject	file:
-pWindow	hv3see.c	/^    struct SEE_object *pWindow;$/;"	m	struct:Hv3GlobalObject	file:
-pWindowEnum	hv3see.c	/^    struct SEE_enum *pWindowEnum;$/;"	m	struct:Hv3GlobalEnum	file:
-ppThis	hv3timeout.c	/^  SeeTimeout **ppThis;$/;"	m	struct:SeeTimeout	file:
-prevWasKeyword	hv3format.c	/^prevWasKeyword(pBlob)$/;"	f	file:
-preventDefaultFunc	hv3events.c	/^preventDefaultFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-primitiveValueToTcl	hv3see.c	/^primitiveValueToTcl(pTclSeeInterp, pValue)$/;"	f	file:
-removeEventListenerFunc	hv3events.c	/^removeEventListenerFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-removeTransientRefs	hv3see.c	/^removeTransientRefs(pTclSeeInterp, n)$/;"	f	file:
-runEvent	hv3events.c	/^runEvent(interp, pTarget, pEvent, zType, isCapture)$/;"	f	file:
-seeTraceHook	hv3see.c	/^seeTraceHook(pSeeInterp, pThrowLoc, pContext, event)$/;"	f	file:
-setBooleanFlag	hv3events.c	/^setBooleanFlag(interp, pObj, zName)$/;"	f	file:
-setIntervalFunc	hv3timeout.c	/^setIntervalFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-setTimeoutFunc	hv3timeout.c	/^setTimeoutFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-stopPropagationFunc	hv3events.c	/^stopPropagationFunc(interp, self, thisobj, argc, argv, res)$/;"	f	file:
-stringToObj	hv3see.c	/^stringToObj(pString)$/;"	f	file:
-tclCallOrConstruct	hv3see.c	/^tclCallOrConstruct(zMethod, pInterp, pObj, pThis, argc, argv, pRes)$/;"	f	file:
-tclEnumerator	hv3see.c	/^tclEnumerator(pInterp, pObj)$/;"	f	file:
-tclSeeAlloc	hv3see.c	/^tclSeeAlloc(clientData, interp, objc, objv)$/;"	f	file:
-tclSeeCollect	hv3see.c	/^tclSeeCollect(clientData, interp, objc, objv)$/;"	f	file:
-tclSeeFormat	hv3format.c	/^tclSeeFormat(clientData, interp, objc, objv)$/;"	f	file:
-tclSeeInterp	hv3see.c	/^tclSeeInterp(clientData, interp, objc, objv)$/;"	f	file:
-throwTclError	hv3see.c	/^static void throwTclError(p, rc)$/;"	f	file:
-timeoutCb	hv3timeout.c	/^static void timeoutCb(clientData)$/;"	f	file:
-token	hv3timeout.c	/^  Tcl_TimerToken token;$/;"	m	struct:SeeTimeout	file:
-valueToBoolean	hv3events.c	/^valueToBoolean(interp, pValue, eDef)$/;"	f	file:
-writeLine	hv3format.c	/^writeLine(pBlob)$/;"	f	file:
-writeOut	hv3format.c	/^writeOut(pBlob, z, n)$/;"	f	file:
-zCsr	hv3format.c	/^  const char *zCsr;                \/* Current cursor point in zIn[] *\/$/;"	m	struct:JsBlob	file:
-zGlobal	hv3see.c	/^    char *zGlobal;$/;"	m	struct:SeeInterp	file:
-zIn	hv3format.c	/^  const char *zIn;                 \/* Input: javascript blob (nul-terminated) *\/$/;"	m	struct:JsBlob	file:
-zPrevWord	hv3format.c	/^  const char *zPrevWord;$/;"	m	struct:JsBlob	file:
-zType	hv3events.c	/^  struct SEE_string *zType;$/;"	m	struct:EventType	file:
diff --git a/hv/user.html b/hv/user.html
deleted file mode 100644
index c8a8203..0000000
--- a/hv/user.html
+++ /dev/null
@@ -1,98 +0,0 @@
-
-<style> 
-  h1,h2,h3 {
-    color:purple;
-  }
-</style> 
-
-<script> 
-  function build_toc (e) {
-  }
- 
-  window.onload = build_toc
-</script>
-
-<h1>Hv3 User Manual</h1>
-
-<div id="toc">
-
-<h2>Overview</h2>
-
-<h2>Essential Information</h2>
-
-<h3>Using a Statefile</h3>
-
-<p>
-  Most popular browsers, including Internet Explorer and Firefox, store some
-  data in the file-system. By default, Hv3 does not do this. When a browser
-  window is closed, all data is discarded. This can be useful when using a
-  public computer, or if you wish, for reasons of your own, to cover your
-  tracks. However, it can also be inconveniant.
-</p>
-
-<p>
-  The alternative is to specify the "-statefile" option as part of the
-  command line used to start Hv3. The -statefile option is used to specify
-  a file on disk used to persistently store various elements of the browser
-  application state. Windows users may need to create a "batch file" to 
-  achieve this. For example, assuming that the Hv3 binary is named
-  "hv3-linux-nightly-07_0723" and you wish to use the file
-  "/home/dan/hv3_state.db" as the statefile, the full command line would be:
-
-<pre>
-  hv3-linux-nightly-07_0723 -statefile /home/dan/hv3_state.db
-</pre>
-
-<p>
-  If enabled, Hv3 stores the following data in the statefile:
-<ul>
-  <li> HTTP cookies.
-  <li> The list of visited URIs (used for auto-completion in the location 
-       bar and for coloring visited hyperlinks).
-  <li> The values of the settings configured in the "Options" pull-down menu,
-       except for the "Hide GUI" option.
-  <li> User bookmarks.
-</ul>
-
-<h3>Security Considerations</h3>
-
-<p>
-  Whatever anyone else says, at time of writing all major browsers 
-  have some big security issues, known and unknown. These are ours:
-
-<ol>
-<li>
-<p>
-  Hv3 unconditionally accepts all cookies, regardless of origin. In my
-  opinion this is not a problem, but some people think it is.
-</p>
-<li>
-<p>
-  If javascript is enabled (the Options->Enable ECMAScript option),
-  then Hv3 is vulnerable to cross-site scripting attacks. This means that
-  if you visit a malicious site with javascript enabled, that site will
-  be able to steal the contents of the cookies database and possibly 
-  access any web-accounts that use cookies to identify users.
-</p>
-<p>
-  Other browsers are also vulnerable to similar attacks. But it's much
-  easier for a malicious user to take advantage of Hv3.
-</p>
-<p>
-  Unless you understand all the issues involved, I strongly recommend
-  that you do not test out your online banking site with Hv3.
-</p>
-</ol>
- 
-<h2>Feature Guide</h2>
-
-<h3>Browsing the Web</h3>
-
-<h3>Searching the Web</h3>
-
-<h3>Bookmarks</h3>
-
-<h3>Find in Page</h3>
-
-<h3>Configuring Hv3</h3>
-
diff --git a/src/.#htmltcl.c.1.149 b/src/.#htmltcl.c.1.149
deleted file mode 100644
index df86838..0000000
--- a/src/.#htmltcl.c.1.149
+++ /dev/null
@@ -1,2627 +0,0 @@
-/*
- *--------------------------------------------------------------------------
- * Copyright (c) 2005 Dan Kennedy.
- * All rights reserved.
- *
- * This Open Source project was made possible through the financial support
- * of Eolas Technologies Inc.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Eolas Technologies Inc. nor the names of its
- *       contributors may be used to endorse or promote products derived from
- *       this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-static char const rcsid[] = "@(#) $Id: htmltcl.c,v 1.149 2007/01/08 11:48:07 danielk1977 Exp $";
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <assert.h>
-#include "html.h"
-#include "swproc.h"
-
-#include <time.h>
-
-#include "htmldefaultstyle.c"
-
-#define LOG if (pTree->options.logcmd)
-
-#define SafeCheck(interp,str) if (Tcl_IsSafe(interp)) { \
-    Tcl_AppendResult(interp, str, " invalid in safe interp", 0); \
-    return TCL_ERROR; \
-}
-
-#ifndef NDEBUG
-static int 
-allocCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return Rt_AllocCommand(0, interp, objc, objv);
-}
-static int 
-heapdebugCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlHeapDebug(0, interp, objc, objv);
-}
-static int 
-hashstatsCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    Tcl_HashEntry *p;
-    Tcl_HashSearch search;
-    int nObj = 0;
-    int nRef = 0;
-    char zRes[128];
-
-    for (
-        p = Tcl_FirstHashEntry(&pTree->aValues, &search); 
-        p; 
-        p = Tcl_NextHashEntry(&search)
-    ) {
-        HtmlComputedValues *pV = 
-            (HtmlComputedValues *)Tcl_GetHashKey(&pTree->aValues, p);
-        nObj++;
-        nRef += pV->nRef;
-    }
-
-    sprintf(zRes, "%d %d", nObj, nRef);
-    Tcl_SetResult(interp, zRes, TCL_VOLATILE);
-    return TCL_OK;
-}
-#endif
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlLog --
- * HtmlTimer --
- *
- *     This function is used by various parts of the widget to output internal
- *     information that may be useful in debugging. 
- *
- *     The first argument is the HtmlTree structure. The second is a string
- *     identifying the sub-system logging the message. The third argument is a
- *     printf() style format string and subsequent arguments are substituted
- *     into it to form the logged message.
- *
- *     If -logcmd is set to an empty string, this function is a no-op.
- *     Otherwise, the name of the subsystem and the formatted error message are
- *     appended to the value of the -logcmd option and the result executed as a
- *     Tcl script.
- *
- *     This function is replaced with an empty macro if NDEBUG is defined at
- *     compilation time. If the "-logcmd" option is set to an empty string it
- *     returns very quickly.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Invokes the -logcmd script, if it is not "".
- *
- *---------------------------------------------------------------------------
- */
-void 
-logCommon(
-    HtmlTree *pTree, 
-    Tcl_Obj *pLogCmd, 
-    CONST char *zSubject, 
-    CONST char *zFormat, 
-    va_list ap
-)
-{
-    if (pLogCmd) {
-        char *zDyn = 0;
-        char zStack[200];
-        char *zBuf = zStack;
-        int nBuf;
-        Tcl_Obj *pCmd;
-
-        nBuf = vsnprintf(zBuf, 200, zFormat, ap);
-        if (nBuf >= 200) {
-            zDyn = HtmlAlloc(0, nBuf + 10);
-            zBuf = zDyn;
-            nBuf = vsnprintf(zBuf, nBuf + 1, zFormat, ap);
-        }
-
-        pCmd = Tcl_DuplicateObj(pLogCmd);
-        Tcl_IncrRefCount(pCmd);
-        Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(zSubject, -1));
-        Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(zBuf, nBuf));
-
-        if (Tcl_EvalObjEx(pTree->interp, pCmd, TCL_GLOBAL_ONLY)) {
-            Tcl_BackgroundError(pTree->interp);
-        }
-
-        Tcl_DecrRefCount(pCmd);
-        HtmlFree(zDyn);
-    }
-}
-
-void 
-HtmlTimer(HtmlTree *pTree, CONST char *zSubject, CONST char *zFormat, ...) {
-    va_list ap;
-    va_start(ap, zFormat);
-    logCommon(pTree, pTree->options.timercmd, zSubject, zFormat, ap);
-}
-void 
-HtmlLog(HtmlTree *pTree, CONST char *zSubject, CONST char *zFormat, ...) {
-    va_list ap;
-    va_start(ap, zFormat);
-    logCommon(pTree, pTree->options.logcmd, zSubject, zFormat, ap);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * doLoadDefaultStyle --
- *
- *     Load the default-style sheet into the current stylesheet configuration.
- *     The text of the default stylesheet is stored in the -defaultstyle
- *     option.
- *
- *     This function is called once when the widget is created and each time
- *     [.html reset] is called thereafter.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Loads the default style.
- *
- *---------------------------------------------------------------------------
- */
-static void
-doLoadDefaultStyle(pTree)
-    HtmlTree *pTree;
-{
-    Tcl_Obj *pObj = pTree->options.defaultstyle;
-    Tcl_Obj *pId = Tcl_NewStringObj("agent", 5);
-    assert(pObj);
-    Tcl_IncrRefCount(pId);
-    HtmlStyleParse(pTree, pTree->interp, pObj, pId, 0, 0);
-    Tcl_DecrRefCount(pId);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * doSingleScrollCallback --
- *
- *     Helper function for doScrollCallback().
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     May invoke the script in *pScript.
- *
- *---------------------------------------------------------------------------
- */
-static void
-doSingleScrollCallback(interp, pScript, iOffScreen, iTotal, iPage)
-    Tcl_Interp *interp;
-    Tcl_Obj *pScript;
-    int iOffScreen;
-    int iTotal;
-    int iPage;
-{
-    if (pScript) {
-        double fArg1;
-        double fArg2;
-        int rc;
-        Tcl_Obj *pEval; 
-
-        if (iTotal == 0){ 
-            fArg1 = 0.0;
-            fArg2 = 1.0;
-        } else {
-            fArg1 = (double)iOffScreen / (double)iTotal;
-            fArg2 = (double)(iOffScreen + iPage) / (double)iTotal;
-            fArg2 = MIN(1.0, fArg2);
-        }
-
-        pEval = Tcl_DuplicateObj(pScript);
-        Tcl_IncrRefCount(pEval);
-        Tcl_ListObjAppendElement(interp, pEval, Tcl_NewDoubleObj(fArg1));
-        Tcl_ListObjAppendElement(interp, pEval, Tcl_NewDoubleObj(fArg2));
-        rc = Tcl_EvalObjEx(interp, pEval, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL);
-        if (TCL_OK != rc) {
-            Tcl_BackgroundError(interp);
-        }
-        Tcl_DecrRefCount(pEval);
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * doScrollCallback --
- *
- *     Invoke both the -xscrollcommand and -yscrollcommand scripts (unless they
- *     are set to empty strings). The arguments passed to the two scripts are
- *     calculated based on the current values of HtmlTree.iScrollY,
- *     HtmlTree.iScrollX and HtmlTree.canvas.
- *
- * Results:
- *     None.
- *
- * Side effects: 
- *     May invoke either or both of the -xscrollcommand and -yscrollcommand
- *     scripts.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-doScrollCallback(pTree)
-    HtmlTree *pTree;
-{
-    Tcl_Interp *interp = pTree->interp;
-    Tk_Window win = pTree->tkwin;
-
-    Tcl_Obj *pScrollCommand;
-    int iOffScreen;
-    int iTotal;
-    int iPage;
-
-    pScrollCommand = pTree->options.yscrollcommand;
-    iOffScreen = pTree->iScrollY;
-    iTotal = pTree->canvas.bottom;
-    iPage = Tk_Height(win);
-    doSingleScrollCallback(interp, pScrollCommand, iOffScreen, iTotal, iPage);
-
-    pScrollCommand = pTree->options.xscrollcommand;
-    iOffScreen = pTree->iScrollX;
-    iTotal = pTree->canvas.right;
-    iPage = Tk_Width(win);
-    doSingleScrollCallback(interp, pScrollCommand, iOffScreen, iTotal, iPage);
-}
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * callbackHandler --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void
-callbackHandler(clientData)
-    ClientData clientData;
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    HtmlCallback *p = &pTree->cb;
-
-    clock_t styleClock = 0;              
-    clock_t layoutClock = 0;
-
-    int offscreen;
-
-    assert(
-        !pTree->pRoot ||
-        HtmlNodeComputedValues(pTree->pRoot) ||
-        pTree->cb.pRestyle
-    );
-
-    HtmlLog(pTree, "CALLBACK", 
-        "flags=( %s%s%s%s%s) pDynamic=%s pRestyle=%s scroll=(+%d+%d) ",
-        (p->flags & HTML_DYNAMIC ? "Dynamic " : ""),
-        (p->flags & HTML_RESTYLE ? "Style " : ""),
-        (p->flags & HTML_LAYOUT ? "Layout " : ""),
-        (p->flags & HTML_DAMAGE ? "Damage " : ""),
-        (p->flags & HTML_SCROLL ? "Scroll " : ""),
-        (p->pDynamic?Tcl_GetString(HtmlNodeCommand(pTree,p->pDynamic)):"N/A"),
-        (p->pRestyle?Tcl_GetString(HtmlNodeCommand(pTree,p->pRestyle)):"N/A"),
-         p->iScrollX, p->iScrollY
-    );
-
-    assert(!pTree->cb.inProgress);
-    pTree->cb.inProgress = 1;
-
-    /* If the HTML_DYNAMIC flag is set, then call HtmlCssCheckDynamic()
-     * to recalculate all the dynamic CSS rules that may apply to 
-     * the sub-tree rooted at HtmlCallback.pDynamic. CssCheckDynamic() may
-     * call either HtmlCallbackDamage() or HtmlCallbackRestyle() if any
-     * computed style values are modified.
-     */
-    if (!pTree->delayToken && (pTree->cb.flags & HTML_DYNAMIC)) {
-        assert(pTree->cb.pDynamic);
-        HtmlCssCheckDynamic(pTree);
-    }
-
-    /* If the HtmlCallback.pRestyle variable is set, then recalculate 
-     * style information for the sub-tree rooted at HtmlCallback.pRestyle. 
-     * Note that restyling a node may invoke the -imagecmd callback.
-     *
-     * Todo: This seems dangerous.  What happens if the -imagecmd calls
-     * [.html parse] or something?
-     */
-    if (pTree->cb.flags & HTML_RESTYLE) {
-        HtmlNode *pParent = HtmlNodeParent(pTree->cb.pRestyle);
-        HtmlNode *pRestyle = pTree->cb.pRestyle;
-
-        pTree->cb.pRestyle = 0;
-        assert(pRestyle);
-        styleClock = clock();
-
-        if (pParent) {
-            int i;
-            int nChild = HtmlNodeNumChildren(pParent);
-            for (i = 0; HtmlNodeChild(pParent, i) != pRestyle; i++);
-            for ( ; i < nChild; i++) {
-                 HtmlStyleApply(pTree, HtmlNodeChild(pParent, i));
-            }
-        } else {
-            HtmlStyleApply(pTree, pRestyle);
-        }
-        HtmlRestackNodes(pTree);
-
-        if (!pTree->options.imagecache) {
-            HtmlImageServerDoGC(pTree);
-        }
-
-        styleClock = clock() - styleClock;
-    }
-    pTree->cb.flags &= ~HTML_RESTYLE;
-
-    if (pTree->delayToken) {
-        pTree->cb.inProgress = 0;
-        return;
-    }
-
-    /* If the HTML_LAYOUT flag is set, run the layout engine. If the layout
-     * engine is run, then also set the HTML_SCROLL bit in the
-     * HtmlCallback.flags bitmask. This ensures that the entire display is
-     * redrawn and that the Tk windows for any replaced nodes are correctly
-     * mapped, unmapped or moved.
-     */
-    assert(pTree->cb.pDamage == 0 || pTree->cb.flags & HTML_DAMAGE);
-    if (pTree->cb.flags & HTML_LAYOUT) {
-        HtmlDamage *pD = pTree->cb.pDamage;
-
-        layoutClock = clock();
-        HtmlLayout(pTree);
-        layoutClock = clock() - layoutClock;
-        pTree->cb.flags |= HTML_SCROLL;
-
-        /* Discard any damage info, as the whole viewport will be redrawn */
-        pTree->cb.flags &= ~HTML_DAMAGE;
-        while (pD) {
-            HtmlDamage *pNext = pD->pNext;
-            HtmlFree(pD);
-            pD = pNext;
-        }
-        pTree->cb.pDamage = 0;
-    }
-
-    /* If the HTML_DAMAGE flag is set, repaint a window region. */
-    assert(pTree->cb.pDamage == 0 || pTree->cb.flags & HTML_DAMAGE);
-    if (pTree->cb.flags & HTML_DAMAGE) {
-        HtmlDamage *pD = pTree->cb.pDamage;
-        pTree->cb.pDamage = 0;
-        while (pD) {
-            HtmlDamage *pNext = pD->pNext;
-            HtmlLog(pTree, 
-                "ACTION", "Repair: %dx%d +%d+%d", pD->w, pD->h, pD->x, pD->y
-            );
-            HtmlWidgetRepair(pTree, pD->x, pD->y, pD->w, pD->h, 
-                pD->pixmapok, (pTree->cb.flags & HTML_NODESCROLL)?1:0
-            );
-            HtmlFree(pD);
-            pD = pNext;
-        }
-    }
-
-    /* If the HTML_SCROLL flag is set, scroll the viewport. */
-    if (pTree->cb.flags & HTML_SCROLL) {
-        clock_t scrollClock = 0;              
-        int force_redraw = (pTree->cb.flags & HTML_LAYOUT);
-        HtmlLog(pTree, "ACTION", "SetViewport: x=%d y=%d force=%d nFixed=%d", 
-            p->iScrollX, p->iScrollY, force_redraw, pTree->nFixedBackground
-        );
-        scrollClock = clock();
-        HtmlWidgetSetViewport(pTree, p->iScrollX, p->iScrollY, force_redraw);
-        scrollClock = clock() - scrollClock;
-        HtmlLog(pTree, "TIMING", "SetViewport: clicks=%d", scrollClock);
-    }
-
-    if (pTree->cb.flags & (HTML_SCROLL|HTML_LAYOUT)) {
-      doScrollCallback(pTree);
-    }
-
-    pTree->cb.flags = 0;
-    assert(pTree->cb.inProgress);
-    pTree->cb.inProgress = 0;
-
-    if (pTree->cb.pDamage) {
-        pTree->cb.flags = HTML_DAMAGE;
-        Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-    }
-
-    offscreen = MAX(0, 
-        MIN(pTree->canvas.bottom - Tk_Height(pTree->tkwin), pTree->iScrollY)
-    );
-    if (offscreen != pTree->iScrollY) {
-        HtmlCallbackScrollY(pTree, offscreen);
-    }
-    offscreen = MAX(0, 
-        MIN(pTree->canvas.right - Tk_Width(pTree->tkwin), pTree->iScrollX)
-    );
-    if (offscreen != pTree->iScrollX) {
-        HtmlCallbackScrollX(pTree, offscreen);
-    }
-}
-
-static void
-delayCallbackHandler(clientData)
-    ClientData clientData;
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    pTree->delayToken = 0;
-    if (pTree->cb.flags) {
-        callbackHandler(clientData);
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlCallbackForce --
- *
- *     If there is a callback scheduled, execute it now instead of waiting 
- *     for the idle loop.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-void 
-HtmlCallbackForce(pTree)
-    HtmlTree *pTree;
-{
-    if (pTree->cb.flags && !pTree->cb.inProgress) {
-        ClientData clientData = (ClientData)pTree;
-        Tcl_CancelIdleCall(callbackHandler, clientData);
-        callbackHandler(clientData);
-    }
-}
-
-static void
-upgradeRestylePoint(ppRestyle, pNode)
-    HtmlNode **ppRestyle;
-    HtmlNode *pNode;
-{
-    HtmlNode *pA;
-    HtmlNode *pB;
-    assert(pNode && ppRestyle);
-
-    for (pA = pNode; pA; pA = HtmlNodeParent(pA)) {
-        if (pA->iNode == HTML_NODE_ORPHAN) return;
-    }
-
-    for (pA = *ppRestyle; pA; pA = HtmlNodeParent(pA)) {
-        HtmlNode *pParentA = HtmlNodeParent(pA);
-        for (pB = pNode; pB; pB = HtmlNodeParent(pB)) {
-            if (pB == pA) {
-                *ppRestyle = pB;
-                return;
-            }  
-            if (HtmlNodeParent(pB) == pParentA) {
-                int i;
-                for (i = 0; i < HtmlNodeNumChildren(pParentA); i++) {
-                    HtmlNode *pChild = HtmlNodeChild(pParentA, i);
-                    if (pChild == pB) {
-                        *ppRestyle = pB;
-                        return;
-                    }
-                    if (pChild == pA) {
-                        *ppRestyle = pA;
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-    assert(!*ppRestyle);
-    *ppRestyle = pNode;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlCallbackRestyle --
- *
- *     Next widget idle-callback, recalculate style information for the
- *     sub-tree rooted at pNode. This function is a no-op if (pNode==0).
- *     If pNode is the root of the document, then the list of dynamic
- *     conditions (HtmlNode.pDynamic) that apply to each node is also
- *     recalculated.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     May modify HtmlTree.cb and/or register for an idle callback with
- *     the Tcl event loop.
- *
- *---------------------------------------------------------------------------
- */
-void 
-HtmlCallbackRestyle(pTree, pNode)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-{
-    if (pNode) {
-        if (!pTree->cb.flags) {
-            Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-        }
-        pTree->cb.flags |= HTML_RESTYLE;
-        upgradeRestylePoint(&pTree->cb.pRestyle, pNode);
-    }
-
-    /* This is also where the text-representation of the document is
-     * invalidated. If the style of a node is to change, or a new node
-     * that has no style is added, then the current text-representation
-     * is clearly suspect.
-     */
-    HtmlTextInvalidate(pTree);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlCallbackDynamic --
- *
- *     Next widget idle-callback, check if any dynamic CSS conditions
- *     attached to nodes that are part of the sub-tree rooted at pNode
- *     have changed. If so, restyle the affected nodes.  This function
- *     is a no-op if (pNode==0).
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     May modify HtmlTree.cb and/or register for an idle callback with
- *     the Tcl event loop.
- *
- *---------------------------------------------------------------------------
- */
-void 
-HtmlCallbackDynamic(pTree, pNode)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-{
-    if (pNode) {
-        if (!pTree->cb.flags) {
-            Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-        }
-        pTree->cb.flags |= HTML_DYNAMIC;
-        upgradeRestylePoint(&pTree->cb.pDynamic, pNode);
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlCallbackLayout --
- *
- *     Ensure the layout of node pNode is recalculated next idle
- *     callback. This is a no-op if (pNode==0).
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     May modify HtmlTree.cb and/or register for an idle callback with
- *     the Tcl event loop. May expire layout-caches belonging to pNode
- *     and it's ancestor nodes.
- *
- *---------------------------------------------------------------------------
- */
-void 
-HtmlCallbackLayout(pTree, pNode)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-{
-    if (pNode) {
-        HtmlNode *p;
-        if (!pTree->cb.flags) {
-            Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-        }
-        pTree->cb.flags |= HTML_LAYOUT;
-        for (p = pNode; p; p = HtmlNodeParent(p)) {
-            HtmlLayoutInvalidateCache(pTree, p);
-        }
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * HtmlCallbackDamage --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-void 
-HtmlCallbackDamage(pTree, x, y, w, h, pixmapok)
-    HtmlTree *pTree;
-    int x; 
-    int y;
-    int w; 
-    int h;
-    int pixmapok;
-{
-    HtmlDamage *pNew;
-    HtmlDamage *p;
-
-    /* Clip the values to the viewport */
-    if (x < 0) {w += x; x = 0;}
-    if (y < 0) {h += y; y = 0;}
-    w = MIN(w, Tk_Width(pTree->tkwin) - x);
-    h = MIN(h, Tk_Height(pTree->tkwin) - y);
-    
-    /* If the damaged region is not currently visible, do nothing */
-    if (w <= 0 || h <= 0) {
-        return;
-    }
-
-    /* Loop through the current list of damaged rectangles. If possible
-     * clip the new damaged region so that the same part of the display
-     * is not painted more than once.
-     */
-    for (p = pTree->cb.pDamage; p; p = p->pNext) {
-        /* Check if region p completely encapsulates the new region. If so,
-         * we need do nothing. 
-         */
-        assert(pTree->cb.flags & HTML_DAMAGE);
-        if (
-            p->x <= x && p->y <= y && 
-            (p->x + p->w) >= (x + w) && (p->y + p->h) >= (y + h)
-        ) {
-            return;
-        }
-    }
-
-#if 0
-    if (pTree->cb.flags & HTML_DAMAGE) {
-        int x2 = MAX(x + w, pTree->cb.x + pTree->cb.w);
-        int y2 = MAX(y + h, pTree->cb.y + pTree->cb.h);
-        pTree->cb.x = MIN(pTree->cb.x, x);
-        pTree->cb.y = MIN(pTree->cb.y, y);
-        pTree->cb.w = x2 - pTree->cb.x;
-        pTree->cb.h = y2 - pTree->cb.y;
-    } else {
-        pTree->cb.x = x;
-        pTree->cb.y = y;
-        pTree->cb.w = w;
-        pTree->cb.h = h;
-    }
-
-    assert(pTree->cb.x >= 0);
-    assert(pTree->cb.y >= 0);
-    assert(pTree->cb.w > 0);
-    assert(pTree->cb.h > 0);
-#endif
- 
-    pNew = HtmlNew(HtmlDamage);
-    pNew->x = x;
-    pNew->y = y;
-    pNew->w = w;
-    pNew->h = h;
-    pNew->pNext = pTree->cb.pDamage;
-    pTree->cb.pDamage = pNew;
-
-    if (!pTree->cb.flags) {
-        Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-    }
-    pTree->cb.flags |= HTML_DAMAGE;
-}
-
-void 
-HtmlCallbackScrollY(pTree, y)
-    HtmlTree *pTree;
-    int y; 
-{
-    if (!pTree->cb.flags) {
-        Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-    }
-    pTree->cb.flags |= HTML_SCROLL;
-    pTree->cb.iScrollY = y;
-}
-
-void 
-HtmlCallbackScrollX(pTree, x)
-    HtmlTree *pTree;
-    int x; 
-{
-    if (!pTree->cb.flags) {
-        Tcl_DoWhenIdle(callbackHandler, (ClientData)pTree);
-    }
-    pTree->cb.flags |= HTML_SCROLL;
-    pTree->cb.iScrollX = x;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * cleanupHandlerTable --
- *
- *      This function is called to delete the contents of one of the
- *      HtmlTree.aScriptHandler, aNodeHandler or aParseHandler tables.
- *      It is called as the tree is being deleted.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-cleanupHandlerTable(pHash)
-    Tcl_HashTable *pHash;
-{
-    Tcl_HashEntry *pEntry;
-    Tcl_HashSearch search;
-
-    for (
-        pEntry = Tcl_FirstHashEntry(pHash, &search); 
-        pEntry; 
-        pEntry = Tcl_NextHashEntry(&search)
-    ) {
-        Tcl_DecrRefCount((Tcl_Obj *)Tcl_GetHashValue(pEntry));
-    }
-    Tcl_DeleteHashTable(pHash);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * deleteWidget --
- *
- *     destroy $html
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-deleteWidget(clientData)
-    ClientData clientData;
-{
-    HtmlDamage *pDamage;
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    HtmlTreeClear(pTree);
-
-    /* Delete the contents of the three "handler" hash tables */
-    cleanupHandlerTable(&pTree->aNodeHandler);
-    cleanupHandlerTable(&pTree->aParseHandler);
-    cleanupHandlerTable(&pTree->aScriptHandler);
-
-    /* Clear any widget tags */
-    HtmlTagCleanupTree(pTree);
-
-    /* Clear the remaining colors etc. from the styler code hash tables */
-    HtmlComputedValuesCleanupTables(pTree);
-
-    /* Delete the image-server */
-    HtmlImageServerDoGC(pTree);
-    HtmlImageServerShutdown(pTree);
-
-    /* Cancel any pending idle callback */
-    Tcl_CancelIdleCall(callbackHandler, (ClientData)pTree);
-    if (pTree->delayToken) {
-        Tcl_DeleteTimerHandler(pTree->delayToken);
-    }
-    pTree->delayToken = 0;
-    while ((pDamage = pTree->cb.pDamage)) {
-        pTree->cb.pDamage = pDamage->pNext;
-        HtmlFree(pDamage);
-    }
-
-    /* Delete the structure itself */
-    HtmlFree(pTree);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * widgetCmdDel --
- *
- *     This command is invoked by Tcl when a widget object command is
- *     deleted. This can happen under two circumstances:
- *
- *         * A script deleted the command. In this case we should delete
- *           the widget window (and everything else via the window event
- *           callback) as well.
- *         * A script deleted the widget window. In this case we need
- *           do nothing.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-widgetCmdDel(clientData)
-    ClientData clientData;
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    if( !pTree->isDeleted ){
-      pTree->cmd = 0;
-      Tk_DestroyWindow(pTree->tkwin);
-    }
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * eventHandler --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static void 
-eventHandler(clientData, pEvent)
-    ClientData clientData;
-    XEvent *pEvent;
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-
-    switch (pEvent->type) {
-        case ConfigureNotify: {
-            /* XConfigureEvent *p = (XConfigureEvent*)pEvent; */
-            HtmlLog(pTree, "EVENT", "ConfigureNotify:");
-            if (Tk_Width(pTree->tkwin) != pTree->iCanvasWidth) {
-                HtmlCallbackLayout(pTree, pTree->pRoot);
-            }
-            break;
-        }
-
-        case Expose: {
-            XExposeEvent *p = (XExposeEvent *)pEvent;
-
-            HtmlLog(pTree, "EVENT", "Expose: x=%d y=%d width=%d height=%d",
-                p->x, p->y, p->width, p->height
-            );
-
-            HtmlCallbackDamage(pTree, p->x, p->y, p->width, p->height, 1);
-            break;
-        }
-
-        case VisibilityNotify: {
-            XVisibilityEvent *p = (XVisibilityEvent *)pEvent;
-
-            HtmlLog(pTree, "EVENT", "VisibilityNotify: state=%s", 
-                p->state == VisibilityFullyObscured ?
-                        "VisibilityFullyObscured":
-                p->state == VisibilityPartiallyObscured ?
-                        "VisibilityPartiallyObscured":
-                p->state == VisibilityUnobscured ?
-                        "VisibilityUnobscured":
-                "N/A"
-            );
-
-
-#ifndef WIN32
-            pTree->eVisibility = p->state;
-#endif
-            break;
-        }
-
-        case UnmapNotify: {
-            if (pTree->pixmap) {
-                /* If the window has a double-buffer pixmap, free it now. */
-                Tk_FreePixmap(Tk_Display(pTree->tkwin), pTree->pixmap);
-                pTree->pixmap = 0;
-            }
-            break;
-        }
-
-        case DestroyNotify: {
-            pTree->isDeleted = 1;
-            Tcl_DeleteCommandFromToken(pTree->interp, pTree->cmd);
-            deleteWidget(pTree);
-            break;
-        }
-
-    }
-}
-
-static int 
-relayoutCb(pTree, pNode, clientData)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-    ClientData clientData;
-{
-    HtmlCallbackLayout(pTree, pNode);
-    return HTML_WALK_DESCEND;
-}
-
-static int 
-worldChangedCb(pTree, pNode, clientData)
-    HtmlTree *pTree;
-    HtmlNode *pNode;
-    ClientData clientData;
-{
-    if (!HtmlNodeIsText(pNode)) {
-        HtmlElementNode *pElem = (HtmlElementNode *)pNode;
-        HtmlLayoutInvalidateCache(pTree, pNode);
-        HtmlNodeClearStyle(pTree, pElem);
-    }
-    return HTML_WALK_DESCEND;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * configureCmd --
- *
- *     Implementation of the standard Tk "configure" command.
- *
- *         <widget> configure -OPTION VALUE ?-OPTION VALUE? ...
- *
- *     TODO: Handle configure of the forms:
- *         <widget> configure -OPTION 
- *         <widget> configure
- *
- * Results:
- *     Standard tcl result.
- *
- * Side effects:
- *     May set values of HtmlTree.options struct. May call
- *     Tk_GeometryRequest().
- *
- *---------------------------------------------------------------------------
- */
-static int 
-configureCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    static const char *azModes[] = {"quirks","almost standards","standards",0};
-    /*
-     * Mask bits for options declared in htmlOptionSpec.
-     */
-    #define GEOMETRY_MASK  0x00000001
-    #define FT_MASK        0x00000002    
-    #define DS_MASK        0x00000004    
-    #define S_MASK         0x00000008    
-
-    /*
-     * Macros to generate static Tk_OptionSpec structures for the
-     * htmlOptionSpec() array.
-     */
-    #define PIXELS(v, s1, s2, s3) \
-        {TK_OPTION_PIXELS, "-" #v, s1, s2, s3, -1, \
-         Tk_Offset(HtmlOptions, v), 0, 0, 0}
-    #define GEOMETRY(v, s1, s2, s3) \
-        {TK_OPTION_PIXELS, "-" #v, s1, s2, s3, -1, \
-         Tk_Offset(HtmlOptions, v), 0, 0, GEOMETRY_MASK}
-    #define STRING(v, s1, s2, s3) \
-        {TK_OPTION_STRING, "-" #v, s1, s2, s3, \
-         Tk_Offset(HtmlOptions, v), -1, TK_OPTION_NULL_OK, 0, 0}
-    #define XCOLOR(v, s1, s2, s3) \
-        {TK_OPTION_COLOR, "-" #v, s1, s2, s3, -1, \
-         Tk_Offset(HtmlOptions, v), 0, 0, 0}
-    #define BOOLEAN(v, s1, s2, s3, flags) \
-        {TK_OPTION_BOOLEAN, "-" #v, s1, s2, s3, -1, \
-         Tk_Offset(HtmlOptions, v), 0, 0, flags}
-    #define OBJ(v, s1, s2, s3, f) \
-        {TK_OPTION_STRING, "-" #v, s1, s2, s3, \
-         Tk_Offset(HtmlOptions, v), -1, 0, 0, f}
-    #define DOUBLE(v, s1, s2, s3, f) \
-        {TK_OPTION_DOUBLE, "-" #v, s1, s2, s3, -1, \
-         Tk_Offset(HtmlOptions, v), 0, 0, f}
-    
-    /* Option table definition for the html widget. */
-    static Tk_OptionSpec htmlOptionSpec[] = {
-
-        /* Standard geometry interface */
-        GEOMETRY(height, "height", "Height", "600"),
-        GEOMETRY(width, "width", "Width", "800"),
-
-BOOLEAN(shrink, "shrink", "Shrink", "0", S_MASK),
-BOOLEAN(layoutcache, "layoutCache", "LayoutCache", "1", S_MASK),
-BOOLEAN(forcefontmetrics, "forceFontMetrics", "ForceFontMetrics", "1", S_MASK),
-#ifdef WIN32
-BOOLEAN(doublebuffer, "doubleBuffer", "DoubleBuffer", "1", 0),
-#else
-BOOLEAN(doublebuffer, "doubleBuffer", "DoubleBuffer", "0", 0),
-#endif
-BOOLEAN(forcewidth, "forceWidth", "ForceWidth", "0", S_MASK),
-
-        DOUBLE(fontscale, "fontScale", "FontScale", "1.0", S_MASK),
-        DOUBLE(zoom, "zoom", "Zoom", "1.0", S_MASK),
-
-        /* Standard scroll interface - same as canvas, text */
-        PIXELS(yscrollincrement, "yScrollIncrement", "ScrollIncrement", "20"),
-        PIXELS(xscrollincrement, "xScrollIncrement", "ScrollIncrement", "20"),
-        STRING(xscrollcommand, "xScrollCommand", "ScrollCommand", ""),
-        STRING(yscrollcommand, "yScrollCommand", "ScrollCommand", ""),
-
-        /* Non-debugging widget specific options */
-        OBJ(defaultstyle, "defaultStyle", "DefaultStyle", 
-            HTML_DEFAULT_CSS, FT_MASK),
-        STRING(imagecmd, "imageCmd", "ImageCmd", ""),
-        BOOLEAN(imagecache, "imageCache", "ImageCache", "1", S_MASK),
-    
-        /* Options for logging info to debugging scripts */
-        STRING(logcmd, "logCmd", "LogCmd", ""),
-        STRING(timercmd, "timerCmd", "TimerCmd", ""),
-
-        OBJ(fonttable, "fontTable", "FontTable", "8 9 10 11 13 15 17", FT_MASK),
-
-        {TK_OPTION_STRING_TABLE, "-mode", "mode", "Mode", "standards", 
-             -1, Tk_Offset(HtmlOptions, mode), 0, (ClientData)azModes, S_MASK
-        },
-    
-        {TK_OPTION_END, 0, 0, 0, 0, 0, 0, 0, 0}
-    };
-    #undef PIXELS
-    #undef STRING
-    #undef XCOLOR
-    #undef BOOLEAN
-
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    char *pOptions = (char *)&pTree->options;
-    Tk_Window win = pTree->tkwin;
-    Tk_OptionTable otab = pTree->optionTable;
-    Tk_SavedOptions saved;
-
-    int mask = 0;
-    int init = 0;                /* True if Tk_InitOptions() is called */
-    int rc;
-
-    if (!otab) {
-        pTree->optionTable = Tk_CreateOptionTable(interp, htmlOptionSpec);
-        Tk_InitOptions(interp, pOptions, pTree->optionTable, win);
-        init = 1;
-        otab = pTree->optionTable;
-    }
-
-    rc = Tk_SetOptions(
-        interp, pOptions, otab, objc-2, &objv[2], win, (init?0:&saved), &mask
-    );
-    if (TCL_OK == rc) {
-        /* Hard-coded minimum values for width and height */
-        pTree->options.height = MAX(pTree->options.height, 0);
-        pTree->options.width = MAX(pTree->options.width, 0);
-
-        if (init || (mask & GEOMETRY_MASK)) {
-            int w = pTree->options.width;
-            int h = pTree->options.height;
-            Tk_GeometryRequest(pTree->tkwin, w, h);
-        }
-    
-        if (init || mask & FT_MASK) {
-            int nSize;
-            Tcl_Obj **apSize;
-            int aFontSize[7];
-            Tcl_Obj *pFT = pTree->options.fonttable;
-            if (
-                Tcl_ListObjGetElements(interp, pFT, &nSize, &apSize) ||
-                nSize != 7 ||
-                Tcl_GetIntFromObj(interp, apSize[0], &aFontSize[0]) ||
-                Tcl_GetIntFromObj(interp, apSize[1], &aFontSize[1]) ||
-                Tcl_GetIntFromObj(interp, apSize[2], &aFontSize[2]) ||
-                Tcl_GetIntFromObj(interp, apSize[3], &aFontSize[3]) ||
-                Tcl_GetIntFromObj(interp, apSize[4], &aFontSize[4]) ||
-                Tcl_GetIntFromObj(interp, apSize[5], &aFontSize[5]) ||
-                Tcl_GetIntFromObj(interp, apSize[6], &aFontSize[6])
-            ) {
-                Tcl_ResetResult(interp);
-                Tcl_AppendResult(interp, 
-                    "expected list of 7 integers but got ", 
-                    "\"", Tcl_GetString(pFT), "\"", 0
-                );
-                rc = TCL_ERROR;
-            } else {
-                memcpy(pTree->aFontSizeTable, aFontSize, sizeof(aFontSize));
-                HtmlCallbackRestyle(pTree, pTree->pRoot);
-            }
-        }
-
-        if (mask & S_MASK) {
-            HtmlImageServerSuspendGC(pTree);
-            HtmlWalkTree(pTree, pTree->pRoot, worldChangedCb, 0);
-            HtmlCallbackRestyle(pTree, pTree->pRoot);
-            HtmlCallbackLayout(pTree, pTree->pRoot);
-        }
-
-        if (rc != TCL_OK) {
-            assert(!init);
-            Tk_RestoreSavedOptions(&saved);
-        } else if (!init) {
-            Tk_FreeSavedOptions(&saved);
-        }
-    }
-
-    return rc;
-    #undef GEOMETRY_MASK
-    #undef FT_MASK
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * cgetCmd --
- *
- *     Standard Tk "cget" command for querying options.
- *
- *     <widget> cget -OPTION
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int cgetCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    Tcl_Obj *pRet;
-    Tk_OptionTable otab = pTree->optionTable;
-    Tk_Window win = pTree->tkwin;
-    char *pOptions = (char *)&pTree->options;
-
-    assert(otab);
-
-    if (objc != 3) {
-        Tcl_WrongNumArgs(interp, 2, objv, "-OPTION");
-        return TCL_ERROR;
-    }
-
-    pRet = Tk_GetOptionValue(interp, pOptions, otab, objv[2], win);
-    if( pRet ) {
-        Tcl_SetObjResult(interp, pRet);
-    } else {
-        char * zOpt = Tcl_GetString(objv[2]);
-        Tcl_AppendResult( interp, "unknown option \"", zOpt, "\"", 0);
-        return TCL_ERROR;
-    }
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * resetCmd --
- * 
- *         widget reset
- *
- *     Reset the widget so that no document or stylesheet is loaded.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-resetCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    Tk_Window win = pTree->tkwin;
-
-    HtmlTreeClear(pTree);
-
-    HtmlImageServerDoGC(pTree);
-    if (pTree->options.imagecache) {
-        HtmlImageServerSuspendGC(pTree);
-    }
-    assert(HtmlImageServerCount(pTree) == 0);
-
-    HtmlCallbackScrollY(pTree, 0);
-    HtmlCallbackScrollX(pTree, 0);
-    HtmlCallbackDamage(pTree, 0, 0, Tk_Width(win), Tk_Height(win), 0);
-    doLoadDefaultStyle(pTree);
-    pTree->isParseFinished = 0;
-    pTree->isSequenceOk = 1;
-    pTree->eWriteState = HTML_WRITE_NONE;
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * relayoutCmd --
- * 
- *         $html relayout ?-layout|-style? ?NODE?
- *
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-relayoutCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-
-    if (objc == 2) {
-        HtmlCallbackRestyle(pTree, pTree->pRoot);
-        HtmlWalkTree(pTree, pTree->pRoot, relayoutCb, 0);
-    } else {
-        char *zArg3 = ((objc >= 3) ? Tcl_GetString(objv[2]) : 0);
-        char *zArg4 = ((objc >= 4) ? Tcl_GetString(objv[3]) : 0);
-        HtmlNode *pNode;
-
-        pNode = HtmlNodeGetPointer(pTree, zArg4 ? zArg4 : zArg3);
-        if (!zArg4) {
-            HtmlCallbackRestyle(pTree, pNode);
-            HtmlCallbackLayout(pTree, pNode);
-        } else if (0 == strcmp(zArg3, "-layout")) {
-            HtmlCallbackLayout(pTree, pNode);
-        } else if (0 == strcmp(zArg3, "-style")) {
-            HtmlCallbackRestyle(pTree, pNode);
-        } else {
-            Tcl_AppendResult(interp, 
-                "Bad option \"", zArg3, "\": must be -layout or -style", 0
-            );
-            return TCL_ERROR;
-        }
-    }
-
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * parseCmd --
- *
- *         $widget parse ?-final? HTML-TEXT
- * 
- *     Appends the given HTML text to the end of any HTML text that may have
- *     been inserted by prior calls to this command. See Tkhtml man page for
- *     further details.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-parseCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    HtmlNode *pCurrent = pTree->state.pCurrent;
-
-    int isFinal;
-    char *zHtml;
-    int nHtml;
-
-    Tcl_Obj *aObj[2];
-    SwprocConf aConf[3] = {
-        {SWPROC_SWITCH, "final", "0", "1"},   /* -final */
-        {SWPROC_ARG, 0, 0, 0},                /* HTML-TEXT */
-        {SWPROC_END, 0, 0, 0}
-    };
-
-    if (
-        SwprocRt(interp, (objc - 2), &objv[2], aConf, aObj) ||
-        Tcl_GetBooleanFromObj(interp, aObj[0], &isFinal)
-    ) {
-        return TCL_ERROR;
-    }
-
-    /* zHtml = Tcl_GetByteArrayFromObj(aObj[1], &nHtml); */
-    zHtml = Tcl_GetStringFromObj(aObj[1], &nHtml);
-
-    assert(Tcl_IsShared(aObj[1]));
-    Tcl_DecrRefCount(aObj[0]);
-    Tcl_DecrRefCount(aObj[1]);
-
-    if (pTree->isParseFinished) {
-        const char *zWidget = Tcl_GetString(objv[0]);
-        Tcl_ResetResult(interp);
-        Tcl_AppendResult(interp, 
-            "Cannot call [", zWidget, " parse]" 
-            "until after [", zWidget, "] reset", 0
-        );
-        return TCL_ERROR;
-    }
-
-    /* Add the new text to the internal cache of the document. Also tokenize
-     * it and add the new HtmlToken objects to the HtmlTree.pFirst/pLast 
-     * linked list.
-     */
-    HtmlTokenizerAppend(pTree, zHtml, nHtml, isFinal);
-    if (isFinal) {
-        pTree->isParseFinished = 1;
-        assert(
-            pTree->eWriteState == HTML_WRITE_NONE ||
-            pTree->eWriteState == HTML_WRITE_WAIT
-        );
-        if (pTree->eWriteState == HTML_WRITE_NONE) {
-            HtmlFinishNodeHandlers(pTree);
-        }
-    }
-
-    HtmlCallbackRestyle(pTree, pCurrent ? pCurrent : pTree->pRoot);
-    HtmlCallbackRestyle(pTree, pTree->state.pCurrent);
-    HtmlCallbackRestyle(pTree, pTree->state.pFoster);
-    HtmlCallbackLayout(pTree, pCurrent);
-
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * preloadCmd --
- *
- *         $widget preload URI
- * 
- *     Preload the image located at the specified URI.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-preloadCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    HtmlImage2 *pImg2 = 0;
-
-    if (objc != 3) {
-        Tcl_WrongNumArgs(interp, 2, objv, "URI");
-        return TCL_ERROR;
-    }
-
-    pImg2 = HtmlImageServerGet(pTree->pImageServer, Tcl_GetString(objv[2]));
-    HtmlImageFree(pImg2);
-
-    Tcl_ResetResult(interp);
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * fragmentCmd --
- *
- *         $widget fragment HTML-TEXT
- *
- *     Parse the supplied markup test and return a list of node handles.
- * 
- * Results:
- *     List of node-handles.
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-fragmentCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    if (objc != 3) {
-        Tcl_WrongNumArgs(interp, 2, objv, "HTML-TEXT");
-        return TCL_ERROR;
-    }
-    HtmlParseFragment(pTree, Tcl_GetString(objv[2]));
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * viewCommon --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-viewCommon(pTree, isXview, objc, objv)
-    HtmlTree *pTree;
-    int isXview;               /* True for [xview], zero for [yview] */
-    int objc;
-    Tcl_Obj * CONST objv[];
-{
-    Tcl_Interp *interp = pTree->interp;
-    Tk_Window win = pTree->tkwin;
-
-    int iUnitPixels;           /* Value of -[xy]scrollincrement in pixels */
-    int iPagePixels;           /* Width or height of the viewport */
-    int iMovePixels;           /* Width or height of canvas */
-    int iOffScreen;            /* Current scroll position */
-    double aRet[2];
-    Tcl_Obj *pRet;
-    Tcl_Obj *pScrollCommand;
-
-    if (isXview) { 
-        iPagePixels = Tk_Width(win);
-        iUnitPixels = pTree->options.xscrollincrement;
-        iMovePixels = pTree->canvas.right;
-        iOffScreen = pTree->iScrollX;
-        pScrollCommand = pTree->options.xscrollcommand;
-    } else {
-        iPagePixels = Tk_Height(win);
-        iUnitPixels = pTree->options.yscrollincrement;
-        iMovePixels = pTree->canvas.bottom;
-        iOffScreen = pTree->iScrollY;
-        pScrollCommand = pTree->options.yscrollcommand;
-    }
-
-    if (objc > 2) {
-        double fraction;
-        int count;
-        int iNewVal = 0;     /* New value of iScrollY or iScrollX */
-
-        /* The [widget yview] command also supports "scroll-to-node" */
-        if (!isXview && objc == 3) {
-            const char *zCmd = Tcl_GetString(objv[2]);
-            HtmlNode *pNode = HtmlNodeGetPointer(pTree, zCmd);
-            if (!pNode) {
-                return TCL_ERROR;
-            }
-            iNewVal = HtmlWidgetNodeTop(pTree, pNode);
-            iMovePixels = pTree->canvas.bottom;
-        } else {
-            int eType;       /* One of the TK_SCROLL_ symbols */
-            eType = Tk_GetScrollInfoObj(interp, objc, objv, &fraction, &count);
-            switch (eType) {
-                case TK_SCROLL_MOVETO:
-                    iNewVal = (int)((double)iMovePixels * fraction);
-                    break;
-                case TK_SCROLL_PAGES:
-                    iNewVal = iOffScreen + ((count * iPagePixels) * 0.9);
-                    break;
-                case TK_SCROLL_UNITS:
-                    iNewVal = iOffScreen + (count * iUnitPixels);
-                    break;
-                case TK_SCROLL_ERROR:
-                    return TCL_ERROR;
-        
-                default: assert(!"Not possible");
-            }
-        }
-
-        /* Clip the new scrolling value for the window size */
-        iNewVal = MIN(iNewVal, iMovePixels - iPagePixels);
-        iNewVal = MAX(iNewVal, 0);
-
-        if (isXview) { 
-            HtmlCallbackScrollX(pTree, iNewVal);
-        } else {
-            HtmlCallbackScrollY(pTree, iNewVal);
-        }
-    }
-
-    /* Construct the Tcl result for this command. */
-    if (iMovePixels <= iPagePixels) {
-        aRet[0] = 0.0;
-        aRet[1] = 1.0;
-    } else {
-        assert(iMovePixels > 0);
-        assert(iOffScreen  >= 0);
-        assert(iPagePixels >= 0);
-        aRet[0] = (double)iOffScreen / (double)iMovePixels;
-        aRet[1] = (double)(iOffScreen + iPagePixels) / (double)iMovePixels;
-        aRet[1] = MIN(aRet[1], 1.0);
-    }
-    pRet = Tcl_NewObj();
-    Tcl_ListObjAppendElement(interp, pRet, Tcl_NewDoubleObj(aRet[0]));
-    Tcl_ListObjAppendElement(interp, pRet, Tcl_NewDoubleObj(aRet[1]));
-    Tcl_SetObjResult(interp, pRet);
-
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * xviewCmd --
- * yviewCmd --
- *
- * Results:
- *     None.
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-xviewCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    return viewCommon((HtmlTree *)clientData, 1, objc, objv);
-}
-static int 
-yviewCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget */
-    Tcl_Interp *interp;                /* The interpreter */
-    int objc;                          /* Number of arguments */
-    Tcl_Obj *const *objv;              /* List of all arguments */
-{
-    return viewCommon((HtmlTree *)clientData, 0, objc, objv);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * writeCmd --
- *
- *     $widget write wait
- *     $widget write text TEXT
- *     $widget write continue
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-writeCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    int eChoice;
-
-    enum SubOptType {
-        OPT_WAIT, OPT_TEXT, OPT_CONTINUE
-    };
-    struct SubOpt {
-        char *zSubOption;             /* Name of sub-command */
-        enum SubOptType eType;        /* Corresponding OPT_XXX value */
-        int iExtraArgs;               /* Number of args following sub-command */
-        char *zWrongNumArgsTail;      /* 4th arg to Tcl_WrongNumArgs() */
-    } aSub[] = {
-        {"wait", OPT_WAIT, 0, ""}, 
-        {"text", OPT_TEXT, 1, "TEXT"}, 
-        {"continue", OPT_CONTINUE, 0, ""}, 
-        {0, 0, 0}
-    };
-
-    /* All commands must consist of at least three words - the widget name,
-     * "write", and the sub-command name. Otherwise, it's a Tcl error.
-     */
-    if (objc < 3) {
-        Tcl_WrongNumArgs(interp, 2, objv, "OPTION");
-        return TCL_ERROR;
-    }
-
-    if (Tcl_GetIndexFromObjStruct(
-        interp, objv[2], aSub, sizeof(struct SubOpt), "option", 0, &eChoice) 
-    ){
-        return TCL_ERROR;
-    }
-    if ((objc - 3) != aSub[eChoice].iExtraArgs) {
-        Tcl_WrongNumArgs(interp, 3, objv, aSub[eChoice].zWrongNumArgsTail);
-        return TCL_ERROR;
-    }
-
-    assert(pTree->interp == interp);
-    switch (aSub[eChoice].eType) {
-        case OPT_WAIT:
-            return HtmlWriteWait(pTree);
-            break;
-        case OPT_TEXT:
-            return HtmlWriteText(pTree, objv[3]);
-            break;
-        case OPT_CONTINUE:
-            return HtmlWriteContinue(pTree);
-            break;
-    }
-
-    assert(!"Cannot happen");
-    return TCL_ERROR;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * handlerCmd --
- *
- *     $widget handler [node|script|parse] TAG SCRIPT
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-handlerCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    int tag;
-    Tcl_Obj *pScript;
-    Tcl_HashEntry *pEntry;
-    Tcl_HashTable *pHash = 0;
-    int newentry;
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    char *zTag;
-
-    if (objc!=5) {
-        Tcl_WrongNumArgs(interp, 3, objv, "TAG SCRIPT");
-        return TCL_ERROR;
-    }
-
-    zTag = Tcl_GetString(objv[3]);
-    tag = HtmlNameToType(0, zTag);
-    switch (Tcl_GetString(objv[2])[0]) {
-        case 'n':
-            pHash = &pTree->aNodeHandler;
-            break;
-        case 's':
-            pHash = &pTree->aScriptHandler;
-            break;
-        case 'p': {
-            pHash = &pTree->aParseHandler;
-            if (0 == zTag[0]) {
-                tag = Html_Text;
-            } else if ('/' == zTag[0]) {
-                tag = HtmlNameToType(0, &zTag[1]);
-                if (tag != Html_Unknown) tag = tag * -1;
-            }
-            break;
-        }
-        default:
-            assert(!"Illegal objv[2] value in handlerCmd()");
-    }
-
-    assert(pHash);
-    pScript = objv[4];
-
-    if (tag==Html_Unknown) {
-        Tcl_AppendResult(interp, "Unknown tag type: ", zTag, 0);
-        return TCL_ERROR;
-    }
-
-    if (Tcl_GetCharLength(pScript) == 0) {
-        pEntry = Tcl_FindHashEntry(pHash, (char *)tag);
-        if (pEntry) {
-            Tcl_DeleteHashEntry(pEntry);
-        }
-    } else {
-        pEntry = Tcl_CreateHashEntry(pHash,(char*)tag,&newentry);
-        if (!newentry) {
-            Tcl_Obj *pOld = (Tcl_Obj *)Tcl_GetHashValue(pEntry);
-            Tcl_DecrRefCount(pOld);
-        }
-        Tcl_IncrRefCount(pScript);
-        Tcl_SetHashValue(pEntry, (ClientData)pScript);
-    }
-
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * styleCmd --
- *
- *         $widget style ?options? HTML-TEXT
- *
- *             -importcmd IMPORT-CMD
- *             -id ID
- *             -urlcmd URL-CMD
- *
- * Results:
- *     Tcl result (i.e. TCL_OK, TCL_ERROR).
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-styleCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    SwprocConf aConf[4 + 1] = {
-        {SWPROC_OPT, "id", "author", 0},      /* -id <style-sheet id> */
-        {SWPROC_OPT, "importcmd", 0, 0},      /* -importcmd <cmd> */
-        {SWPROC_OPT, "urlcmd", 0, 0},         /* -urlcmd <cmd> */
-        {SWPROC_ARG, 0, 0, 0},                /* STYLE-SHEET-TEXT */
-        {SWPROC_END, 0, 0, 0}
-    };
-    Tcl_Obj *apObj[4];
-    int rc = TCL_OK;
-    int n;
-    HtmlTree *pTree = (HtmlTree *)clientData;
-
-    /* First assert() that the sizes of the aConf and apObj array match. Then
-     * call SwprocRt() to parse the arguments. If the parse is successful then
-     * apObj[] contains the following: 
-     *
-     *     apObj[0] -> Value passed to -id option (or default "author")
-     *     apObj[1] -> Value passed to -importcmd option (or default "")
-     *     apObj[2] -> Value passed to -urlcmd option (or default "")
-     *     apObj[3] -> Text of stylesheet to parse
-     *
-     * Pass these on to the HtmlStyleParse() command to actually parse the
-     * stylesheet.
-     */
-    assert(sizeof(apObj)/sizeof(apObj[0])+1 == sizeof(aConf)/sizeof(aConf[0]));
-    if (TCL_OK != SwprocRt(interp, objc - 2, &objv[2], aConf, apObj)) {
-        return TCL_ERROR;
-    }
-
-    Tcl_GetStringFromObj(apObj[3], &n);
-    if (n > 0) {
-        rc = HtmlStyleParse(pTree,interp,apObj[3],apObj[0],apObj[1],apObj[2]);
-    }
-
-    /* Clean up object references created by SwprocRt() */
-    SwprocCleanup(apObj, sizeof(apObj)/sizeof(Tcl_Obj *));
-
-    if (rc == TCL_OK) {
-        HtmlCallbackRestyle(pTree, pTree->pRoot);
-    }
-    return rc;
-}
-
-static int
-tagAddCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTagAddRemoveCmd(clientData, interp, objc, objv, HTML_TAG_ADD);
-}
-static int
-tagRemoveCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTagAddRemoveCmd(clientData, interp, objc, objv, HTML_TAG_REMOVE);
-}
-static int
-tagCfgCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTagConfigureCmd(clientData, interp, objc, objv);
-}
-
-static int
-tagDeleteCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTagDeleteCmd(clientData, interp, objc, objv);
-}
-
-static int
-textTextCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTextTextCmd(clientData, interp, objc, objv);
-}
-static int
-textIndexCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTextIndexCmd(clientData, interp, objc, objv);
-}
-static int
-textBboxCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTextBboxCmd(clientData, interp, objc, objv);
-}
-static int
-textOffsetCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlTextOffsetCmd(clientData, interp, objc, objv);
-}
-
-
-static int 
-forceCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    HtmlCallbackForce((HtmlTree *)clientData);
-    return TCL_OK;
-}
-
-static int 
-delayCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    int iMilli;
-    Tcl_TimerToken t;
-
-    if (objc != 3) {
-        Tcl_WrongNumArgs(interp, 2, objv, "MILLI-SECONDS");
-        return TCL_ERROR;
-    }
-    if (TCL_OK != Tcl_GetIntFromObj(interp, objv[2], &iMilli)) {
-        return TCL_ERROR;
-    }
-
-    if (pTree->delayToken) {
-        Tcl_DeleteTimerHandler(pTree->delayToken);
-    }
-    pTree->delayToken = 0;
-
-    if (iMilli > 0) {
-        t = Tcl_CreateTimerHandler(iMilli, delayCallbackHandler, clientData);
-        pTree->delayToken = t;
-    } else if (pTree->cb.flags) {
-        Tcl_DoWhenIdle(callbackHandler, clientData);
-    }
-  
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * imageCmd --
- * nodeCmd --
- * primitivesCmd --
- *
- *     New versions of gcc don't allow pointers to non-local functions to
- *     be used as constant initializers (which we need to do in the
- *     aSubcommand[] array inside widgetCmd(). So the following
- *     functions are wrappers around Tcl_ObjCmdProc functions implemented
- *     in other files.
- *
- * Results:
- *     Tcl result (i.e. TCL_OK, TCL_ERROR).
- *
- * Side effects:
- *     Whatever the called function does.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-imageCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlLayoutImage(clientData, interp, objc, objv);
-}
-static int 
-nodeCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlLayoutNode(clientData, interp, objc, objv);
-}
-static int 
-primitivesCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlLayoutPrimitives(clientData, interp, objc, objv);
-}
-static int 
-searchCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlCssSearch(clientData, interp, objc, objv);
-}
-static int 
-styleconfigCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlCssStyleConfigDump(clientData, interp, objc, objv);
-}
-static int 
-stylereportCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlCssStyleReport(clientData, interp, objc, objv);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * bboxCmd --
- *
- *     html bbox ?node-handle?
- *
- * Results:
- *     Tcl result (i.e. TCL_OK, TCL_ERROR).
- *
- * Side effects:
- *
- *---------------------------------------------------------------------------
- */
-static int 
-bboxCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    HtmlNode *pNode;
-    int x, y, w, h;
-    HtmlTree *pTree = (HtmlTree *)clientData;
-    Tcl_Obj *pRet = Tcl_NewObj();
-
-    if (objc != 2 && objc != 3) {
-        Tcl_WrongNumArgs(interp, 2, objv, "?NODE-HANDLE?");
-        return TCL_ERROR;
-    }
-
-    if (objc == 3) {
-        pNode = HtmlNodeGetPointer(pTree, Tcl_GetString(objv[2]));
-        if (!pNode) return TCL_ERROR;
-    } else {
-        pNode = pTree->pRoot;
-    }
-
-    HtmlWidgetNodeBox(pTree, pNode, &x, &y, &w, &h);
-    if (w > 0 && h > 0) {
-        Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(x));
-        Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(y));
-        Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(x + w));
-        Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(y + h));
-    }
-
-    Tcl_SetObjResult(interp, pRet);
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * widgetCmd --
- *
- *     This is the C function invoked for a widget command.
- *
- *         cget
- *         configure
- *         handler
- *         image
- *         node
- *         parse
- *         reset
- *         style
- *         tag
- *         text
- *         xview
- *         yview
- *
- * Results:
- *     Tcl result.
- *
- * Side effects:
- *     Whatever the command does.
- *
- *---------------------------------------------------------------------------
- */
-int widgetCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    /* The following array defines all the built-in widget commands.  This
-     * function just parses the first one or two arguments and vectors control
-     * to one of the command service routines defined in the following array.
-     */
-    static struct SC {
-        char *zCmd1;                /* First-level subcommand.  Required */
-        char *zCmd2;                /* Second-level subcommand.  May be NULL */
-        Tcl_ObjCmdProc *xFuncObj;   /* Object cmd */
-    } aSubcommand[] = {
-        {"bbox",       0,           bboxCmd},
-        {"cget",       0,           cgetCmd},
-        {"configure",  0,           configureCmd},
-        {"fragment",   0,           fragmentCmd},
-        {"handler",    "node",      handlerCmd},
-        {"handler",    "parse",     handlerCmd},
-        {"handler",    "script",    handlerCmd},
-        {"image",      0,           imageCmd},
-        {"node",       0,           nodeCmd},
-        {"parse",      0,           parseCmd},
-        {"preload",    0,           preloadCmd},
-        {"reset",      0,           resetCmd},
-        {"search",     0,           searchCmd},
-        {"style",      0,           styleCmd},
-
-        {"tag",        "add",       tagAddCmd},
-        {"tag",        "remove",    tagRemoveCmd},
-        {"tag",        "configure", tagCfgCmd},
-        {"tag",        "delete",    tagDeleteCmd},
-
-        {"text",       "text",      textTextCmd},
-        {"text",       "index",     textIndexCmd},
-        {"text",       "bbox",      textBboxCmd},
-        {"text",       "offset",    textOffsetCmd},
-
-        {"write",      0,           writeCmd},
-
-        {"xview",      0,           xviewCmd},
-        {"yview",      0,           yviewCmd},
-
-        /* The following are for debugging only. May change at any time.
-	 * They are not included in the documentation. Just don't touch Ok? :)
-         */
-        {"delay",       0,          delayCmd},
-        {"force",       0,          forceCmd},
-        {"primitives",  0,          primitivesCmd},
-        {"relayout",    0,          relayoutCmd},
-        {"styleconfig", 0,          styleconfigCmd},
-        {"stylereport", 0,          stylereportCmd},
-#ifndef NDEBUG
-        {"_hashstats", 0, hashstatsCmd},
-#endif
-    };
-
-    int i;
-    CONST char *zArg1 = 0;
-    CONST char *zArg2 = 0;
-    Tcl_Obj *pError;
-
-    int matchone = 0; /* True if the first argument matched something */
-    int multiopt = 0; /* True if their were multiple options for second match */
-    CONST char *zBad;
-
-    if (objc>1) {
-        zArg1 = Tcl_GetString(objv[1]);
-    } else {
-        Tcl_WrongNumArgs(interp, 1, objv, "option ?arg arg ...?");
-        return TCL_ERROR;
-    }
-    if (objc>2) {
-        zArg2 = Tcl_GetString(objv[2]);
-    }
-
-    /* Search the array of built-in commands */
-    for (i=0; i<sizeof(aSubcommand)/sizeof(struct SC); i++) {
-         struct SC *pCommand = &aSubcommand[i];
-         if (zArg1 && 0==strcmp(zArg1, pCommand->zCmd1)) {
-             matchone = 1;
-             if (!pCommand->zCmd2 || 
-                 (zArg2 && 0==strcmp(zArg2, pCommand->zCmd2))) 
-             {
-                 return pCommand->xFuncObj(clientData, interp, objc, objv);
-             }
-         }
-    }
-
-    /* Failed to find a matching sub-command. The remainder of this routine
-     * is generating an error message. 
-     */
-    zBad = matchone?zArg2:zArg1;
-    pError = Tcl_NewStringObj("bad option \"", -1);
-    Tcl_IncrRefCount(pError);
-    Tcl_AppendToObj(pError, zBad, -1);
-    Tcl_AppendToObj(pError, "\" must be ", -1);
-    zBad = 0;
-    for (i=0; i<sizeof(aSubcommand)/sizeof(struct SC); i++) {
-        struct SC *pCommand = &aSubcommand[i];
-        CONST char *zAdd = 0;
-
-        if (matchone) { 
-            if (0==strcmp(pCommand->zCmd1, zArg1)) {
-                zAdd = pCommand->zCmd2;
-            }
-        } else if (!zBad || strcmp(pCommand->zCmd1, zBad)) {
-            zAdd = pCommand->zCmd1;
-        }
-
-        if (zAdd) {
-            if (zBad) {
-                Tcl_AppendToObj(pError, zBad, -1);
-                Tcl_AppendToObj(pError, ", ", -1);
-                multiopt = 1;
-            }
-            zBad = zAdd;
-        }
-    }
-    if (zBad) {
-        if (multiopt) {
-            Tcl_AppendToObj(pError, "or ", -1);
-        }
-        Tcl_AppendToObj(pError, zBad, -1);
-    }
-    Tcl_SetObjResult(interp, pError);
-    Tcl_DecrRefCount(pError);
-    
-    return TCL_ERROR;
-}
-
-
-
-/*
- *---------------------------------------------------------------------------
- *
- * newWidget --
- *
- *     Create a new Html widget command:
- *
- *         html PATH ?<options>?
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-newWidget(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    HtmlTree *pTree;
-    CONST char *zCmd;
-    int rc;
-    Tk_Window mainwin;           /* Main window of application */
-
-    if (objc<2) {
-        Tcl_WrongNumArgs(interp, 1, objv, "WINDOW-PATH ?OPTIONS?");
-        return TCL_ERROR;
-    }
-    
-    zCmd = Tcl_GetString(objv[1]);
-    pTree = HtmlNew(HtmlTree);
-    pTree->eVisibility = VisibilityPartiallyObscured;
-
-    /* Create the Tk window.
-     */
-    mainwin = Tk_MainWindow(interp);
-    pTree->tkwin = Tk_CreateWindowFromPath(interp, mainwin, zCmd, NULL); 
-    if (!pTree->tkwin) {
-        HtmlFree(pTree);
-        return TCL_ERROR;
-    }
-    Tk_SetClass(pTree->tkwin, "Html");
-
-    pTree->interp = interp;
-    Tcl_InitHashTable(&pTree->aParseHandler, TCL_ONE_WORD_KEYS);
-    Tcl_InitHashTable(&pTree->aScriptHandler, TCL_ONE_WORD_KEYS);
-    Tcl_InitHashTable(&pTree->aNodeHandler, TCL_ONE_WORD_KEYS);
-    Tcl_InitHashTable(&pTree->aOrphan, TCL_ONE_WORD_KEYS);
-    Tcl_InitHashTable(&pTree->aTag, TCL_STRING_KEYS);
-    pTree->cmd = Tcl_CreateObjCommand(interp,zCmd,widgetCmd,pTree,widgetCmdDel);
-
-    /* Initialise the hash tables used by styler code */
-    HtmlComputedValuesSetupTables(pTree);
-
-    /* Set up an event handler for the widget window */
-    Tk_CreateEventHandler(pTree->tkwin, 
-            ExposureMask|StructureNotifyMask|VisibilityChangeMask, 
-            eventHandler, (ClientData)pTree
-    );
-
-    /* Create the image-server */
-    HtmlImageServerInit(pTree);
-
-    /* TODO: Handle the case where configureCmd() returns an error. */
-    rc = configureCmd(pTree, interp, objc, objv);
-    if (rc != TCL_OK) {
-        Tk_DestroyWindow(pTree->tkwin);
-        return TCL_ERROR;
-    }
-    assert(!pTree->options.logcmd);
-    assert(!pTree->options.timercmd);
-
-    /* Load the default style-sheet, ready for the first document. */
-    doLoadDefaultStyle(pTree);
-    pTree->isSequenceOk = 1;
-
-    /* Return the name of the widget just created. */
-    Tcl_SetObjResult(interp, objv[1]);
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * htmlstyleCmd --
- *
- *     ::tkhtml::htmlstyle ?-quirks?
- *
- * Results:
- *     Built-in html style-sheet, including quirks if the -quirks option
- *     was specified.
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-htmlstyleCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    if (objc > 1 && objc != 2 && strcmp(Tcl_GetString(objv[1]), "-quirks")) {
-        Tcl_WrongNumArgs(interp, 1, objv, "?-quirks?");
-        return TCL_ERROR;
-    }
-
-    Tcl_SetResult(interp, HTML_DEFAULT_CSS, TCL_STATIC);
-    if (objc == 2) {
-        Tcl_AppendResult(interp, HTML_DEFAULT_QUIRKS);
-    }
-
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * htmlVersionCmd --
- *
- *     ::tkhtml::version
- *
- * Results:
- *     Returns a string containing the versions of the *.c files used
- *     to build the library
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-htmlVersionCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    if (objc > 1) {
-        Tcl_WrongNumArgs(interp, 1, objv, "");
-        return TCL_ERROR;
-    }
-    Tcl_SetResult(interp, HTML_SOURCE_FILES, TCL_STATIC);
-    return TCL_OK;
-}
-
-
-static int 
-htmlDecodeCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlDecode(clientData, interp, objc, objv);
-}
-
-static int 
-htmlEscapeCmd(clientData, interp, objc, objv)
-    ClientData clientData;             /* The HTML widget data structure */
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    return HtmlEscapeUriComponent(clientData, interp, objc, objv);
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * htmlByteOffsetCmd --
- * htmlCharOffsetCmd --
- *
- *     ::tkhtml::charoffset STRING BYTE-OFFSET
- *     ::tkhtml::byteoffset STRING CHAR-OFFSET
- *
- * Results:
- *
- * Side effects:
- *     None.
- *
- *---------------------------------------------------------------------------
- */
-static int 
-htmlByteOffsetCmd(clientData, interp, objc, objv)
-    ClientData clientData;
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    int iCharOffset;
-    int iRet;
-    char *zArg;
-
-    if (objc != 3) {
-        Tcl_WrongNumArgs(interp, 1, objv, "STRING CHAR-OFFSET");
-        return TCL_ERROR;
-    }
-
-    if (Tcl_GetIntFromObj(interp, objv[2], &iCharOffset)) return TCL_ERROR;
-    zArg = Tcl_GetString(objv[1]);
-
-    iRet = (Tcl_UtfAtIndex(zArg, iCharOffset) - zArg);
-    Tcl_SetObjResult(interp, Tcl_NewIntObj(iRet));
-    return TCL_OK;
-}
-static int 
-htmlCharOffsetCmd(clientData, interp, objc, objv)
-    ClientData clientData;
-    Tcl_Interp *interp;                /* Current interpreter. */
-    int objc;                          /* Number of arguments. */
-    Tcl_Obj *CONST objv[];             /* Argument strings. */
-{
-    int iByteOffset;
-    int iRet;
-    char *zArg;
-
-    if (objc != 3) {
-        Tcl_WrongNumArgs(interp, 1, objv, "STRING BYTE-OFFSET");
-        return TCL_ERROR;
-    }
-
-    if (Tcl_GetIntFromObj(interp, objv[2], &iByteOffset)) return TCL_ERROR;
-    zArg = Tcl_GetString(objv[1]);
-
-    iRet = Tcl_NumUtfChars(zArg, iByteOffset);
-    Tcl_SetObjResult(interp, Tcl_NewIntObj(iRet));
-    return TCL_OK;
-}
-
-
-/*
- * Define the DLL_EXPORT macro, which must be set to something or other in
- * order to export the Tkhtml_Init and Tkhtml_SafeInit symbols from a win32
- * DLL file. I don't entirely understand the ins and outs of this, the
- * block below was copied verbatim from another program.
- */
-#if INTERFACE
-#define DLL_EXPORT
-#endif
-#if defined(USE_TCL_STUBS) && defined(__WIN32__)
-# undef DLL_EXPORT
-# define DLL_EXPORT __declspec(dllexport)
-#endif
-#ifndef DLL_EXPORT
-#define DLL_EXPORT
-#endif
-
-/*
- *---------------------------------------------------------------------------
- *
- * Tkhtml_Init --
- *
- *     Load the package into an interpreter.
- *
- * Results:
- *     Tcl result.
- *
- * Side effects:
- *     Loads the tkhtml package into interpreter interp.
- *
- *---------------------------------------------------------------------------
- */
-DLL_EXPORT int Tkhtml_Init(interp)
-    Tcl_Interp *interp;
-{
-    int rc;
-
-    /* Require stubs libraries version 8.4 or greater. */
-#ifdef USE_TCL_STUBS
-    if (Tcl_InitStubs(interp, "8.4", 0) == 0) {
-        return TCL_ERROR;
-    }
-    if (Tk_InitStubs(interp, "8.4", 0) == 0) {
-        return TCL_ERROR;
-    }
-#endif
-
-    if (0 == Tcl_PkgRequire(interp, "Tk", "8.4", 0)) {
-        return TCL_ERROR;
-    }
-    Tcl_PkgProvide(interp, "Tkhtml", "3.0");
-
-    Tcl_CreateObjCommand(interp, "html", newWidget, 0, 0);
-    Tcl_CreateObjCommand(interp, "::tkhtml::htmlstyle", htmlstyleCmd, 0, 0);
-    Tcl_CreateObjCommand(interp, "::tkhtml::version", htmlVersionCmd, 0, 0);
-    Tcl_CreateObjCommand(interp, "::tkhtml::decode", htmlDecodeCmd, 0, 0);
-    Tcl_CreateObjCommand(interp, "::tkhtml::escape_uri", htmlEscapeCmd, 0, 0);
-
-    Tcl_CreateObjCommand(interp, "::tkhtml::byteoffset", htmlByteOffsetCmd,0,0);
-    Tcl_CreateObjCommand(interp, "::tkhtml::charoffset", htmlCharOffsetCmd,0,0);
-
-#ifndef NDEBUG
-    Tcl_CreateObjCommand(interp, "::tkhtml::htmlalloc", allocCmd, 0, 0);
-    Tcl_CreateObjCommand(interp, "::tkhtml::heapdebug", heapdebugCmd, 0, 0);
-#endif
-
-    SwprocInit(interp);
-
-    rc = Tcl_EvalEx(interp, HTML_DEFAULT_TCL, -1, TCL_EVAL_GLOBAL);
-    assert(rc == TCL_OK);
-    return TCL_OK;
-}
-
-/*
- *---------------------------------------------------------------------------
- *
- * Tkhtml_SafeInit --
- *
- *     Load the package into a safe interpreter.
- *
- *     Note that this function has to be below the Tkhtml_Init()
- *     implementation. Otherwise the Tkhtml_Init() invocation in this
- *     function counts as an implicit declaration which causes problems for
- *     MSVC somewhere on down the line.
- *
- * Results:
- *     Tcl result.
- *
- * Side effects:
- *     Loads the tkhtml package into interpreter interp.
- *
- *---------------------------------------------------------------------------
- */
-DLL_EXPORT int Tkhtml_SafeInit(interp)
-    Tcl_Interp *interp;
-{
-    return Tkhtml_Init(interp);
-}
diff --git a/src/CVS/Entries b/src/CVS/Entries
deleted file mode 100644
index ab69598..0000000
--- a/src/CVS/Entries
+++ /dev/null
@@ -1,38 +0,0 @@
-/css.h/1.35/Fri Sep 21 07:32:30 2007//
-/cssInt.h/1.28/Fri Sep 21 06:40:47 2007//
-/cssdynamic.c/1.12/Sun Jun 10 11:41:33 2007//
-/cssparse.lem/1.3/Sun Sep  2 06:06:40 2007//
-/cssprop.tcl/1.27/Sun Jun 10 11:41:33 2007//
-/csssearch.c/1.5/Sun Sep  2 06:06:10 2007//
-/html.h/1.212/Fri Sep 28 14:23:37 2007//
-/htmlfloat.c/1.21/Sun Nov 12 07:22:17 2006//
-/htmlhash.c/1.22/Wed Nov 15 12:11:08 2006//
-/htmlimage.c/1.65/Fri Sep 28 14:18:25 2007//
-/htmlinline.c/1.47/Sat Sep  8 14:59:04 2007//
-/htmllayout.h/1.29/Sat Sep  8 15:47:08 2007//
-/htmlmacros.h/1.8/Sun Dec 10 02:14:57 2006//
-/htmlprop.h/1.38/Sun Sep 23 06:25:29 2007//
-/htmlstyle.c/1.57/Fri Sep 28 14:18:25 2007//
-/htmltable.c/1.122/Sat Sep 15 07:59:12 2007//
-/htmltagdb.c/1.10/Fri Dec 29 03:42:15 2006//
-/htmltree.c/1.150/Fri Sep 28 14:18:25 2007//
-/main.c/1.9/Fri Sep 28 14:23:40 2007//
-/mkdefaultstyle.tcl/1.5/Sun Jul 16 11:20:40 2006//
-/quirks.css/1.6/Sat Nov 25 03:37:53 2006//
-/restrack.c/1.11/Sat Jun 16 18:11:12 2007//
-/restrack.h/1.4/Sun Jan 21 08:33:14 2007//
-/swproc.c/1.6/Sat Jun 10 12:38:38 2006//
-/swproc.h/1.3/Tue Nov 15 07:53:59 2005//
-/tkhtml.tcl/1.13/Sun Sep 23 14:55:04 2007//
-/tokenlist.txt/1.43/Mon Jul  2 14:07:33 2007//
-/css.c/1.125/Wed Oct  3 17:46:37 2007//
-/htmldecode.c/1.6/Sat Sep 29 17:07:01 2007//
-/htmldraw.c/1.201/Sun Oct  7 06:14:45 2007//
-/htmllayout.c/1.259/Fri Sep 28 14:39:10 2007//
-/htmlparse.c/1.117/Fri Sep 28 17:44:26 2007//
-/htmlprop.c/1.122/Sun Oct  7 06:14:45 2007//
-/htmltcl.c/1.191/Thu Oct  4 10:32:41 2007//
-/htmltext.c/1.34/Sun Sep 30 08:05:09 2007//
-/htmlutil.c/1.7/Sat Sep 29 17:06:53 2007//
-/html.css/1.26/Mon Oct  8 07:24:28 2007//
-D
diff --git a/src/CVS/Repository b/src/CVS/Repository
deleted file mode 100644
index c68ff8d..0000000
--- a/src/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/src
diff --git a/src/CVS/Root b/src/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/src/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/src/tags b/src/tags
deleted file mode 100644
index d67b83c..0000000
--- a/src/tags
+++ /dev/null
@@ -1,2007 +0,0 @@
-!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR	Darren Hiebert	/dhiebert at users.sourceforge.net/
-!_TAG_PROGRAM_NAME	Exuberant Ctags	//
-!_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
-!_TAG_PROGRAM_VERSION	5.5.4	//
-ALPHA_CHANNEL_FALSE	htmlimage.c	123;"	d	file:
-ALPHA_CHANNEL_TRUE	htmlimage.c	122;"	d	file:
-ALPHA_CHANNEL_UNKNOWN	htmlimage.c	121;"	d	file:
-BETWEEN	htmlfloat.c	792;"	d	file:
-BOOLEAN	htmltcl.c	1316;"	d	file:
-BOOLEAN	htmltcl.c	1370;"	d	file:
-BORDERWIDTH	htmlprop.c	/^    ENUM, COLOR, LENGTH, IMAGE, BORDERWIDTH, CUSTOM$/;"	e	enum:PropertyValueType	file:
-BboxContext	htmldraw.c	/^struct BboxContext {$/;"	s	file:
-BboxContext	htmldraw.c	/^typedef struct BboxContext BboxContext;$/;"	t	file:
-BoxContext	htmllayout.h	/^struct BoxContext {$/;"	s
-BoxContext	htmllayout.h	/^typedef struct BoxContext BoxContext;$/;"	t
-BoxProperties	htmllayout.h	/^struct BoxProperties {$/;"	s
-BoxProperties	htmllayout.h	/^typedef struct BoxProperties BoxProperties;$/;"	t
-C	cssprop.tcl	/^proc C {args} {foreach a $args {lappend ::constants $a}}$/;"	p
-CACHED_MAXWIDTH_OK	htmllayout.c	133;"	d	file:
-CACHED_MINWIDTH_OK	htmllayout.c	132;"	d	file:
-CANVAS_BOX	htmldraw.c	167;"	d	file:
-CANVAS_BOX_OPEN_LEFT	html.h	741;"	d
-CANVAS_BOX_OPEN_RIGHT	html.h	742;"	d
-CANVAS_IMAGE	htmldraw.c	168;"	d	file:
-CANVAS_LINE	htmldraw.c	166;"	d	file:
-CANVAS_MARKER	htmldraw.c	172;"	d	file:
-CANVAS_ORIGIN	htmldraw.c	171;"	d	file:
-CANVAS_OVERFLOW	htmldraw.c	173;"	d	file:
-CANVAS_TEXT	htmldraw.c	165;"	d	file:
-CANVAS_WINDOW	htmldraw.c	169;"	d	file:
-CELL_WIDTH_AUTO	htmltable.c	61;"	d	file:
-CELL_WIDTH_PERCENT	htmltable.c	63;"	d	file:
-CELL_WIDTH_PIXELS	htmltable.c	62;"	d	file:
-CHECK_CANVAS	htmldraw.c	430;"	d	file:
-CHECK_INTEGER_PLAUSIBILITY	htmllayout.h	185;"	d
-CLEAR_BOTH	html.h	157;"	d
-CLEAR_LEFT	html.h	155;"	d
-CLEAR_NONE	html.h	154;"	d
-CLEAR_RIGHT	html.h	156;"	d
-COLOR	htmlprop.c	/^    ENUM, COLOR, LENGTH, IMAGE, BORDERWIDTH, CUSTOM$/;"	e	enum:PropertyValueType	file:
-COND	htmllayout.c	3326;"	d	file:
-COND	htmllayout.c	3328;"	d	file:
-COND	htmllayout.c	3555;"	d	file:
-COND	htmllayout.c	3557;"	d	file:
-COND	htmllayout.c	3559;"	d	file:
-CSS_MEDIA_ALL	cssInt.h	99;"	d
-CSS_MEDIA_AURAL	cssInt.h	100;"	d
-CSS_MEDIA_BRAILLE	cssInt.h	101;"	d
-CSS_MEDIA_EMBOSSED	cssInt.h	102;"	d
-CSS_MEDIA_HANDHELD	cssInt.h	103;"	d
-CSS_MEDIA_PRINT	cssInt.h	104;"	d
-CSS_MEDIA_PROJECTION	cssInt.h	105;"	d
-CSS_MEDIA_SCREEN	cssInt.h	106;"	d
-CSS_MEDIA_TTY	cssInt.h	107;"	d
-CSS_MEDIA_TV	cssInt.h	108;"	d
-CSS_ORIGIN_AGENT	css.h	151;"	d
-CSS_ORIGIN_AUTHOR	css.h	153;"	d
-CSS_ORIGIN_USER	css.h	152;"	d
-CSS_PSEUDOCLASS_ACTIVE	cssInt.h	84;"	d
-CSS_PSEUDOCLASS_FIRSTCHILD	cssInt.h	80;"	d
-CSS_PSEUDOCLASS_FOCUS	cssInt.h	86;"	d
-CSS_PSEUDOCLASS_HOVER	cssInt.h	85;"	d
-CSS_PSEUDOCLASS_LANG	cssInt.h	79;"	d
-CSS_PSEUDOCLASS_LASTCHILD	cssInt.h	81;"	d
-CSS_PSEUDOCLASS_LINK	cssInt.h	82;"	d
-CSS_PSEUDOCLASS_VISITED	cssInt.h	83;"	d
-CSS_PSEUDOELEMENT_AFTER	cssInt.h	94;"	d
-CSS_PSEUDOELEMENT_BEFORE	cssInt.h	93;"	d
-CSS_PSEUDOELEMENT_FIRSTLETTER	cssInt.h	92;"	d
-CSS_PSEUDOELEMENT_FIRSTLINE	cssInt.h	91;"	d
-CSS_SELECTORCHAIN_ADJACENT	cssInt.h	62;"	d
-CSS_SELECTORCHAIN_CHILD	cssInt.h	61;"	d
-CSS_SELECTORCHAIN_DESCENDANT	cssInt.h	60;"	d
-CSS_SELECTOR_ATTR	cssInt.h	69;"	d
-CSS_SELECTOR_ATTRHYPHEN	cssInt.h	72;"	d
-CSS_SELECTOR_ATTRLISTVALUE	cssInt.h	71;"	d
-CSS_SELECTOR_ATTRVALUE	cssInt.h	70;"	d
-CSS_SELECTOR_CLASS	cssInt.h	73;"	d
-CSS_SELECTOR_ID	cssInt.h	74;"	d
-CSS_SELECTOR_NEVERMATCH	cssInt.h	110;"	d
-CSS_SELECTOR_TYPE	cssInt.h	68;"	d
-CSS_SELECTOR_UNIVERSAL	cssInt.h	67;"	d
-CSS_TYPE_ATTR	css.h	95;"	d
-CSS_TYPE_CENTIMETER	css.h	82;"	d
-CSS_TYPE_EM	css.h	75;"	d
-CSS_TYPE_EX	css.h	79;"	d
-CSS_TYPE_FLOAT	css.h	87;"	d
-CSS_TYPE_INCH	css.h	83;"	d
-CSS_TYPE_MILLIMETER	css.h	84;"	d
-CSS_TYPE_NONE	css.h	90;"	d
-CSS_TYPE_PC	css.h	78;"	d
-CSS_TYPE_PERCENT	css.h	86;"	d
-CSS_TYPE_PT	css.h	77;"	d
-CSS_TYPE_PX	css.h	76;"	d
-CSS_TYPE_STRING	css.h	89;"	d
-CSS_TYPE_TCL	css.h	93;"	d
-CSS_TYPE_URL	css.h	94;"	d
-CUSTOM	htmlprop.c	/^    ENUM, COLOR, LENGTH, IMAGE, BORDERWIDTH, CUSTOM$/;"	e	enum:PropertyValueType	file:
-CUSTOMDEF	htmlprop.c	242;"	d	file:
-CanvasBox	htmldraw.c	/^struct CanvasBox {$/;"	s	file:
-CanvasBox	htmldraw.c	/^typedef struct CanvasBox CanvasBox;$/;"	t	file:
-CanvasImage	htmldraw.c	/^struct CanvasImage {$/;"	s	file:
-CanvasImage	htmldraw.c	/^typedef struct CanvasImage CanvasImage;$/;"	t	file:
-CanvasItemSorter	htmldraw.c	/^struct CanvasItemSorter {$/;"	s	file:
-CanvasItemSorter	htmldraw.c	/^typedef struct CanvasItemSorter CanvasItemSorter;$/;"	t	file:
-CanvasItemSorterLevel	htmldraw.c	/^struct CanvasItemSorterLevel {$/;"	s	file:
-CanvasItemSorterLevel	htmldraw.c	/^typedef struct CanvasItemSorterLevel CanvasItemSorterLevel;$/;"	t	file:
-CanvasItemSorterSlot	htmldraw.c	/^struct CanvasItemSorterSlot {$/;"	s	file:
-CanvasItemSorterSlot	htmldraw.c	/^typedef struct CanvasItemSorterSlot CanvasItemSorterSlot;$/;"	t	file:
-CanvasLine	htmldraw.c	/^struct CanvasLine {$/;"	s	file:
-CanvasLine	htmldraw.c	/^typedef struct CanvasLine   CanvasLine;$/;"	t	file:
-CanvasMarker	htmldraw.c	/^struct CanvasMarker {$/;"	s	file:
-CanvasMarker	htmldraw.c	/^typedef struct CanvasMarker CanvasMarker;$/;"	t	file:
-CanvasOrigin	htmldraw.c	/^struct CanvasOrigin {$/;"	s	file:
-CanvasOrigin	htmldraw.c	/^typedef struct CanvasOrigin CanvasOrigin;$/;"	t	file:
-CanvasOverflow	htmldraw.c	/^struct CanvasOverflow {$/;"	s	file:
-CanvasOverflow	htmldraw.c	/^typedef struct CanvasOverflow CanvasOverflow;$/;"	t	file:
-CanvasText	htmldraw.c	/^struct CanvasText {$/;"	s	file:
-CanvasText	htmldraw.c	/^typedef struct CanvasText CanvasText;$/;"	t	file:
-CanvasWindow	htmldraw.c	/^struct CanvasWindow {$/;"	s	file:
-CanvasWindow	htmldraw.c	/^typedef struct CanvasWindow CanvasWindow;$/;"	t	file:
-CellCallback	htmltable.c	/^typedef int (CellCallback)(HtmlNode *, int, int, int, int, void *);$/;"	t	file:
-CellReqWidth	htmltable.c	/^struct CellReqWidth {$/;"	s	file:
-CellReqWidth	htmltable.c	/^typedef struct CellReqWidth CellReqWidth;$/;"	t	file:
-CodeEnumVals	cssprop.tcl	/^proc CodeEnumVals {} {$/;"	p
-CodeInfrastructure	cssprop.tcl	/^proc CodeInfrastructure {} {$/;"	p
-CodeLookup	cssprop.tcl	/^proc CodeLookup {prefix entries firstconstant} {$/;"	p
-CssCachedSearch	csssearch.c	/^struct CssCachedSearch {$/;"	s	file:
-CssCachedSearch	csssearch.c	/^typedef struct CssCachedSearch CssCachedSearch;$/;"	t	file:
-CssDynamic	css.h	/^typedef struct CssDynamic CssDynamic;$/;"	t
-CssDynamic	cssdynamic.c	/^struct CssDynamic {$/;"	s	file:
-CssParse	cssInt.h	/^struct CssParse {$/;"	s
-CssParse	cssInt.h	/^typedef struct CssParse CssParse;$/;"	t
-CssPriority	cssInt.h	/^struct CssPriority {$/;"	s
-CssPriority	cssInt.h	/^typedef struct CssPriority CssPriority;$/;"	t
-CssProperties	cssInt.h	/^struct CssProperties {$/;"	s
-CssProperties	cssInt.h	/^typedef struct CssProperties CssProperties;$/;"	t
-CssProperty	css.h	/^struct CssProperty {$/;"	s
-CssProperty	css.h	/^typedef struct CssProperty CssProperty;$/;"	t
-CssPropertySet	css.h	/^typedef struct CssPropertySet CssPropertySet;$/;"	t
-CssPropertySet	cssInt.h	/^struct CssPropertySet {$/;"	s
-CssPropertySetItem	cssInt.h	/^    struct CssPropertySetItem {$/;"	s	struct:CssPropertySet
-CssRule	cssInt.h	/^struct CssRule {$/;"	s
-CssRule	cssInt.h	/^typedef struct CssRule CssRule;$/;"	t
-CssSearch	csssearch.c	/^struct CssSearch {$/;"	s	file:
-CssSearch	csssearch.c	/^typedef struct CssSearch CssSearch;$/;"	t	file:
-CssSelector	cssInt.h	/^struct CssSelector {$/;"	s
-CssSelector	cssInt.h	/^typedef struct CssSelector CssSelector;$/;"	t
-CssStyleSheet	css.h	/^typedef struct CssStyleSheet CssStyleSheet;$/;"	t
-CssStyleSheet	cssInt.h	/^struct CssStyleSheet {$/;"	s
-CssToken	cssInt.h	/^struct CssToken {$/;"	s
-CssToken	cssInt.h	/^typedef struct CssToken CssToken;$/;"	t
-CustomDef	htmlprop.c	/^static struct CustomDef {$/;"	s	file:
-DISPLAY	htmllayout.h	174;"	d
-DLL_EXPORT	htmltcl.c	2854;"	d	file:
-DLL_EXPORT	htmltcl.c	2857;"	d	file:
-DLL_EXPORT	htmltcl.c	2858;"	d	file:
-DLL_EXPORT	htmltcl.c	2861;"	d	file:
-DOUBLE	htmltcl.c	1322;"	d	file:
-DRAWBOX_NOBACKGROUND	htmldraw.c	1951;"	d	file:
-DRAWBOX_NOBORDER	htmldraw.c	1950;"	d	file:
-DRAW_BACKGROUND	htmllayout.h	108;"	d
-DRAW_CANVAS	htmllayout.h	104;"	d
-DRAW_QUAD	htmllayout.h	110;"	d
-DRAW_WINDOW	htmllayout.h	106;"	d
-DS_MASK	htmltcl.c	1295;"	d	file:
-E	cssprop.tcl	/^proc E {args} {$/;"	p
-END_LOG	htmlinline.c	196;"	d	file:
-ENUM	htmlprop.c	/^    ENUM, COLOR, LENGTH, IMAGE, BORDERWIDTH, CUSTOM$/;"	e	enum:PropertyValueType	file:
-ESC_HASH_SIZE	htmltext.c	366;"	d	file:
-EscHash	htmltext.c	/^EscHash(zName)$/;"	f	file:
-EscHashStats	htmltext.c	/^EscHashStats(void)$/;"	f	file:
-EscInit	htmltext.c	/^EscInit()$/;"	f	file:
-F	htmllayout.c	3097;"	d	file:
-F	htmllayout.c	3112;"	d	file:
-FLOAT_LEFT	html.h	150;"	d
-FLOAT_NONE	html.h	152;"	d
-FLOAT_RIGHT	html.h	151;"	d
-FREE_BOTH	css.c	3043;"	d	file:
-FREE_PROPERTYSET	css.c	3042;"	d	file:
-FREE_SELECTOR	css.c	3041;"	d	file:
-FT_MASK	htmltcl.c	1294;"	d	file:
-FT_MASK	htmltcl.c	1473;"	d	file:
-F_MASK	htmltcl.c	1297;"	d	file:
-FileToDefine	mkdefaultstyle.tcl	/^proc FileToDefine {file define} {$/;"	p
-FloatListEntry	htmlfloat.c	/^struct FloatListEntry {$/;"	s	file:
-FloatListEntry	htmlfloat.c	/^typedef struct FloatListEntry FloatListEntry;$/;"	t	file:
-FlowLayoutFunc	htmllayout.c	/^typedef int (FlowLayoutFunc) ($/;"	t	file:
-GEOMETRY	htmltcl.c	1307;"	d	file:
-GEOMETRY_MASK	htmltcl.c	1293;"	d	file:
-GEOMETRY_MASK	htmltcl.c	1472;"	d	file:
-GenericItem	htmldraw.c	/^        struct GenericItem {$/;"	s	union:HtmlCanvasItem::<anonymous>	file:
-GetPixmapQuery	htmldraw.c	/^struct GetPixmapQuery {$/;"	s	file:
-GetPixmapQuery	htmldraw.c	/^typedef struct GetPixmapQuery GetPixmapQuery;$/;"	t	file:
-HTMLTAG_BLOCK	html.h	168;"	d
-HTMLTAG_BODY	html.h	172;"	d
-HTMLTAG_EMPTY	html.h	169;"	d
-HTMLTAG_FRAMESET	html.h	173;"	d
-HTMLTAG_HEAD	html.h	171;"	d
-HTMLTAG_INLINE	html.h	167;"	d
-HTMLTAG_PCDATA	html.h	174;"	d
-HTML_COMPUTED_BOTTOM	htmlprop.h	473;"	d
-HTML_COMPUTED_HEIGHT	htmlprop.h	476;"	d
-HTML_COMPUTED_LEFT	htmlprop.h	474;"	d
-HTML_COMPUTED_MARGIN_BOTTOM	htmlprop.h	458;"	d
-HTML_COMPUTED_MARGIN_LEFT	htmlprop.h	459;"	d
-HTML_COMPUTED_MARGIN_RIGHT	htmlprop.h	457;"	d
-HTML_COMPUTED_MARGIN_TOP	htmlprop.h	456;"	d
-HTML_COMPUTED_MAX_HEIGHT	htmlprop.h	480;"	d
-HTML_COMPUTED_MAX_WIDTH	htmlprop.h	481;"	d
-HTML_COMPUTED_MIN_HEIGHT	htmlprop.h	478;"	d
-HTML_COMPUTED_MIN_WIDTH	htmlprop.h	479;"	d
-HTML_COMPUTED_PADDING_BOTTOM	htmlprop.h	463;"	d
-HTML_COMPUTED_PADDING_BOTTOM	htmlprop.h	468;"	d
-HTML_COMPUTED_PADDING_LEFT	htmlprop.h	464;"	d
-HTML_COMPUTED_PADDING_LEFT	htmlprop.h	469;"	d
-HTML_COMPUTED_PADDING_RIGHT	htmlprop.h	462;"	d
-HTML_COMPUTED_PADDING_RIGHT	htmlprop.h	467;"	d
-HTML_COMPUTED_PADDING_TOP	htmlprop.h	461;"	d
-HTML_COMPUTED_PADDING_TOP	htmlprop.h	466;"	d
-HTML_COMPUTED_RIGHT	htmlprop.h	472;"	d
-HTML_COMPUTED_TEXT_INDENT	htmlprop.h	482;"	d
-HTML_COMPUTED_TOP	htmlprop.h	471;"	d
-HTML_COMPUTED_WIDTH	htmlprop.h	477;"	d
-HTML_DAMAGE	html.h	472;"	d
-HTML_DYNAMIC	html.h	471;"	d
-HTML_DYNAMIC_ACTIVE	html.h	373;"	d
-HTML_DYNAMIC_FOCUS	html.h	372;"	d
-HTML_DYNAMIC_HOVER	html.h	371;"	d
-HTML_DYNAMIC_LINK	html.h	374;"	d
-HTML_DYNAMIC_USERFLAG	html.h	376;"	d
-HTML_DYNAMIC_VISITED	html.h	375;"	d
-HTML_IFONTSIZE_SCALE	htmlprop.h	56;"	d
-HTML_INLINE_STYLE_ATTR	html.h	330;"	d
-HTML_INSTRUMENT_ALLOCATE_FONT	html.h	979;"	d
-HTML_INSTRUMENT_CALLBACK	html.h	975;"	d
-HTML_INSTRUMENT_DYNAMIC_STYLE_ENGINE	html.h	976;"	d
-HTML_INSTRUMENT_LAYOUT_ENGINE	html.h	978;"	d
-HTML_INSTRUMENT_NUM_SYMS	html.h	981;"	d
-HTML_INSTRUMENT_SCRIPT_CALLBACK	html.h	974;"	d
-HTML_INSTRUMENT_STYLE_ENGINE	html.h	977;"	d
-HTML_LAYOUT	html.h	474;"	d
-HTML_MAX_ZEROREF_FONTS	htmlprop.h	81;"	d
-HTML_MODE_ALMOST	html.h	423;"	d
-HTML_MODE_QUIRKS	html.h	422;"	d
-HTML_MODE_STANDARDS	html.h	424;"	d
-HTML_NODESCROLL	html.h	477;"	d
-HTML_NODE_GENERATED	html.h	308;"	d
-HTML_NODE_ORPHAN	html.h	307;"	d
-HTML_OK	htmlprop.c	3068;"	d	file:
-HTML_PARSE_NODEHANDLER	html.h	667;"	d
-HTML_PKGNAME	html.h	74;"	d
-HTML_PKGVERSION	html.h	75;"	d
-HTML_REQUIRE_LAYOUT	htmlprop.c	3066;"	d	file:
-HTML_REQUIRE_PAINT	htmlprop.c	3067;"	d	file:
-HTML_RESTYLE	html.h	473;"	d
-HTML_SCROLL	html.h	475;"	d
-HTML_STACK	html.h	476;"	d
-HTML_TAG_ADD	html.h	835;"	d
-HTML_TAG_REMOVE	html.h	836;"	d
-HTML_TAG_SET	html.h	837;"	d
-HTML_TEXT_TOKEN_END	html.h	967;"	d
-HTML_TEXT_TOKEN_HARDNEWLINE	html.h	960;"	d
-HTML_TEXT_TOKEN_LONGTEXT	html.h	968;"	d
-HTML_TEXT_TOKEN_NEWLINE	html.h	959;"	d
-HTML_TEXT_TOKEN_SPACE	html.h	958;"	d
-HTML_TEXT_TOKEN_TEXT	html.h	957;"	d
-HTML_WALK_ABANDON	html.h	707;"	d
-HTML_WALK_DESCEND	html.h	708;"	d
-HTML_WALK_DO_NOT_DESCEND	html.h	709;"	d
-HTML_WRITE_INHANDLER	html.h	663;"	d
-HTML_WRITE_INHANDLERRESET	html.h	665;"	d
-HTML_WRITE_INHANDLERWAIT	html.h	664;"	d
-HTML_WRITE_NONE	html.h	662;"	d
-HTML_WRITE_WAIT	html.h	666;"	d
-Hash	cssprop.tcl	/^proc Hash {string} {$/;"	p
-HtmlAlloc	html.h	47;"	d
-HtmlAlloc	html.h	51;"	d
-HtmlAnchorContent	htmlparse.c	/^HtmlAnchorContent(pTree, pNode, tag)$/;"	f	file:
-HtmlAttribute	html.h	/^    struct HtmlAttribute {$/;"	s	struct:HtmlAttributes
-HtmlAttributes	html.h	/^struct HtmlAttributes {$/;"	s
-HtmlAttributes	html.h	/^typedef struct HtmlAttributes HtmlAttributes;$/;"	t
-HtmlAttributesNew	htmlparse.c	/^HtmlAttributesNew(argc, argv, arglen, doEscape)$/;"	f
-HtmlCallback	html.h	/^struct HtmlCallback {$/;"	s
-HtmlCallback	html.h	/^typedef struct HtmlCallback HtmlCallback;$/;"	t
-HtmlCallbackDamage	htmltcl.c	/^HtmlCallbackDamage(pTree, x, y, w, h)$/;"	f
-HtmlCallbackDamageNode	htmltcl.c	/^HtmlCallbackDamageNode(pTree, pNode)$/;"	f
-HtmlCallbackDynamic	htmltcl.c	/^HtmlCallbackDynamic(pTree, pNode)$/;"	f
-HtmlCallbackForce	htmltcl.c	/^HtmlCallbackForce(pTree)$/;"	f
-HtmlCallbackLayout	htmltcl.c	/^HtmlCallbackLayout(pTree, pNode)$/;"	f
-HtmlCallbackRestyle	htmltcl.c	/^HtmlCallbackRestyle(pTree, pNode)$/;"	f
-HtmlCallbackScrollX	htmltcl.c	/^HtmlCallbackScrollX(pTree, x)$/;"	f
-HtmlCallbackScrollY	htmltcl.c	/^HtmlCallbackScrollY(pTree, y)$/;"	f
-HtmlCanvas	html.h	/^struct HtmlCanvas {$/;"	s
-HtmlCanvas	html.h	/^typedef struct HtmlCanvas HtmlCanvas;$/;"	t
-HtmlCanvasItem	html.h	/^typedef struct HtmlCanvasItem HtmlCanvasItem;$/;"	t
-HtmlCanvasItem	htmldraw.c	/^struct HtmlCanvasItem {$/;"	s	file:
-HtmlCanvasSnapshot	html.h	/^typedef struct HtmlCanvasSnapshot HtmlCanvasSnapshot;$/;"	t
-HtmlCaseInsenstiveHashType	htmlhash.c	/^HtmlCaseInsenstiveHashType() $/;"	f
-HtmlCheckRestylePoint	html.h	951;"	d
-HtmlCheckRestylePoint	htmltcl.c	/^HtmlCheckRestylePoint(pTree)$/;"	f
-HtmlClearAlloc	html.h	57;"	d
-HtmlColor	htmlprop.h	/^struct HtmlColor {$/;"	s
-HtmlColor	htmlprop.h	/^typedef struct HtmlColor HtmlColor;$/;"	t
-HtmlComputedValues	htmlprop.h	/^struct HtmlComputedValues {$/;"	s
-HtmlComputedValues	htmlprop.h	/^typedef struct HtmlComputedValues HtmlComputedValues;$/;"	t
-HtmlComputedValuesCleanupTables	htmlprop.c	/^HtmlComputedValuesCleanupTables(pTree)$/;"	f
-HtmlComputedValuesCompare	htmlprop.c	/^HtmlComputedValuesCompare(pV1, pV2) $/;"	f
-HtmlComputedValuesCreator	htmlprop.h	/^struct HtmlComputedValuesCreator {$/;"	s
-HtmlComputedValuesCreator	htmlprop.h	/^typedef struct HtmlComputedValuesCreator HtmlComputedValuesCreator;$/;"	t
-HtmlComputedValuesFinish	htmlprop.c	/^HtmlComputedValuesFinish(p)$/;"	f
-HtmlComputedValuesFreeProperty	htmlprop.c	/^void HtmlComputedValuesFreeProperty(p, pProp)$/;"	f
-HtmlComputedValuesHashType	htmlhash.c	/^Tcl_HashKeyType * HtmlComputedValuesHashType() $/;"	f
-HtmlComputedValuesInit	htmlprop.c	/^HtmlComputedValuesInit(pTree, pNode, pParent, p)$/;"	f
-HtmlComputedValuesReference	htmlprop.c	/^HtmlComputedValuesReference(pValues)$/;"	f
-HtmlComputedValuesRelease	htmlprop.c	/^HtmlComputedValuesRelease(pTree, pValues)$/;"	f
-HtmlComputedValuesSet	htmlprop.c	/^HtmlComputedValuesSet(p, eProp, pProp)$/;"	f
-HtmlComputedValuesSetupTables	htmlprop.c	/^HtmlComputedValuesSetupTables(pTree)$/;"	f
-HtmlContentTest	html.h	/^typedef int (*HtmlContentTest)(HtmlTree *, HtmlNode *, int);$/;"	t
-HtmlCreateUri	html.h	/^Tcl_ObjCmdProc HtmlCreateUri;$/;"	v
-HtmlCreateUri	htmldecode.c	/^HtmlCreateUri(clientData, interp, objc, objv)$/;"	f
-HtmlCssAddDynamic	cssdynamic.c	/^HtmlCssAddDynamic(pElem, pSelector, isSet)$/;"	f
-HtmlCssCheckDynamic	cssdynamic.c	/^HtmlCssCheckDynamic(pTree)$/;"	f
-HtmlCssDeclaration	css.c	/^HtmlCssDeclaration(pParse, pProp, pExpr, isImportant)$/;"	f
-HtmlCssFreeDynamics	cssdynamic.c	/^HtmlCssFreeDynamics(pElem)$/;"	f
-HtmlCssGetNextListItem	css.c	/^HtmlCssGetNextListItem(zList, nList, pN)$/;"	f
-HtmlCssImport	css.c	/^void HtmlCssImport(pParse, pToken)$/;"	f
-HtmlCssInlineFree	css.c	/^HtmlCssInlineFree(pPropertySet)$/;"	f
-HtmlCssInlineParse	css.c	/^HtmlCssInlineParse($/;"	f
-HtmlCssInlineQuery	css.c	/^HtmlCssInlineQuery(interp, pPropertySet, pArg)$/;"	f
-HtmlCssPropertiesGet	css.c	/^HtmlCssPropertiesGet(pProperties, prop, pSheetnum, pSpec)$/;"	f
-HtmlCssPropertyGetString	css.c	/^HtmlCssPropertyGetString(pProp)$/;"	f
-HtmlCssPseudo	css.c	/^int HtmlCssPseudo(pToken, nColon)$/;"	f
-HtmlCssRule	css.c	/^void HtmlCssRule(pParse, success)$/;"	f
-HtmlCssSearch	css.h	/^Tcl_ObjCmdProc HtmlCssSearch;$/;"	v
-HtmlCssSearch	csssearch.c	/^HtmlCssSearch(clientData, interp, objc, objv)$/;"	f
-HtmlCssSearchInit	csssearch.c	/^HtmlCssSearchInit(pTree)$/;"	f
-HtmlCssSearchInvalidateCache	csssearch.c	/^HtmlCssSearchInvalidateCache(pTree)$/;"	f
-HtmlCssSearchShutdown	csssearch.c	/^HtmlCssSearchShutdown(pTree)$/;"	f
-HtmlCssSelector	css.c	/^void HtmlCssSelector(pParse, stype, pAttr, pValue)$/;"	f
-HtmlCssSelectorComma	css.c	/^void HtmlCssSelectorComma(pParse)$/;"	f
-HtmlCssSelectorParse	css.c	/^HtmlCssSelectorParse(pTree, n, z, ppStyle)$/;"	f
-HtmlCssSelectorTest	css.c	/^HtmlCssSelectorTest(pSelector, pNode, dynamic_true)$/;"	f
-HtmlCssSelectorToString	css.c	/^HtmlCssSelectorToString(pSelector, pObj)$/;"	f
-HtmlCssStringToProperty	css.c	/^CssProperty *HtmlCssStringToProperty(z, n)$/;"	f
-HtmlCssStyleConfigDump	css.c	/^HtmlCssStyleConfigDump(clientData, interp, objc, objv)$/;"	f
-HtmlCssStyleConfigDump	html.h	/^Tcl_ObjCmdProc HtmlCssStyleConfigDump;$/;"	v
-HtmlCssStyleReport	css.c	/^HtmlCssStyleReport(clientData, interp, objc, objv)$/;"	f
-HtmlCssStyleReport	css.h	/^Tcl_ObjCmdProc HtmlCssStyleReport;$/;"	v
-HtmlCssStyleSheetApply	css.c	/^HtmlCssStyleSheetApply(pTree, pNode)$/;"	f
-HtmlCssStyleSheetFree	css.c	/^HtmlCssStyleSheetFree(pStyle)$/;"	f
-HtmlCssStyleSheetGenerated	css.c	/^void HtmlCssStyleSheetGenerated(pTree, pElem)$/;"	f
-HtmlCssStyleSheetSyntaxErrs	css.c	/^int HtmlCssStyleSheetSyntaxErrs(CssStyleSheet *pStyle){$/;"	f
-HtmlCssTclNodeDynamics	cssdynamic.c	/^HtmlCssTclNodeDynamics(interp, pNode)$/;"	f
-HtmlDamage	html.h	/^struct HtmlDamage {$/;"	s
-HtmlDamage	html.h	/^typedef struct HtmlDamage HtmlDamage;$/;"	t
-HtmlDebug	html.h	/^Tcl_ObjCmdProc HtmlDebug;$/;"	v
-HtmlDecode	html.h	/^Tcl_ObjCmdProc HtmlDecode;$/;"	v
-HtmlDecode	htmldecode.c	/^HtmlDecode(clientData, interp, objc, objv)$/;"	f
-HtmlDelScrollbars	htmlstyle.c	/^HtmlDelScrollbars(pTree, pNode)$/;"	f
-HtmlDelStackingInfo	htmlstyle.c	/^HtmlDelStackingInfo(pTree, pElem)$/;"	f
-HtmlDlContent	htmlparse.c	/^HtmlDlContent(pTree, pNode, tag)$/;"	f	file:
-HtmlDrawAddLinebox	htmldraw.c	/^HtmlDrawAddLinebox(pCanvas, x, y) $/;"	f
-HtmlDrawAddMarker	htmldraw.c	/^HtmlDrawAddMarker(pCanvas, x, y, fixed)$/;"	f
-HtmlDrawBox	htmldraw.c	/^HtmlDrawBox(pCanvas, x, y, w, h, pNode, flags, size_only, pCandidate)$/;"	f
-HtmlDrawCanvas	htmldraw.c	/^void HtmlDrawCanvas(pCanvas, pCanvas2, x, y, pNode)$/;"	f
-HtmlDrawCanvasItemReference	htmldraw.c	/^HtmlDrawCanvasItemReference(pItem)$/;"	f
-HtmlDrawCanvasItemRelease	htmldraw.c	/^HtmlDrawCanvasItemRelease(pTree, pItem)$/;"	f
-HtmlDrawCleanup	htmldraw.c	/^HtmlDrawCleanup(pTree, pCanvas)$/;"	f
-HtmlDrawCopyCanvas	htmldraw.c	/^void HtmlDrawCopyCanvas(pTo, pFrom)$/;"	f
-HtmlDrawFindLinebox	htmldraw.c	/^HtmlDrawFindLinebox(pCanvas, pX, pY)$/;"	f
-HtmlDrawGetMarker	htmldraw.c	/^HtmlDrawGetMarker(pCanvas, pMarker, pX, pY)$/;"	f
-HtmlDrawImage	htmldraw.c	/^HtmlDrawImage($/;"	f
-HtmlDrawIsEmpty	htmldraw.c	/^int HtmlDrawIsEmpty(pCanvas)$/;"	f
-HtmlDrawLine	htmldraw.c	/^HtmlDrawLine(pCanvas, x, w, y_over, y_through, y_under, pNode, size_only)$/;"	f
-HtmlDrawOrigin	htmldraw.c	/^void HtmlDrawOrigin(pCanvas)$/;"	f
-HtmlDrawOverflow	htmldraw.c	/^void HtmlDrawOverflow(pCanvas, pNode, w, h)$/;"	f
-HtmlDrawSnapshot	htmldraw.c	/^HtmlDrawSnapshot(pTree, isDrawable)$/;"	f
-HtmlDrawSnapshotDamage	htmldraw.c	/^HtmlDrawSnapshotDamage(pTree, pSnapshot, ppCurrent)$/;"	f
-HtmlDrawSnapshotFree	htmldraw.c	/^HtmlDrawSnapshotFree(pTree, pSnapshot)$/;"	f
-HtmlDrawSnapshotZero	htmldraw.c	/^HtmlDrawSnapshotZero(pTree)$/;"	f
-HtmlDrawText	htmldraw.c	/^void HtmlDrawText(pCanvas, zText, nText, x, y, w, size_only, pNode, iIndex)$/;"	f
-HtmlDrawTextExtend	htmldraw.c	/^HtmlDrawTextExtend(pCanvas, nChar, nPixel) $/;"	f
-HtmlDrawTextLength	htmldraw.c	/^HtmlDrawTextLength(pCanvas)$/;"	f
-HtmlDrawWindow	htmldraw.c	/^HtmlDrawWindow(pCanvas, pNode, x, y, w, h, size_only)$/;"	f
-HtmlElemParent	html.h	366;"	d
-HtmlElementNode	html.h	/^struct HtmlElementNode {$/;"	s
-HtmlElementNode	html.h	/^typedef struct HtmlElementNode HtmlElementNode;$/;"	t
-HtmlElementNormalize	htmltree.c	/^HtmlElementNormalize(pElem)$/;"	f
-HtmlEscapeUriComponent	html.h	/^Tcl_ObjCmdProc HtmlEscapeUriComponent;$/;"	v
-HtmlEscapeUriComponent	htmldecode.c	/^HtmlEscapeUriComponent(clientData, interp, objc, objv)$/;"	f
-HtmlFinishNodeHandlers	htmltree.c	/^HtmlFinishNodeHandlers(pTree)$/;"	f
-HtmlFloatList	html.h	/^typedef struct HtmlFloatList HtmlFloatList;$/;"	t
-HtmlFloatList	htmlfloat.c	/^struct HtmlFloatList {$/;"	s	file:
-HtmlFloatListAdd	htmlfloat.c	/^HtmlFloatListAdd(pList, side, x, y1, y2) $/;"	f
-HtmlFloatListClear	htmlfloat.c	/^HtmlFloatListClear(pList, clear, y)$/;"	f
-HtmlFloatListClearTop	htmlfloat.c	/^HtmlFloatListClearTop(pList, y)$/;"	f
-HtmlFloatListDelete	htmlfloat.c	/^HtmlFloatListDelete(pList)$/;"	f
-HtmlFloatListIsConstant	htmlfloat.c	/^HtmlFloatListIsConstant(pList, y, iHeight)$/;"	f
-HtmlFloatListLog	htmlfloat.c	/^HtmlFloatListLog(pTree, zCaption, zNode, pList)$/;"	f
-HtmlFloatListMargins	htmlfloat.c	/^HtmlFloatListMargins(pList, y1, y2, pLeft, pRight)$/;"	f
-HtmlFloatListNew	htmlfloat.c	/^HtmlFloatList *HtmlFloatListNew()$/;"	f
-HtmlFloatListNormalize	htmlfloat.c	/^HtmlFloatListNormalize(pList, x, y)$/;"	f
-HtmlFloatListPlace	htmlfloat.c	/^HtmlFloatListPlace(pList, parentwidth, width, height, y)$/;"	f
-HtmlFont	htmlprop.h	/^struct HtmlFont {$/;"	s
-HtmlFont	htmlprop.h	/^typedef struct HtmlFont HtmlFont;$/;"	t
-HtmlFontCache	htmlprop.h	/^struct HtmlFontCache {$/;"	s
-HtmlFontCache	htmlprop.h	/^typedef struct HtmlFontCache HtmlFontCache;$/;"	t
-HtmlFontCacheClear	htmlprop.c	/^HtmlFontCacheClear(pTree, isReinit)$/;"	f
-HtmlFontKey	htmlprop.h	/^struct HtmlFontKey {$/;"	s
-HtmlFontKey	htmlprop.h	/^typedef struct HtmlFontKey HtmlFontKey;$/;"	t
-HtmlFontKeyHashType	htmlhash.c	/^HtmlFontKeyHashType() $/;"	f
-HtmlFontReference	htmlprop.c	/^HtmlFontReference(pFont)$/;"	f
-HtmlFontRelease	htmlprop.c	/^HtmlFontRelease(pTree, pFont)$/;"	f
-HtmlFormContent	htmlparse.c	/^HtmlFormContent(pTree, pNode, tag)$/;"	f	file:
-HtmlFourSides	htmlprop.h	/^struct HtmlFourSides {$/;"	s
-HtmlFourSides	htmlprop.h	/^typedef struct HtmlFourSides HtmlFourSides;$/;"	t
-HtmlFragmentContext	html.h	/^typedef struct HtmlFragmentContext HtmlFragmentContext;$/;"	t
-HtmlFragmentContext	htmltree.c	/^struct HtmlFragmentContext {$/;"	s	file:
-HtmlFree	html.h	48;"	d
-HtmlFree	html.h	52;"	d
-HtmlGetInlineBorder	htmlinline.c	/^HtmlGetInlineBorder(pLayout, pContext, pNode)$/;"	f
-HtmlHash	htmlparse.c	/^HtmlHash(htmlPtr, zName)$/;"	f	file:
-HtmlHashInit	htmlparse.c	/^HtmlHashInit(htmlPtr, start)$/;"	f	file:
-HtmlHashLookup	htmlparse.c	/^HtmlHashLookup(htmlPtr, zType)$/;"	f	file:
-HtmlHashStats	htmlparse.c	/^HtmlHashStats(void * htmlPtr)$/;"	f	file:
-HtmlHeadContent	htmlparse.c	/^HtmlHeadContent(pTree, pNode, tag)$/;"	f	file:
-HtmlHeapDebug	restrack.c	/^HtmlHeapDebug(clientData, interp, objc, objv)$/;"	f
-HtmlHeapDebug	restrack.h	/^Tcl_ObjCmdProc HtmlHeapDebug;$/;"	v
-HtmlImage2	html.h	/^typedef struct HtmlImage2 HtmlImage2;$/;"	t
-HtmlImage2	htmlimage.c	/^struct HtmlImage2 {$/;"	s	file:
-HtmlImageAlphaChannel	htmlimage.c	/^HtmlImageAlphaChannel(pTree, pImage)$/;"	f
-HtmlImageCheck	htmlimage.c	/^void HtmlImageCheck(pImage)$/;"	f
-HtmlImageFree	htmlimage.c	/^HtmlImageFree(pImage)$/;"	f
-HtmlImageImage	htmlimage.c	/^HtmlImageImage(pImage)$/;"	f
-HtmlImageRef	htmlimage.c	/^HtmlImageRef(pImage)$/;"	f
-HtmlImageScale	htmlimage.c	/^HtmlImageScale(pImage, pWidth, pHeight, doScale)$/;"	f
-HtmlImageServer	html.h	/^typedef struct HtmlImageServer HtmlImageServer;$/;"	t
-HtmlImageServer	htmlimage.c	/^struct HtmlImageServer {$/;"	s	file:
-HtmlImageServerCount	htmlimage.c	/^int HtmlImageServerCount(pTree)$/;"	f
-HtmlImageServerDoGC	htmlimage.c	/^void HtmlImageServerDoGC(pTree)$/;"	f
-HtmlImageServerGet	htmlimage.c	/^HtmlImageServerGet(p, zUrl)$/;"	f
-HtmlImageServerInit	htmlimage.c	/^HtmlImageServerInit(pTree)$/;"	f
-HtmlImageServerShutdown	htmlimage.c	/^HtmlImageServerShutdown(pTree)$/;"	f
-HtmlImageServerSuspendGC	htmlimage.c	/^void HtmlImageServerSuspendGC(pTree)$/;"	f
-HtmlImageTile	htmlimage.c	/^HtmlImageTile(pImage)$/;"	f
-HtmlImageUnscaledName	htmlimage.c	/^Tcl_Obj *HtmlImageUnscaledName(pImage)$/;"	f
-HtmlImageUrl	htmlimage.c	/^HtmlImageUrl(pImage)$/;"	f
-HtmlInitTree	htmltree.c	/^HtmlInitTree(pTree)$/;"	f
-HtmlInlineContent	htmlparse.c	/^HtmlInlineContent(pTree, pNode, tag)$/;"	f	file:
-HtmlInlineContextAddBox	htmlinline.c	/^HtmlInlineContextAddBox(pContext, pNode, pCanvas, iWidth, iHeight, iOffset)$/;"	f
-HtmlInlineContextAddText	htmlinline.c	/^HtmlInlineContextAddText(pContext, pNode)$/;"	f
-HtmlInlineContextCleanup	htmlinline.c	/^HtmlInlineContextCleanup(pContext)$/;"	f
-HtmlInlineContextCreator	htmlinline.c	/^HtmlInlineContextCreator(pContext)$/;"	f
-HtmlInlineContextGetLineBox	htmlinline.c	/^HtmlInlineContextGetLineBox(pLayout, p, flags, pWidth, pCanvas, pVSpace,pAscent)$/;"	f
-HtmlInlineContextIsEmpty	htmlinline.c	/^HtmlInlineContextIsEmpty(pContext)$/;"	f
-HtmlInlineContextNew	htmlinline.c	/^HtmlInlineContextNew(pTree, pNode, isSizeOnly, iTextIndent)$/;"	f
-HtmlInlineContextPopBorder	htmlinline.c	/^HtmlInlineContextPopBorder(p, pBorder)$/;"	f
-HtmlInlineContextPushBorder	htmlinline.c	/^int HtmlInlineContextPushBorder(pContext, pBorder)$/;"	f
-HtmlInlineContextSetTextIndent	htmlinline.c	/^HtmlInlineContextSetTextIndent(pContext, iTextIndent)$/;"	f
-HtmlInstrumentCall	htmlutil.c	/^HtmlInstrumentCall(pClientData, iCall, xFunc, clientData)$/;"	f
-HtmlInstrumentCall2	htmlutil.c	/^HtmlInstrumentCall2(pClientData, iCall, xFunc, clientData)$/;"	f
-HtmlInstrumentInit	htmlutil.c	/^HtmlInstrumentInit(interp)$/;"	f
-HtmlLayout	htmllayout.c	/^HtmlLayout(pTree)$/;"	f
-HtmlLayoutCache	html.h	/^typedef struct HtmlLayoutCache HtmlLayoutCache;$/;"	t
-HtmlLayoutCache	htmllayout.c	/^struct HtmlLayoutCache {$/;"	s	file:
-HtmlLayoutDrawBox	htmllayout.c	/^HtmlLayoutDrawBox(pTree, pCanvas, x, y, w, h, pNode, flags, size_only)$/;"	f
-HtmlLayoutImage	html.h	/^Tcl_ObjCmdProc HtmlLayoutImage;$/;"	v
-HtmlLayoutImage	htmldraw.c	/^int HtmlLayoutImage(clientData, interp, objc, objv)$/;"	f
-HtmlLayoutInvalidateCache	htmllayout.c	/^HtmlLayoutInvalidateCache(pTree, pNode)$/;"	f
-HtmlLayoutNode	html.h	/^Tcl_ObjCmdProc HtmlLayoutNode;$/;"	v
-HtmlLayoutNode	htmldraw.c	/^HtmlLayoutNode(clientData, interp, objc, objv)$/;"	f
-HtmlLayoutNodeContent	htmllayout.c	/^HtmlLayoutNodeContent(pLayout, pBox, pNode)$/;"	f
-HtmlLayoutPrimitives	html.h	/^Tcl_ObjCmdProc HtmlLayoutPrimitives;$/;"	v
-HtmlLayoutPrimitives	htmldraw.c	/^int HtmlLayoutPrimitives(clientData, interp, objc, objv)$/;"	f
-HtmlLayoutSize	html.h	/^Tcl_ObjCmdProc HtmlLayoutSize;$/;"	v
-HtmlLiContent	htmlparse.c	/^HtmlLiContent(pTree, pNode, tag)$/;"	f	file:
-HtmlLog	htmltcl.c	/^HtmlLog(HtmlTree *pTree, CONST char *zSubject, CONST char *zFormat, ...) {$/;"	f
-HtmlMarkup	htmltagdb.c	/^HtmlMarkup(markup)$/;"	f
-HtmlMarkupArg	htmlparse.c	/^char * HtmlMarkupArg(pAttr, zTag, zDefault)$/;"	f
-HtmlMarkupFlags	htmltagdb.c	/^HtmlMarkupFlags(markup)$/;"	f
-HtmlMarkupName	htmltagdb.c	/^HtmlMarkupName(markup)$/;"	f
-HtmlNameToType	htmlparse.c	/^HtmlNameToType(htmlPtr, zType)$/;"	f
-HtmlNew	html.h	59;"	d
-HtmlNode	html.h	/^struct HtmlNode {$/;"	s
-HtmlNode	html.h	/^typedef struct HtmlNode HtmlNode;$/;"	t
-HtmlNodeAddChild	htmltree.c	/^HtmlNodeAddChild(pElem, eTag, pAttributes)$/;"	f
-HtmlNodeAddTextChild	htmltree.c	/^HtmlNodeAddTextChild(pNode, pTextNode)$/;"	f
-HtmlNodeAfter	htmltree.c	/^HtmlNodeAfter(pNode)$/;"	f
-HtmlNodeAsElement	htmlmacros.h	101;"	d
-HtmlNodeAsText	htmlmacros.h	121;"	d
-HtmlNodeAttr	htmltree.c	/^char CONST *HtmlNodeAttr(pNode, zAttr)$/;"	f
-HtmlNodeBefore	htmltree.c	/^HtmlNodeBefore(pNode)$/;"	f
-HtmlNodeChild	htmlmacros.h	181;"	d
-HtmlNodeClearGenerated	htmltree.c	/^HtmlNodeClearGenerated(pTree, pElem)$/;"	f
-HtmlNodeClearRecursive	htmltcl.c	/^void HtmlNodeClearRecursive(pTree, pNode)$/;"	f
-HtmlNodeClearStyle	htmltree.c	/^HtmlNodeClearStyle(pTree, pElem)$/;"	f
-HtmlNodeCmd	html.h	/^struct HtmlNodeCmd {$/;"	s
-HtmlNodeCmd	html.h	/^typedef struct HtmlNodeCmd HtmlNodeCmd;$/;"	t
-HtmlNodeCommand	htmltree.c	/^HtmlNodeCommand(pTree, pNode)$/;"	f
-HtmlNodeComputedValues	htmlmacros.h	141;"	d
-HtmlNodeDeleteCommand	htmltree.c	/^HtmlNodeDeleteCommand(pTree, pNode)$/;"	f
-HtmlNodeGetPointer	htmltree.c	/^HtmlNodeGetPointer(pTree, zCmd)$/;"	f
-HtmlNodeGetProperty	htmlprop.c	/^HtmlNodeGetProperty(interp, pProp, pValues)$/;"	f
-HtmlNodeIndexOfChild	htmltree.c	/^HtmlNodeIndexOfChild(pParent, pChild)$/;"	f
-HtmlNodeIsOrphan	htmltree.c	/^int HtmlNodeIsOrphan(pNode)$/;"	f
-HtmlNodeIsText	htmlmacros.h	62;"	d
-HtmlNodeIsWhitespace	htmlmacros.h	81;"	d
-HtmlNodeLeftSibling	htmltree.c	/^HtmlNode *HtmlNodeLeftSibling(pNode)$/;"	f
-HtmlNodeNumChildren	htmltree.c	/^int HtmlNodeNumChildren(pNode)$/;"	f
-HtmlNodeParent	htmlmacros.h	162;"	d
-HtmlNodeProperties	htmlprop.c	/^HtmlNodeProperties(interp, pValues)$/;"	f
-HtmlNodeReplacement	html.h	/^struct HtmlNodeReplacement {$/;"	s
-HtmlNodeReplacement	html.h	/^typedef struct HtmlNodeReplacement HtmlNodeReplacement;$/;"	t
-HtmlNodeRightSibling	htmltree.c	/^HtmlNode *HtmlNodeRightSibling(pNode)$/;"	f
-HtmlNodeScrollbarDoCallback	htmltree.c	/^int HtmlNodeScrollbarDoCallback(pTree, pNode)$/;"	f
-HtmlNodeScrollbars	html.h	/^struct HtmlNodeScrollbars {$/;"	s
-HtmlNodeScrollbars	html.h	/^typedef struct HtmlNodeScrollbars HtmlNodeScrollbars;$/;"	t
-HtmlNodeStack	html.h	/^struct HtmlNodeStack {$/;"	s
-HtmlNodeStack	html.h	/^typedef struct HtmlNodeStack HtmlNodeStack;$/;"	t
-HtmlNodeTagName	htmltree.c	/^CONST char * HtmlNodeTagName(pNode)$/;"	f
-HtmlNodeTagType	htmltree.c	/^Html_u8 HtmlNodeTagType(pNode)$/;"	f
-HtmlOptions	html.h	/^struct HtmlOptions {$/;"	s
-HtmlOptions	html.h	/^typedef struct HtmlOptions HtmlOptions;$/;"	t
-HtmlParseFragment	htmltree.c	/^HtmlParseFragment(pTree, zHtml)$/;"	f
-HtmlPcdataContent	htmlparse.c	/^HtmlPcdataContent(pTree, pNode, tag)$/;"	f	file:
-HtmlPropertyCache	html.h	/^typedef struct HtmlPropertyCache HtmlPropertyCache;$/;"	t
-HtmlPropertyToString	htmlprop.c	/^HtmlPropertyToString(pProp, pzFree)$/;"	f
-HtmlRealloc	html.h	49;"	d
-HtmlRealloc	html.h	53;"	d
-HtmlResolveUri	html.h	/^Tcl_ObjCmdProc HtmlResolveUri;$/;"	v
-HtmlRestackNodes	htmlstyle.c	/^HtmlRestackNodes(pTree)$/;"	f
-HtmlSearchCache	csssearch.c	/^struct HtmlSearchCache {$/;"	s	file:
-HtmlSearchCache	html.h	/^typedef struct HtmlSearchCache HtmlSearchCache;$/;"	t
-HtmlSequenceNodes	htmltree.c	/^HtmlSequenceNodes(pTree)$/;"	f
-HtmlStyleApply	htmlstyle.c	/^HtmlStyleApply(pTree, pNode)$/;"	f
-HtmlStyleParse	css.c	/^HtmlStyleParse(pTree, interp, pStyleText, pId, pImportCmd, pUrlCmd)$/;"	f
-HtmlStyleSyntaxErrs	html.h	/^Tcl_ObjCmdProc HtmlStyleSyntaxErrs;$/;"	v
-HtmlStyleSyntaxErrs	htmlstyle.c	/^HtmlStyleSyntaxErrs(clientData, interp, objc, objv)$/;"	f
-HtmlTableCellContent	htmlparse.c	/^HtmlTableCellContent(pTree, pNode, tag)$/;"	f	file:
-HtmlTableContent	htmlparse.c	/^HtmlTableContent(pTree, pNode, tag)$/;"	f	file:
-HtmlTableLayout	htmltable.c	/^HtmlTableLayout(pLayout, pBox, pNode)$/;"	f
-HtmlTableRowContent	htmlparse.c	/^HtmlTableRowContent(pTree, pNode, tag)$/;"	f	file:
-HtmlTagAddRemoveCmd	htmltext.c	/^HtmlTagAddRemoveCmd(clientData, interp, objc, objv, isAdd)$/;"	f
-HtmlTagCleanupNode	htmltext.c	/^HtmlTagCleanupNode(pTextNode)$/;"	f
-HtmlTagCleanupTree	htmltext.c	/^HtmlTagCleanupTree(pTree)$/;"	f
-HtmlTagConfigureCmd	html.h	/^Tcl_ObjCmdProc HtmlTagConfigureCmd;$/;"	v
-HtmlTagConfigureCmd	htmltext.c	/^HtmlTagConfigureCmd(clientData, interp, objc, objv)$/;"	f
-HtmlTagDeleteCmd	html.h	/^Tcl_ObjCmdProc HtmlTagDeleteCmd;$/;"	v
-HtmlTagDeleteCmd	htmltext.c	/^HtmlTagDeleteCmd(clientData, interp, objc, objv)$/;"	f
-HtmlTaggedRegion	html.h	/^struct HtmlTaggedRegion {$/;"	s
-HtmlTaggedRegion	html.h	/^typedef struct HtmlTaggedRegion HtmlTaggedRegion;$/;"	t
-HtmlText	html.h	/^typedef struct HtmlText HtmlText;$/;"	t
-HtmlText	htmltext.c	/^struct HtmlText {$/;"	s	file:
-HtmlTextBboxCmd	html.h	/^Tcl_ObjCmdProc HtmlTextBboxCmd;$/;"	v
-HtmlTextBboxCmd	htmltext.c	/^HtmlTextBboxCmd(clientData, interp, objc, objv)$/;"	f
-HtmlTextFree	htmltext.c	/^HtmlTextFree(p)$/;"	f
-HtmlTextIndexCmd	html.h	/^Tcl_ObjCmdProc HtmlTextIndexCmd;$/;"	v
-HtmlTextIndexCmd	htmltext.c	/^HtmlTextIndexCmd(clientData, interp, objc, objv)$/;"	f
-HtmlTextInit	htmltext.c	/^struct HtmlTextInit {$/;"	s	file:
-HtmlTextInit	htmltext.c	/^typedef struct HtmlTextInit HtmlTextInit;$/;"	t	file:
-HtmlTextInvalidate	htmltext.c	/^HtmlTextInvalidate(pTree)$/;"	f
-HtmlTextIter	html.h	/^struct HtmlTextIter {$/;"	s
-HtmlTextIter	html.h	/^typedef struct HtmlTextIter HtmlTextIter;$/;"	t
-HtmlTextIterData	htmltext.c	/^HtmlTextIterData(pTextIter)$/;"	f
-HtmlTextIterFirst	htmltext.c	/^HtmlTextIterFirst(pTextNode, pTextIter)$/;"	f
-HtmlTextIterIsValid	htmltext.c	/^HtmlTextIterIsValid(pTextIter)$/;"	f
-HtmlTextIterLength	htmltext.c	/^HtmlTextIterLength(pTextIter)$/;"	f
-HtmlTextIterNext	htmltext.c	/^HtmlTextIterNext(pTextIter)$/;"	f
-HtmlTextIterType	htmltext.c	/^HtmlTextIterType(pTextIter)$/;"	f
-HtmlTextMapping	htmltext.c	/^struct HtmlTextMapping {$/;"	s	file:
-HtmlTextMapping	htmltext.c	/^typedef struct HtmlTextMapping HtmlTextMapping;$/;"	t	file:
-HtmlTextNew	htmltext.c	/^HtmlTextNew(n, z, isTrimEnd, isTrimStart)$/;"	f
-HtmlTextNode	html.h	/^struct HtmlTextNode {$/;"	s
-HtmlTextNode	html.h	/^typedef struct HtmlTextNode HtmlTextNode;$/;"	t
-HtmlTextOffsetCmd	html.h	/^Tcl_ObjCmdProc HtmlTextOffsetCmd;$/;"	v
-HtmlTextOffsetCmd	htmltext.c	/^HtmlTextOffsetCmd(clientData, interp, objc, objv)$/;"	f
-HtmlTextTextCmd	html.h	/^Tcl_ObjCmdProc HtmlTextTextCmd;$/;"	v
-HtmlTextTextCmd	htmltext.c	/^HtmlTextTextCmd(clientData, interp, objc, objv)$/;"	f
-HtmlTextToken	html.h	/^typedef struct HtmlTextToken HtmlTextToken;$/;"	t
-HtmlTextToken	htmltext.c	/^struct HtmlTextToken {$/;"	s	file:
-HtmlTimer	htmltcl.c	/^HtmlTimer(HtmlTree *pTree, CONST char *zSubject, CONST char *zFormat, ...) {$/;"	f
-HtmlTokenMap	html.h	/^struct HtmlTokenMap {$/;"	s
-HtmlTokenMap	html.h	/^typedef struct HtmlTokenMap HtmlTokenMap;$/;"	t
-HtmlTokenize	htmlparse.c	/^HtmlTokenize(pTree, zText, isFinal, xAddText, xAddElement, xAddClosing)$/;"	f
-HtmlTokenizerAppend	htmlparse.c	/^HtmlTokenizerAppend(pTree, zText, nText, isFinal)$/;"	f
-HtmlTranslateEscapes	htmltext.c	/^HtmlTranslateEscapes(z)$/;"	f
-HtmlTree	html.h	/^struct HtmlTree {$/;"	s
-HtmlTree	html.h	/^typedef struct HtmlTree HtmlTree;$/;"	t
-HtmlTreeAddClosingTag	htmltree.c	/^HtmlTreeAddClosingTag(pTree, eTag, iOffset)$/;"	f
-HtmlTreeAddElement	htmltree.c	/^HtmlTreeAddElement(pTree, eType, pAttr, iOffset)$/;"	f
-HtmlTreeAddText	htmltree.c	/^HtmlTreeAddText(pTree, pTextNode, iOffset)$/;"	f
-HtmlTreeClear	htmltree.c	/^int HtmlTreeClear(pTree)$/;"	f
-HtmlTreeCollapseWhitespace	html.h	/^Tcl_ObjCmdProc HtmlTreeCollapseWhitespace;$/;"	v
-HtmlTreeState	html.h	/^struct HtmlTreeState {$/;"	s
-HtmlTreeState	html.h	/^typedef struct HtmlTreeState HtmlTreeState;$/;"	t
-HtmlTypeToName	htmlparse.c	/^HtmlTypeToName(htmlPtr, eTag)$/;"	f
-HtmlUlContent	htmlparse.c	/^HtmlUlContent(pTree, pNode, tag)$/;"	f	file:
-HtmlWalkTree	htmltree.c	/^HtmlWalkTree(pTree, pNode, xCallback, clientData)$/;"	f
-HtmlWidgetBboxCmd	html.h	/^Tcl_ObjCmdProc HtmlWidgetBboxCmd;$/;"	v
-HtmlWidgetBboxCmd	htmldraw.c	/^HtmlWidgetBboxCmd(clientData, interp, objc, objv)$/;"	f
-HtmlWidgetBboxText	htmldraw.c	/^HtmlWidgetBboxText($/;"	f
-HtmlWidgetDamageText	htmldraw.c	/^HtmlWidgetDamageText(pTree, pNodeStart, iIndexStart, pNodeFin, iIndexFin)$/;"	f
-HtmlWidgetNodeBox	htmldraw.c	/^HtmlWidgetNodeBox(pTree, pNode, pX, pY, pW, pH)$/;"	f
-HtmlWidgetNodeTop	htmldraw.c	/^HtmlWidgetNodeTop(pTree, pNode)$/;"	f
-HtmlWidgetRepair	htmldraw.c	/^HtmlWidgetRepair(pTree, x, y, w, h, windowsrepair)$/;"	f
-HtmlWidgetSetViewport	htmldraw.c	/^HtmlWidgetSetViewport(pTree, scroll_x, scroll_y, force_redraw)$/;"	f
-HtmlWidgetTag	html.h	/^struct HtmlWidgetTag {$/;"	s
-HtmlWidgetTag	html.h	/^typedef struct HtmlWidgetTag HtmlWidgetTag;$/;"	t
-HtmlWriteContinue	htmlparse.c	/^HtmlWriteContinue(pTree)$/;"	f
-HtmlWriteText	htmlparse.c	/^HtmlWriteText(pTree, pText)$/;"	f
-HtmlWriteWait	htmlparse.c	/^HtmlWriteWait(pTree)$/;"	f
-HtmlXImageToImage	htmlimage.c	/^Tcl_Obj *HtmlXImageToImage(pTree, pXImage, w, h)$/;"	f
-Html_16	html.h	/^typedef short          Html_16;      \/* 16-bit signed integer *\/$/;"	t
-Html_32	html.h	/^typedef int            Html_32;      \/* 32-bit signed integer *\/$/;"	t
-Html_u16	html.h	/^typedef unsigned short Html_u16;     \/* 16-bit unsigned integer *\/$/;"	t
-Html_u8	html.h	/^typedef unsigned char  Html_u8;      \/* 8-bit unsigned integer *\/$/;"	t
-IMAGE	htmlprop.c	/^    ENUM, COLOR, LENGTH, IMAGE, BORDERWIDTH, CUSTOM$/;"	e	enum:PropertyValueType	file:
-INLINE_NEWLINE	htmlinline.c	153;"	d	file:
-INLINE_REPLACED	htmlinline.c	152;"	d	file:
-INLINE_TEXT	htmlinline.c	151;"	d	file:
-INSTRUMENTED	htmltcl.c	/^INSTRUMENTED(callbackHandler, HTML_INSTRUMENT_CALLBACK)$/;"	f
-INSTRUMENTED	htmltcl.c	/^INSTRUMENTED(runDynamicStyleEngine, HTML_INSTRUMENT_DYNAMIC_STYLE_ENGINE)$/;"	f
-INSTRUMENTED	htmltcl.c	/^INSTRUMENTED(runLayoutEngine, HTML_INSTRUMENT_LAYOUT_ENGINE)$/;"	f
-INSTRUMENTED	htmltcl.c	/^INSTRUMENTED(runStyleEngine, HTML_INSTRUMENT_STYLE_ENGINE)$/;"	f
-INSTRUMENTED	htmltcl.c	384;"	d	file:
-INSTRUMENTED	htmltcl.c	395;"	d	file:
-INTEGER	html.h	675;"	d
-ISALNUM	htmldecode.c	300;"	d	file:
-ISALPHA	htmlparse.c	44;"	d	file:
-ISCJK	htmltext.c	1762;"	d	file:
-ISNEWLINE	htmltext.c	39;"	d	file:
-ISSPACE	htmlparse.c	43;"	d	file:
-ISSPACE	htmltext.c	41;"	d	file:
-ISTAB	htmltext.c	40;"	d	file:
-IS_STACKING_CONTEXT	htmlstyle.c	228;"	d	file:
-InlineBorder	htmlinline.c	/^struct InlineBorder {$/;"	s	file:
-InlineBorder	htmllayout.h	/^typedef struct InlineBorder InlineBorder;$/;"	t
-InlineBox	htmlinline.c	/^struct InlineBox {$/;"	s	file:
-InlineBox	htmlinline.c	/^typedef struct InlineBox InlineBox;$/;"	t	file:
-InlineContext	htmlinline.c	/^struct InlineContext {$/;"	s	file:
-InlineContext	htmllayout.h	/^typedef struct InlineContext InlineContext;$/;"	t
-InlineMetrics	htmlinline.c	/^struct InlineMetrics {$/;"	s	file:
-InlineMetrics	htmlinline.c	/^typedef struct InlineMetrics InlineMetrics;$/;"	t	file:
-InstCommand	htmlutil.c	/^struct InstCommand {$/;"	s	file:
-InstCommand	htmlutil.c	/^typedef struct InstCommand InstCommand;$/;"	t	file:
-InstData	htmlutil.c	/^struct InstData {$/;"	s	file:
-InstData	htmlutil.c	/^typedef struct InstData InstData;$/;"	t	file:
-InstFrame	htmlutil.c	/^typedef struct InstFrame InstFrame;$/;"	t	file:
-InstGlobal	htmlutil.c	/^struct InstGlobal {$/;"	s	file:
-InstGlobal	htmlutil.c	/^typedef struct InstGlobal InstGlobal;$/;"	t	file:
-InstVector	htmlutil.c	/^struct InstVector {$/;"	s	file:
-InstVector	htmlutil.c	/^typedef struct InstVector InstVector;$/;"	t	file:
-LAYOUT_CACHE_N_STORE_COND	htmllayout.c	3262;"	d	file:
-LAYOUT_CACHE_N_USE_COND	htmllayout.c	3260;"	d	file:
-LENGTH	htmlprop.c	/^    ENUM, COLOR, LENGTH, IMAGE, BORDERWIDTH, CUSTOM$/;"	e	enum:PropertyValueType	file:
-LINEBOX_ALIGN_BOTTOM	htmlinline.c	92;"	d	file:
-LINEBOX_ALIGN_PARENT	htmlinline.c	91;"	d	file:
-LINEBOX_ALIGN_TOP	htmlinline.c	93;"	d	file:
-LINEBOX_CLOSEBORDERS	htmllayout.h	118;"	d
-LINEBOX_FORCEBOX	htmllayout.h	117;"	d
-LINEBOX_FORCELINE	htmllayout.h	116;"	d
-LOG	css.c	34;"	d	file:
-LOG	htmllayout.c	57;"	d	file:
-LOG	htmlprop.c	49;"	d	file:
-LOG	htmltable.c	42;"	d	file:
-LOG	htmltcl.c	49;"	d	file:
-L_MASK	htmltcl.c	1298;"	d	file:
-LayoutBboxQuery	htmldraw.c	/^struct LayoutBboxQuery {$/;"	s	file:
-LayoutBboxQuery	htmldraw.c	/^typedef struct LayoutBboxQuery LayoutBboxQuery;$/;"	t	file:
-LayoutCache	htmllayout.c	/^struct LayoutCache {$/;"	s	file:
-LayoutCache	htmllayout.c	/^typedef struct LayoutCache LayoutCache;$/;"	t	file:
-LayoutContext	htmllayout.h	/^struct LayoutContext {$/;"	s
-LayoutContext	htmllayout.h	/^typedef struct LayoutContext LayoutContext;$/;"	t
-MARKER_FIXED	htmldraw.c	318;"	d	file:
-MARKER_LINEBOX	htmldraw.c	319;"	d	file:
-MAX	html.h	673;"	d
-MAX	restrack.c	84;"	d	file:
-MAX_CLASSES	css.c	3816;"	d	file:
-MAX_CLASS_NAME	css.c	3817;"	d	file:
-MAX_NUM_ATTRIBUTES	htmltree.c	801;"	d	file:
-MAX_PIXELVAL	htmlprop.h	371;"	d
-MAX_RULES	css.c	4457;"	d	file:
-MEDIA_QUERY_MATCH	css.c	2203;"	d	file:
-MEDIA_QUERY_NOMATCH	css.c	2204;"	d	file:
-MEDIA_QUERY_NONE	css.c	2202;"	d	file:
-MIN	html.h	674;"	d
-MIN	restrack.c	85;"	d	file:
-MINMAX_TEST_MAX	htmllayout.h	42;"	d
-MINMAX_TEST_MIN	htmllayout.h	41;"	d
-MarginProperties	htmllayout.h	/^struct MarginProperties {$/;"	s
-MarginProperties	htmllayout.h	/^typedef struct MarginProperties MarginProperties;$/;"	t
-N_ATTR	css.c	3421;"	d	file:
-N_CHILD	css.c	3424;"	d	file:
-N_NUMCHILDREN	css.c	3423;"	d	file:
-N_PARENT	css.c	3422;"	d	file:
-N_TILE_PIXELS	htmlimage.c	838;"	d	file:
-N_TYPE	css.c	3420;"	d	file:
-NodeIndexQuery	htmldraw.c	/^struct NodeIndexQuery {$/;"	s	file:
-NodeIndexQuery	htmldraw.c	/^typedef struct NodeIndexQuery NodeIndexQuery;$/;"	t	file:
-NodeList	htmllayout.c	/^struct NodeList {$/;"	s	file:
-NodeList	htmllayout.h	/^typedef struct NodeList NodeList;$/;"	t
-NodeQuery	htmldraw.c	/^struct NodeQuery {$/;"	s	file:
-NodeQuery	htmldraw.c	/^typedef struct NodeQuery NodeQuery;$/;"	t	file:
-NormalFlow	htmllayout.c	/^struct NormalFlow {$/;"	s	file:
-NormalFlow	htmllayout.c	/^typedef struct NormalFlow NormalFlow;$/;"	t	file:
-NormalFlowCallback	htmllayout.c	/^struct NormalFlowCallback {$/;"	s	file:
-NormalFlowCallback	htmllayout.c	/^typedef struct NormalFlowCallback NormalFlowCallback;$/;"	t	file:
-OBJ	htmltcl.c	1319;"	d	file:
-OFFSET	htmlprop.c	2228;"	d	file:
-OFFSET	htmlprop.c	2260;"	d	file:
-OVERLAP_EXACT	htmltext.c	915;"	d	file:
-OVERLAP_FROM	htmltext.c	913;"	d	file:
-OVERLAP_NONE	htmltext.c	910;"	d	file:
-OVERLAP_SUB	htmltext.c	912;"	d	file:
-OVERLAP_SUPER	htmltext.c	911;"	d	file:
-OVERLAP_TO	htmltext.c	914;"	d	file:
-Outline	htmldraw.c	/^struct Outline {$/;"	s	file:
-Outline	htmldraw.c	/^typedef struct Outline Outline;$/;"	t	file:
-Overflow	htmldraw.c	/^struct Overflow {$/;"	s	file:
-Overflow	htmldraw.c	/^typedef struct Overflow Overflow;$/;"	t	file:
-OverflowAndPixmap	htmldraw.c	/^    struct OverflowAndPixmap {$/;"	s	struct:CanvasItemSorter	file:
-P	cssprop.tcl	/^proc P {args} {foreach a $args {lappend ::properties $a}}$/;"	p
-PIXELS	htmltcl.c	1304;"	d	file:
-PIXELS	htmltcl.c	1367;"	d	file:
-PIXELVAL	htmlprop.h	502;"	d
-PIXELVAL_AUTO	htmlprop.h	368;"	d
-PIXELVAL_NONE	htmlprop.h	369;"	d
-PIXELVAL_NORMAL	htmlprop.h	370;"	d
-PROPDEF	htmlprop.c	87;"	d	file:
-PROPDEFM	htmlprop.c	90;"	d	file:
-PROP_MASK_BACKGROUND_POSITION_X	htmlprop.h	350;"	d
-PROP_MASK_BACKGROUND_POSITION_Y	htmlprop.h	351;"	d
-PROP_MASK_BORDER_BOTTOM_WIDTH	htmlprop.h	347;"	d
-PROP_MASK_BORDER_LEFT_WIDTH	htmlprop.h	348;"	d
-PROP_MASK_BORDER_RIGHT_WIDTH	htmlprop.h	346;"	d
-PROP_MASK_BORDER_SPACING	htmlprop.h	352;"	d
-PROP_MASK_BORDER_TOP_WIDTH	htmlprop.h	345;"	d
-PROP_MASK_BOTTOM	htmlprop.h	355;"	d
-PROP_MASK_HEIGHT	htmlprop.h	333;"	d
-PROP_MASK_LEFT	htmlprop.h	357;"	d
-PROP_MASK_LETTER_SPACING	htmlprop.h	360;"	d
-PROP_MASK_LINE_HEIGHT	htmlprop.h	349;"	d
-PROP_MASK_MARGIN_BOTTOM	htmlprop.h	338;"	d
-PROP_MASK_MARGIN_LEFT	htmlprop.h	339;"	d
-PROP_MASK_MARGIN_RIGHT	htmlprop.h	337;"	d
-PROP_MASK_MARGIN_TOP	htmlprop.h	336;"	d
-PROP_MASK_MAX_HEIGHT	htmlprop.h	335;"	d
-PROP_MASK_MAX_WIDTH	htmlprop.h	332;"	d
-PROP_MASK_MIN_HEIGHT	htmlprop.h	334;"	d
-PROP_MASK_MIN_WIDTH	htmlprop.h	331;"	d
-PROP_MASK_OUTLINE_WIDTH	htmlprop.h	353;"	d
-PROP_MASK_PADDING_BOTTOM	htmlprop.h	342;"	d
-PROP_MASK_PADDING_LEFT	htmlprop.h	343;"	d
-PROP_MASK_PADDING_RIGHT	htmlprop.h	341;"	d
-PROP_MASK_PADDING_TOP	htmlprop.h	340;"	d
-PROP_MASK_RIGHT	htmlprop.h	356;"	d
-PROP_MASK_TEXT_INDENT	htmlprop.h	358;"	d
-PROP_MASK_TOP	htmlprop.h	354;"	d
-PROP_MASK_VERTICAL_ALIGN	htmlprop.h	344;"	d
-PROP_MASK_WIDTH	htmlprop.h	330;"	d
-PROP_MASK_WORD_SPACING	htmlprop.h	359;"	d
-PaintNodesQuery	htmldraw.c	/^struct PaintNodesQuery {$/;"	s	file:
-PaintNodesQuery	htmldraw.c	/^typedef struct PaintNodesQuery PaintNodesQuery;$/;"	t	file:
-PropertyDef	htmlprop.c	/^struct PropertyDef {$/;"	s	file:
-PropertyDef	htmlprop.c	/^typedef struct PropertyDef PropertyDef;$/;"	t	file:
-PropertyValueType	htmlprop.c	/^enum PropertyValueType {$/;"	g	file:
-RES_ALLOC	restrack.c	87;"	d	file:
-RES_DEBUG	restrack.c	67;"	d	file:
-RES_GC	restrack.c	89;"	d	file:
-RES_OBJREF	restrack.c	88;"	d	file:
-RES_PIXMAP	restrack.c	90;"	d	file:
-RES_XCOLOR	restrack.c	91;"	d	file:
-ResAlloc	restrack.c	/^ResAlloc(v1, v2)$/;"	f	file:
-ResDump	restrack.c	/^ResDump()$/;"	f	file:
-ResFree	restrack.c	/^ResFree(v1, v2)$/;"	f	file:
-ResRecord	restrack.c	/^struct ResRecord {$/;"	s	file:
-ResRecord	restrack.c	/^typedef struct ResRecord ResRecord;$/;"	t	file:
-RowCallback	htmltable.c	/^typedef int (RowCallback)(HtmlNode *, int, void *);$/;"	t	file:
-RowIterateContext	htmltable.c	/^struct RowIterateContext {$/;"	s	file:
-RowIterateContext	htmltable.c	/^typedef struct RowIterateContext RowIterateContext;$/;"	t	file:
-Rt_Alloc	restrack.c	/^Rt_Alloc(zTopic, n)$/;"	f
-Rt_AllocCommand	html.h	/^Tcl_ObjCmdProc Rt_AllocCommand;$/;"	v
-Rt_AllocCommand	restrack.c	/^Rt_AllocCommand(clientData, interp, objc, objv)$/;"	f
-Rt_AllocCommand	restrack.h	/^Tcl_ObjCmdProc Rt_AllocCommand;$/;"	v
-Rt_Free	restrack.c	/^Rt_Free(p)$/;"	f
-Rt_Realloc	restrack.c	/^Rt_Realloc(zTopic, p, n)$/;"	f
-S	cssprop.tcl	/^proc S {args} {foreach a $args {lappend ::shortcut_properties $a}}$/;"	p
-SCROLLBAR_WIDTH	htmllayout.c	698;"	d	file:
-SEARCH_MODE_ALL	csssearch.c	26;"	d	file:
-SEARCH_MODE_INDEX	csssearch.c	27;"	d	file:
-SEARCH_MODE_LENGTH	csssearch.c	28;"	d	file:
-SEEN_BLOCK	htmltext.c	1282;"	d	file:
-SEEN_SPACE	htmltext.c	1281;"	d	file:
-SEEN_TEXT	htmltext.c	1280;"	d	file:
-STACK_AUTO	htmlstyle.c	117;"	d	file:
-STACK_BLOCK	htmlstyle.c	180;"	d	file:
-STACK_CONTEXT	htmlstyle.c	118;"	d	file:
-STACK_FLOAT	htmlstyle.c	116;"	d	file:
-STACK_INLINE	htmlstyle.c	181;"	d	file:
-STACK_NONE	htmlstyle.c	115;"	d	file:
-STACK_STACKING	htmlstyle.c	179;"	d	file:
-START_LOG	htmlinline.c	188;"	d	file:
-STRING	htmltcl.c	1310;"	d	file:
-STRING	htmltcl.c	1368;"	d	file:
-SWAPINT	htmldraw.c	2307;"	d	file:
-SWPROC_ARG	swproc.h	6;"	d
-SWPROC_END	swproc.h	5;"	d
-SWPROC_OPT	swproc.h	7;"	d
-SWPROC_SWITCH	swproc.h	8;"	d
-SZMASKDEF	htmlprop.c	191;"	d	file:
-SZ_AUTO	htmlprop.c	184;"	d	file:
-SZ_INHERIT	htmlprop.c	185;"	d	file:
-SZ_NEGATIVE	htmlprop.c	188;"	d	file:
-SZ_NONE	htmlprop.c	186;"	d	file:
-SZ_NORMAL	htmlprop.c	189;"	d	file:
-SZ_PERCENT	htmlprop.c	187;"	d	file:
-S_MASK	htmltcl.c	1296;"	d	file:
-SafeCheck	htmltcl.c	51;"	d	file:
-ScrollToQuery	htmldraw.c	/^struct ScrollToQuery {$/;"	s	file:
-ScrollToQuery	htmldraw.c	/^typedef struct ScrollToQuery ScrollToQuery;$/;"	t	file:
-SizemaskDef	htmlprop.c	/^struct SizemaskDef {$/;"	s	file:
-StackCompare	htmlstyle.c	/^struct StackCompare {$/;"	s	file:
-StackCompare	htmlstyle.c	/^typedef struct StackCompare StackCompare;$/;"	t	file:
-SubCmd	htmltcl.c	/^struct SubCmd {$/;"	s	file:
-SubCmd	htmltcl.c	/^typedef struct SubCmd SubCmd;$/;"	t	file:
-SwprocCleanup	swproc.c	/^SwprocCleanup(apObj, nObj)$/;"	f
-SwprocConf	swproc.h	/^struct SwprocConf {$/;"	s
-SwprocConf	swproc.h	/^typedef struct SwprocConf SwprocConf;$/;"	t
-SwprocInit	swproc.c	/^int SwprocInit(interp)$/;"	f
-SwprocRt	swproc.c	/^SwprocRt(interp, objc, objv, aConf, apObj)$/;"	f
-TAG_CLOSE	html.h	176;"	d
-TAG_OK	html.h	178;"	d
-TAG_PARENT	html.h	177;"	d
-TAG_TO_TABLELEVEL	htmltree.c	66;"	d	file:
-TK_LOCAL_APPINIT	main.c	82;"	d	file:
-TO_STRING_OBJ	htmldecode.c	627;"	d	file:
-TRACE_PARSER_CALLS	css.c	84;"	d	file:
-TRACE_PROPERTY_PARSE	css.c	86;"	d	file:
-TRACE_STYLE_APPLICATION	css.c	85;"	d	file:
-TableCell	htmltable.c	/^struct TableCell {$/;"	s	file:
-TableCell	htmltable.c	/^typedef struct TableCell TableCell;$/;"	t	file:
-TableData	htmltable.c	/^struct TableData {$/;"	s	file:
-TableData	htmltable.c	/^typedef struct TableData TableData;$/;"	t	file:
-TagDeleteContext	htmltext.c	/^struct TagDeleteContext {$/;"	s	file:
-TagDeleteContext	htmltext.c	/^typedef struct TagDeleteContext TagDeleteContext;$/;"	t	file:
-TagOpData	htmltext.c	/^struct TagOpData {$/;"	s	file:
-TagOpData	htmltext.c	/^typedef struct TagOpData TagOpData;$/;"	t	file:
-Tcl_AppInit	main.c	/^Tcl_AppInit(interp)$/;"	f
-Tkhtml_Init	htmltcl.c	/^DLL_EXPORT int Tkhtml_Init(interp)$/;"	f
-Tkhtml_SafeInit	htmltcl.c	/^DLL_EXPORT int Tkhtml_SafeInit(interp)$/;"	f
-ToLower	htmlparse.c	/^ToLower(z)$/;"	f	file:
-UNSCALED	htmlimage.c	238;"	d	file:
-USE_COMPOSITELESS_PHOTO_PUT_BLOCK	html.h	61;"	d
-USE_TCL_STUBS	main.c	42;"	d	file:
-USE_TK_STUBS	main.c	43;"	d	file:
-USE_XLIB_CLIPPING	htmldraw.c	85;"	d	file:
-Uri	htmldecode.c	/^struct Uri {$/;"	s	file:
-Uri	htmldecode.c	/^typedef struct Uri Uri;$/;"	t	file:
-VersionsToDefine	mkdefaultstyle.tcl	/^proc VersionsToDefine {glob define} {$/;"	p
-XCOLOR	htmltcl.c	1313;"	d	file:
-XCOLOR	htmltcl.c	1369;"	d	file:
-__CSSINT_H__	cssInt.h	40;"	d
-__CSS_H__	css.h	41;"	d
-__HTMLMACROS_H__	htmlmacros.h	44;"	d
-__HTMLPROP_H__	htmlprop.h	14;"	d
-__HTMLTREE_H__	html.h	37;"	d
-__HTML_LAYOUT_H	htmllayout.h	14;"	d
-__RESTRACK_H__	restrack.h	4;"	d
-__SWPROC_H__	swproc.h	3;"	d
-a	cssInt.h	/^    } *a;$/;"	m	struct:CssPropertySet
-a	html.h	/^    } a[1];$/;"	m	struct:HtmlAttributes
-aAllocationType	restrack.c	/^static Tcl_HashTable aAllocationType;$/;"	v	file:
-aAttributeHandler	html.h	/^    Tcl_HashTable aAttributeHandler;  \/* Attribute handler callbacks. *\/$/;"	m	struct:HtmlTree
-aByClass	cssInt.h	/^    Tcl_HashTable aByClass;    \/* Rule lists by class (string keys) *\/$/;"	m	struct:CssStyleSheet
-aById	cssInt.h	/^    Tcl_HashTable aById;       \/* Rule lists by id (string keys) *\/$/;"	m	struct:CssStyleSheet
-aByTag	cssInt.h	/^    Tcl_HashTable aByTag;      \/* Rule lists by tag (string keys) *\/$/;"	m	struct:CssStyleSheet
-aCache	csssearch.c	/^    Tcl_HashTable aCache;$/;"	m	struct:HtmlSearchCache	file:
-aCache	htmllayout.c	/^    LayoutCache aCache[3];$/;"	m	struct:HtmlLayoutCache	file:
-aCell	htmltable.c	/^    TableCell *aCell;$/;"	m	struct:TableData	file:
-aColor	html.h	/^    Tcl_HashTable aColor;$/;"	m	struct:HtmlTree
-aCommand	htmlutil.c	/^    InstCommand aCommand[HTML_INSTRUMENT_NUM_SYMS];$/;"	m	struct:InstGlobal	file:
-aDebugStoreCacheCond	htmllayout.c	/^static int aDebugStoreCacheCond[LAYOUT_CACHE_N_STORE_COND + 1];$/;"	v	file:
-aDebugUseCacheCond	htmllayout.c	/^static int aDebugUseCacheCond[LAYOUT_CACHE_N_USE_COND + 1];$/;"	v	file:
-aFontFamilies	html.h	/^    Tcl_HashTable aFontFamilies;$/;"	m	struct:HtmlTree
-aFontSizeTable	html.h	/^    int aFontSizeTable[7];$/;"	m	struct:HtmlTree
-aHash	htmlprop.h	/^    Tcl_HashTable aHash;$/;"	m	struct:HtmlFontCache
-aImage	htmlimage.c	/^    Tcl_HashTable aImage;            \/* Hash table of images by URL *\/$/;"	m	struct:HtmlImageServer	file:
-aInline	htmlinline.c	/^    InlineBox *aInline;     \/* Array of inline boxes. *\/$/;"	m	struct:InlineContext	file:
-aLevel	htmldraw.c	/^    CanvasItemSorterLevel *aLevel;      \/* Array of levels *\/  $/;"	m	struct:CanvasItemSorter	file:
-aMalloc	restrack.c	/^static Tcl_HashTable aMalloc;$/;"	v	file:
-aMaxWidth	htmltable.c	/^    int *aMaxWidth;          \/* Maximum content width of each column *\/$/;"	m	struct:TableData	file:
-aMinWidth	htmltable.c	/^    int *aMinWidth;          \/* Minimum content width of each column *\/$/;"	m	struct:TableData	file:
-aNodeHandler	html.h	/^    Tcl_HashTable aNodeHandler;       \/* Node handler callbacks. *\/$/;"	m	struct:HtmlTree
-aOrphan	html.h	/^    Tcl_HashTable aOrphan;          \/* Orphan nodes (see [$html fragment]) *\/$/;"	m	struct:HtmlTree
-aOutstanding	restrack.c	/^static Tcl_HashTable aOutstanding;$/;"	v	file:
-aOverflowAndPixmap	htmldraw.c	/^    } *aOverflowAndPixmap;$/;"	m	struct:CanvasItemSorter	file:
-aParseHandler	html.h	/^    Tcl_HashTable aParseHandler;      \/* Parse handler callbacks. *\/$/;"	m	struct:HtmlTree
-aReqWidth	htmltable.c	/^    CellReqWidth *aReqWidth;       \/* Widths requested via CSS *\/$/;"	m	struct:TableData	file:
-aResCounts	restrack.c	/^static int aResCounts[] = {0, 0, 0, 0, 0};$/;"	v	file:
-aResNames	restrack.c	/^static const char *aResNames[] = {$/;"	v	file:
-aRowSpan	htmltable.c	/^    int *aRowSpan;$/;"	m	struct:RowIterateContext	file:
-aScriptHandler	html.h	/^    Tcl_HashTable aScriptHandler;     \/* Script handler callbacks. *\/$/;"	m	struct:HtmlTree
-aSingleReqWidth	htmltable.c	/^    CellReqWidth *aSingleReqWidth; \/* Widths requested by single span cells *\/$/;"	m	struct:TableData	file:
-aSlot	htmldraw.c	/^    CanvasItemSorterSlot *aSlot;     \/* Array of slots to store items *\/$/;"	m	struct:CanvasItemSorterLevel	file:
-aStack	restrack.c	/^    int **aStack;        \/* Array of stored stack-dumps *\/$/;"	m	struct:ResRecord	file:
-aTag	html.h	/^    Tcl_HashTable aTag;$/;"	m	struct:HtmlTree
-aToken	html.h	/^    HtmlTextToken *aToken;$/;"	m	struct:HtmlTextNode
-aValues	html.h	/^    Tcl_HashTable aValues;$/;"	m	struct:HtmlTree
-aVector	htmlutil.c	/^    Tcl_HashTable aVector;$/;"	m	struct:InstGlobal	file:
-aWidth	htmltable.c	/^    int *aWidth;             \/* Actual widths of each column (calculated) *\/$/;"	m	struct:TableData	file:
-aY	htmltable.c	/^    int *aY;                 \/* Top y-coord for each row+1, wrt table box *\/$/;"	m	struct:TableData	file:
-acMsChar	htmltext.c	/^static char acMsChar[] = {$/;"	v	file:
-addStackingInfo	htmlstyle.c	/^addStackingInfo(pTree, pElem)$/;"	f	file:
-addTextMapping	htmltext.c	/^addTextMapping(pText, pTextNode, iNodeIndex, iStrIndex)$/;"	f	file:
-allocCaseInsensitiveEntry	htmlhash.c	/^allocCaseInsensitiveEntry(tablePtr, keyPtr)$/;"	f	file:
-allocCmd	htmltcl.c	/^allocCmd(clientData, interp, objc, objv)$/;"	f	file:
-allocFontEntry	htmlhash.c	/^allocFontEntry(tablePtr, keyPtr)$/;"	f	file:
-allocValuesEntry	htmlhash.c	/^allocValuesEntry(tablePtr, keyPtr)$/;"	f	file:
-allocateCanvasItem	htmldraw.c	/^allocateCanvasItem()$/;"	f	file:
-allocateNewFont	htmlprop.c	/^allocateNewFont(clientData)$/;"	f	file:
-apChildren	html.h	/^    HtmlNode **apChildren;         \/* Array of pointers to children nodes *\/$/;"	m	struct:HtmlElementNode
-apEscHash	htmltext.c	/^static struct sgEsc *apEscHash[ESC_HASH_SIZE];$/;"	v	file:
-apMap	htmlparse.c	/^static HtmlTokenMap *apMap[HTML_MARKUP_HASH_SIZE];$/;"	v	file:
-apNode	csssearch.c	/^    HtmlNode **apNode;$/;"	m	struct:CssCachedSearch	file:
-apNode	htmldraw.c	/^    HtmlNode **apNode;$/;"	m	struct:NodeQuery	file:
-apRule	cssInt.h	/^    CssRule **apRule;$/;"	m	struct:CssProperties
-apXtraSelector	cssInt.h	/^    CssSelector **apXtraSelector;   \/* Selectors also waiting for prop set. *\/$/;"	m	struct:CssParse
-appendVerticalMarginsToObj	htmllayout.c	/^appendVerticalMarginsToObj(pObj, pNormal)$/;"	f	file:
-applyRule	css.c	/^applyRule(pTree, pNode, pRule, aPropDone, pzIfMatch, pCreator)$/;"	f	file:
-attrTest	css.c	/^static int attrTest(eType, zString, zAttr)$/;"	f	file:
-availablewidth	htmltable.c	/^    int availablewidth;      \/* Width available between margins for table *\/$/;"	m	struct:TableData	file:
-background	html.h	/^    XColor *background;        \/* Background color to use for tagged regions *\/$/;"	m	struct:HtmlWidgetTag
-bboxCb	htmldraw.c	/^bboxCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-bboxCmd	htmltcl.c	/^bboxCmd(clientData, interp, objc, objv)$/;"	f	file:
-blockMinMaxWidth	htmllayout.c	/^blockMinMaxWidth(pLayout, pNode, pMin, pMax)$/;"	f
-border	htmlprop.h	/^    HtmlFourSides border;             \/* 'border-width'   (pixels)            *\/$/;"	m	struct:HtmlComputedValues
-border_spacing	htmltable.c	/^    int border_spacing;      \/* Pixel value of 'border-spacing' property *\/$/;"	m	struct:TableData	file:
-bottom	html.h	/^    int bottom;$/;"	m	struct:HtmlCanvas
-bottom	htmldraw.c	/^    int bottom;$/;"	m	struct:LayoutBboxQuery	file:
-bottom	htmldraw.c	/^    int bottom;$/;"	m	struct:PaintNodesQuery	file:
-bottomAuto	htmllayout.h	/^    int bottomAuto;$/;"	m	struct:MarginProperties
-box	htmldraw.c	/^        CanvasBox    box;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-box	htmlinline.c	/^  BoxProperties box;$/;"	m	struct:InlineBorder	file:
-box	htmltable.c	/^    BoxContext box;$/;"	m	struct:TableCell	file:
-cBackgroundColor	htmlprop.h	/^    HtmlColor *cBackgroundColor;      \/* 'background-color' *\/$/;"	m	struct:HtmlComputedValues
-cBorderBottomColor	htmlprop.h	/^    HtmlColor *cBorderBottomColor;    \/* 'border-bottom-color' *\/$/;"	m	struct:HtmlComputedValues
-cBorderLeftColor	htmlprop.h	/^    HtmlColor *cBorderLeftColor;      \/* 'border-left-color' *\/$/;"	m	struct:HtmlComputedValues
-cBorderRightColor	htmlprop.h	/^    HtmlColor *cBorderRightColor;     \/* 'border-right-color' *\/$/;"	m	struct:HtmlComputedValues
-cBorderTopColor	htmlprop.h	/^    HtmlColor *cBorderTopColor;       \/* 'border-top-color' *\/$/;"	m	struct:HtmlComputedValues
-cColor	htmlprop.h	/^    HtmlColor *cColor;                \/* 'color' *\/$/;"	m	struct:HtmlComputedValues
-cOutlineColor	htmlprop.h	/^    HtmlColor *cOutlineColor;         \/* 'outline-color' *\/$/;"	m	struct:HtmlComputedValues
-calculateLineBoxHeight	htmlinline.c	/^calculateLineBoxHeight(pContext, nBox, hasText, piTop, piBottom)$/;"	f	file:
-calculateLineBoxWidth	htmlinline.c	/^calculateLineBoxWidth(p, flags, iReqWidth, piWidth, pnBox, pHasText)$/;"	f	file:
-callSubCmd	htmltcl.c	/^callSubCmd(aSub, iIdx, clientData, interp, objc, objv)$/;"	f	file:
-canvas	html.h	/^    HtmlCanvas canvas;              \/* Canvas to render into *\/$/;"	m	struct:HtmlTree
-canvas	htmlinline.c	/^  HtmlCanvas canvas;          \/* Canvas containing box content. *\/$/;"	m	struct:InlineBox	file:
-canvas	htmllayout.c	/^    HtmlCanvas canvas;$/;"	m	struct:LayoutCache	file:
-cb	html.h	/^    HtmlCallback cb;                \/* See structure definition comments *\/$/;"	m	struct:HtmlTree
-cellIterate	htmltable.c	/^cellIterate(pTree, pNode, p)$/;"	f	file:
-cgetCmd	htmltcl.c	/^static int cgetCmd(clientData, interp, objc, objv)$/;"	f	file:
-checkDynamicCb	cssdynamic.c	/^checkDynamicCb(pTree, pNode, clientData)$/;"	f	file:
-checkRestylePointCb	htmltcl.c	/^checkRestylePointCb(pTree, pNode, clientData)$/;"	f	file:
-checkStackSort	htmlstyle.c	/^checkStackSort(pTree, aStack, nStack)$/;"	f	file:
-checkStackSort	htmlstyle.c	375;"	d	file:
-cleanPath	htmldecode.c	/^cleanPath(zPath)$/;"	f	file:
-cleanupHandlerTable	htmltcl.c	/^cleanupHandlerTable(pHash)$/;"	f	file:
-clearClippingRegion	htmldraw.c	/^clearClippingRegion(pDisplay, gc)$/;"	f	file:
-clearReplacement	htmltree.c	/^clearReplacement(pTree, pElem)$/;"	f	file:
-clientData	htmllayout.c	/^    ClientData clientData;$/;"	m	struct:NormalFlowCallback	file:
-clientData	htmltable.c	/^    ClientData clientData;        \/* Client data for the callbacks *\/$/;"	m	struct:RowIterateContext	file:
-clipRectangle	htmldraw.c	/^clipRectangle(pX, pY, pW, pH, x2, y2, w2, h2)$/;"	f	file:
-clipped	html.h	/^    int clipped;                  \/* Boolean. If true, do not display *\/$/;"	m	struct:HtmlNodeReplacement
-closest_x	htmldraw.c	/^    int closest_x;$/;"	m	struct:NodeIndexQuery	file:
-cmd	html.h	/^    Tcl_Command cmd;           \/* Widget command *\/$/;"	m	struct:HtmlTree
-colorFromNode	htmldraw.c	/^colorFromNode(pNode)$/;"	f	file:
-colspan	htmltable.c	/^    int colspan;              \/* Number of columns spanned by cell (often 1) *\/$/;"	m	struct:TableCell	file:
-combinePath	htmldecode.c	/^combinePath(zOne, zTwo, zOut)$/;"	f	file:
-compareCaseInsensitiveKey	htmlhash.c	/^compareCaseInsensitiveKey(keyPtr, hPtr)$/;"	f	file:
-compareFontKey	htmlhash.c	/^compareFontKey(keyPtr, hPtr)$/;"	f	file:
-compareValuesKey	htmlhash.c	/^compareValuesKey(keyPtr, hPtr)$/;"	f	file:
-configureCmd	htmltcl.c	/^configureCmd(clientData, interp, objc, objv)$/;"	f	file:
-considerMinMaxHeight	htmllayout.c	/^considerMinMaxHeight(pNode, iContaining, piHeight)$/;"	f	file:
-considerMinMaxWidth	htmllayout.c	/^considerMinMaxWidth(pNode, iContaining, piWidth)$/;"	f	file:
-constantToString	css.c	/^static const char *constantToString(int c){$/;"	f	file:
-createScrollbars	htmllayout.c	/^createScrollbars(pTree, pNode, iWidth, iHeight, iHorizontal, iVertical)$/;"	f	file:
-cssGetToken	css.c	/^cssGetToken(z, n, pLen)$/;"	f	file:
-cssParse	css.c	/^cssParse(pTree, n, z, isStyle, origin, pStyleId, pImportCmd, pUrlCmd, ppStyle)$/;"	f	file:
-cssParseBody	css.c	/^static void cssParseBody(pParse, p, z, n)$/;"	f	file:
-cssParseMediaQuery	css.c	/^static int cssParseMediaQuery(pParse, p, z, n, pRes)$/;"	f	file:
-cssSearchCb	csssearch.c	/^cssSearchCb(pTree, pNode, clientData)$/;"	f	file:
-cssSelectorPropertySetPair	css.c	/^cssSelectorPropertySetPair(pParse, pSelector, pPropertySet, freeWhat)$/;"	f	file:
-customdef	htmlprop.c	/^} customdef[] = {$/;"	v	file:
-damageSlot	htmldraw.c	/^static void damageSlot(pTree, pSlot, pX1, pY1, pX2, pY2, isOld)$/;"	f	file:
-decrementColorRef	htmlprop.c	/^decrementColorRef(pTree, pColor)$/;"	f	file:
-defaultstyle	html.h	/^    Tcl_Obj *defaultstyle;$/;"	m	struct:HtmlOptions
-delayCallbackHandler	htmltcl.c	/^delayCallbackHandler(clientData)$/;"	f	file:
-delayCmd	htmltcl.c	/^delayCmd(clientData, interp, objc, objv)$/;"	f	file:
-delayToken	html.h	/^    Tcl_TimerToken delayToken;$/;"	m	struct:HtmlTree
-deleteWidget	htmltcl.c	/^deleteWidget(clientData)$/;"	f	file:
-dequote	css.c	/^dequote(z)$/;"	f	file:
-doAttributeHandler	htmltree.c	/^doAttributeHandler(pTree, pNode, zAttr, zValue) $/;"	f	file:
-doConfigureCmd	htmllayout.c	/^doConfigureCmd(pTree, pElem, iContaining)$/;"	f	file:
-doHorizontalBlockAlign	htmllayout.c	/^doHorizontalBlockAlign(pLayout, pNode, pMargin, iSpareWidth)$/;"	f	file:
-doLoadDefaultStyle	htmltcl.c	/^doLoadDefaultStyle(pTree)$/;"	f	file:
-doParseHandler	htmltree.c	/^doParseHandler(pTree, eType, pNode, iOffset)$/;"	f	file:
-doScrollCallback	htmltcl.c	/^doScrollCallback(pTree)$/;"	f	file:
-doSingleScrollCallback	htmltcl.c	/^doSingleScrollCallback(interp, pScript, iOffScreen, iTotal, iPage)$/;"	f	file:
-doUrlCmd	css.c	/^doUrlCmd(pParse, zArg, nArg)$/;"	f	file:
-docwin	html.h	/^    Tk_Window docwin;          \/* Document window *\/$/;"	m	struct:HtmlTree
-docwinEventHandler	htmltcl.c	/^docwinEventHandler(clientData, pEvent)$/;"	f	file:
-drawAbsolute	htmllayout.c	/^drawAbsolute(pLayout, pBox, pStaticCanvas, x, y)$/;"	f	file:
-drawBox	htmldraw.c	/^drawBox(pQuery, pItem, pBox, drawable, x, y, w, h, xview, yview, flags)$/;"	f	file:
-drawImage	htmldraw.c	/^drawImage(pQuery, pI2, drawable, x, y, w, h)$/;"	f	file:
-drawLine	htmldraw.c	/^drawLine(pQuery, pItem, drawable, x, y, w, h)$/;"	f	file:
-drawReplacement	htmllayout.c	/^drawReplacement(pLayout, pBox, pNode)$/;"	f	file:
-drawReplacementContent	htmllayout.c	/^drawReplacementContent(pLayout, pBox, pNode)$/;"	f	file:
-drawScrollbars	htmldraw.c	/^drawScrollbars(pTree, pItem, origin_x, origin_y)$/;"	f	file:
-drawText	htmldraw.c	/^drawText(pQuery, pItem, drawable, x, y)$/;"	f	file:
-dumpColorTable	htmlprop.c	/^dumpColorTable(pTree)$/;"	f	file:
-eAlpha	htmlimage.c	/^    int eAlpha;                      \/* An ALPHA_CHANNEL_XXX value *\/$/;"	m	struct:HtmlImage2	file:
-eBackgroundAttachment	htmlprop.h	/^    unsigned char eBackgroundAttachment;  \/* 'background-attachment' *\/$/;"	m	struct:HtmlComputedValues
-eBackgroundRepeat	htmlprop.h	/^    unsigned char eBackgroundRepeat;      \/* 'background-repeat' *\/$/;"	m	struct:HtmlComputedValues
-eBorderBottomStyle	htmlprop.h	/^    unsigned char eBorderBottomStyle; \/* 'border-bottom-style' *\/$/;"	m	struct:HtmlComputedValues
-eBorderCollapse	htmlprop.h	/^    unsigned char eBorderCollapse;    \/* 'border-collapse' *\/$/;"	m	struct:HtmlComputedValues
-eBorderLeftStyle	htmlprop.h	/^    unsigned char eBorderLeftStyle;   \/* 'border-left-style' *\/$/;"	m	struct:HtmlComputedValues
-eBorderRightStyle	htmlprop.h	/^    unsigned char eBorderRightStyle;  \/* 'border-right-style' *\/$/;"	m	struct:HtmlComputedValues
-eBorderTopStyle	htmlprop.h	/^    unsigned char eBorderTopStyle;    \/* 'border-top-style' *\/$/;"	m	struct:HtmlComputedValues
-eCaptionSide	htmlprop.h	/^    unsigned char eCaptionSide;       \/* 'caption-side' *\/$/;"	m	struct:HtmlComputedValues
-eClear	htmlprop.h	/^    unsigned char eClear;             \/* 'clear' *\/$/;"	m	struct:HtmlComputedValues
-eCursor	htmlprop.h	/^    unsigned char eCursor;            \/* 'cursor' *\/$/;"	m	struct:HtmlComputedValues
-eDirection	htmlprop.h	/^    unsigned char eDirection;         \/* 'direction' *\/$/;"	m	struct:HtmlComputedValues
-eDisplay	htmlprop.h	/^    unsigned char eDisplay;           \/* 'display' *\/$/;"	m	struct:HtmlComputedValues
-eEmptyCells	htmlprop.h	/^    unsigned char eEmptyCells;        \/* 'empty-cells' *\/$/;"	m	struct:HtmlComputedValues
-eFloat	htmlprop.h	/^    unsigned char eFloat;             \/* 'float' *\/$/;"	m	struct:HtmlComputedValues
-eFontVariant	htmlprop.h	/^    unsigned char eFontVariant;       \/* 'font-variant' *\/$/;"	m	struct:HtmlComputedValues
-eLineboxAlign	htmlinline.c	/^  int eLineboxAlign;          \/* One of the LINEBOX_ALIGN_XXX values below *\/$/;"	m	struct:InlineBorder	file:
-eListStylePosition	htmlprop.h	/^    unsigned char eListStylePosition; \/* 'list-style-position' *\/$/;"	m	struct:HtmlComputedValues
-eListStyleType	htmlprop.h	/^    unsigned char eListStyleType;     \/* 'list-style-type' *\/$/;"	m	struct:HtmlComputedValues
-eOutlineStyle	htmlprop.h	/^    unsigned char eOutlineStyle;      \/* 'outline-style' *\/$/;"	m	struct:HtmlComputedValues
-eOverflow	htmlprop.h	/^    unsigned char eOverflow;          \/* 'overflow' *\/$/;"	m	struct:HtmlComputedValues
-ePosition	htmlprop.h	/^    unsigned char ePosition;          \/* 'position' *\/$/;"	m	struct:HtmlComputedValues
-eProp	cssInt.h	/^        int eProp;$/;"	m	struct:CssPropertySet::CssPropertySetItem
-eProp	htmlprop.c	/^    int eProp;$/;"	m	struct:PropertyDef	file:
-eProp	htmlprop.c	/^  int eProp;$/;"	m	struct:CustomDef	file:
-eProp	htmlprop.c	/^  int eProp;$/;"	m	struct:SizemaskDef	file:
-eSeenFrom	htmltext.c	/^    int eSeenFrom;          \/* True after pFrom has been traversed *\/$/;"	m	struct:TagOpData	file:
-eSelector	cssInt.h	/^    u8 eSelector;     \/* CSS_SELECTOR* or CSS_PSEUDO* value *\/$/;"	m	struct:CssSelector
-eStack	htmlstyle.c	/^    int eStack;$/;"	m	struct:StackCompare	file:
-eState	htmltext.c	/^    int eState;$/;"	m	struct:HtmlTextInit	file:
-eTableLayout	htmlprop.h	/^    unsigned char eTableLayout;       \/* 'table-layout' *\/$/;"	m	struct:HtmlComputedValues
-eTag	html.h	/^    Html_u8 eTag;                  \/* Tag type *\/$/;"	m	struct:HtmlNode
-eTextAlign	htmlinline.c	/^    int eTextAlign;         \/* One of TEXTALIGN_LEFT, TEXTALIGN_RIGHT etc. *\/$/;"	m	struct:InlineContext	file:
-eTextAlign	htmlprop.h	/^    unsigned char eTextAlign;         \/* 'text-align' *\/$/;"	m	struct:HtmlComputedValues
-eTextDecoration	htmlprop.h	/^    unsigned char eTextDecoration;    \/* 'text-decoration' *\/$/;"	m	struct:HtmlComputedValues
-eTextTransform	htmlprop.h	/^    unsigned char eTextTransform;     \/* 'text-transform' *\/$/;"	m	struct:HtmlComputedValues
-eType	css.h	/^    int eType;$/;"	m	struct:CssProperty
-eType	html.h	/^    int eType;              \/* Usage defined in htmlstyle.c *\/$/;"	m	struct:HtmlNodeStack
-eType	htmlinline.c	/^  int eType;                  \/* One of the INLINE_XXX values below *\/$/;"	m	struct:InlineBox	file:
-eType	htmlprop.c	/^    enum PropertyValueType eType;$/;"	m	struct:PropertyDef	file:
-eType	htmltable.c	/^    int eType;$/;"	m	struct:CellReqWidth	file:
-eType	htmltext.c	/^    unsigned char eType;$/;"	m	struct:HtmlTextToken	file:
-eType	swproc.h	/^  int eType;$/;"	m	struct:SwprocConf
-eUnicodeBidi	htmlprop.h	/^    unsigned char eUnicodeBidi;       \/* 'unicode-bidi' *\/$/;"	m	struct:HtmlComputedValues
-eVerticalAlign	htmlprop.h	/^    unsigned char eVerticalAlign;     \/* 'vertical-align' *\/$/;"	m	struct:HtmlComputedValues
-eVerticalAlignPercent	htmlprop.h	/^    int eVerticalAlignPercent;       \/* True if 'vertical-align' is a % *\/$/;"	m	struct:HtmlComputedValuesCreator
-eVisibility	htmlprop.h	/^    unsigned char eVisibility;        \/* 'visibility' *\/$/;"	m	struct:HtmlComputedValues
-eWhitespace	htmlinline.c	/^  int eWhitespace;$/;"	m	struct:InlineBox	file:
-eWhitespace	htmlprop.h	/^    unsigned char eWhitespace;        \/* 'white-space' *\/$/;"	m	struct:HtmlComputedValues
-eWriteState	html.h	/^    int eWriteState;                \/* One of the HTML_WRITE_XXX values *\/$/;"	m	struct:HtmlTree
-em_mask	htmlprop.h	/^    unsigned int em_mask;$/;"	m	struct:HtmlComputedValuesCreator
-em_pixels	htmlprop.h	/^    int em_pixels;         \/* Pixels per 'em' unit *\/$/;"	m	struct:HtmlFont
-endValid	htmlfloat.c	/^    int endValid;$/;"	m	struct:HtmlFloatList	file:
-esc_sequences	htmltext.c	/^static struct sgEsc esc_sequences[] = {$/;"	v	file:
-eventHandler	htmltcl.c	/^eventHandler(clientData, pEvent)$/;"	f	file:
-ex_mask	htmlprop.h	/^    unsigned int ex_mask;$/;"	m	struct:HtmlComputedValuesCreator
-ex_pixels	htmlprop.h	/^    int ex_pixels;         \/* Pixels per 'ex' unit *\/$/;"	m	struct:HtmlFont
-execInst	htmlutil.c	/^execInst(clientData, interp, objc, objv)$/;"	f	file:
-executeScript	htmlparse.c	/^executeScript(pTree, pCallback, pAttributes, zScript, nScript)$/;"	f	file:
-explicitCloseCount	htmltree.c	/^explicitCloseCount(pCurrent, eTag, pNClose)$/;"	f	file:
-fFont	htmldraw.c	/^    HtmlFont *fFont;         \/* Font used by this text item *\/$/;"	m	struct:CanvasText	file:
-fFont	htmlprop.h	/^    HtmlFont *fFont;$/;"	m	struct:HtmlComputedValues
-fVal	htmltable.c	/^        float fVal;        \/* For CELL_WIDTH_PERCENT *\/$/;"	m	union:CellReqWidth::<anonymous>	file:
-fill_quad	htmldraw.c	/^fill_quad(pQuery, win, d, xcolor, x1, y1, x2, y2, x3, y3, x4, y4)$/;"	f	file:
-fill_rectangle	htmldraw.c	/^fill_rectangle(win, d, xcolor, x, y, w, h)$/;"	f	file:
-findEndOfScript	htmlparse.c	/^findEndOfScript(eTag, z, pN)$/;"	f	file:
-findFlowNode	htmldraw.c	/^findFlowNode(pNode)$/;"	f	file:
-findFosterParent	htmltree.c	/^findFosterParent(pTree, ppTable)$/;"	f	file:
-findTagInNode	htmltext.c	/^findTagInNode(pTextNode, pTag, ppPtr)$/;"	f	file:
-finrow	htmltable.c	/^    int finrow;               \/* Index of row cell ends at *\/$/;"	m	struct:TableCell	file:
-fixNodeProperties	htmltable.c	/^fixNodeProperties(pData, pNode)$/;"	f	file:
-flags	html.h	/^    Html_u8 flags;                         \/* HTML_DYNAMIC_XXX flags *\/$/;"	m	struct:HtmlElementNode
-flags	html.h	/^    int flags;                  \/* Comb. of HTML_XXX bitmasks defined below *\/$/;"	m	struct:HtmlCallback
-flags	html.h	/^  Html_u8 flags;                  \/* Combination of HTMLTAG values *\/$/;"	m	struct:HtmlTokenMap
-flags	htmldraw.c	/^    int flags;               \/* Combination of CANVAS_BOX flags *\/$/;"	m	struct:CanvasBox	file:
-flags	htmldraw.c	/^    int flags;$/;"	m	struct:CanvasMarker	file:
-flags	htmllayout.c	/^    unsigned char flags;     \/* Mask indicating validity of aCache[] entries *\/$/;"	m	struct:HtmlLayoutCache	file:
-floatListMarginsNormal	htmlfloat.c	/^void floatListMarginsNormal(pList, y1, y2, pLeft, pRight)$/;"	f
-floatListPrint	htmlfloat.c	/^floatListPrint(pList)$/;"	f	file:
-fontFromNode	htmldraw.c	/^fontFromNode(pNode)$/;"	f	file:
-fontKey	htmlprop.h	/^    HtmlFontKey fontKey;$/;"	m	struct:HtmlComputedValuesCreator
-fontcache	html.h	/^    HtmlFontCache fontcache;$/;"	m	struct:HtmlTree
-fontscale	html.h	/^    double   fontscale;$/;"	m	struct:HtmlOptions
-fonttable	html.h	/^    Tcl_Obj *fonttable;$/;"	m	struct:HtmlOptions
-forceCmd	htmltcl.c	/^forceCmd(clientData, interp, objc, objv)$/;"	f	file:
-forcefontmetrics	html.h	/^    int      forcefontmetrics;$/;"	m	struct:HtmlOptions
-forcewidth	html.h	/^    int      forcewidth;$/;"	m	struct:HtmlOptions
-foreground	html.h	/^    XColor *foreground;        \/* Foreground color to use for tagged regions *\/$/;"	m	struct:HtmlWidgetTag
-fragmentAddClosingTag	htmltree.c	/^fragmentAddClosingTag(pTree, eType, iOffset)$/;"	f	file:
-fragmentAddElement	htmltree.c	/^fragmentAddElement(pTree, eType, pAttributes, iOffset)$/;"	f	file:
-fragmentAddText	htmltree.c	/^fragmentAddText(pTree, pTextNode, iOffset)$/;"	f	file:
-fragmentCmd	htmltcl.c	/^fragmentCmd(clientData, interp, objc, objv)$/;"	f	file:
-fragmentOrphan	htmltree.c	/^fragmentOrphan(pTree)$/;"	f	file:
-freeCanvasItem	htmldraw.c	/^freeCanvasItem(pTree, p)$/;"	f	file:
-freeCaseInsensitiveEntry	htmlhash.c	/^freeCaseInsensitiveEntry(hPtr)$/;"	f	file:
-freeInstCommand	htmlutil.c	/^freeInstCommand(clientData)$/;"	f	file:
-freeInstStruct	htmlutil.c	/^freeInstStruct(p)$/;"	f	file:
-freeMallocHash	restrack.c	/^freeMallocHash(p, nBytes) $/;"	f	file:
-freeNode	htmltree.c	/^freeNode(pTree, pNode)$/;"	f	file:
-freePropertySets	cssInt.h	/^    int freePropertySets;          \/* True to delete pPropertySet *\/$/;"	m	struct:CssRule
-freeRulesHash	css.c	/^freeRulesHash(pHash)$/;"	f	file:
-freeRulesList	css.c	/^freeRulesList(ppList)$/;"	f	file:
-freeSelector	cssInt.h	/^    int freeSelector;              \/* True to delete pSelector *\/$/;"	m	struct:CssRule
-freeTile	htmlimage.c	/^freeTile(pImage)$/;"	f	file:
-freeValuesEntry	htmlhash.c	/^freeValuesEntry(hPtr)$/;"	f	file:
-generateContentText	css.c	/^generateContentText(pTree, zContent)$/;"	f	file:
-generatedContent	css.c	/^generatedContent(pTree, pNode, pCssRule, ppNode)$/;"	f	file:
-generic	htmldraw.c	/^        } generic;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-geomRequestProc	htmltree.c	/^geomRequestProc(clientData, widget)$/;"	f	file:
-geomRequestProcCb	htmltree.c	/^geomRequestProcCb(clientData) $/;"	f	file:
-getHeight	htmllayout.c	/^getHeight(pNode, iHeight, iContainingHeight)$/;"	f
-getInheritPointer	htmlprop.c	/^getInheritPointer(p, pVar)$/;"	f	file:
-getNextFontFamily	css.c	/^getNextFontFamily(zList, nList, pzNext)$/;"	f	file:
-getOverlap	htmltext.c	/^getOverlap(pTagged, iFrom, iTo)$/;"	f	file:
-getPixmap	htmldraw.c	/^getPixmap(pTree, xcanvas, ycanvas, w, h, getwin)$/;"	f	file:
-getPropertyDef	htmlprop.c	/^static PropertyDef *getPropertyDef(int eProp){$/;"	f	file:
-getPropertyObj	htmlprop.c	/^getPropertyObj(pValues, eProp)$/;"	f	file:
-getPrototypeCreator	htmlprop.c	/^getPrototypeCreator(pTree, pMask, piCopyBytes)$/;"	f	file:
-getReqWidth	htmltable.c	/^getReqWidth(pNode, pReq)$/;"	f	file:
-getRomanIndex	htmllayout.c	/^getRomanIndex(zBuf, index, isUpper)$/;"	f	file:
-getScriptHandler	htmlparse.c	/^getScriptHandler(pTree, tag)$/;"	f	file:
-getWidgetTag	htmltext.c	/^getWidgetTag(pTree, zTag, pIsNew)$/;"	f	file:
-getWidth	htmllayout.c	/^getWidth(iWidthCalculated, iWidthContent) $/;"	f	file:
-getWidthProperty	htmllayout.c	/^getWidthProperty(pLayout, pComputed, iContaining) $/;"	f	file:
-getwin	htmldraw.c	/^    int getwin;$/;"	m	struct:GetPixmapQuery	file:
-h	html.h	/^  int h;$/;"	m	struct:HtmlDamage
-h	htmldraw.c	/^    int h;                    \/* Height of region *\/$/;"	m	struct:CanvasOverflow	file:
-h	htmldraw.c	/^    int h;                   \/* Height of box area *\/$/;"	m	struct:CanvasBox	file:
-h	htmldraw.c	/^    int h;                   \/* Height of image region *\/$/;"	m	struct:CanvasImage	file:
-h	htmldraw.c	/^    int h;                   \/* Height of region *\/$/;"	m	struct:Overflow	file:
-h	htmldraw.c	/^    int h;$/;"	m	struct:GetPixmapQuery	file:
-h	htmldraw.c	/^    int h;$/;"	m	struct:Outline	file:
-handlerCmd	htmltcl.c	/^handlerCmd(clientData, interp, objc, objv)$/;"	f	file:
-hashCaseInsensitiveKey	htmlhash.c	/^hashCaseInsensitiveKey(tablePtr, keyPtr)$/;"	f	file:
-hashFontKey	htmlhash.c	/^hashFontKey(tablePtr, keyPtr)$/;"	f	file:
-hashValuesKey	htmlhash.c	/^hashValuesKey(tablePtr, keyPtr)$/;"	f	file:
-hashstatsCmd	htmltcl.c	/^hashstatsCmd(clientData, interp, objc, objv)$/;"	f	file:
-heapdebugCmd	htmltcl.c	/^heapdebugCmd(clientData, interp, objc, objv)$/;"	f	file:
-height	html.h	/^    int      height;$/;"	m	struct:HtmlOptions
-height	htmlimage.c	/^    int height;                      \/* Height of HtmlImage2.image *\/$/;"	m	struct:HtmlImage2	file:
-height	htmllayout.h	/^    int height;            \/* UP: Generated box height. *\/$/;"	m	struct:BoxContext
-horizontal	html.h	/^    HtmlNodeReplacement horizontal;$/;"	m	struct:HtmlNodeScrollbars
-horizontal	htmldraw.c	/^    int horizontal;$/;"	m	struct:CanvasOrigin	file:
-hscrollbar	tkhtml.tcl	/^    proc hscrollbar {base node} {$/;"	p
-htmlByteOffsetCmd	htmltcl.c	/^htmlByteOffsetCmd(clientData, interp, objc, objv)$/;"	f	file:
-htmlCharOffsetCmd	htmltcl.c	/^htmlCharOffsetCmd(clientData, interp, objc, objv)$/;"	f	file:
-htmlDecodeCmd	htmltcl.c	/^htmlDecodeCmd(clientData, interp, objc, objv)$/;"	f	file:
-htmlEscapeCmd	htmltcl.c	/^htmlEscapeCmd(clientData, interp, objc, objv)$/;"	f	file:
-htmlUriCmd	htmltcl.c	/^htmlUriCmd(clientData, interp, objc, objv)$/;"	f	file:
-htmlVersionCmd	htmltcl.c	/^htmlVersionCmd(clientData, interp, objc, objv)$/;"	f	file:
-html_walk_tree_cb	html.h	/^typedef int (*html_walk_tree_cb)(HtmlTree*,HtmlNode*,ClientData);$/;"	t
-htmlstyleCmd	htmltcl.c	/^htmlstyleCmd(clientData, interp, objc, objv)$/;"	f	file:
-i2	htmldraw.c	/^        CanvasImage  i2;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-iBackgroundPositionX	htmlprop.h	/^    int iBackgroundPositionX;$/;"	m	struct:HtmlComputedValues
-iBackgroundPositionY	htmlprop.h	/^    int iBackgroundPositionY;$/;"	m	struct:HtmlComputedValues
-iBaseline	htmlinline.c	/^  int iBaseline;          \/* Distance to base-line *\/$/;"	m	struct:InlineMetrics	file:
-iBboxX	html.h	/^    int iBboxX; int iBboxY;$/;"	m	struct:HtmlNode
-iBboxX2	html.h	/^    int iBboxX2; int iBboxY2;$/;"	m	struct:HtmlNode
-iBboxY	html.h	/^    int iBboxX; int iBboxY;$/;"	m	struct:HtmlNode
-iBboxY2	html.h	/^    int iBboxX2; int iBboxY2;$/;"	m	struct:HtmlNode
-iBlockZ	html.h	/^    int iBlockZ;$/;"	m	struct:HtmlNodeStack
-iBorderSpacing	htmlprop.h	/^    int iBorderSpacing;               \/* 'border-spacing' (pixels)            *\/$/;"	m	struct:HtmlComputedValues
-iBottom	htmllayout.h	/^    int iBottom;      \/* Pixels of border + pixels of padding at bottom *\/$/;"	m	struct:BoxProperties
-iBottom	htmlprop.h	/^    int iBottom;$/;"	m	struct:HtmlFourSides
-iCanvasHeight	html.h	/^    int iCanvasHeight;              \/* Height of window for canvas *\/$/;"	m	struct:HtmlTree
-iCanvasWidth	html.h	/^    int iCanvasWidth;               \/* Width of window for canvas *\/$/;"	m	struct:HtmlTree
-iCanvasX	html.h	/^    int iCanvasX;                 \/* Current X canvas coordinate of window *\/$/;"	m	struct:HtmlNodeReplacement
-iCanvasY	html.h	/^    int iCanvasY;                 \/* Current Y canvas coordinate of window *\/$/;"	m	struct:HtmlNodeReplacement
-iClicks	htmlutil.c	/^    Tcl_WideInt iClicks;$/;"	m	struct:InstData	file:
-iCol	htmltable.c	/^    int iCol;           \/* The current col number (first row is 0) *\/$/;"	m	struct:RowIterateContext	file:
-iContaining	htmllayout.c	/^    int iContaining;$/;"	m	struct:LayoutCache	file:
-iContaining	htmllayout.h	/^    int iContaining;       \/* DOWN: Width of containing block. *\/$/;"	m	struct:BoxContext
-iContainingHeight	htmllayout.h	/^    int iContainingHeight; \/* DOWN: Height of containing block (may be AUTO). *\/$/;"	m	struct:BoxContext
-iDefault	htmlprop.c	/^    int iDefault;              \/* For LENGTH and BORDERWIDTH *\/$/;"	m	struct:PropertyDef	file:
-iFirst	htmltext.c	/^    int iFirst;$/;"	m	struct:TagOpData	file:
-iFloatLeft	htmllayout.c	/^    int iFloatLeft;$/;"	m	struct:LayoutCache	file:
-iFloatRight	htmllayout.c	/^    int iFloatRight;$/;"	m	struct:LayoutCache	file:
-iFontBottom	htmlinline.c	/^  int iFontBottom;        \/* Distance to bottom of font box *\/$/;"	m	struct:InlineMetrics	file:
-iFontSize	htmlprop.h	/^    int iFontSize;           \/* Font size in thousandths of points *\/$/;"	m	struct:HtmlFontKey
-iFontTop	htmlinline.c	/^  int iFontTop;           \/* Distance to top of font box *\/$/;"	m	struct:InlineMetrics	file:
-iFrom	html.h	/^    int iFrom;                 \/* Index the region starts at *\/$/;"	m	struct:HtmlTaggedRegion
-iFrom	htmltext.c	/^    int iFrom;$/;"	m	struct:TagOpData	file:
-iHeight	html.h	/^    int iHeight;                  \/* Current calculated pixel height of window*\/$/;"	m	struct:HtmlNodeReplacement
-iHeight	html.h	/^    int iHeight;               \/* Height of viewport *\/$/;"	m	struct:HtmlNodeScrollbars
-iHeight	htmldraw.c	/^    int iHeight;             \/* CSS determined height of widget *\/$/;"	m	struct:CanvasWindow	file:
-iHeight	htmllayout.c	/^    int iHeight;$/;"	m	struct:LayoutCache	file:
-iHeight	htmlprop.h	/^    int iHeight;                      \/* 'height'         (pixels, % AUTO)    *\/$/;"	m	struct:HtmlComputedValues
-iHorizontal	html.h	/^    int iHorizontal;$/;"	m	struct:HtmlNodeScrollbars
-iHorizontalMax	html.h	/^    int iHorizontalMax;        \/* Width of scrollable area *\/$/;"	m	struct:HtmlNodeScrollbars
-iIdx	htmltext.c	/^    int iIdx;$/;"	m	struct:HtmlTextInit	file:
-iIndex	htmldraw.c	/^    int iIndex;              \/* Index in pNode text of this item (or -1) *\/$/;"	m	struct:CanvasText	file:
-iIndexFin	htmldraw.c	/^    int iIndexFin;$/;"	m	struct:PaintNodesQuery	file:
-iIndexStart	htmldraw.c	/^    int iIndexStart;$/;"	m	struct:PaintNodesQuery	file:
-iInlineZ	html.h	/^    int iInlineZ;$/;"	m	struct:HtmlNodeStack
-iLast	htmltext.c	/^    int iLast;$/;"	m	struct:TagOpData	file:
-iLastSnapshotId	html.h	/^    int iLastSnapshotId;            \/* Last snapshot id allocated *\/$/;"	m	struct:HtmlTree
-iLeft	htmllayout.h	/^    int iLeft;        \/* Pixels of border + pixels of padding at left *\/$/;"	m	struct:BoxProperties
-iLeft	htmlprop.h	/^    int iLeft;$/;"	m	struct:HtmlFourSides
-iLetterSpacing	htmlprop.h	/^    int iLetterSpacing;               \/* 'letter-spacing' (pixels, NORMAL) *\/$/;"	m	struct:HtmlComputedValues
-iLineHeight	htmlprop.h	/^    int iLineHeight;                  \/* 'line-height'    (pixels, %, NORMAL) *\/$/;"	m	struct:HtmlComputedValues
-iLogical	htmlinline.c	/^  int iLogical;           \/* Distance to bottom of logical box *\/$/;"	m	struct:InlineMetrics	file:
-iMarginCollapse	htmllayout.c	/^    int iMarginCollapse;$/;"	m	struct:LayoutCache	file:
-iMaxHeight	htmlprop.h	/^    int iMaxHeight;                   \/* 'max-height'     (pixels, %, NONE)   *\/$/;"	m	struct:HtmlComputedValues
-iMaxMargin	htmllayout.c	/^    int iMaxMargin;          \/* Most positive margin value in pixels *\/$/;"	m	struct:NormalFlow	file:
-iMaxNode	htmldraw.c	/^    int iMaxNode;$/;"	m	struct:ScrollToQuery	file:
-iMaxRow	htmltable.c	/^    int iMaxRow;        \/* Index of the final row of table *\/$/;"	m	struct:RowIterateContext	file:
-iMaxWidth	htmllayout.c	/^    int iMaxWidth;$/;"	m	struct:HtmlLayoutCache	file:
-iMaxWidth	htmlprop.h	/^    int iMaxWidth;                    \/* 'max-height'     (pixels, %, NONE)   *\/$/;"	m	struct:HtmlComputedValues
-iMinHeight	htmlprop.h	/^    int iMinHeight;                   \/* 'min-height'     (pixels, %)         *\/$/;"	m	struct:HtmlComputedValues
-iMinMargin	htmllayout.c	/^    int iMinMargin;          \/* Most negative margin value in pixels *\/$/;"	m	struct:NormalFlow	file:
-iMinNode	htmldraw.c	/^    int iMinNode;$/;"	m	struct:ScrollToQuery	file:
-iMinWidth	htmllayout.c	/^    int iMinWidth;$/;"	m	struct:HtmlLayoutCache	file:
-iMinWidth	htmlprop.h	/^    int iMinWidth;                    \/* 'min-width'      (pixels, %)         *\/$/;"	m	struct:HtmlComputedValues
-iNextNode	html.h	/^    int iNextNode;       \/* Next node index to allocate *\/$/;"	m	struct:HtmlTree
-iNextRule	cssInt.h	/^    int iNextRule;                  \/* iRule value for next rule *\/$/;"	m	struct:CssParse
-iNode	html.h	/^    int iNode;                     \/* Node index *\/$/;"	m	struct:HtmlNode
-iNodeFin	htmldraw.c	/^    int iNodeFin;$/;"	m	struct:PaintNodesQuery	file:
-iNodeIndex	htmltext.c	/^    int iNodeIndex;            \/* Byte offset in HtmlTextNode.zText *\/$/;"	m	struct:HtmlTextMapping	file:
-iNodeStart	htmldraw.c	/^    int iNodeStart;$/;"	m	struct:PaintNodesQuery	file:
-iOffset	html.h	/^    int iOffset;                  \/* See above *\/$/;"	m	struct:HtmlNodeReplacement
-iOffset	htmlprop.c	/^    int iOffset;$/;"	m	struct:PropertyDef	file:
-iOutlineWidth	htmlprop.h	/^    int iOutlineWidth;                \/* 'outline-width' (pixels) *\/$/;"	m	struct:HtmlComputedValues
-iPriority	cssInt.h	/^    int iPriority;$/;"	m	struct:CssPriority
-iReturn	htmldraw.c	/^    int iReturn;$/;"	m	struct:ScrollToQuery	file:
-iRight	htmllayout.h	/^    int iRight;       \/* Pixels of border + pixels of padding at right *\/$/;"	m	struct:BoxProperties
-iRight	htmlprop.h	/^    int iRight;$/;"	m	struct:HtmlFourSides
-iRow	htmltable.c	/^    int iRow;           \/* The current row number (first row is 0) *\/$/;"	m	struct:RowIterateContext	file:
-iRule	cssInt.h	/^    int iRule;               \/* Rule-number within source style sheet *\/$/;"	m	struct:CssRule
-iScrollX	html.h	/^    int iScrollX;               \/* New HtmlTree.iScrollX value *\/$/;"	m	struct:HtmlCallback
-iScrollX	html.h	/^    int iScrollX;              \/* Number of pixels offscreen to the left *\/$/;"	m	struct:HtmlTree
-iScrollY	html.h	/^    int iScrollY;               \/* New HtmlTree.iScrollY value *\/$/;"	m	struct:HtmlCallback
-iScrollY	html.h	/^    int iScrollY;              \/* Number of pixels offscreen to the top *\/$/;"	m	struct:HtmlTree
-iSlot	htmldraw.c	/^    int iSlot;                       \/* Index of next free entry in aSlot *\/$/;"	m	struct:CanvasItemSorterLevel	file:
-iSnapshot	html.h	/^    int iSnapshot;                 \/* Last changed snapshot *\/$/;"	m	struct:HtmlNode
-iSnapshot	htmldraw.c	/^    int iSnapshot;                      \/* Non-zero for a snapshot *\/$/;"	m	struct:CanvasItemSorter	file:
-iSnapshot	htmldraw.c	/^    int iSnapshot;            \/* id of last snapshot this was added to *\/$/;"	m	struct:HtmlCanvasItem	file:
-iStackingZ	html.h	/^    int iStackingZ;$/;"	m	struct:HtmlNodeStack
-iStartBox	htmlinline.c	/^  int iStartBox;              \/* Leftmost inline-box *\/$/;"	m	struct:InlineBorder	file:
-iStartPixel	htmlinline.c	/^  int iStartPixel;            \/* Leftmost pixel of left margin *\/$/;"	m	struct:InlineBorder	file:
-iStrIndex	htmltext.c	/^    int iStrIndex;             \/* Character offset in HtmlText.pObj *\/$/;"	m	struct:HtmlTextMapping	file:
-iText	html.h	/^    int iText;$/;"	m	struct:HtmlTextIter
-iTextIndent	htmlinline.c	/^    int iTextIndent;        \/* Pixels of 'text-indent' for next line *\/$/;"	m	struct:InlineContext	file:
-iTextIndent	htmlprop.h	/^    int iTextIndent;                  \/* 'text-indext' (pixels, %) *\/$/;"	m	struct:HtmlComputedValues
-iTo	html.h	/^    int iTo;                   \/* Index the region ends at *\/$/;"	m	struct:HtmlTaggedRegion
-iTo	htmltext.c	/^    int iTo;$/;"	m	struct:TagOpData	file:
-iToken	html.h	/^    int iToken;$/;"	m	struct:HtmlTextIter
-iTop	htmllayout.h	/^    int iTop;         \/* Pixels of border + pixels of padding at top *\/$/;"	m	struct:BoxProperties
-iTop	htmlprop.h	/^    int iTop;$/;"	m	struct:HtmlFourSides
-iVAlign	htmlinline.c	/^    int iVAlign;               \/* Current vertical box offset *\/$/;"	m	struct:InlineContext	file:
-iVal	htmltable.c	/^        int iVal;          \/* For CELL_WIDTH_PIXELS *\/$/;"	m	union:CellReqWidth::<anonymous>	file:
-iVertical	html.h	/^    int iVertical;$/;"	m	struct:HtmlNodeScrollbars
-iVerticalAlign	htmlinline.c	/^  int iVerticalAlign;$/;"	m	struct:InlineBorder	file:
-iVerticalAlign	htmlprop.h	/^    int iVerticalAlign;               \/* 'vertical-align' (pixels) *\/$/;"	m	struct:HtmlComputedValues
-iVerticalMax	html.h	/^    int iVerticalMax;          \/* Height of scrollable area *\/$/;"	m	struct:HtmlNodeScrollbars
-iWidth	html.h	/^    int iWidth;                   \/* Current calculated pixel width of window*\/$/;"	m	struct:HtmlNodeReplacement
-iWidth	html.h	/^    int iWidth;                \/* Width of viewport *\/$/;"	m	struct:HtmlNodeScrollbars
-iWidth	htmldraw.c	/^    int iWidth;              \/* CSS determined width of widget *\/$/;"	m	struct:CanvasWindow	file:
-iWidth	htmllayout.c	/^    int iWidth;$/;"	m	struct:LayoutCache	file:
-iWidth	htmlprop.h	/^    int iWidth;                       \/* 'width'          (pixels, %, AUTO)   *\/$/;"	m	struct:HtmlComputedValues
-iWordSpacing	htmlprop.h	/^    int iWordSpacing;                 \/* 'word-spacing'   (pixels, NORMAL) *\/$/;"	m	struct:HtmlComputedValues
-iWriteInsert	html.h	/^    int iWriteInsert;               \/* Byte offset in pDocument for [write] *\/$/;"	m	struct:HtmlTree
-iZIndex	htmlprop.h	/^    int iZIndex;                      \/* 'z-index'        (integer, AUTO) *\/$/;"	m	struct:HtmlComputedValues
-if_disabled	tkhtml.tcl	/^    proc if_disabled {if else} {$/;"	p
-ignoreLineHeight	htmlinline.c	/^    int ignoreLineHeight;   \/* Boolean - true to ignore lineHeight *\/$/;"	m	struct:InlineContext	file:
-imBackgroundImage	htmlprop.h	/^    HtmlImage2 *imBackgroundImage;        \/* 'background-image' *\/$/;"	m	struct:HtmlComputedValues
-imListStyleImage	htmlprop.h	/^    HtmlImage2 *imListStyleImage;     \/* 'list-style-image' *\/$/;"	m	struct:HtmlComputedValues
-imReplacementImage	htmlprop.h	/^    HtmlImage2 *imReplacementImage;   \/* '-tkhtml-replacement-image' *\/$/;"	m	struct:HtmlComputedValues
-imZoomedBackgroundImage	htmlprop.h	/^    HtmlImage2 *imZoomedBackgroundImage;   \/* MUST BE FIRST (see htmlhash.c) *\/$/;"	m	struct:HtmlComputedValues
-image	htmlimage.c	/^    Tk_Image image;                  \/* Scaled (or unscaled) image *\/$/;"	m	struct:HtmlImage2	file:
-imageChanged	htmlimage.c	/^imageChanged(clientData, x, y, width, height, imgWidth, imgHeight)$/;"	f	file:
-imageChangedCb	htmlimage.c	/^imageChangedCb(pTree, pNode, clientData)$/;"	f	file:
-imageCmd	htmltcl.c	/^imageCmd(clientData, interp, objc, objv)$/;"	f	file:
-imagecache	html.h	/^    int      imagecache;$/;"	m	struct:HtmlOptions
-imagecmd	html.h	/^    Tcl_Obj *imagecmd;$/;"	m	struct:HtmlOptions
-implicitCloseCount	htmltree.c	/^implicitCloseCount(pTree, pCurrent, eTag, pNClose)$/;"	f	file:
-important	cssInt.h	/^    int important;           \/* True if !IMPORTANT flag is set *\/$/;"	m	struct:CssPriority
-inProgress	html.h	/^    int inProgress;             \/* Prevent recursive invocation *\/$/;"	m	struct:HtmlCallback
-info	htmlutil.c	/^    Tcl_CmdInfo info;       \/* Original command info, before instrumentation *\/$/;"	m	struct:InstCommand	file:
-inheritlist	htmlprop.c	/^static int inheritlist[] = {$/;"	v	file:
-initHtmlText	htmltext.c	/^initHtmlText(pTree)$/;"	f	file:
-initHtmlText_Elem	htmltext.c	/^initHtmlText_Elem(pTree, pElem, pInit)$/;"	f	file:
-initHtmlText_TextNode	htmltext.c	/^initHtmlText_TextNode(pTree, pTextNode, pInit)$/;"	f	file:
-initMallocHash	restrack.c	/^initMallocHash() {$/;"	f	file:
-inlineBoxMetrics	htmlinline.c	/^inlineBoxMetrics(pContext, pNode, pMetrics)$/;"	f	file:
-inlineContextAddInlineCanvas	htmlinline.c	/^inlineContextAddInlineCanvas(p, eType, pNode)$/;"	f	file:
-inlineContextAddNewLine	htmlinline.c	/^inlineContextAddNewLine(p, nHeight)$/;"	f	file:
-inlineContextAddSpace	htmlinline.c	/^inlineContextAddSpace(p, nPixels, eWhitespace)$/;"	f	file:
-inlineContextDrawBorder	htmlinline.c	/^inlineContextDrawBorder($/;"	f	file:
-inlineLayoutDrawLines	htmllayout.c	/^inlineLayoutDrawLines(pLayout, pBox, pContext, forceflag, pY, pNormal)$/;"	f	file:
-inputsize_to_css	tkhtml.tcl	/^    proc inputsize_to_css {} {$/;"	p
-insertListEntry	htmlfloat.c	/^void insertListEntry(pList, y)$/;"	f	file:
-insertMallocHash	restrack.c	/^insertMallocHash(zTopic, p, nBytes) $/;"	f	file:
-insertRule	css.c	/^insertRule(ppList, pRule) $/;"	f	file:
-instCommand	htmlutil.c	/^instCommand(clientData, interp, objc, objv)$/;"	f	file:
-instDelCommand	htmlutil.c	/^instDelCommand(clientData)$/;"	f	file:
-instVectors	htmlutil.c	/^instVectors(clientData, interp, objc, objv)$/;"	f	file:
-instZero	htmlutil.c	/^instZero(clientData, interp, objc, objv)$/;"	f	file:
-instrument_objcmd	htmlutil.c	/^instrument_objcmd(clientData, interp, objc, objv)$/;"	f	file:
-interp	cssInt.h	/^    Tcl_Interp *interp;             \/* Interpreter to invoke pImportCmd *\/$/;"	m	struct:CssParse
-interp	html.h	/^    Tcl_Interp *interp;             \/* Tcl interpreter *\/$/;"	m	struct:HtmlTree
-interp	htmllayout.h	/^    Tcl_Interp *interp;      \/* The interpreter *\/$/;"	m	struct:LayoutContext
-isAdd	htmltext.c	/^    int isAdd;              \/* True for [add] false for [remove] *\/$/;"	m	struct:TagOpData	file:
-isBboxOk	html.h	/^    int isBboxOk;$/;"	m	struct:HtmlTree
-isBody	cssInt.h	/^    int isBody;                     \/* True once we are in the body *\/$/;"	m	struct:CssParse
-isBold	htmlprop.h	/^    unsigned char isBold;    \/* True if the font is bold *\/$/;"	m	struct:HtmlFontKey
-isCdataInHead	html.h	/^    int isCdataInHead;      \/* True if previous token was <title> *\/$/;"	m	struct:HtmlTreeState
-isDeleted	html.h	/^    int isDeleted;             \/* True once the widget-delete has begun *\/$/;"	m	struct:HtmlTree
-isDeleted	htmlutil.c	/^    int isDeleted;          \/* True after the Tcl command has been deleted *\/$/;"	m	struct:InstCommand	file:
-isDynamic	cssInt.h	/^    u8 isDynamic;     \/* True if this selector is dynamic *\/$/;"	m	struct:CssSelector
-isForce	html.h	/^    int isForce;                \/* Not an idle callback *\/$/;"	m	struct:HtmlCallback
-isIgnore	cssInt.h	/^    int isIgnore;                   \/* True to ignore new elements *\/$/;"	m	struct:CssParse
-isIgnoreNewline	html.h	/^    int isIgnoreNewline;            \/* True after an opening tag *\/$/;"	m	struct:HtmlTree
-isInherit	htmlprop.c	/^    int isInherit;             \/* True to inherit by default *\/$/;"	m	struct:PropertyDef	file:
-isInit	htmlparse.c	/^static int isInit = 0;$/;"	v	file:
-isItalic	htmlprop.h	/^    unsigned char isItalic;  \/* True if the font is italic *\/$/;"	m	struct:HtmlFontKey
-isNolayout	htmlprop.c	/^    int isNolayout;            \/* Can be changed without relayout *\/$/;"	m	struct:PropertyDef	file:
-isParseFinished	html.h	/^    int isParseFinished;            \/* True if the html parse is finished *\/$/;"	m	struct:HtmlTree
-isReplaced	htmlinline.c	/^  int isReplaced;$/;"	m	struct:InlineBorder	file:
-isSequenceOk	html.h	/^    int isSequenceOk;    $/;"	m	struct:HtmlTree
-isSet	cssdynamic.c	/^    int isSet;                \/* True when the condition is set *\/$/;"	m	struct:CssDynamic	file:
-isSizeOnly	htmlinline.c	/^    int isSizeOnly;         \/* Do not draw, just estimate sizes of things *\/$/;"	m	struct:InlineContext	file:
-isSuspendGC	htmlimage.c	/^    int isSuspendGC;$/;"	m	struct:HtmlImageServer	file:
-isTop	htmlfloat.c	/^    int isTop;                \/* True if this is the top of 1 or more f.b. *\/$/;"	m	struct:FloatListEntry	file:
-isValid	htmlimage.c	/^    int isValid;                     \/* True if HtmlImage.image is valid *\/$/;"	m	struct:HtmlImage2	file:
-isValid	htmllayout.c	/^    int isValid;             \/* True if iMaxMargin and iMinMargin are valid *\/$/;"	m	struct:NormalFlow	file:
-itemToBox	htmldraw.c	/^itemToBox(pItem, origin_x, origin_y, pX, pY, pW, pH)$/;"	f	file:
-itemToNode	htmldraw.c	1091;"	d	file:
-itemsAreEqual	htmldraw.c	/^static int itemsAreEqual(p1, p2)$/;"	f	file:
-layoutBboxCb	htmldraw.c	/^layoutBboxCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-layoutChildren	htmllayout.c	/^layoutChildren(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-layoutNodeCb	htmldraw.c	/^layoutNodeCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-layoutNodeCmd	htmldraw.c	/^layoutNodeCmd(pTree, x, y)$/;"	f	file:
-layoutNodeCompare	htmldraw.c	/^layoutNodeCompare(pVoidLeft, pVoidRight)$/;"	f	file:
-layoutNodeIndexCb	htmldraw.c	/^layoutNodeIndexCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-layoutNodeIndexCmd	htmldraw.c	/^layoutNodeIndexCmd(pTree, x, y)$/;"	f	file:
-layoutcache	html.h	/^    int      layoutcache;$/;"	m	struct:HtmlOptions
-left	html.h	/^    int left;$/;"	m	struct:HtmlCanvas
-left	htmldraw.c	/^    int left;$/;"	m	struct:LayoutBboxQuery	file:
-left	htmldraw.c	/^    int left;$/;"	m	struct:PaintNodesQuery	file:
-left	htmlfloat.c	/^    int left;                 \/* Left floating margin *\/$/;"	m	struct:FloatListEntry	file:
-leftAuto	htmllayout.h	/^    int leftAuto;        \/* True if ('margin-left' == "auto") *\/$/;"	m	struct:MarginProperties
-leftValid	htmlfloat.c	/^    int leftValid;            \/* True if the left margin is valid *\/$/;"	m	struct:FloatListEntry	file:
-line	htmldraw.c	/^        CanvasLine   line;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-linkItem	htmldraw.c	/^static void linkItem(pCanvas, pItem)$/;"	f	file:
-logCommon	htmltcl.c	/^logCommon($/;"	f
-logMinMaxWidths	htmltable.c	/^logMinMaxWidths(pLayout, pNode, col, colspan, aMinWidth, aMaxWidth)$/;"	f	file:
-logWidthStage	htmltable.c	/^logWidthStage(nStage, pStageLog, nWidth, aWidth)$/;"	f	file:
-logWidthsToTable	htmltable.c	/^logWidthsToTable(pData, pObj)$/;"	f	file:
-logcmd	html.h	/^    Tcl_Obj *logcmd;$/;"	m	struct:HtmlOptions
-main	main.c	/^main(argc, argv)$/;"	f
-makeUri	htmldecode.c	/^makeUri(zScheme, zAuthority, zPath, zQuery, zFragment)$/;"	f	file:
-margin	htmlinline.c	/^  MarginProperties margin;$/;"	m	struct:InlineBorder	file:
-margin	htmlprop.h	/^    HtmlFourSides margin;             \/* 'margin'         (pixels, %, AUTO)   *\/$/;"	m	struct:HtmlComputedValues
-margin_bottom	htmllayout.h	/^    int margin_bottom;$/;"	m	struct:MarginProperties
-margin_left	htmllayout.h	/^    int margin_left;$/;"	m	struct:MarginProperties
-margin_right	htmllayout.h	/^    int margin_right;$/;"	m	struct:MarginProperties
-margin_top	htmllayout.h	/^    int margin_top;$/;"	m	struct:MarginProperties
-markWindowAsClipped	htmltree.c	/^markWindowAsClipped(pTree, pNode, clientData)$/;"	f	file:
-marker	htmldraw.c	/^        CanvasMarker marker;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-markerBoxLayout	htmllayout.c	/^markerBoxLayout(pLayout, pBox, pNode, pVerticalOffset)$/;"	f	file:
-mask	htmlprop.c	/^    int mask;$/;"	m	struct:PropertyDef	file:
-mask	htmlprop.c	/^  int mask;$/;"	m	struct:SizemaskDef	file:
-mask	htmlprop.h	/^    unsigned int mask;$/;"	m	struct:HtmlComputedValues
-mergeAttributes	htmltree.c	/^mergeAttributes(pNode, pAttr)$/;"	f	file:
-metrics	htmlinline.c	/^  InlineMetrics metrics;      \/* Vertical metrics for inline box *\/$/;"	m	struct:InlineBorder	file:
-metrics	htmlprop.h	/^    Tk_FontMetrics metrics;$/;"	m	struct:HtmlFont
-minmaxTest	htmllayout.h	/^    int minmaxTest;          \/* Currently figuring out min\/max widths *\/$/;"	m	struct:LayoutContext
-mode	html.h	/^    int      mode;                      \/* One of the HTML_MODE_XXX values *\/$/;"	m	struct:HtmlOptions
-movePrimitives	htmldraw.c	/^movePrimitives(pCanvas, x, y)$/;"	f	file:
-mxARG	htmlparse.c	846;"	d	file:
-n	cssInt.h	/^    int n;$/;"	m	struct:CssPropertySet
-n	cssInt.h	/^    int n;$/;"	m	struct:CssToken
-n	htmltext.c	/^    unsigned char n;$/;"	m	struct:HtmlTextToken	file:
-nAlloc	csssearch.c	/^    int nAlloc;$/;"	m	struct:CssCachedSearch	file:
-nAttr	html.h	/^    int nAttr;$/;"	m	struct:HtmlAttributes
-nBorderEnd	htmlinline.c	/^  int nBorderEnd;             \/* Number of borders that end here *\/$/;"	m	struct:InlineBox	file:
-nCall	htmlutil.c	/^    int nCall;$/;"	m	struct:InstData	file:
-nCharParsed	html.h	/^    int nCharParsed;                \/* TODO: Characters parsed *\/$/;"	m	struct:HtmlTree
-nChild	html.h	/^    int nChild;                    \/* Number of child nodes *\/$/;"	m	struct:HtmlElementNode
-nCol	htmltable.c	/^    int nCol;                \/* Total number of columns in table *\/$/;"	m	struct:TableData	file:
-nContentPixels	htmlinline.c	/^  int nContentPixels;         \/* Width of content. *\/$/;"	m	struct:InlineBox	file:
-nFixedBackground	html.h	/^    int nFixedBackground;           \/* Number of nodes with fixed backgrounds *\/$/;"	m	struct:HtmlTree
-nInline	htmlinline.c	/^    int nInline;            \/* Number of inline boxes in aInline *\/$/;"	m	struct:InlineContext	file:
-nInlineAlloc	htmlinline.c	/^    int nInlineAlloc;       \/* Number of slots allocated in aInline *\/$/;"	m	struct:InlineContext	file:
-nLeftPixels	htmlinline.c	/^  int nLeftPixels;            \/* Total left width of borders that start here *\/$/;"	m	struct:InlineBox	file:
-nLevel	htmldraw.c	/^    int nLevel;                         \/* Number of allocated levels *\/$/;"	m	struct:CanvasItemSorter	file:
-nNode	csssearch.c	/^    int nNode;$/;"	m	struct:CssCachedSearch	file:
-nNode	htmldraw.c	/^    int nNode;$/;"	m	struct:NodeQuery	file:
-nNodeAlloc	htmldraw.c	/^    int nNodeAlloc;$/;"	m	struct:NodeQuery	file:
-nOcc	htmltext.c	/^    int nOcc;$/;"	m	struct:TagDeleteContext	file:
-nOverflowAndPixmap	htmldraw.c	/^    int nOverflowAndPixmap;             \/* Allocated size of aOver... *\/$/;"	m	struct:CanvasItemSorter	file:
-nParsed	html.h	/^    int nParsed;                    \/* Bytes of pDocument tokenized *\/$/;"	m	struct:HtmlTree
-nRef	htmldraw.c	/^    int nRef;                 \/* Number of pointers to this item *\/$/;"	m	struct:HtmlCanvasItem	file:
-nRef	htmldraw.c	/^    int nRef;$/;"	m	struct:CanvasOrigin	file:
-nRef	htmlimage.c	/^    int nRef;                        \/* Number of references to this struct *\/$/;"	m	struct:HtmlImage2	file:
-nRef	htmlprop.h	/^    int nRef;                              \/* MUST BE FIRST (see htmlhash.c) *\/$/;"	m	struct:HtmlComputedValues
-nRef	htmlprop.h	/^    int nRef;              \/* Number of pointers to this structure *\/$/;"	m	struct:HtmlColor
-nRef	htmlprop.h	/^    int nRef;              \/* Number of pointers to this structure *\/$/;"	m	struct:HtmlFont
-nRef	restrack.c	/^    int nRef;            \/* Current number of outstanding references *\/$/;"	m	struct:ResRecord	file:
-nRightPixels	htmlinline.c	/^  int nRightPixels;           \/* Total right width of borders that start here *\/$/;"	m	struct:InlineBox	file:
-nRow	htmltable.c	/^    int nRow;                \/* Total number of rows in table *\/$/;"	m	struct:TableData	file:
-nRowSpan	htmltable.c	/^    int nRowSpan;$/;"	m	struct:RowIterateContext	file:
-nRule	cssInt.h	/^    int nRule;$/;"	m	struct:CssProperties
-nSlot	htmldraw.c	/^    int nSlot;                       \/* Allocated size of aSlot *\/$/;"	m	struct:CanvasItemSorterLevel	file:
-nSpace	htmlinline.c	/^  int nSpace;                 \/* Pixels of space between this and next box. *\/$/;"	m	struct:InlineBox	file:
-nStack	html.h	/^    int nStack;                   \/* Number of elements in linked list *\/$/;"	m	struct:HtmlTree
-nStack	restrack.c	/^    int nStack;          \/* Number of stored stack-dumps *\/$/;"	m	struct:ResRecord	file:
-nSyntaxErr	cssInt.h	/^    int nSyntaxErr;           \/* Number of syntax errors during parsing *\/$/;"	m	struct:CssStyleSheet
-nText	htmldraw.c	/^    int nText;$/;"	m	struct:CanvasText	file:
-nXtra	cssInt.h	/^    int nXtra;$/;"	m	struct:CssParse
-nZeroRef	htmlprop.h	/^    int nZeroRef;$/;"	m	struct:HtmlFontCache
-newCssPriority	css.c	/^newCssPriority(pStyle, origin, pIdTail, important)$/;"	f	file:
-newWidget	htmltcl.c	/^newWidget(clientData, interp, objc, objv)$/;"	f	file:
-nextItem	htmldraw.c	/^static CanvasItemSorterSlot *nextItem(pSorter, piLevel, piItem)$/;"	f	file:
-nextRule	css.c	/^nextRule(apRule, n)$/;"	f	file:
-node	html.h	/^    HtmlNode node;                 \/* Base class. MUST BE FIRST. *\/$/;"	m	struct:HtmlTextNode
-node	html.h	/^    HtmlNode node;          \/* Base class. MUST BE FIRST. *\/$/;"	m	struct:HtmlElementNode
-nodeCmd	htmltcl.c	/^nodeCmd(clientData, interp, objc, objv)$/;"	f	file:
-nodeCommand	htmltree.c	/^nodeCommand(clientData, interp, objc, objv)$/;"	f	file:
-nodeDeorphanize	htmltree.c	/^nodeDeorphanize(pTree, pNode)$/;"	f	file:
-nodeDestroyCmd	htmltree.c	/^nodeDestroyCmd(pNode, objc, objv)$/;"	f	file:
-nodeGetBoxProperties	htmllayout.c	/^nodeGetBoxProperties(pLayout, pNode, iContaining, pBoxProperties)$/;"	f
-nodeGetMargins	htmllayout.c	/^nodeGetMargins(pLayout, pNode, iContaining, pMargins)$/;"	f
-nodeGetPreText	htmltree.c	/^nodeGetPreText(pTextNode)$/;"	f	file:
-nodeGetStyle	htmltree.c	/^nodeGetStyle(pTree, p)$/;"	f	file:
-nodeHandlerCallbacks	htmltree.c	/^nodeHandlerCallbacks(pTree, pNode)$/;"	f	file:
-nodeInsertChild	htmltree.c	/^nodeInsertChild(pTree, pElem, pBefore, pAfter, pChild)$/;"	f	file:
-nodeInsertCmd	htmltree.c	/^nodeInsertCmd(pNode, objc, objv)$/;"	f	file:
-nodeIsReplaced	htmllayout.c	/^nodeIsReplaced(pNode)$/;"	f	file:
-nodeOrphanize	htmltree.c	/^nodeOrphanize(pTree, pNode)$/;"	f	file:
-nodeRemoveChild	htmltree.c	/^nodeRemoveChild(pElem, pChild)$/;"	f	file:
-nodeRemoveCmd	htmltree.c	/^nodeRemoveCmd(pNode, objc, objv)$/;"	f	file:
-nodeTextCommand	htmltree.c	/^nodeTextCommand(interp, pNode, objc, objv)$/;"	f	file:
-nodeViewCmd	htmltree.c	/^nodeViewCmd(pNode, isVertical, objv, objc)$/;"	f	file:
-nolayoutlist	htmlprop.c	/^static int nolayoutlist[] = {$/;"	v	file:
-nonegative	htmllayout.c	/^    int nonegative;          \/* Do not return negative from Collapse() *\/$/;"	m	struct:NormalFlow	file:
-normalFlowCbAdd	htmllayout.c	/^normalFlowCbAdd(pNormal, pCallback)$/;"	f	file:
-normalFlowCbDelete	htmllayout.c	/^normalFlowCbDelete(pNormal, pCallback)$/;"	f	file:
-normalFlowClearFloat	htmllayout.c	/^normalFlowClearFloat(pBox, pNode, pNormal, y)$/;"	f	file:
-normalFlowIn	htmllayout.c	/^    NormalFlow normalFlowIn;$/;"	m	struct:LayoutCache	file:
-normalFlowLayout	htmllayout.c	/^normalFlowLayout(pLayout, pBox, pNode, pNormal)$/;"	f	file:
-normalFlowLayoutAbsolute	htmllayout.c	/^normalFlowLayoutAbsolute(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutAbsolute	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutAbsolute;$/;"	v	file:
-normalFlowLayoutBlock	htmllayout.c	/^normalFlowLayoutBlock(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutBlock	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutBlock;$/;"	v	file:
-normalFlowLayoutFixed	htmllayout.c	/^normalFlowLayoutFixed(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutFloat	htmllayout.c	/^normalFlowLayoutFloat(pLayout, pBox, pNode, pY, pDoNotUse, pNormal)$/;"	f	file:
-normalFlowLayoutFloat	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutFloat;$/;"	v	file:
-normalFlowLayoutFromCache	htmllayout.c	/^normalFlowLayoutFromCache(pLayout, pBox, pElem, pNormal, iLeft, iRight)$/;"	f	file:
-normalFlowLayoutInline	htmllayout.c	/^normalFlowLayoutInline(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutInline	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutInline;$/;"	v	file:
-normalFlowLayoutInlineBlock	htmllayout.c	/^normalFlowLayoutInlineBlock(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutNode	htmllayout.c	/^normalFlowLayoutNode(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutNode	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutNode;$/;"	v	file:
-normalFlowLayoutOverflow	htmllayout.c	/^normalFlowLayoutOverflow(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutOverflow	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutOverflow;$/;"	v	file:
-normalFlowLayoutReplaced	htmllayout.c	/^normalFlowLayoutReplaced(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutReplaced	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutReplaced;$/;"	v	file:
-normalFlowLayoutReplacedInline	htmllayout.c	/^normalFlowLayoutReplacedInline(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutReplacedInline	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutReplacedInline;$/;"	v	file:
-normalFlowLayoutTable	htmllayout.c	/^normalFlowLayoutTable(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutTable	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutTable;$/;"	v	file:
-normalFlowLayoutTableComponent	htmllayout.c	/^normalFlowLayoutTableComponent(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutText	htmllayout.c	/^normalFlowLayoutText(pLayout, pBox, pNode, pY, pContext, pNormal)$/;"	f	file:
-normalFlowLayoutText	htmllayout.c	/^static FlowLayoutFunc normalFlowLayoutText;$/;"	v	file:
-normalFlowMarginAdd	htmllayout.c	/^normalFlowMarginAdd(pLayout, pNode, pNormal, y) $/;"	f	file:
-normalFlowMarginCollapse	htmllayout.c	/^normalFlowMarginCollapse(pLayout, pNode, pNormal, pY) $/;"	f	file:
-normalFlowMarginQuery	htmllayout.c	/^normalFlowMarginQuery(pNormal) $/;"	f	file:
-normalFlowOut	htmllayout.c	/^    NormalFlow normalFlowOut;$/;"	m	struct:LayoutCache	file:
-o	htmldraw.c	/^        CanvasOrigin o;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-objToUri	htmldecode.c	/^objToUri(pObj)$/;"	f	file:
-ol_liststyletype	tkhtml.tcl	/^    proc ol_liststyletype {} {$/;"	p
-oprintf	htmlinline.c	/^oprintf(Tcl_Obj *pObj, CONST char *zFormat, ...) {$/;"	f	file:
-optionTable	html.h	/^    Tk_OptionTable optionTable;     \/* Option table *\/$/;"	m	struct:HtmlTree
-options	html.h	/^    HtmlOptions options;            \/* Configurable options *\/$/;"	m	struct:HtmlTree
-orderIndexPair	htmltext.c	/^orderIndexPair(ppA, piA, ppB, piB)$/;"	f	file:
-origin	cssInt.h	/^    int origin;              \/* One of CSS_ORIGIN_AGENT, _AUTHOR or _USER *\/ $/;"	m	struct:CssPriority
-origin	cssInt.h	/^    int origin;$/;"	m	struct:CssParse
-overflow	htmldraw.c	/^        CanvasOverflow overflow;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-overflow	htmldraw.c	/^        Overflow overflow;$/;"	m	struct:CanvasItemSorter::OverflowAndPixmap	file:
-overrideToPropertyValues	css.c	/^overrideToPropertyValues(p, aPropDone, pOverride)$/;"	f	file:
-p	css.h	/^        void *p;$/;"	m	union:CssProperty::<anonymous>
-p1	htmlutil.c	/^    InstCommand *p1;$/;"	m	struct:InstVector	file:
-p2	htmlutil.c	/^    InstCommand *p2;$/;"	m	struct:InstVector	file:
-pAbsolute	htmllayout.h	/^    NodeList *pAbsolute;     \/* List of nodes with "absolute" 'position' *\/$/;"	m	struct:LayoutContext
-pAfter	html.h	/^    HtmlNode *pAfter;                      \/* Generated :after content *\/$/;"	m	struct:HtmlElementNode
-pAfterRules	cssInt.h	/^    CssRule *pAfterRules;      \/* Rules that end in :after *\/$/;"	m	struct:CssStyleSheet
-pAttributes	html.h	/^    HtmlAttributes *pAttributes;      \/* Html attributes associated with node *\/$/;"	m	struct:HtmlElementNode
-pBefore	html.h	/^    HtmlNode *pBefore;                     \/* Generated :before content *\/$/;"	m	struct:HtmlElementNode
-pBeforeRules	cssInt.h	/^    CssRule *pBeforeRules;     \/* Rules that end in :before *\/$/;"	m	struct:CssStyleSheet
-pBgRoot	htmldraw.c	/^    HtmlNode *pBgRoot;$/;"	m	struct:GetPixmapQuery	file:
-pBorderStart	htmlinline.c	/^  InlineBorder *pBorderStart; \/* List of borders that start with this box *\/$/;"	m	struct:InlineBox	file:
-pBorders	htmlinline.c	/^    InlineBorder *pBorders;    \/* Linked list of active inline-borders. *\/$/;"	m	struct:InlineContext	file:
-pBox	html.h	/^    HtmlCanvasItem *pBox;$/;"	m	struct:HtmlElementNode
-pBox	htmltable.c	/^    BoxContext *pBox;        \/* Box to draw into *\/$/;"	m	struct:TableData	file:
-pBoxBorders	htmlinline.c	/^    InlineBorder *pBoxBorders; \/* Borders list for next box to be added *\/$/;"	m	struct:InlineContext	file:
-pCache	csssearch.c	/^  CssCachedSearch *pCache;   \/* Output *\/$/;"	m	struct:CssSearch	file:
-pCallbackList	htmllayout.c	/^    NormalFlowCallback *pCallbackList;$/;"	m	struct:NormalFlow	file:
-pCaller	htmlutil.c	/^    InstCommand *pCaller;$/;"	m	struct:InstGlobal	file:
-pClosest	htmldraw.c	/^    CanvasText *pClosest;$/;"	m	struct:NodeIndexQuery	file:
-pCollide	html.h	/^  HtmlTokenMap *pCollide;         \/* Hash table collision chain *\/$/;"	m	struct:HtmlTokenMap
-pCommand	html.h	/^    Tcl_Obj *pCommand;$/;"	m	struct:HtmlNodeCmd
-pComputed	htmldraw.c	/^    HtmlComputedValues *pComputed;$/;"	m	struct:CanvasBox	file:
-pConfigureCmd	html.h	/^    Tcl_Obj *pConfigureCmd;       \/* Script passed to -configurecmd *\/$/;"	m	struct:HtmlNodeReplacement
-pCurrent	html.h	/^    HtmlNode *pCurrent;     \/* By default, add new elements as children here *\/$/;"	m	struct:HtmlTreeState
-pCurrent	htmlinline.c	/^    InlineBorder *pCurrent;    \/* Current inline border *\/$/;"	m	struct:InlineContext	file:
-pCurrent	htmltree.c	/^  HtmlElementNode *pCurrent;$/;"	m	struct:HtmlFragmentContext	file:
-pCurrentOverflow	htmldraw.c	/^    Overflow *pCurrentOverflow;$/;"	m	struct:GetPixmapQuery	file:
-pDamage	html.h	/^    HtmlDamage *pDamage;$/;"	m	struct:HtmlCallback
-pDefaultProperties	htmltable.c	/^    HtmlComputedValues *pDefaultProperties;$/;"	m	struct:TableData	file:
-pDelete	html.h	/^    Tcl_Obj *pDelete;             \/* Script passed to -deletecmd *\/$/;"	m	struct:HtmlNodeReplacement
-pDelete	htmlimage.c	/^    Tcl_Obj *pDelete;                \/* Delete script, if this is unscaled *\/$/;"	m	struct:HtmlImage2	file:
-pDeleteList	htmlprop.h	/^    CssProperty *pDeleteList;$/;"	m	struct:HtmlComputedValuesCreator
-pDocument	html.h	/^    Tcl_Obj *pDocument;             \/* Text of the html document *\/$/;"	m	struct:HtmlTree
-pDynamic	html.h	/^    CssDynamic *pDynamic;                  \/* CSS dynamic conditions *\/$/;"	m	struct:HtmlElementNode
-pDynamic	html.h	/^    HtmlNode *pDynamic;         \/* Recalculate dynamic CSS for this node *\/$/;"	m	struct:HtmlCallback
-pElem	html.h	/^    HtmlElementNode *pElem;$/;"	m	struct:HtmlNodeStack
-pElem	htmldraw.c	/^    HtmlElementNode *pElem;  \/* Node replaced by this window *\/$/;"	m	struct:CanvasWindow	file:
-pEnd	htmldraw.c	/^    HtmlCanvasItem *pEnd;     \/* Region ends *after* this item *\/$/;"	m	struct:CanvasOverflow	file:
-pEntry	htmlfloat.c	/^    FloatListEntry *pEntry;$/;"	m	struct:HtmlFloatList	file:
-pFirst	html.h	/^    HtmlCanvasItem *pFirst;$/;"	m	struct:HtmlCanvas
-pFirst	htmltext.c	/^    HtmlNode *pFirst;$/;"	m	struct:TagOpData	file:
-pFixed	htmllayout.h	/^    NodeList *pFixed;        \/* List of nodes with "fixed" 'position' *\/$/;"	m	struct:LayoutContext
-pFloat	htmllayout.c	/^    HtmlFloatList *pFloat;   \/* Floating margins *\/$/;"	m	struct:NormalFlow	file:
-pFlow	htmldraw.c	/^    HtmlNode *pFlow;$/;"	m	struct:NodeIndexQuery	file:
-pFoster	html.h	/^    HtmlNode *pFoster;      \/* The current node in the foster tree (if any) *\/$/;"	m	struct:HtmlTreeState
-pFragment	html.h	/^    HtmlFragmentContext *pFragment;$/;"	m	struct:HtmlTree
-pFrom	htmltext.c	/^    HtmlNode *pFrom;$/;"	m	struct:TagOpData	file:
-pFullName	htmlutil.c	/^    Tcl_Obj *pFullName;     \/* The name to use for this object command *\/$/;"	m	struct:InstCommand	file:
-pGlobal	htmlutil.c	/^    InstCommand *pGlobal;$/;"	m	struct:InstGlobal	file:
-pGlobal	htmlutil.c	/^    InstGlobal *pGlobal;    \/* Pointer to associated "global" object *\/$/;"	m	struct:InstCommand	file:
-pIdTail	cssInt.h	/^    Tcl_Obj *pIdTail;        \/* Tail of the stylesheet id *\/$/;"	m	struct:CssPriority
-pImage	htmldraw.c	/^    HtmlImage2 *pImage;      \/* Image pointer *\/$/;"	m	struct:CanvasImage	file:
-pImageName	htmlimage.c	/^    Tcl_Obj *pImageName;             \/* Image name, if this is unscaled *\/$/;"	m	struct:HtmlImage2	file:
-pImageServer	html.h	/^    HtmlImageServer *pImageServer;$/;"	m	struct:HtmlTree
-pImageServer	htmlimage.c	/^    HtmlImageServer *pImageServer;   \/* Image server that caches this image *\/$/;"	m	struct:HtmlImage2	file:
-pImplicitTableProperties	htmllayout.h	/^    HtmlComputedValues *pImplicitTableProperties;$/;"	m	struct:LayoutContext
-pImportCmd	cssInt.h	/^    Tcl_Obj *pImportCmd;            \/* Script to invoke for @import *\/$/;"	m	struct:CssParse
-pImportant	cssInt.h	/^    CssPropertySet *pImportant;     \/* !IMPORTANT declarations. *\/$/;"	m	struct:CssParse
-pInstrumentData	html.h	/^    ClientData pInstrumentData;$/;"	m	struct:HtmlTree
-pItem	htmldraw.c	/^    CanvasOverflow *pItem;$/;"	m	struct:Overflow	file:
-pItem	htmldraw.c	/^    HtmlCanvasItem *pItem;           \/* The item itself *\/$/;"	m	struct:CanvasItemSorterSlot	file:
-pKey	htmlprop.h	/^    HtmlFontKey *pKey;     \/* Pointer to corresponding HtmlFontKey structure *\/$/;"	m	struct:HtmlFont
-pLast	html.h	/^    HtmlCanvasItem *pLast;$/;"	m	struct:HtmlCanvas
-pLast	htmltext.c	/^    HtmlNode *pLast;$/;"	m	struct:TagOpData	file:
-pLayout	htmltable.c	/^    LayoutContext *pLayout;$/;"	m	struct:TableData	file:
-pLayoutCache	html.h	/^    HtmlLayoutCache *pLayoutCache;         \/* Cached layout, if any *\/$/;"	m	struct:HtmlElementNode
-pLruHead	htmlprop.h	/^    HtmlFont *pLruHead;$/;"	m	struct:HtmlFontCache
-pLruTail	htmlprop.h	/^    HtmlFont *pLruTail;$/;"	m	struct:HtmlFontCache
-pMapped	html.h	/^    HtmlNodeReplacement *pMapped;$/;"	m	struct:HtmlTree
-pMapping	htmltext.c	/^    HtmlTextMapping *pMapping;$/;"	m	struct:HtmlText	file:
-pMarker	htmllayout.c	/^    HtmlCanvasItem *pMarker;       \/* Static position marker *\/$/;"	m	struct:NodeList	file:
-pNext	cssInt.h	/^    CssPriority *pNext;      \/* Linked list pointer *\/$/;"	m	struct:CssPriority
-pNext	cssInt.h	/^    CssRule *pNext;                \/* Next rule in this list. *\/$/;"	m	struct:CssRule
-pNext	cssInt.h	/^    CssSelector *pNext;  \/* Next simple-selector in chain *\/$/;"	m	struct:CssSelector
-pNext	cssdynamic.c	/^    CssDynamic *pNext;$/;"	m	struct:CssDynamic	file:
-pNext	html.h	/^    HtmlNodeReplacement *pNext;   \/* Next element in HtmlTree.pMapped list *\/$/;"	m	struct:HtmlNodeReplacement
-pNext	html.h	/^    HtmlNodeStack *pNext;$/;"	m	struct:HtmlNodeStack
-pNext	html.h	/^    HtmlTaggedRegion *pNext;   \/* Next tagged region of this text node *\/$/;"	m	struct:HtmlTaggedRegion
-pNext	html.h	/^  HtmlDamage *pNext;$/;"	m	struct:HtmlDamage
-pNext	htmldraw.c	/^    HtmlCanvasItem *pNext;$/;"	m	struct:HtmlCanvasItem	file:
-pNext	htmldraw.c	/^    Outline *pNext;$/;"	m	struct:Outline	file:
-pNext	htmldraw.c	/^    Overflow *pNext;$/;"	m	struct:Overflow	file:
-pNext	htmlfloat.c	/^    FloatListEntry *pNext;    \/* Next entry in list *\/$/;"	m	struct:FloatListEntry	file:
-pNext	htmlimage.c	/^    HtmlImage2 *pNext;               \/* Next in list of scaled copies *\/$/;"	m	struct:HtmlImage2	file:
-pNext	htmlinline.c	/^  InlineBorder *pNext;        \/* Pointer to parent inline border, if any *\/$/;"	m	struct:InlineBorder	file:
-pNext	htmllayout.c	/^    NodeList *pNext;$/;"	m	struct:NodeList	file:
-pNext	htmllayout.c	/^    NormalFlowCallback *pNext;$/;"	m	struct:NormalFlowCallback	file:
-pNext	htmlprop.h	/^    HtmlFont *pNext;       \/* Next entry in the Html.FontCache LRU list *\/$/;"	m	struct:HtmlFont
-pNext	htmltext.c	/^    HtmlTextMapping *pNext;$/;"	m	struct:HtmlTextMapping	file:
-pNext	htmltext.c	/^    struct sgEsc *pNext;      \/* Next sequence with the same hash on zName *\/$/;"	m	struct:sgEsc	file:
-pNext	htmlutil.c	/^    InstCommand *pNext;     \/* Next in linked list starting at pGlobal *\/$/;"	m	struct:InstCommand	file:
-pNode	htmldraw.c	/^            HtmlNode *pNode;$/;"	m	struct:HtmlCanvasItem::<anonymous>::GenericItem	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;          \/* Node associated with the 'overflow' property *\/$/;"	m	struct:CanvasOverflow	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;         \/* Associate document node *\/$/;"	m	struct:CanvasImage	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;         \/* Node pointer *\/$/;"	m	struct:CanvasLine	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;         \/* Text node *\/$/;"	m	struct:CanvasText	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;         \/* Use computed properties from this node *\/$/;"	m	struct:CanvasBox	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;$/;"	m	struct:LayoutBboxQuery	file:
-pNode	htmldraw.c	/^    HtmlNode *pNode;$/;"	m	struct:Outline	file:
-pNode	htmlinline.c	/^    HtmlNode *pNode;        \/* Pointer to the node that generated the context *\/$/;"	m	struct:InlineContext	file:
-pNode	htmlinline.c	/^  HtmlNode *pNode;            \/* Associated tree node *\/$/;"	m	struct:InlineBox	file:
-pNode	htmlinline.c	/^  HtmlNode *pNode;            \/* Document node that generated this border *\/$/;"	m	struct:InlineBorder	file:
-pNode	htmllayout.c	/^    HtmlNode *pNode;$/;"	m	struct:NodeList	file:
-pNode	htmlprop.h	/^    HtmlNode *pNode;                 \/* Node to associate LOG with *\/$/;"	m	struct:HtmlComputedValuesCreator
-pNode	htmltable.c	/^    HtmlNode *pNode;          \/* Node with "display:table-cell" *\/$/;"	m	struct:TableCell	file:
-pNode	htmltable.c	/^    HtmlNode *pNode;         \/* <table> node *\/$/;"	m	struct:TableData	file:
-pNodeCmd	html.h	/^    HtmlNodeCmd *pNodeCmd;         \/* Tcl command for this node *\/$/;"	m	struct:HtmlNode
-pNodeList	htmltree.c	/^  Tcl_Obj *pNodeList;$/;"	m	struct:HtmlFragmentContext	file:
-pObj	htmltext.c	/^    Tcl_Obj *pObj;$/;"	m	struct:HtmlText	file:
-pOutline	htmldraw.c	/^    Outline *pOutline;$/;"	m	struct:GetPixmapQuery	file:
-pOverflow	htmldraw.c	/^    Overflow *pOverflow;$/;"	m	struct:CanvasItemSorterSlot	file:
-pOverflowList	htmldraw.c	/^    Overflow *pOverflowList;$/;"	m	struct:GetPixmapQuery	file:
-pOverride	html.h	/^    Tcl_Obj *pOverride;                    \/* List of property overrides *\/$/;"	m	struct:HtmlElementNode
-pParent	html.h	/^    HtmlNode *pParent;             \/* Parent of this node *\/$/;"	m	struct:HtmlNode
-pParent	htmlinline.c	/^  InlineBorder *pParent;$/;"	m	struct:InlineBorder	file:
-pParent	htmlprop.h	/^    HtmlNode *pParent;               \/* Node to inherit from *\/$/;"	m	struct:HtmlComputedValuesCreator
-pPrev	html.h	/^    HtmlNodeStack *pPrev;$/;"	m	struct:HtmlNodeStack
-pPrevNode	htmldraw.c	/^    HtmlNode *pPrevNode;$/;"	m	struct:BboxContext	file:
-pPreviousValues	html.h	/^    HtmlComputedValues *pPreviousValues;   \/* Previous CSS property values *\/$/;"	m	struct:HtmlElementNode
-pPriority	cssInt.h	/^    CssPriority *pPriority;  \/* Pointer to the priority of source stylesheet *\/$/;"	m	struct:CssRule
-pPriority	cssInt.h	/^    CssPriority *pPriority;$/;"	m	struct:CssStyleSheet
-pPriority1	cssInt.h	/^    CssPriority *pPriority1;$/;"	m	struct:CssParse
-pPriority2	cssInt.h	/^    CssPriority *pPriority2;$/;"	m	struct:CssParse
-pProp	cssInt.h	/^        CssProperty *pProp;$/;"	m	struct:CssPropertySet::CssPropertySetItem
-pPropertySet	cssInt.h	/^    CssPropertySet *pPropertySet;   \/* Declarations being parsed. *\/$/;"	m	struct:CssParse
-pPropertySet	cssInt.h	/^    CssPropertySet *pPropertySet;  \/* Property values for the rule. *\/$/;"	m	struct:CssRule
-pPropertyValues	html.h	/^    HtmlComputedValues *pPropertyValues;   \/* Current CSS property values *\/$/;"	m	struct:HtmlElementNode
-pPrototypeCreator	html.h	/^    HtmlComputedValuesCreator *pPrototypeCreator;$/;"	m	struct:HtmlTree
-pReplace	html.h	/^    Tcl_Obj *pReplace;            \/* Replacement window name *\/$/;"	m	struct:HtmlNodeReplacement
-pReplacement	html.h	/^    HtmlNodeReplacement *pReplacement;     \/* Replaced object, if any *\/$/;"	m	struct:HtmlElementNode
-pRestyle	html.h	/^    HtmlNode *pRestyle;         \/* Restyle this node *\/$/;"	m	struct:HtmlCallback
-pRoot	html.h	/^    HtmlNode *pRoot;                \/* The root-node of the document. *\/$/;"	m	struct:HtmlTree
-pRoot	htmltree.c	/^  HtmlNode *pRoot;$/;"	m	struct:HtmlFragmentContext	file:
-pRootBorder	htmlinline.c	/^    InlineBorder *pRootBorder;$/;"	m	struct:InlineContext	file:
-pRuleList	csssearch.c	/^  CssRule *pRuleList;        \/* The list of CSS selectors *\/$/;"	m	struct:CssSearch	file:
-pScrollbar	html.h	/^    HtmlNodeScrollbars *pScrollbar;        \/* Internal scrollbars, if any *\/$/;"	m	struct:HtmlElementNode
-pSearchCache	html.h	/^    HtmlSearchCache *pSearchCache;$/;"	m	struct:HtmlTree
-pSearchRoot	csssearch.c	/^  HtmlNode *pSearchRoot;     \/* Root of sub-tree to search *\/$/;"	m	struct:CssSearch	file:
-pSelector	cssInt.h	/^    CssSelector *pSelector;         \/* Selector currently being parsed *\/$/;"	m	struct:CssParse
-pSelector	cssInt.h	/^    CssSelector *pSelector;  \/* The selector-chain for this rule *\/$/;"	m	struct:CssRule
-pSelector	cssdynamic.c	/^    CssSelector *pSelector;   \/* The selector for this condition *\/$/;"	m	struct:CssDynamic	file:
-pSkip	htmldraw.c	/^    HtmlCanvasItem *pSkip;$/;"	m	struct:CanvasOrigin	file:
-pSnapshot	html.h	/^    HtmlCanvasSnapshot *pSnapshot;$/;"	m	struct:HtmlCallback
-pStack	html.h	/^    HtmlNodeStack *pStack;                 \/* Stacking context *\/$/;"	m	struct:HtmlElementNode
-pStack	html.h	/^    HtmlNodeStack *pStack;$/;"	m	struct:HtmlTree
-pStack	htmlstyle.c	/^    HtmlNodeStack *pStack;$/;"	m	struct:StackCompare	file:
-pStyle	cssInt.h	/^    CssStyleSheet *pStyle;$/;"	m	struct:CssParse
-pStyle	html.h	/^    CssPropertySet *pStyle;                \/* Parsed inline style *\/$/;"	m	struct:HtmlElementNode
-pStyle	html.h	/^    CssStyleSheet *pStyle;          \/* Style sheet configuration *\/$/;"	m	struct:HtmlTree
-pStyleCmd	html.h	/^    Tcl_Obj *pStyleCmd;           \/* Script passed to -stylecmd *\/$/;"	m	struct:HtmlNodeReplacement
-pStyleId	cssInt.h	/^    Tcl_Obj *pStyleId;$/;"	m	struct:CssParse
-pTag	html.h	/^    HtmlWidgetTag *pTag;       \/* Tag properties *\/$/;"	m	struct:HtmlTaggedRegion
-pTag	htmltext.c	/^    HtmlWidgetTag *pTag; $/;"	m	struct:TagDeleteContext	file:
-pTag	htmltext.c	/^    HtmlWidgetTag *pTag;$/;"	m	struct:TagOpData	file:
-pTagged	html.h	/^    HtmlTaggedRegion *pTagged;     \/* List of applied Widget tags *\/$/;"	m	struct:HtmlTextNode
-pText	html.h	/^    HtmlText *pText;$/;"	m	struct:HtmlTree
-pText	htmltext.c	/^    HtmlText *pText;$/;"	m	struct:HtmlTextInit	file:
-pTextNode	html.h	/^    HtmlTextNode *pTextNode;$/;"	m	struct:HtmlTextIter
-pTextNode	htmltext.c	/^    HtmlTextNode *pTextNode;$/;"	m	struct:HtmlTextMapping	file:
-pTileName	htmlimage.c	/^    Tcl_Obj *pTileName;              \/* Name of Tk tile image *\/$/;"	m	struct:HtmlImage2	file:
-pTo	htmltext.c	/^    HtmlNode *pTo;$/;"	m	struct:TagOpData	file:
-pTree	cssInt.h	/^    HtmlTree *pTree;                \/* Tree used to determine if quirks mode *\/$/;"	m	struct:CssParse
-pTree	csssearch.c	/^  HtmlTree *pTree;$/;"	m	struct:CssSearch	file:
-pTree	html.h	/^    HtmlTree *pTree;$/;"	m	struct:HtmlNodeCmd
-pTree	htmldraw.c	/^    HtmlTree *pTree;$/;"	m	struct:GetPixmapQuery	file:
-pTree	htmldraw.c	/^    HtmlTree *pTree;$/;"	m	struct:ScrollToQuery	file:
-pTree	htmlimage.c	/^    HtmlTree *pTree;                 \/* Pointer to owner HtmlTree object *\/$/;"	m	struct:HtmlImageServer	file:
-pTree	htmlinline.c	/^    HtmlTree *pTree;        \/* Pointer to owner widget *\/$/;"	m	struct:InlineContext	file:
-pTree	htmllayout.h	/^    HtmlTree *pTree;         \/* The Html widget. *\/$/;"	m	struct:LayoutContext
-pTree	htmlprop.h	/^    HtmlTree *pTree;$/;"	m	struct:HtmlComputedValuesCreator
-pUniversalRules	cssInt.h	/^    CssRule *pUniversalRules;  \/* Rules that do not belong to any other list *\/$/;"	m	struct:CssStyleSheet
-pUnscaled	htmlimage.c	/^    HtmlImage2 *pUnscaled;           \/* Unscaled image, if this is scaled *\/$/;"	m	struct:HtmlImage2	file:
-pUrlCmd	cssInt.h	/^    Tcl_Obj *pUrlCmd;               \/* Script to invoke for url() *\/$/;"	m	struct:CssParse
-padding	htmlprop.h	/^    HtmlFourSides padding;            \/* 'padding'        (pixels, %)         *\/$/;"	m	struct:HtmlComputedValues
-paintNodesSearchCb	htmldraw.c	/^paintNodesSearchCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-parseCmd	htmltcl.c	/^parseCmd(clientData, interp, objc, objv)$/;"	f	file:
-photoputblock	htmlimage.c	/^photoputblock(interp, handle, blockPtr, x, y, width, height, compRule)$/;"	f	file:
-physicalToPixels	htmlprop.c	/^physicalToPixels(p, rVal, type)$/;"	f	file:
-pixelsToPoints	htmlprop.c	/^pixelsToPoints(p, pixels)$/;"	f	file:
-pixmap	htmldraw.c	/^        Pixmap pixmap;$/;"	m	struct:CanvasItemSorter::OverflowAndPixmap	file:
-pixmap	htmldraw.c	/^    Pixmap pixmap;$/;"	m	struct:Overflow	file:
-pixmapQueryCb	htmldraw.c	/^pixmapQueryCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-pixmapQuerySwitchOverflow	htmldraw.c	/^pixmapQuerySwitchOverflow(pQuery, pOverflow)$/;"	f	file:
-pmap	htmldraw.c	/^    Pixmap pmap;$/;"	m	struct:GetPixmapQuery	file:
-pmh	htmldraw.c	/^    int pmh;$/;"	m	struct:Overflow	file:
-pmw	htmldraw.c	/^    int pmw;$/;"	m	struct:Overflow	file:
-pmx	htmldraw.c	/^    int pmx;                 \/* Top left of pixmap relative to origin *\/$/;"	m	struct:Overflow	file:
-pmy	htmldraw.c	/^    int pmy;$/;"	m	struct:Overflow	file:
-populateTextNode	htmltext.c	/^populateTextNode(n, z, pText, pnToken, pnText)$/;"	f	file:
-position	htmlprop.h	/^    HtmlFourSides position;           \/* (pixels, %, AUTO) *\/$/;"	m	struct:HtmlComputedValues
-preloadCmd	htmltcl.c	/^preloadCmd(clientData, interp, objc, objv)$/;"	f	file:
-primitivesCmd	htmltcl.c	/^primitivesCmd(clientData, interp, objc, objv)$/;"	f	file:
-propdef	htmlprop.c	/^static PropertyDef propdef[] = {$/;"	v	file:
-propertyDup	css.c	/^static CssProperty *propertyDup(pProp)$/;"	f	file:
-propertyIsLength	css.c	/^static int propertyIsLength(pProp)$/;"	f	file:
-propertyIsLength2	css.c	/^propertyIsLength2(pParse, pProp)$/;"	f	file:
-propertySetAdd	css.c	/^propertySetAdd(p, i, v)$/;"	f	file:
-propertySetAddFontFamily	css.c	/^propertySetAddFontFamily(pParse, p, v)$/;"	f	file:
-propertySetAddShortcutBorder	css.c	/^static void propertySetAddShortcutBorder(p, prop, v)$/;"	f	file:
-propertySetAddShortcutBorderColor	css.c	/^static void propertySetAddShortcutBorderColor(p, prop, v)$/;"	f	file:
-propertySetAddShortcutFont	css.c	/^propertySetAddShortcutFont(pParse, p, v)$/;"	f	file:
-propertySetFree	css.c	/^propertySetFree(CssPropertySet *p){$/;"	f	file:
-propertySetGet	css.c	/^propertySetGet(p, i)$/;"	f	file:
-propertySetNew	css.c	/^propertySetNew()$/;"	f	file:
-propertySetToPropertyValues	css.c	/^propertySetToPropertyValues(p, aPropDone, pSet)$/;"	f	file:
-propertyTransformBgPosition	css.c	/^propertyTransformBgPosition(pProp)$/;"	f	file:
-propertyValuesAttr	htmlprop.c	/^propertyValuesAttr(p, eProp, zArglist)$/;"	f	file:
-propertyValuesObjContent	htmlprop.c	/^propertyValuesObjContent(p)$/;"	f	file:
-propertyValuesObjFontFamily	htmlprop.c	/^propertyValuesObjFontFamily(p)$/;"	f	file:
-propertyValuesObjFontSize	htmlprop.c	/^propertyValuesObjFontSize(p)$/;"	f	file:
-propertyValuesObjFontStyle	htmlprop.c	/^propertyValuesObjFontStyle(p)$/;"	f	file:
-propertyValuesObjFontWeight	htmlprop.c	/^propertyValuesObjFontWeight(p)$/;"	f	file:
-propertyValuesObjLineHeight	htmlprop.c	/^propertyValuesObjLineHeight(p)$/;"	f	file:
-propertyValuesObjVerticalAlign	htmlprop.c	/^propertyValuesObjVerticalAlign(p)$/;"	f	file:
-propertyValuesObjZIndex	htmlprop.c	/^propertyValuesObjZIndex(p)$/;"	f	file:
-propertyValuesSetBorderWidth	htmlprop.c	/^propertyValuesSetBorderWidth(p, pIVal, em_mask, pProp)$/;"	f	file:
-propertyValuesSetColor	htmlprop.c	/^propertyValuesSetColor(p, pCVar, pProp)$/;"	f	file:
-propertyValuesSetContent	htmlprop.c	/^propertyValuesSetContent(p, pProp)$/;"	f	file:
-propertyValuesSetEnum	htmlprop.c	/^propertyValuesSetEnum(p, pEVar, aOptions, pProp)$/;"	f	file:
-propertyValuesSetFontFamily	htmlprop.c	/^propertyValuesSetFontFamily(p, pProp)$/;"	f	file:
-propertyValuesSetFontSize	htmlprop.c	/^propertyValuesSetFontSize(p, pProp)$/;"	f	file:
-propertyValuesSetFontStyle	htmlprop.c	/^propertyValuesSetFontStyle(p, pProp)$/;"	f	file:
-propertyValuesSetFontWeight	htmlprop.c	/^propertyValuesSetFontWeight(p, pProp)$/;"	f	file:
-propertyValuesSetImage	htmlprop.c	/^propertyValuesSetImage(p, pImVar, pProp)$/;"	f	file:
-propertyValuesSetLength	htmlprop.c	/^propertyValuesSetLength(p, pIVal, em_mask, pProp, allowNegative)$/;"	f	file:
-propertyValuesSetLineHeight	htmlprop.c	/^propertyValuesSetLineHeight(p, pProp)$/;"	f	file:
-propertyValuesSetSize	htmlprop.c	/^propertyValuesSetSize(p, pIVal, p_mask, pProp, allow_mask)$/;"	f	file:
-propertyValuesSetVerticalAlign	htmlprop.c	/^propertyValuesSetVerticalAlign(p, pProp)$/;"	f	file:
-propertyValuesSetZIndex	htmlprop.c	/^propertyValuesSetZIndex(p, pProp)$/;"	f	file:
-propertyValuesTclScript	htmlprop.c	/^propertyValuesTclScript(p, eProp, zScript)$/;"	f	file:
-pzContent	htmlprop.h	/^    char **pzContent;$/;"	m	struct:HtmlComputedValuesCreator
-rVal	css.h	/^        double rVal;$/;"	m	union:CssProperty::<anonymous>
-rcsid	css.c	/^static const char rcsid[] = "$Id: css.c,v 1.124 2007\/09\/21 09:32:39 danielk1977 Exp $";$/;"	v	file:
-rcsid	cssdynamic.c	/^static const char rcsid[] = "$Id: cssdynamic.c,v 1.12 2007\/06\/10 07:53:03 danielk1977 Exp $";$/;"	v	file:
-rcsid	csssearch.c	/^static const char rcsid[] = "$Id: csssearch.c,v 1.5 2007\/07\/16 15:35:49 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmldecode.c	/^static char const rcsid[] = "@(#) $Id: htmldecode.c,v 1.6 2007\/09\/20 18:09:31 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmldraw.c	/^static const char rcsid[] = "$Id: htmldraw.c,v 1.200 2007\/09\/26 08:14:48 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmlfloat.c	/^static const char rcsid[] = "$Id: htmlfloat.c,v 1.21 2006\/10\/27 15:19:18 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmlhash.c	/^static const char rcsid[] = "$Id: htmlhash.c,v 1.22 2006\/10\/27 06:40:33 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmlimage.c	/^static const char rcsid[] = "$Id: htmlimage.c,v 1.65 2007\/09\/25 11:21:42 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmlinline.c	/^static const char rcsid[] = "$Id: htmlinline.c,v 1.47 2007\/06\/10 07:53:03 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmllayout.c	/^static const char rcsid[] = "$Id: htmllayout.c,v 1.259 2007\/09\/28 14:14:56 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmlparse.c	/^static char const rcsid[] =$/;"	v	file:
-rcsid	htmlprop.c	/^static const char rcsid[] = "$Id: htmlprop.c,v 1.120 2007\/09\/23 06:34:08 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmlstyle.c	/^static const char rcsid[] = "$Id: htmlstyle.c,v 1.57 2007\/09\/25 11:21:42 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmltable.c	/^static const char rcsid[] = "$Id: htmltable.c,v 1.122 2007\/09\/15 07:59:12 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmltagdb.c	/^static const char rcsid[] = "$Id: htmltagdb.c,v 1.10 2006\/07\/14 13:37:56 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmltcl.c	/^static char const rcsid[] = "@(#) $Id: htmltcl.c,v 1.190 2007\/09\/28 14:14:56 danielk1977 Exp $";$/;"	v	file:
-rcsid	htmltree.c	/^static const char rcsid[] = "$Id: htmltree.c,v 1.150 2007\/09\/25 11:21:43 danielk1977 Exp $";$/;"	v	file:
-rcsid	main.c	/^static const char rcsid[] = "$Id: main.c,v 1.9 2007\/09\/28 14:14:56 danielk1977 Exp $";$/;"	v	file:
-rcsid	restrack.c	/^static const char rcsid[] = "$Id: restrack.c,v 1.11 2007\/01\/27 12:53:15 danielk1977 Exp $";$/;"	v	file:
-rcsid	swproc.c	/^static const char rcsid[] = "$Id: swproc.c,v 1.6 2006\/06\/10 12:38:38 danielk1977 Exp $";$/;"	v	file:
-read6bits	htmldecode.c	/^int read6bits(unsigned char **pzIn){$/;"	f
-readUriEncodedByte	htmldecode.c	/^unsigned char readUriEncodedByte(unsigned char **pzIn){$/;"	f
-relayoutCb	htmltcl.c	/^relayoutCb(pTree, pNode, clientData)$/;"	f	file:
-relayoutCmd	htmltcl.c	/^relayoutCmd(clientData, interp, objc, objv)$/;"	f	file:
-removeTagFromNode	htmltext.c	/^removeTagFromNode(pTextNode, pTag)$/;"	f	file:
-resetCmd	htmltcl.c	/^resetCmd(clientData, interp, objc, objv)$/;"	f	file:
-returnDescNode	htmldraw.c	/^returnDescNode(pNode1, pNode2)$/;"	f	file:
-rgbToColor	css.c	/^rgbToColor(zOut, zRgb, nRgb)$/;"	f	file:
-right	html.h	/^    int right;$/;"	m	struct:HtmlCanvas
-right	htmldraw.c	/^    int right;$/;"	m	struct:LayoutBboxQuery	file:
-right	htmldraw.c	/^    int right;$/;"	m	struct:PaintNodesQuery	file:
-right	htmlfloat.c	/^    int right;                \/* Right floating margin *\/$/;"	m	struct:FloatListEntry	file:
-rightAuto	htmllayout.h	/^    int rightAuto;       \/* True if ('margin-right' == "auto") *\/$/;"	m	struct:MarginProperties
-rightValid	htmlfloat.c	/^    int rightValid;           \/* True if the right margin is valid *\/$/;"	m	struct:FloatListEntry	file:
-row	htmltable.c	/^    int row;                 \/* Current row *\/$/;"	m	struct:TableData	file:
-rowGroupIterate	htmltable.c	/^rowGroupIterate(pTree, pNode, p)$/;"	f	file:
-rowIterate	htmltable.c	/^rowIterate(pTree, pNode, p)$/;"	f	file:
-ruleCompare	css.c	/^ruleCompare(CssRule *pLeft, CssRule *pRight) {$/;"	f	file:
-ruleFree	css.c	/^ruleFree(pRule)$/;"	f	file:
-ruleQsortCompare	css.c	/^ruleQsortCompare(const void *pLeft, const void *pRight)$/;"	f	file:
-ruleToPropertyValues	css.c	/^ruleToPropertyValues(p, aPropDone, pRule)$/;"	f	file:
-rulelistReport	css.c	/^rulelistReport(pRule, pObj, pN)$/;"	f	file:
-scoreStack	htmlstyle.c	/^scoreStack(pParentStack, pStack, eStack)$/;"	f	file:
-scrollToNodeCb	htmldraw.c	/^scrollToNodeCb(pItem, origin_x, origin_y, pOverflow, clientData)$/;"	f	file:
-searchCanvas	htmldraw.c	/^searchCanvas(pTree, ymin, ymax, xFunc, clientData, requireOverflow)$/;"	f	file:
-searchCmd	htmltcl.c	/^searchCmd(clientData, interp, objc, objv)$/;"	f	file:
-searchSortedCanvas	htmldraw.c	/^searchSortedCanvas(pTree, ymin, ymax, pNode, xFunc, clientData)$/;"	f	file:
-selectorFree	css.c	/^static void selectorFree(pSelector)$/;"	f	file:
-sequenceCb	htmltree.c	/^sequenceCb(pTree, pNode, clientData)$/;"	f	file:
-setClippingDrawable	htmldraw.c	/^setClippingDrawable(pQuery, pItem, pDrawable, pX, pY)$/;"	f	file:
-setClippingRegion	htmldraw.c	/^setClippingRegion(pQuery, pDisplay, gc)$/;"	f	file:
-setDisplay97	htmlprop.c	/^setDisplay97(p)$/;"	f	file:
-setNodeAttribute	htmltree.c	/^setNodeAttribute(pNode, zAttrName, zAttrVal)$/;"	f	file:
-setSnapshotId	htmltcl.c	/^static int setSnapshotId(pTree, pNode)$/;"	f	file:
-setStackingContext	htmlstyle.c	/^static void setStackingContext(p, ppOut)$/;"	f	file:
-setValueCallback	htmllayout.c	/^setValueCallback(pNormal, pCallback, y)$/;"	f	file:
-setsizemask	htmlprop.c	/^    int setsizemask;           \/* If eType==LENGTH, mask for SetSize() *\/$/;"	m	struct:PropertyDef	file:
-sgEsc	htmltext.c	/^struct sgEsc {$/;"	s	file:
-shortcutBackground	css.c	/^shortcutBackground(pParse, p, v)$/;"	f	file:
-shortcutBackgroundPosition	css.c	/^shortcutBackgroundPosition(pParse, p, v)$/;"	f	file:
-shortcutListStyle	css.c	/^shortcutListStyle(pParse, p, v)$/;"	f	file:
-shrink	html.h	/^    int      shrink;                    \/* Boolean *\/$/;"	m	struct:HtmlOptions
-size_to_fontsize	tkhtml.tcl	/^    proc size_to_fontsize {} {$/;"	p
-sizemskdef	htmlprop.c	/^} sizemskdef[] = {$/;"	v
-snapshotLayout	htmltcl.c	/^snapshotLayout(pTree)$/;"	f	file:
-snapshotReleaseItemsCb	htmldraw.c	/^snapshotReleaseItemsCb(pItem, x, y, pOverflow, clientData)$/;"	f	file:
-snapshotZero	htmltcl.c	/^snapshotZero(pTree)$/;"	f	file:
-snprintf	html.h	107;"	d
-sorterCb	htmldraw.c	/^sorterCb(pItem, x, y, pOverflow, clientData)$/;"	f	file:
-sorterInsert	htmldraw.c	/^sorterInsert(pSorter, pItem, x, y, pOverflow)$/;"	f	file:
-sorterIterate	htmldraw.c	/^sorterIterate(pSorter, xFunc, clientData)$/;"	f	file:
-sorterReset	htmldraw.c	/^sorterReset(pSorter)$/;"	f	file:
-space_pixels	htmlprop.h	/^    int space_pixels;      \/* Pixels per space (' ') in this font *\/$/;"	m	struct:HtmlFont
-specificity	cssInt.h	/^    int specificity;         \/* Specificity of the selector *\/$/;"	m	struct:CssRule
-stackCompare	htmlstyle.c	/^stackCompare(pVoidLeft, pVoidRight)$/;"	f	file:
-stackType	htmlstyle.c	/^stackType(p) $/;"	f	file:
-startrow	htmltable.c	/^    int startrow;             \/* Index of row cell starts at *\/$/;"	m	struct:TableCell	file:
-state	html.h	/^    HtmlTreeState state;$/;"	m	struct:HtmlTree
-stricmp	html.h	97;"	d
-strnicmp	html.h	98;"	d
-styleCmd	htmltcl.c	/^styleCmd(clientData, interp, objc, objv)$/;"	f	file:
-styleNode	htmlstyle.c	/^styleNode(pTree, pNode, clientData)$/;"	f	file:
-styleconfigCmd	htmltcl.c	/^styleconfigCmd(clientData, interp, objc, objv)$/;"	f	file:
-stylereportCmd	htmltcl.c	/^stylereportCmd(clientData, interp, objc, objv)$/;"	f	file:
-swproc_rtCmd	swproc.c	/^swproc_rtCmd(clientData, interp, objc, objv)$/;"	f	file:
-t	htmldraw.c	/^        CanvasText   t;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-tableCalculateCellWidths	htmltable.c	/^tableCalculateCellWidths(pData, availablewidth, isAuto)$/;"	f	file:
-tableCalculateMaxWidth	htmltable.c	/^tableCalculateMaxWidth(pData)$/;"	f	file:
-tableColWidthMultiSpan	htmltable.c	/^static CellCallback tableColWidthMultiSpan;$/;"	v	file:
-tableColWidthMultiSpan	htmltable.c	/^tableColWidthMultiSpan(pNode, col, colspan, row, rowspan, pContext)$/;"	f	file:
-tableColWidthSingleSpan	htmltable.c	/^static CellCallback tableColWidthSingleSpan;$/;"	v	file:
-tableColWidthSingleSpan	htmltable.c	/^tableColWidthSingleSpan(pNode, col, colspan, row, rowspan, pContext)$/;"	f	file:
-tableCountCells	htmltable.c	/^static CellCallback tableCountCells;$/;"	v	file:
-tableCountCells	htmltable.c	/^tableCountCells(pNode, col, colspan, row, rowspan, pContext)$/;"	f	file:
-tableCountRows	htmltable.c	/^tableCountRows(pNode, row, pContext)$/;"	f	file:
-tableDrawCells	htmltable.c	/^static CellCallback tableDrawCells;$/;"	v	file:
-tableDrawCells	htmltable.c	/^tableDrawCells(pNode, col, colspan, row, rowspan, pContext)$/;"	f	file:
-tableDrawRow	htmltable.c	/^static RowCallback tableDrawRow;$/;"	v	file:
-tableDrawRow	htmltable.c	/^tableDrawRow(pNode, row, pContext)$/;"	f	file:
-tableIterate	htmltable.c	/^tableIterate(pTree, pNode, xCallback, xRowCallback, pContext)$/;"	f	file:
-tagAddCmd	htmltcl.c	/^tagAddCmd(clientData, interp, objc, objv)$/;"	f	file:
-tagAddRemoveCallback	htmltext.c	/^tagAddRemoveCallback(pTree, pNode, clientData)$/;"	f	file:
-tagCfgCmd	htmltcl.c	/^tagCfgCmd(clientData, interp, objc, objv)$/;"	f	file:
-tagCmd	htmltcl.c	/^tagCmd(clientData, interp, objc, objv)$/;"	f	file:
-tagDeleteCallback	htmltext.c	/^tagDeleteCallback(pTree, pNode, clientData)$/;"	f	file:
-tagDeleteCmd	htmltcl.c	/^tagDeleteCmd(clientData, interp, objc, objv)$/;"	f	file:
-tagOptionTable	html.h	/^    Tk_OptionTable tagOptionTable;     \/* Option table for tags*\/$/;"	m	struct:HtmlTree
-tagRemoveCmd	htmltcl.c	/^tagRemoveCmd(clientData, interp, objc, objv)$/;"	f	file:
-textBboxCmd	htmltcl.c	/^textBboxCmd(clientData, interp, objc, objv)$/;"	f	file:
-textCmd	htmltcl.c	/^textCmd(clientData, interp, objc, objv)$/;"	f	file:
-textContent	htmltagdb.c	/^textContent(pTree, pNode, tag)$/;"	f	file:
-textIndexCmd	htmltcl.c	/^textIndexCmd(clientData, interp, objc, objv)$/;"	f	file:
-textOffsetCmd	htmltcl.c	/^textOffsetCmd(clientData, interp, objc, objv)$/;"	f	file:
-textTextCmd	htmltcl.c	/^textTextCmd(clientData, interp, objc, objv)$/;"	f	file:
-textToFontFamilyProperty	css.c	/^textToFontFamilyProperty(pParse, zText, nText)$/;"	f	file:
-textToProperty	css.c	/^textToProperty(pParse, z, n)$/;"	f	file:
-textarea_height	tkhtml.tcl	/^    proc textarea_height {} {$/;"	p
-textarea_width	tkhtml.tcl	/^    proc textarea_width {} {$/;"	p
-tile	htmlimage.c	/^    Tk_Image tile;                   \/* Tiled image, or zero *\/$/;"	m	struct:HtmlImage2	file:
-tileimage	htmldraw.c	/^tileimage($/;"	f	file:
-timercmd	html.h	/^    Tcl_Obj *timercmd;$/;"	m	struct:HtmlOptions
-timevalToClicks	htmlutil.c	56;"	d	file:
-tkfont	htmlprop.h	/^    Tk_Font tkfont;        \/* The Tk font *\/$/;"	m	struct:HtmlFont
-tkwin	html.h	/^    Tk_Window tkwin;           \/* Widget window *\/$/;"	m	struct:HtmlTree
-tokenLength	htmltext.c	/^tokenLength(zToken, zEnd)$/;"	f	file:
-tokenToProperty	css.c	/^tokenToProperty(pParse, pToken)$/;"	f	file:
-tokenToPropertyList	css.c	/^tokenToPropertyList(pToken, apProp, nMax) $/;"	f	file:
-tokenToReal	css.c	/^static int tokenToReal(pToken, pLen, pVal)$/;"	f	file:
-tokenToString	css.c	/^static char *tokenToString(CssToken *pToken){$/;"	f	file:
-tokenizeWrapper	htmlparse.c	/^tokenizeWrapper(pTree, isFin, xAddText, xAddElement, xAddClosing)$/;"	f	file:
-top	html.h	/^    int top;$/;"	m	struct:HtmlCanvas
-top	htmldraw.c	/^    int top;$/;"	m	struct:LayoutBboxQuery	file:
-top	htmldraw.c	/^    int top;$/;"	m	struct:PaintNodesQuery	file:
-topAuto	htmllayout.h	/^    int topAuto;  $/;"	m	struct:MarginProperties
-translateNumericEscape	htmltext.c	/^translateNumericEscape(z, pI)$/;"	f	file:
-treeAddFosterClosingTag	htmltree.c	/^treeAddFosterClosingTag(pTree, eTag)$/;"	f	file:
-treeAddFosterElement	htmltree.c	/^treeAddFosterElement(pTree, eTag, pAttr)$/;"	f
-treeAddFosterText	htmltree.c	/^treeAddFosterText(pTree, pTextNode)$/;"	f	file:
-treeAddTableComponent	htmltree.c	/^treeAddTableComponent(pTree, eTag, pAttr)$/;"	f	file:
-treeCloseFosterTree	htmltree.c	/^treeCloseFosterTree(pTree)$/;"	f	file:
-type	html.h	/^  Html_16 type;                   \/* Markup type code *\/$/;"	m	struct:HtmlTokenMap
-type	htmldraw.c	/^    int type;$/;"	m	struct:HtmlCanvasItem	file:
-u32	cssInt.h	/^typedef unsigned int u32;$/;"	t
-u8	cssInt.h	/^typedef unsigned char u8;$/;"	t
-updateInstData	htmlutil.c	/^updateInstData(pGlobal, p, iClicks)$/;"	f	file:
-upgradeRestylePoint	htmltcl.c	/^upgradeRestylePoint(ppRestyle, pNode)$/;"	f	file:
-uriObjCmd	htmldecode.c	/^uriObjCmd(clientData, interp, objc, objv)$/;"	f	file:
-uriObjDel	htmldecode.c	/^uriObjDel(clientData)$/;"	f	file:
-uriResolve	htmldecode.c	/^uriResolve(pBase, pObjRel)$/;"	f	file:
-utf8Read	htmltext.c	/^static Tcl_UniChar utf8Read($/;"	f	file:
-v	css.h	/^    } v;$/;"	m	struct:CssProperty
-value	htmltext.c	/^    char value[8];            \/* The value for this sequence. ex: "&" *\/$/;"	m	struct:sgEsc	file:
-values	htmlprop.h	/^    HtmlComputedValues values;$/;"	m	struct:HtmlComputedValuesCreator
-vc	htmllayout.h	/^    HtmlCanvas vc;         \/* UP: Canvas to draw the block on. *\/$/;"	m	struct:BoxContext
-vertical	html.h	/^    HtmlNodeReplacement vertical;$/;"	m	struct:HtmlNodeScrollbars
-vertical	htmldraw.c	/^    int vertical;$/;"	m	struct:CanvasOrigin	file:
-viewCommon	htmltcl.c	/^viewCommon(pTree, isXview, objc, objv)$/;"	f	file:
-vscrollbar	tkhtml.tcl	/^    proc vscrollbar {base node} {$/;"	p
-vsnprintf	html.h	106;"	d
-w	html.h	/^  int w;$/;"	m	struct:HtmlDamage
-w	htmldraw.c	/^        CanvasWindow w;$/;"	m	union:HtmlCanvasItem::<anonymous>	file:
-w	htmldraw.c	/^    int w;                    \/* Width of region *\/$/;"	m	struct:CanvasOverflow	file:
-w	htmldraw.c	/^    int w;                   \/* Width of box area *\/$/;"	m	struct:CanvasBox	file:
-w	htmldraw.c	/^    int w;                   \/* Width of image region *\/$/;"	m	struct:CanvasImage	file:
-w	htmldraw.c	/^    int w;                   \/* Width of line *\/$/;"	m	struct:CanvasLine	file:
-w	htmldraw.c	/^    int w;                   \/* Width of region *\/$/;"	m	struct:Overflow	file:
-w	htmldraw.c	/^    int w;                   \/* Width of the text *\/$/;"	m	struct:CanvasText	file:
-w	htmldraw.c	/^    int w;$/;"	m	struct:GetPixmapQuery	file:
-w	htmldraw.c	/^    int w;$/;"	m	struct:Outline	file:
-walkTree	htmltree.c	/^walkTree(pTree, xCallback, pNode, clientData)$/;"	f	file:
-widgetCmd	htmltcl.c	/^int widgetCmd(clientData, interp, objc, objv)$/;"	f
-widgetCmdDel	htmltcl.c	/^widgetCmdDel(clientData)$/;"	f	file:
-widgetRepair	htmldraw.c	/^widgetRepair(pTree, x, y, w, h, g)$/;"	f	file:
-width	html.h	/^    int      width;$/;"	m	struct:HtmlOptions
-width	htmlimage.c	/^    int width;                       \/* Width of HtmlImage2.image *\/$/;"	m	struct:HtmlImage2	file:
-width	htmllayout.h	/^    int width;             \/* UP: Generated box width. *\/$/;"	m	struct:BoxContext
-win	html.h	/^    Tk_Window win;                \/* Replacement window (if any) *\/$/;"	m	struct:HtmlNodeReplacement
-windowsRepair	htmldraw.c	/^windowsRepair(pTree, pCanvas)$/;"	f	file:
-windowsrepair	html.h	/^  int windowsrepair;$/;"	m	struct:HtmlDamage
-worldChangedCb	htmltcl.c	/^worldChangedCb(pTree, pNode, clientData)$/;"	f	file:
-wrapContent	htmllayout.c	/^wrapContent(pLayout, pBox, pContent, pNode)$/;"	f	file:
-writeCmd	htmltcl.c	/^writeCmd(clientData, interp, objc, objv)$/;"	f	file:
-writefile	cssprop.tcl	/^proc writefile {filename text} {$/;"	p
-x	html.h	/^  int x;$/;"	m	struct:HtmlDamage
-x	htmldraw.c	/^            int x;$/;"	m	struct:HtmlCanvasItem::<anonymous>::GenericItem	file:
-x	htmldraw.c	/^    int x;                           \/* item x-coord is relative to this *\/$/;"	m	struct:CanvasItemSorterSlot	file:
-x	htmldraw.c	/^    int x;                    \/* x-coord of top-left of region *\/$/;"	m	struct:CanvasOverflow	file:
-x	htmldraw.c	/^    int x;                   \/* Relative x coordinate *\/$/;"	m	struct:CanvasWindow	file:
-x	htmldraw.c	/^    int x;                   \/* Relative x coordinate to render at *\/$/;"	m	struct:CanvasBox	file:
-x	htmldraw.c	/^    int x;                   \/* Relative x coordinate to render at *\/$/;"	m	struct:CanvasImage	file:
-x	htmldraw.c	/^    int x;                   \/* Relative x coordinate to render at *\/$/;"	m	struct:CanvasLine	file:
-x	htmldraw.c	/^    int x;                   \/* Relative x coordinate to render at *\/$/;"	m	struct:CanvasText	file:
-x	htmldraw.c	/^    int x;                   \/* Top left of region relative to origin *\/$/;"	m	struct:Overflow	file:
-x	htmldraw.c	/^    int x;$/;"	m	struct:CanvasMarker	file:
-x	htmldraw.c	/^    int x;$/;"	m	struct:CanvasOrigin	file:
-x	htmldraw.c	/^    int x;$/;"	m	struct:GetPixmapQuery	file:
-x	htmldraw.c	/^    int x;$/;"	m	struct:NodeIndexQuery	file:
-x	htmldraw.c	/^    int x;$/;"	m	struct:NodeQuery	file:
-x	htmldraw.c	/^    int x;$/;"	m	struct:Outline	file:
-x	htmldraw.c	/^    } x;$/;"	m	struct:HtmlCanvasItem	file:
-x	htmllayout.h	/^      int x; $/;"	v
-x	htmltable.c	/^    int x;                   \/* x-coord to draw at *\/$/;"	m	struct:TableData	file:
-x	htmltable.c	/^    } x;$/;"	m	struct:CellReqWidth	file:
-xCall	htmlutil.c	/^    void (*xCall)(ClientData, int, void (*)(ClientData), ClientData);$/;"	m	struct:InstGlobal	file:
-xCallback	htmllayout.c	/^    void (*xCallback)(NormalFlow *, NormalFlowCallback *, int);$/;"	m	struct:NormalFlowCallback	file:
-xCallback	htmltable.c	/^    int (*xCallback)(HtmlNode *, int, int, int, int, void *);$/;"	m	struct:RowIterateContext	file:
-xCkalloc	css.c	/^static void * xCkalloc(size_t n){$/;"	f	file:
-xCkfree	css.c	/^static void xCkfree(void *p){$/;"	f	file:
-xClose	html.h	/^  HtmlContentTest xClose;         \/* Function to identify close tag *\/$/;"	m	struct:HtmlTokenMap
-xFunc	htmltcl.c	/^    Tcl_ObjCmdProc *xFunc;$/;"	m	struct:SubCmd	file:
-xObj	htmlprop.c	/^    Tcl_Obj *(*xObj)(HtmlComputedValues *);$/;"	m	struct:PropertyDef	file:
-xObj	htmlprop.c	/^  Tcl_Obj *(*xObj)(HtmlComputedValues *);$/;"	m	struct:CustomDef	file:
-xRowCallback	htmltable.c	/^    int (*xRowCallback)(HtmlNode *, int, void *);$/;"	m	struct:RowIterateContext	file:
-xSet	htmlprop.c	/^    int (*xSet)(HtmlComputedValuesCreator *, CssProperty *);$/;"	m	struct:PropertyDef	file:
-xSet	htmlprop.c	/^  int (*xSet)(HtmlComputedValuesCreator *, CssProperty *);$/;"	m	struct:CustomDef	file:
-xcolor	htmlprop.h	/^    XColor *xcolor;        \/* The XColor* *\/$/;"	m	struct:HtmlColor
-xhtml	html.h	/^    int      xhtml;                     \/* Boolean. True -> parse as XHTML *\/$/;"	m	struct:HtmlOptions
-xorigin	htmlfloat.c	/^    int xorigin;$/;"	m	struct:HtmlFloatList	file:
-xscroll	htmldraw.c	/^    int xscroll;$/;"	m	struct:Overflow	file:
-xscrollcommand	html.h	/^    Tcl_Obj *xscrollcommand;$/;"	m	struct:HtmlOptions
-xscrollincrement	html.h	/^    int      xscrollincrement;$/;"	m	struct:HtmlOptions
-xviewCmd	htmltcl.c	/^xviewCmd(clientData, interp, objc, objv)$/;"	f	file:
-y	html.h	/^  int y;$/;"	m	struct:HtmlDamage
-y	htmldraw.c	/^            int y; $/;"	m	struct:HtmlCanvasItem::<anonymous>::GenericItem	file:
-y	htmldraw.c	/^    int y;                           \/* item y-coord is relative to this *\/$/;"	m	struct:CanvasItemSorterSlot	file:
-y	htmldraw.c	/^    int y;                    \/* y-coord of top-left of region *\/$/;"	m	struct:CanvasOverflow	file:
-y	htmldraw.c	/^    int y;                   \/* Relative y coordinate *\/$/;"	m	struct:CanvasWindow	file:
-y	htmldraw.c	/^    int y;                   \/* Relative y coordinate for overline *\/$/;"	m	struct:CanvasLine	file:
-y	htmldraw.c	/^    int y;                   \/* Relative y coordinate to render at *\/$/;"	m	struct:CanvasBox	file:
-y	htmldraw.c	/^    int y;                   \/* Relative y coordinate to render at *\/$/;"	m	struct:CanvasImage	file:
-y	htmldraw.c	/^    int y;                   \/* Relative y coordinate to render at *\/$/;"	m	struct:CanvasText	file:
-y	htmldraw.c	/^    int y;                   \/* Top left of region relative to origin *\/$/;"	m	struct:Overflow	file:
-y	htmldraw.c	/^    int y;$/;"	m	struct:CanvasMarker	file:
-y	htmldraw.c	/^    int y;$/;"	m	struct:CanvasOrigin	file:
-y	htmldraw.c	/^    int y;$/;"	m	struct:GetPixmapQuery	file:
-y	htmldraw.c	/^    int y;$/;"	m	struct:NodeIndexQuery	file:
-y	htmldraw.c	/^    int y;$/;"	m	struct:NodeQuery	file:
-y	htmldraw.c	/^    int y;$/;"	m	struct:Outline	file:
-y	htmlfloat.c	/^    int y;                    \/* Y-coord for top of this margin *\/$/;"	m	struct:FloatListEntry	file:
-y	htmltable.c	/^    int y;                   \/* y-coord to draw at *\/$/;"	m	struct:TableData	file:
-y_linethrough	htmldraw.c	/^    int y_linethrough;       \/* y coordinate for linethrough relative to "y" *\/$/;"	m	struct:CanvasLine	file:
-y_underline	htmldraw.c	/^    int y_underline;         \/* y coordinate for underline relative to "y" *\/$/;"	m	struct:CanvasLine	file:
-yend	htmlfloat.c	/^    int yend;$/;"	m	struct:HtmlFloatList	file:
-yorigin	htmlfloat.c	/^    int yorigin;$/;"	m	struct:HtmlFloatList	file:
-yscroll	htmldraw.c	/^    int yscroll;$/;"	m	struct:Overflow	file:
-yscrollcommand	html.h	/^    Tcl_Obj *yscrollcommand;$/;"	m	struct:HtmlOptions
-yscrollincrement	html.h	/^    int      yscrollincrement;$/;"	m	struct:HtmlOptions
-yviewCmd	htmltcl.c	/^yviewCmd(clientData, interp, objc, objv)$/;"	f	file:
-z	cssInt.h	/^    const char *z;$/;"	m	struct:CssToken
-zAttr	cssInt.h	/^    char *zAttr;      \/* The attribute queried, if any. *\/$/;"	m	struct:CssSelector
-zAuthority	htmldecode.c	/^  char *zAuthority;          \/* Ex: "192.168.1.1:8080" *\/$/;"	m	struct:Uri	file:
-zColor	htmlprop.h	/^    char *zColor;          \/* Name of color *\/$/;"	m	struct:HtmlColor
-zDefault	swproc.h	/^  const char *zDefault;$/;"	m	struct:SwprocConf
-zFont	htmlprop.h	/^    char *zFont;           \/* Name of font *\/$/;"	m	struct:HtmlFont
-zFontFamily	htmlprop.h	/^    const char *zFontFamily; \/* Name of font family (i.e. "Serif") *\/$/;"	m	struct:HtmlFontKey
-zFragment	htmldecode.c	/^  char *zFragment;           \/* Ex: "frag" *\/$/;"	m	struct:Uri	file:
-zName	html.h	/^        char *zName;$/;"	m	struct:HtmlAttributes::HtmlAttribute
-zName	html.h	/^  char *zName;                    \/* Name of a markup *\/$/;"	m	struct:HtmlTokenMap
-zName	htmltcl.c	/^    const char *zName;$/;"	m	struct:SubCmd	file:
-zName	htmltext.c	/^    char *zName;              \/* The name of this escape sequence. ex: "amp" *\/$/;"	m	struct:sgEsc	file:
-zPath	htmldecode.c	/^  char *zPath;               \/* Ex: "\/cgi-bin\/printenv" *\/$/;"	m	struct:Uri	file:
-zQuery	htmldecode.c	/^  char *zQuery;              \/* Ex: "name=xyzzy&addr=none" *\/$/;"	m	struct:Uri	file:
-zScheme	htmldecode.c	/^  char *zScheme;             \/* Ex: "http" *\/$/;"	m	struct:Uri	file:
-zSwitch	swproc.h	/^  const char *zSwitch;$/;"	m	struct:SwprocConf
-zText	html.h	/^    char *zText;$/;"	m	struct:HtmlTextNode
-zText	htmldraw.c	/^    const char *zText;$/;"	m	struct:CanvasText	file:
-zTrue	swproc.h	/^  const char *zTrue;$/;"	m	struct:SwprocConf
-zUrl	htmlimage.c	/^    const char *zUrl;                \/* Hash table key *\/$/;"	m	struct:HtmlImage2	file:
-zVal	css.h	/^        char *zVal;$/;"	m	union:CssProperty::<anonymous>
-zValue	cssInt.h	/^    char *zValue;     \/* The value tested for, if any. *\/$/;"	m	struct:CssSelector
-zValue	html.h	/^        char *zValue;$/;"	m	struct:HtmlAttributes::HtmlAttribute
-zoom	html.h	/^    double   zoom;                      \/* Universal scaling factor. *\/$/;"	m	struct:HtmlOptions
diff --git a/tclconfig/CVS/Entries b/tclconfig/CVS/Entries
deleted file mode 100644
index 6e3c501..0000000
--- a/tclconfig/CVS/Entries
+++ /dev/null
@@ -1,5 +0,0 @@
-/ChangeLog/1.3/Tue Mar  7 10:35:58 2006//
-/README.txt/1.2/Thu Oct  6 14:46:30 2005//
-/install-sh/1.1/Tue Dec 17 18:31:05 2002//
-/tcl.m4/1.4/Tue Mar  7 10:35:58 2006//
-D
diff --git a/tclconfig/CVS/Repository b/tclconfig/CVS/Repository
deleted file mode 100644
index 8be1e3f..0000000
--- a/tclconfig/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/tclconfig
diff --git a/tclconfig/CVS/Root b/tclconfig/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/tclconfig/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/tests/CVS/Entries b/tests/CVS/Entries
deleted file mode 100644
index 0d61299..0000000
--- a/tests/CVS/Entries
+++ /dev/null
@@ -1,19 +0,0 @@
-D/page1////
-D/page2////
-D/page3////
-D/page4////
-D/page5////
-/README/1.1/Sun Sep 16 07:07:52 2007//
-/all.tcl/1.6/Tue May  9 09:45:34 2006//
-/browsertest.tcl/1.4/Mon Apr 23 16:33:09 2007//
-/common.tcl/1.3/Sun Dec 10 07:40:31 2006//
-/dynamic.test/1.5/Sun Sep 16 07:43:25 2007//
-/events.bt/1.2/Mon Apr 23 15:22:53 2007//
-/form.bt/1.2/Mon Apr 23 17:32:44 2007//
-/options.test/1.3/Thu Nov  9 13:10:32 2006//
-/reset.test/1.1/Sun Sep 16 10:40:17 2007//
-/style.test/1.25/Sun Apr 22 09:43:34 2007//
-/syntax.test/1.1/Thu Sep  7 13:11:46 2006//
-/tree.test/1.12/Mon Apr 23 09:31:07 2007//
-/tree1.bt/1.3/Mon Apr 23 11:52:08 2007//
-/vertical_align.html/1.1/Sun Feb 19 11:51:12 2006//
diff --git a/tests/CVS/Repository b/tests/CVS/Repository
deleted file mode 100644
index 5c770ed..0000000
--- a/tests/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/tests
diff --git a/tests/CVS/Root b/tests/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/tests/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/tests/uri.test b/tests/uri.test
deleted file mode 100644
index 65b8257..0000000
--- a/tests/uri.test
+++ /dev/null
@@ -1,66 +0,0 @@
-
-# This test script tests the ::tkhtml::uri objects.
-#
-
-proc sourcefile {file} {
-  set fname [file join [file dirname [info script]] $file] 
-  uplevel "#0" [list source $fname]
-}
-sourcefile common.tcl
-
-proc split_uri {uri} {
-  set ::o [::tkhtml::uri $uri]
-  set res [list \
-      [$::o scheme] [$::o authority] [$::o path] [$::o query] [$::o fragment]
-  ]
-  $::o destroy
-  set res
-}
-proc resolve_uri {base uri} {
-  set ::o [::tkhtml::uri $base]
-  set res [$::o resolve $uri]
-  $::o destroy
-  set res
-}
-
-tcltest::test uri-1 {} -body {
-  split_uri http://www.google.com
-} -result {http www.google.com {} {} {}}
-
-tcltest::test uri-2 {} -body {
-  split_uri http://www.cvstrac.org/cvstrac/
-} -result {http www.cvstrac.org /cvstrac/ {} {}}
-
-tcltest::test uri-3 {} -body {
-  split_uri http://tkhtml.tcl.tk/cvstrac/login?nxp=/cvstrac/timeline
-} -result {http tkhtml.tcl.tk /cvstrac/login nxp=/cvstrac/timeline {}}
-
-tcltest::test uri-4 {} -body {
-  split_uri file:///home/dan/work/tkhtml/docs/css2/cover.html#minitoc
-} -result {file {} /home/dan/work/tkhtml/docs/css2/cover.html {} minitoc}
-
-tcltest::test uri-5 {} -body {
-  split_uri /tkhtml/docs/css2/cover.html
-} -result {{} {} /tkhtml/docs/css2/cover.html {} {}}
-
-tcltest::test uri-6 {} -body {
-  resolve_uri http://tkhtml.tcl.tk/ index.html
-} -result {http://tkhtml.tcl.tk/index.html}
-
-tcltest::test uri-7 {} -body {
-  resolve_uri http://tkhtml.tcl.tk/css.html index.html
-} -result {http://tkhtml.tcl.tk/index.html}
-
-tcltest::test uri-8 {} -body {
-  resolve_uri http://tkhtml.tcl.tk/dir/ index.html
-} -result {http://tkhtml.tcl.tk/dir/index.html}
-
-tcltest::test uri-9 {} -body {
-  resolve_uri http://tkhtml.tcl.tk/dir/ ../index.html
-} -result {http://tkhtml.tcl.tk/index.html}
-
-tcltest::test uri-10 {} -body {
-  resolve_uri file:///home/dan/work/tkhtml/docs/css2/cover.html about.html
-} -result {file:///home/dan/work/tkhtml/docs/css2/about.html}
-
-finish_test
diff --git a/tools/CVS/Entries b/tools/CVS/Entries
deleted file mode 100644
index 21d90ac..0000000
--- a/tools/CVS/Entries
+++ /dev/null
@@ -1,4 +0,0 @@
-D/rules////
-/lemon.c/1.2/Tue May  9 09:45:34 2006//
-/lempar.c/1.2/Tue May  9 09:45:34 2006//
-/mkcsstester.tcl/1.2/Sat Sep 15 17:40:02 2007//
diff --git a/tools/CVS/Repository b/tools/CVS/Repository
deleted file mode 100644
index 417d47c..0000000
--- a/tools/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/tools
diff --git a/tools/CVS/Root b/tools/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/tools/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml
diff --git a/webpage/CVS/Entries b/webpage/CVS/Entries
deleted file mode 100644
index e416b9b..0000000
--- a/webpage/CVS/Entries
+++ /dev/null
@@ -1,7 +0,0 @@
-/common.tcl/1.7/Thu Jul 19 16:48:11 2007//
-/mkffaqpage.tcl/1.3/Thu Sep 13 10:59:31 2007//
-/mksupportpage.tcl/1.18/Thu Jul 19 12:07:02 2007//
-/tkhtml_tcl_tk.css/1.14/Fri Jul 20 07:32:54 2007//
-/mkhv3page.tcl/1.26/Sat Sep 29 10:21:24 2007//
-/mkwebpage.tcl/1.38/Wed Oct  3 10:06:39 2007//
-D
diff --git a/webpage/CVS/Repository b/webpage/CVS/Repository
deleted file mode 100644
index d491fbf..0000000
--- a/webpage/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-htmlwidget/webpage
diff --git a/webpage/CVS/Root b/webpage/CVS/Root
deleted file mode 100644
index f1f24fb..0000000
--- a/webpage/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:pserver:danielk1977 at tkhtml.tcl.tk:/tkhtml

-- 
Render HTML and CSS content with tk



More information about the debian-science-commits mailing list