[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