summaryrefslogtreecommitdiffstats
path: root/tkhtml1/doc
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2019-01-07 19:38:48 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2019-01-07 19:38:48 (GMT)
commitf946ccfb35b2c144c4bb456d5fe9b48c1b8ae524 (patch)
tree2d357dd61ade976b7beb5bfe9085027d3478bfb3 /tkhtml1/doc
parent917eac6db5489b4256a4ba42d89df60e80906894 (diff)
parentd24f03b3877861780be79b1a620adae80b942c3c (diff)
downloadblt-f946ccfb35b2c144c4bb456d5fe9b48c1b8ae524.zip
blt-f946ccfb35b2c144c4bb456d5fe9b48c1b8ae524.tar.gz
blt-f946ccfb35b2c144c4bb456d5fe9b48c1b8ae524.tar.bz2
Merge commit 'd24f03b3877861780be79b1a620adae80b942c3c' as 'tkhtml1'
Diffstat (limited to 'tkhtml1/doc')
-rw-r--r--tkhtml1/doc/COPYING339
-rw-r--r--tkhtml1/doc/COPYRIGHT25
-rw-r--r--tkhtml1/doc/README15
-rw-r--r--tkhtml1/doc/notes1.txt52
-rw-r--r--tkhtml1/doc/simple.make80
-rw-r--r--tkhtml1/doc/spec.html677
-rw-r--r--tkhtml1/doc/webpage/mkwebpage.tcl195
7 files changed, 1383 insertions, 0 deletions
diff --git a/tkhtml1/doc/COPYING b/tkhtml1/doc/COPYING
new file mode 100644
index 0000000..e77696a
--- /dev/null
+++ b/tkhtml1/doc/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/tkhtml1/doc/COPYRIGHT b/tkhtml1/doc/COPYRIGHT
new file mode 100644
index 0000000..f42114b
--- /dev/null
+++ b/tkhtml1/doc/COPYRIGHT
@@ -0,0 +1,25 @@
+#
+# Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+# This code has been modified under the terms listed below and is made
+# available under the same terms.
+#
+# Copyright (C) 1997,1998 D. Richard Hipp
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+# Author contact information:
+# drh@acm.org
+# http://www.hwaci.com/drh/
diff --git a/tkhtml1/doc/README b/tkhtml1/doc/README
new file mode 100644
index 0000000..8f3613a
--- /dev/null
+++ b/tkhtml1/doc/README
@@ -0,0 +1,15 @@
+This directory contains all source code files for the TkHtml
+widget. TkHtml renders HTML for Tcl/Tk 8.0 and later.
+
+ COPYRIGHT Text of the GNU Public License, under which this
+ software is distributed.
+
+
+ COMPILE.txt Instructions on how to compile TkHtml.
+
+ doc Other documentation about TkHtml.
+
+ src All of the source code.
+
+ tools Source code to tools that are used to build the widget
+ but which do not become part of the widget.
diff --git a/tkhtml1/doc/notes1.txt b/tkhtml1/doc/notes1.txt
new file mode 100644
index 0000000..120f33f
--- /dev/null
+++ b/tkhtml1/doc/notes1.txt
@@ -0,0 +1,52 @@
+The HTML widget uses lots of TCL callback routines. But a TCL
+callback can do nasty things. For example, a TCL callback
+could delete the HTML widget that invoked the callback. Or
+it could delete the TCL interpreter in which the HTML widget
+is running. So we have to call HtmlLock() before invoking
+a TCL callback and check to make sure the widget was not
+deleted before using any fields in the widget structure after
+the callback runs.
+
+The following routines can call TCL callbacks, either directly
+or indirectly:
+
+ HtmlTokenizerAppend()
+ HtmlParseCmd()
+ HtmlWidgetCommand()
+ HtmlGetImage()
+ HtmlAddStyle()
+ HtmlParseCmd()...
+ HtmlSizer()
+ HtmlLayout()
+ HtmlRedrawCallback()
+ GetLinkColor()
+ HtmlAddStyle()...
+ HtmlCallResolver()
+ HtmlGetImage()...
+ HtmlResolveCmd()
+ HtmlWidgetCommand()
+ HtmlRedrawCallback()...
+ HtmlGetFont()
+ DrawSelectionBackground()
+ HtmlBlockDraw()...
+ HtmlBlockDraw()
+ HtmlRedrawCallback()
+ FindIndexInBlock()
+ DecodeBaseIndex()
+ HtmlGetIndex()
+ HtmlIndexCmd()
+ HtmlWidgetCommand()...
+ HtmlSelectionSetCmd()
+ HtmlWidgetCommand()...
+ HtmlInsertCmd()
+ HtmlWidgetCommand()...
+ Paragraph()
+ DoBreakMarkup()
+ HtmlLayoutBlock()
+ HtmlLayout()...
+ HtmlTableLayout()
+ DoBreakMarkup()...
+ HtmlDeleteControls()
+ HtmlClear()
+ HtmlWidgetCommand()...
+ HtmlDestroyWidget()
diff --git a/tkhtml1/doc/simple.make b/tkhtml1/doc/simple.make
new file mode 100644
index 0000000..cd99dc6
--- /dev/null
+++ b/tkhtml1/doc/simple.make
@@ -0,0 +1,80 @@
+#! /bin/sh
+#
+# Trying to generate a loadable module for Tcl/Tk8.1.1 on
+# WindowsNT using Cygwin20 cross-compiler running under
+# RedHat6.0.
+
+# Step -1:
+# Make a copy of winsock.h into winsock2.h. "Winsock2.h" is needed by
+# tclWinPort.h. tclWinPort.h is included by tclStubLib.c in step 3.
+#
+
+# Step 0:
+# Make sure the cross-compiler tools are on PATH and remove
+# old files.
+#
+PATH=$PATH:/opt/cygwin20/bin
+rm -f simple.o stublib.o simple.dll
+
+# Step 1:
+# Generate the C source code into "simple.c"
+#
+cat >simple.c <<\END
+#include <tcl.h>
+
+int Simple_Init(Tcl_Interp *interp){
+ Tcl_InitStubs(interp,"8.1",0);
+ Tk_InitStubs(interp,"8.1",0);
+ return TCL_OK;
+}
+END
+
+# Step 2:
+# Compile the C source code yielding simple.o
+#
+i586-cygwin32-gcc \
+ -I/home/drh/tcltk/tcl8.1.1/generic \
+ -mno-cygwin \
+ -DUSE_TCL_STUBS=1 \
+ -c simple.c
+
+# Step 3:
+# Compile the Stub libraries yielding tclstub.o and tkstub.o
+#
+i586-cygwin32-gcc \
+ -I/home/drh/tcltk/tcl8.1.1/generic \
+ -I/home/drh/tcltk/tcl8.1.1/win \
+ -mno-cygwin \
+ -o tclstub.o \
+ -c /home/drh/tcltk/tcl8.1.1/generic/tclStubLib.c
+i586-cygwin32-gcc \
+ -I/home/drh/tcltk/tcl8.1.1/generic \
+ -I/home/drh/tcltk/tcl8.1.1/win \
+ -I/home/drh/tcltk/tk8.1.1/generic \
+ -I/home/drh/tcltk/tk8.1.1/win \
+ -I/home/drh/tcltk/tk8.1.1/xlib \
+ -mno-cygwin \
+ -o tkstub.o \
+ -c /home/drh/tcltk/tk8.1.1/generic/tkStubLib.c
+
+# Step 4:
+# Generate the DEF file
+#
+cat >simple.def <<\END
+EXPORTS
+Simple_Init
+END
+
+# Step 5:
+# Use dllwrap to build the DLL. Note: tclstub81.lib is copied out
+# of the binary tk8.1 distribution from Scriptics.
+#
+i586-cygwin32-dllwrap \
+ --def simple.def \
+ -v \
+ --driver-name i586-cygwin32-gcc \
+ --dlltool-name i586-cygwin32-dlltool \
+ --as i586-cygwin32-as \
+ --dllname simple.dll \
+ --target i386-mingw32 -mno-cygwin \
+ simple.o tclstub.o tkstub.o
diff --git a/tkhtml1/doc/spec.html b/tkhtml1/doc/spec.html
new file mode 100644
index 0000000..cc88b52
--- /dev/null
+++ b/tkhtml1/doc/spec.html
@@ -0,0 +1,677 @@
+<html>
+<!--
+ Specifications for the Tk HTML Widget
+ $Revision$
+ Copyright (C) 1997, 1998, 1999 D. Richard Hipp
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ Author Contact Information:
+ drh@acm.org
+ http://www.hwaci.com/drh/
+
+ @(#) $Id$
+-->
+<head>
+<title>Interface Specification For The HTML Widget</title>
+</head>
+<body bgcolor=white>
+<h1>Interface Specification For The HTML Widget</h1>
+
+<p>This is a draft interface specification for the Tk HTML
+widget currently under development.
+Since it is still a draft, it is subject to change.
+Eventually, the interface will stabilize and this interface
+specification will morph into a manual page.</p>
+
+<h2>Configuration Options</h2>
+
+<table cellspacing=10>
+<tr><td valign=top><tt>-appletcommand</tt></td>
+<td>
+ <p>This option specifies the name of the Tcl procedure to invoke when the
+ <tt>&lt;applet&gt;...&lt;/applet&gt;</tt> tag sequence is seen. The html
+ widget will append two arguments to the procedure before calling it.
+ The first argument is the name of a widget that the callback should
+ create to hold the applet.
+ The second argument is
+ a list of name/value pairs which are the arguments to
+ the <tt>&lt;applet&gt;</tt> tag.</p>
+
+ <p>The text between <tt>&lt;applet&gt</tt> and <tt>&lt;/applet&gt;</tt>
+ is normally suppressed.
+ However, if the <tt>-appletcommand</tt> option is set to the empty string,
+ the <tt>&lt;applet&gt</tt> tag is ignored and all text between
+ <tt>&lt;applet&gt;</tt> and <tt>&lt;/applet&gt;</tt> is displayed
+ normally.</p>
+
+ <p>"&lt;embed&gt;" is treated as an alias for
+ "&lt;applet&gt;&lt;/applet&gt".</p>
+</td></tr>
+
+<tr><td valign=top><tt>-background</tt></td>
+<td>
+ <p>The background color for the widget.</p>
+
+ <p>Note that the <tt>&lt;body bgcolor=...&gt;</tt> HTML tag does not
+ automatically cause the widget to change its background color. If
+ you want the background color to change in response to this HTML tag,
+ then your Tcl script should intercept
+ the <tt>&lt;body&gt;</tt> tag using the
+ ``<tt>token handler</tt>'' widget command (described below) and
+ change the background color manually.</p>
+</td></tr>
+
+<tr><td valign=top><tt>-base</tt></td>
+<td>
+ <p>The base URI for the current document. This should be set to
+ the URI that was used to retrieve the document before parsing
+ begins.</p>
+</td></tr>
+
+<tr><td valign=top><tt>-bd</tt><td>An alias for <tt>-borderwidth</tt>
+
+<tr><td valign=top><tt>-bg</tt><td>An alias for <tt>-background</tt>
+
+<tr><td valign=top><tt>-borderwidth</tt></td>
+<td>
+ <p>The width of the 3-D border drawn around the parameter of the widget, in
+ pixels.</p>
+</td></tr>
+
+<tr><td valign=top><tt>-cursor</tt></td>
+<td>
+ <p>The cursor displayed when the pointer is positioned over the HTML widget.
+ If {}, the cursor reverts to its default shape.</p>
+</td></tr>
+
+<tr><td valign=top><tt>-exportselection</tt></td>
+</tr>
+
+<tr><td valign=top><tt>-fontcommand</tt></td>
+<td>
+ <p>The name of a TCL procedure that is used to convert HTML font names
+ into TCL font names. A default built-in procedure is used if the value
+ of this option is {}.</p>
+
+ <p>When the HTML widget needs a new font, it calls this procedure with
+ two arguments. This first argument is the font size expressed as an
+ integer between 1 and 7. The standard size is 4. The second argument
+ is a set of between 0 and 3 keywords drawn from the following set:
+ "bold", "italic", and "fixed". If the "bold" keyword is present in
+ the second argument, the font returned should be bold. If the "italic"
+ keyword is present, the font should be italic. If the "fixed" keyword
+ is present, the font should be fixed-width. The TCL procedure should
+ return the name of the TCL font that the HTML widget will use to render
+ the given HTML font. If the TCL procedure returns an empty string,
+ then the built-in default procedure is used to determine the font.</p>
+
+ <p>Examples: This is {4 {}}. <tt>This is {4 fixed}</tt>.
+ <small>This is {3 {}}</small>. <large><tt><bold>This is {5 {fixed bold}}
+ </bold></tt></large></p>
+</td></tr>
+
+
+<tr><td valign=top><tt>-fg</tt></td>
+<td>An alias for <tt>-foreground</tt>.</td>
+</tr>
+
+<tr><td valign=top><tt>-foreground</tt></td>
+<td>
+ The default foreground color in which HTML text is rendered.
+ The HTML can override this using the <tt>color=...</tt> attribute
+ on various HTML tags.
+</td></tr>
+
+<tr><td valign=top>
+<code>-formcommand <var>string</var></code>
+</td><td>
+Declares a handler for everything to do with forms within a document.
+Arguments will be appended to <var>string</var> and the result evaluated
+during parsing (for form creation) and when the widget is cleared (for
+form cleanup). The first argument is a token for
+identifying a form. The second argument selects the action to perform.
+The remaining arguments depend on the action, as follows.
+
+<dl><dt><code><var>string token</var> form <var>URL method attrs</var></code>
+<dd>The handler should begin taking notes for form <var>token</var>,
+especially the (resolved) <var>URL</var> of the action and the
+<var>method</var> to be applied. The raw attributes of the FORM element
+are in the pairlist <var>attrs</var>.
+
+<dt><code><var>string token</var> flush</code>
+<dd>When the document is cleared, the widget will destroy all the windows
+it requested. This handler should clean up anything else
+it created for that form.
+
+<dt><code><var>string token</var> input <var>path attrs</var></code>
+<dd>The handler should create a window named <var>path</var>
+appropriate for the element described by the <var>attrs</var>.
+The widget will map the window into its rendering appropriately.
+<p>It is not an error for the handler to return without creating such a window
+(it's natural in the case of type=hidden); the widget simply
+ignores the element in that case.
+The attributes are the raw values in the HTML, with one exception;
+a <code>src</code> will be resolved before the handler is called.
+
+<dt><code><var>string token</var> textarea <var>path attrs initial</var></code>
+<dd>The handler should create a window (a single Text, or a Frame with Text
+and Scrollbars, or whatever) appropriate for a &lt;textarea&gt; and
+initialise it to the <var>initial</var> string.
+
+<dt><code><var>string token</var> select <var>path attrs choices initial</var></code>
+<dd><em>&lt;select&gt is quite a complicated case...</em>
+The handler should create a window
+appropriate for a &lt;select&gt; of the given attributes and
+present the list of <var>choices</var>. Each choice is a pair, the
+value and its label. <var>initial</var> is a list of values initially
+selected. <em>This approach is somewhat questionable but should do
+most of the time.</em>
+</dl>
+
+Caution: Be very careful to avoid confusing HTML variables with TCL
+variables. It may be tempting to use the <code>name</code> attribute
+fairly directly to link
+together related widgets, but it will likely cause incorrect
+behaviours. Also be careful to observe the order in which the elements are
+created; this determines the order in which they must be submitted.
+A default form handler with the correct bahaviour written in TCL will be
+bundled with the widget.
+<p>The attribute names will be downcased within <var>attrs</var>.
+</td></tr>
+
+<tr><td valign=top><tt>-framecommand</tt><td>
+The script specified by this option is invoked when the HTML parser
+encounters a <tt>&lt;frameset&gt;...&lt;/frameset&gt;</tt> tag sequence.
+The arguments to the script are TBD.
+If the value of the option is the empty string, then the text within
+the <tt>&lt;noframe&gt...&lt;/noframe&gt;</tt> tag sequence is displayed.
+
+<tr><td valign=top><tt>-height</tt><td>
+Specifies the height of the area into which HTML is rendered.
+This value plus twice the <tt>-padx</tt>, <tt>-borderwidth</tt> and
+<tt>-highlightthickness</tt> values is the total height of the widget.
+
+<tr><td valign=top><tt>-highlightbackground</tt><td>
+
+<tr><td valign=top><tt>-highlightcolor</tt><td>
+
+<tr><td valign=top><tt>-highlightthickness</tt><td>
+
+<tr><td valign=top><tt>-hyperlinkcommand</tt></td>
+<td>
+ The script specified by this option is invoked whenever the user
+ clicks on a hyperlink on the HTML page. Before invoking this
+ script, the URI for the hyperlink is appended.
+</td></tr>
+
+<tr><td valign=top><tt>-imagecommand</tt></td>
+<td>
+ When a ``<tt>&lt;img src=...&gt;</tt>'' tag is encountered, the
+ HTML widget invokes the script specified by this option in order to
+ get the name of a Tk image object to display the HTML image.
+ Before invoking the script, the following arguments are appended:
+ <ol>
+ <li>The value of the <tt>src=...</tt> parameter after have been
+ processed by the resolver.
+ <li>The value of the <tt>width=...</tt> parameter.
+ <li>The value of the <tt>height=...</tt> parameter.
+ <li>A list containing the names and values of all parameters.
+ </ol>
+ If the name returned by this script is the empty string, or if the
+ script is an empty string, then the HTML widget displays the
+ <tt>alt=...</tt> text of the <tt>&lt;img&gt</tt> tag instead of
+ an image.
+</td></tr>
+
+<tr><td valign=top><tt>-isvisitedcommand</tt><td>
+When the HTML widget encounters a hyperlink
+(``<tt>&lt;a href=...&gt;</tt>'') it invokes the script specified
+by this option in order to determine whether or not the hyperlink
+has been visited.
+This information is needed to determine what color to use to display
+the hyperlink.
+
+<tr><td valign=top><tt>-padx</tt><td>
+The amount of extra space to insert between the 3-D border and the
+left and right sides of the document text.
+
+<tr><td valign=top><tt>-pady</tt><td>
+The amount of extra space to insert between the 3-D border and the top
+and bottom of the document text.
+
+<tr><td valign=top><tt>-relief</tt><td>
+The relief used to draw the 3-D border.
+
+<tr><td valign=top><tt>-resolvercommand</tt></td>
+<td>
+ <p>The name of a TCL command used to resolve URIs. If blank, a built-in
+ resolver is used. If a TCL command is specified but it returns
+ an empty string, the built-in resolver is used then too.
+ The build-in resolver is based on the algorithm
+ in section 5.2 of RFC 2396. </p>
+
+ <p>Multiple URIs are appended to the TCL command before it is executed.
+ The first URI is the BASE URI of the document (the URL that specified
+ by the -base configuration option and updated according to any prior
+ &lt;BASE&gt; markup). Zero or more additional URIs are
+ appended to this base. The result of the script should be the resolution
+ of the whole series or URIs.</p>
+</td></tr>
+
+<tr><td valign=top><tt>-rulerelief</tt></td>
+<td>
+ <p>Determines the appearance of the Horizontal Rule (&lt;HR&gt) markup.
+ The default is "sunken". This can also be "raised" or "flat". If
+ "flat", then the &lt;HR&gt; is drawn using a solid line in the current
+ foreground color. "groove" and "ridge" are the same as "flat".</p>
+</td></tr>
+
+<tr><td valign=top><tt>-scriptcommand</tt></td>
+<td>
+ <p>Whenever &lt;SCRIPT&gt;...&lt;/SCRIPT&gt; markup is encountered in
+ the input HTML, the attributes of the &lt;SCRIPT&gt; markup and
+ the body of the script are appended to this string and the result
+ is executed as a TCL command. If this options is the empty string,
+ then the script is ignored.
+</td></tr>
+
+<tr><td valign=top><tt>-selectioncolor</tt><td>
+The background color used when drawing the selection. The
+foreground color for the selection is the same as the regular
+foreground color.
+
+<tr><td valign=top><tt>-tablerelief</tt></td>
+<td>
+ <p>Determines the appearance of the borders around tables.
+ The default is "raised". This can also be "sunken" or "flat". If
+ "flat", then the borders is drawn using solid lines in the current
+ foreground color. "groove" and "ridge" are the same as "flat".</p>
+</td></tr>
+
+<tr><td valign=top><tt>-takefocus</tt><td>
+
+<tr><td valign=top><tt>-unvisitedcolor</tt><td>
+The foreground color used to draw hyperlinks that have not been visited.
+
+<tr><td valign=top><tt>-underlinehyperlinks</tt><td>
+Set to TRUE to cause hyperlinks to be drawn using an underlined font.
+
+<tr><td valign=top><tt>-visitedcolor</tt><td>
+The foreground color used to draw hyperlinks that have been visited.
+
+<tr><td valign=top><tt>-width</tt><td>
+The width of the document text.
+This value does not include space allocated for
+<tt>-highlightthickness</tt>, <tt>-borderwiddth</tt> or
+<tt>-padx</tt>.
+
+<tr><td valign=top><tt>-xscrollcommand</tt><td>
+
+<tr><td valign=top><tt>-yscrollcommand</tt><td>
+
+</table>
+
+<h2>Indices</h2>
+
+Internally, the HTML widget stores the HTML document as a list of
+tokens.
+Each token is either
+<ul>
+<li>a contiguous sequence of non-space characters (Text),
+<li>a contiguous sequence of spaces, tabs or newlines (Space),
+<li>or an HTML markup tag (such as ``<tt>&lt;em&gt;</tt>''.)
+</ul>
+Tokens are identified by number.
+The first token is ``1'', the second is ``2'' and so forth.
+So in its simplest form, an index is just an integer greater than 0.
+<p>
+Within a single Text or Space token, individual characters are
+also identified by number, though the counting starts with 0 instead
+of 1.
+The character number is connected to the token number by a period.
+So, for example, the 4th character in the 9th token would be
+``9.3''.
+<p>
+Two integers separated by a dot is called the <em>connonical</em> form
+of an index.
+Other index forms are available, including:
+
+<table cellspacing=10>
+<tr><td valign=top>end<td>
+The keyword ``end'' means one character past
+the last character of the last token.
+<tr><td valign=top>@X,Y<td>
+The character located at screen coordinates X,Y.
+<tr><td valign=top>*.last<td>
+The second integer can be replaced by the keyword ``last'' to mean the
+last character in the token.
+<tr><td valign=top>sel.first<td>
+This is the first character that is part of the selection.
+<tr><td valign=top>sel.last<td>
+This is the last character that is part of the selection.
+<tr><td valign=top>ins<td>
+The character immediately following the insertion cursor.
+</table>
+
+<h2>Commands</h2>
+
+<dl>
+<dt><b>html</b> <i>window</i> ?<i>options ...</i>?</dt><p>
+<dd>
+ Create a new HTML widget instance named <i>windows</i>
+</dd>
+<p>
+<dt><b>html</b> <b>reformat</b> <i>from to text</i><p>
+<dd>
+Convert text from one encoding to another. The text is given
+in the <i>text</i> argument. The current encoding of the text
+is specified by the <i>from</i> argument. This command returns
+the same text in the <i>to</i> encoding.
+<p>
+<i>From</i> and <i>to</i> may be any of the following values:
+<p>
+<table cellspacing=10>
+<tr><td valign=top>plain</td>
+<td>
+ Ordinary text with no characters escaped.
+</td></tr>
+<tr><td valign=top>http</td>
+<td>
+ The text is encoded in a form suitable for use with the HTTP
+ protocol. Spaces are converted to "+". Special characters
+ and escaped as "%aa" where "a" is a hexadecimal digit. A special
+ character is anything other than an alphanumeric or one of these:
+ ".", "$", "-", or "_".
+</td></tr>
+<tr><td valign=top>url</td>
+<td>
+ The text is encoded in a form suitable for use as a URI.
+ Spaces are converted to "+". Special characters
+ and escaped as "%aa" where "a" is a hexadecimal digit. A special
+ character is anything other than an alphanumeric or one of these:
+ ".", "$", "-", "_", or "/".
+</td></tr>
+<tr><td valign=top>html</td>
+<td>
+ The text is encoded in a form suitable for use within HTML.
+ "&amp;" is encoded as "&amp;amp;", "&lt;" is encoded as "&amp;lt;" and so
+ forth.
+</td></tr>
+</table>
+<p>
+This command is intended to be useful to the TCL procedures that implement
+callbacks for the HTML widget.
+</dd>
+<p>
+<dt><b>html</b> <b>uri join</b> <i>scheme authority path query fragment</i><p>
+<dd>
+This command takes the five main components of a URI and joins them together
+into a complete URI. Special characters in any component are escaped.
+</dd>
+<p>
+<dt><b>html</b> <b>uri split</b> <i>uri</i><p>
+<dd>
+This command takes a single URI and splits it into its five major
+components: scheme, authorithy, path, query and fragement. The command
+returns a list where each component is an element of the list.
+Components missing from the URI are represented as empty elements in
+the list.
+</dd>
+
+</dl>
+
+<h2>Widget Commands</h2>
+
+<dl>
+
+<dt><i>WIDGET</i>&nbsp <tt>cget</tt> <i>config-option</i><p>
+<dd>
+Return the value of a configuration option. Works just like any
+other Tk widget.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>clear</tt><p>
+<dd>
+Remove all tokens and text from the HTML widget.
+The parser is reset to its initial state.
+This routine should be called to changes pages.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>configure</tt> ?<i>args...</i>?<p>
+<dd>
+The standard Tk configuration command.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>href</tt>&nbsp <i>X&nbsp Y</i><p>
+<dd>If the coordinates <i>X Y</i> define a point above a hyperlink,
+then this command will return the target URL for that hyperlink.
+The URL will be resolved using the -resolvercommand before it
+is returned.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>index</tt>&nbsp <i>INDEX&nbsp ?COUNT&nbsp UNITS?</i></p>
+<dd>
+Translates <i>INDEX</i> into its connonical form.
+The connonical form of an index is two integers separated by a period.
+<p>
+The optional 3rd and 4th arguments specify a displacement from <i>INDEX</i>
+to the value of the index returned.
+<i>COUNT</i> can be any integer value, including a negative number.
+<i>UNITS</i> must be either ``<tt>char</tt>'' or ``<tt>line</tt>''.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>insert</tt>&nbsp <i>INDEX</i><p>
+<dd>
+Causes the insertion cursor (a flashing vertical bar) to be positioned
+immediately before the character specified by <i>INDEX</i>.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>names</tt><p>
+<dd>
+This command causes the widget to scan the entire text of the document
+looking for tags of the form ``<tt>&lt;a name=...&gt;</tt>''.
+It returns a list of values of the <tt>name=...</tt> fields.
+<p>
+The vertical position of the document can be moved to any of these names
+using the ``<i>WIDGET</i> <tt>yview</tt> <i>NAME</i>'' command described
+below.
+<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>parse</tt>&nbsp <i>HTML-TEXT</i><p>
+<dd>Adds the given HTML text to the end of any text previously received
+through the <tt>parse</tt> command and parses as much of the text as
+possible into tokens.
+Afterwards, the display is updated to show the new tokens, if they are
+visible.<p>
+
+<dt><i>WIDGET</i>&nbsp; <tt>resolver</tt>&nbsp; ?<i>uri ...</i>?<p>
+<dd>The resolver specified by the -resolvercommand option
+ is called with the
+ base URI of the document followed
+ by the remaining arguments to this commant. The result of this
+ command is the result of the -resolvercommand script.<p>
+
+<dt><i>WIDGET</i>&nbsp <tt>selection</tt>&nbsp <i>subcommand args...</i><p>
+<dd>The selection widget command is used to control the selection.<p>
+ <dl>
+ <dt><i>WIDGET</i>&nbsp <tt>selection clear</tt><p>
+ <dd>Clear the current selection. No text will be selected after this
+ command executes.<p>
+
+ <dt><i>WIDGET</i>&nbsp <tt>selection set</tt>&nbsp <i>START&nbsp END</i><p>
+ <dd>Change the selection to be all text contained within the given
+ indices.<p>
+ </dl>
+ <p>
+
+<dt><i>WIDGET</i>&nbsp <tt>text</tt>&nbsp <i>subcommand args...</i><p>
+<dd>There are several token commands. They all have the common
+property that they directly manipulate the text that is displayed.
+These commands (none of which are currently implemented) can be used
+to build an WYSIWYG editor for HTML.<p>
+ <dl>
+ <dt><i>WIDGET</i>&nbsp; <tt>text ascii</tt>&nbsp <i>INDEX-1&nbsp INDEX-2</i><p>
+ <dd><p>
+ Returns plain ASCII text that represents all characters between
+ <i>INDEX-1</i> and <i>INDEX-2</i>. Formatting tags are omitted.
+ The <i>INDEX-1</i> character is included by <i>INDEX-2</i> is omitted.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>text delete</tt>&nbsp <i>INDEX-1&nbsp INDEX-2</i><p>
+ <dd><p>
+ All text from <i>INDEX-1</i> up to, but not including <i>INDEX-2</i> is
+ removed and the display is updated accordingly.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>text html</tt>&nbsp <i>INDEX-1&nbsp INDEX-2</i><p>
+ <dd><p>
+ Returns HTML text that represents all characters and formatting tags
+ between <i>INDEX-1</i> and <i>INDEX-2</i>.
+ The <i>INDEX-1</i> character is included by <i>INDEX-2</i> is omitted.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>text insert</tt>&nbsp <i>INDEX&nbsp TEXT</i><p>
+ <dd><p>
+ Inserts one or more characters immediately before the character whose
+ index is given.
+ <p>
+ </dl>
+
+
+<dt><i>WIDGET</i>&nbsp <tt>token</tt>&nbsp <i>subcommand args...</i><p>
+<dd>There are several token commands. They all have the common
+ property that they involve the list of tokens into which the
+ HTML is parsed.<p>
+ Some of the following subcommands make use of indices. The
+ character number of these indices is ignored since these commands
+ deal only with whole tokens.
+ <p>
+ <dl>
+ <dt><i>WIDGET</i>&nbsp; <tt>token append</tt>&nbsp;
+ <i>TAG&nbsp; ARGUMENTS</i><p>
+ <dd>
+ The command causes a token to be appended to the current list of
+ tokens in the HTML widget. This command is typically used within
+ a token handler.
+ <p>
+
+
+ <dt><i>WIDGET</i>&nbsp; <tt>token delete</tt>&nbsp;
+ <i>INDEX&nbsp ?INDEX-2?</i><p>
+ <dd>
+ Deletes the single token indentified by the index. If a second index is
+ given, the range of tokens from the first to the second index inclusive
+ is deleted.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>token find</tt>&nbsp;
+ <i>TAG</i><p>
+ <dd>
+ Locates all tokens with the given <i>TAG</i> and returns them all
+ as a list.
+ Each element of the returned list is a sublist containing the index
+ for the token and the arguments for the token.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>token get</tt>&nbsp;
+ <i>INDEX&nbsp ?INDEX-2?</i><p>
+ <dd>
+ Returns a list of tokens in the range of <i>INDEX</i> through
+ <i>INDEX-2</i>.
+ Each element of the list consists of the token tag followed by
+ the token arguments.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>token handler</tt>&nbsp;
+ <i>TAG&nbsp; ?SCRIPT?</i><p>
+ <dd>
+ This command allows special processing to occur for selected tokens
+ in the HTML input stream.
+ The <i>TAG</i> argument is either ``Text'' or ``Space'' or the name
+ of an HTML tag (ex: ``H3'' or ``/A'').
+ If a non-empty script is specified for a particular tag, then when
+ instances of that tag are encountered by the parser, the parser calls the
+ corresponding script instead of appending the token to the end of the
+ token list. Before calling the script, three arguments are appended:
+ <ol>
+ <li>The token number.
+ <li>The tag. (ex: <tt>H3</tt>)
+ <li>A list of name/value pairs describing all arguments to the tag.
+ </ol>
+ An empty handler script causes the default processing to occur for
+ the tag. If the script argument is omitted all together, then
+ the current value of the token handler for the given tag is returned.
+ <p>
+ Only one handler may be defined for each token type. If a new
+ handler is specified for a token type that previously had a different
+ handler defined, then the old handler is overwritten by the new.
+ <p>
+
+ <dt><i>WIDGET</i>&nbsp; <tt>token insert</tt>&nbsp;
+ <i>INDEX&nbsp TAG&nbsp ARGUMENTS</i><p>
+ <dd>
+ Inserts a single token given by <i>TAG</i> and <i>ARGUMENTS</i> into
+ the token list immediately before <i>INDEX</i>.
+ <p>
+ </dl>
+
+<p>
+
+<dt><i>WIDGET</i>&nbsp; <tt>xview</tt>&nbsp; <i>args...</i><p>
+<dd>Used to control horizontal scrolling.<p>
+ <dl>
+ <dt><i>WIDGET</i>&nbsp <tt>xview</tt><p>
+ <dd>Returns a list containing two elements. The elements are a fractions
+ between 0.0 and 1.0 that define the position of the left and right
+ edges of
+ the visible part of the document as a fraction of the whole.<p>
+ <dt><i>WIDGET</i>&nbsp <tt>xview moveto</tt>&nbsp <i>FRACTION</i><p>
+ <dd>Adjusts the horizontal position of the document so that
+ <i>FRACTION</i> of the horizontal span of the document is off-screen
+ to the left.<p>
+ <dt><i>WIDGET</i>&nbsp <tt>xview scroll</i>&nbsp <i>NUMBER&nbsp WHAT</i><p>
+ <dd>
+ Shifts the view in the window left or right according to
+ <i>NUMBER</i> and <i>WHAT</i>.&nbsp&nbsp <i>NUMBER</i> is an integer
+ and <i>WHAT</i> is either <tt>units</tt> or <tt>pages</tt>.<p>
+ </dl>
+
+<dt><i>WIDGET</i>&nbsp <tt>yview</tt>&nbsp; <i>args...</i><p>
+<dd>Used to control the vertical position of the document.<p>
+ <dl>
+ <dt><i>WIDGET</i>&nbsp <tt>yview</tt><p>
+ <dd>Returns a list containing two elements. The elements are a fractions
+ between 0.0 and 1.0 that define the position of the top and bottom
+ edges of
+ the visible part of the document as a fraction of the whole.<p>
+ <dt><i>WIDGET</i>&nbsp <tt>yview</tt>&nbsp <i>NAME</i><p>
+ <dd>Adjusts the vertical position of the document so that the tag
+ ``<tt>&lt;a name=</tt><i>NAME</i><tt>&gt;</tt>'' is on screen,
+ and preferably near the top of the screen.<p>
+ <dt><i>WIDGET</i>&nbsp <tt>yview moveto</tt>&nbsp <i>FRACTION</i><p>
+ <dd>Adjusts the horizontal position of the document so that
+ <i>FRACTION</i> of the vertical span of the document is off-screen
+ above the visible region.<p>
+ <dt><i>WIDGET</i>&nbsp <tt>xview scroll</i>&nbsp; <i>NUMBER&nbsp; WHAT</i><p>
+ <dd>
+ Shifts the view in the window up or down according to
+ <i>NUMBER</i> and <i>WHAT</i>.&nbsp&nbsp <i>NUMBER</i> is an integer
+ and <i>WHAT</i> is either <tt>units</tt> or <tt>pages</tt>.<p>
+ </dl>
+
+</dl>
+</body>
+</html>
diff --git a/tkhtml1/doc/webpage/mkwebpage.tcl b/tkhtml1/doc/webpage/mkwebpage.tcl
new file mode 100644
index 0000000..de1d25d
--- /dev/null
+++ b/tkhtml1/doc/webpage/mkwebpage.tcl
@@ -0,0 +1,195 @@
+#!/usr/bin/tclsh
+#
+# Construct the web page for tkhtml
+#
+# @(#) $Id$
+#
+
+set p [open publish.sh w]
+puts $p "#!/bin/sh"
+puts $p "#"
+
+set SendList {}
+
+set f [open index.html w]
+puts $f {
+<html>
+<head>
+<title>An HTML Widget for Tcl/Tk</title>
+</head>
+<body bgcolor=white>
+<h1 align=center>An HTML Widget For Tcl/Tk</h1>
+}
+puts $f "<p align=center><i>Last update: [clock format [clock seconds]]</i></p>"
+puts $f {
+<p>"Tkhtml" is a Tcl/Tk widget that displays HTML. Tkhtml
+is implemented in C. It is a true widget, not a metawidget implemented
+using the Text or Canvas widgets of the Tcl/Tk core. Implementing
+Tkhtml in C gives it a number of advantages:</p>
+
+<p>
+<ul>
+<li> It runs fast and uses little memory.</li>
+<li> It supports smooth scrolling.</li>
+<li> It supports text wrap-around on images and tables.</li>
+<li> It has a full implementation of tables. Complex pages (such as
+ <a href="http://www.scriptics.com/">http://www.scriptics.com/</a>)
+ are displayed correctly.</li>
+<li> Supports forms. </li>
+<li> It supports the &lt;APPLET&gt;, &lt;SCRIPT&gt; and &lt;EMBED&gt;.
+ (Partially. Full support is pending.) </li>
+<li> Support for frames is planned. </li>
+</ul>
+</p>
+
+<p>Tkhtml can be used with Tcl/Tk8.0 or later.
+The shared libraries use the new stubs mechanism, so you
+should be able to load Tkhtml with any version of "wish" beginning
+with 8.0.6.</p>
+
+<p>At the moment, there is not a lot of software that uses this
+widget. Tkhtml is not an application in and of itself. It is only
+a tool. But applications are being built around tkhtml. Check back
+later for new developments.</p>
+
+<h2>Mailing List!</h2>
+
+<p><font color=red><b><i>New!</i></b></font>
+ A mailing list has been started for users of tkhtml.
+ Sign up if you want to recieve notifications of updates or
+ ask questions about using tkhtml.</p>
+
+<form method=GET action="http://www.egroups.com/subscribe">
+<input type=hidden name="listname" value="tkhtml">
+<input type=hidden name="SubmitAction" value="Subscribe">
+<p>Enter your e-mail address below and click the button to
+ sign up for the tkhtml mailing list:</p>
+
+<p>
+<table cellspacing=10>
+<tr><td valign=center>
+<input type=text name="emailaddr" value="your e-mail" size=21>
+</td><td valign=center>
+<input type=image border=0 alt="Click here to join tkhtml"
+ name="Click here to join tkhtml" SRC="http://www.egroups.com/oems/default/languages/english/images/subscriptionBoxButton.gif">
+</td></tr>
+</table>
+</p>
+
+<p>You can also view the
+ <a href="http://www.egroups.com/group/tkhtml/">archives</a>
+ for the mailing list. To post to this mailing list, send a
+ message to <a href="mailto:tkhtml@eGroups.com">tkhtml@eGroups.com</a>.
+ The mailing list is hosted by
+ <a href="http://www.egroups.com/">eGroups.com</A>
+</p>
+</form>
+
+
+<h2>You Can Help!</h2>
+
+<p>If you would like to help, please consider
+contributing in the following ways:</p>
+
+<p>
+<ul>
+<li> Try out tkhtml on your computer and report bugs to
+ <a href="mailto:drh@acm.org">drh@acm.org</a>. </li>
+<li> Fix bugs and send in patches. (Write access to the
+ CVS repository may be granted to anyone who is serious
+ about this.)</li>
+<li> Make suggestions for new features. </li>
+<li> Write applications that use tkhtml. </li>
+<li> Improve the documentation. </li>
+</ul>
+</p>
+
+<p>Any help you can provide is appreciated.</p>
+
+<h2>Getting The Widget</h2>
+
+<p>Visit the <a href="download.html">download</a> page for a list of
+files available for immediate download.</p>
+
+<p>You can now also obtain the latest tkhtml sources via anonymous CVS.
+To access the anonymous CVS server, first install CVS on your system.
+(See <a href="http://www.cyclic.com/">http://www.cyclic.com/</a> for
+additional information.) Then login as follows:</p>
+
+<blockquote><pre>
+cvs -d :pserver:cvs@xoli.dyn.dhs.org:/home/cvs/cvsroot login
+</pre></blockquote>
+
+<p>You will be prompted for a password. Use "<tt>cvs</tt>". After
+you get logged in successfully, you can check out the source tree
+like this:</p>
+
+<blockquote><pre>
+cvs -d :pserver:cvs@xoli.dyn.dhs.org:/home/cvs/cvsroot checkout htmlwidget
+</pre></blockquote>
+
+<p>This command creates a directory named "<tt>htmlwidget</tt>" and
+fills it with the latest version of the sources.</p>
+
+</body>
+</html>
+}
+close $f
+lappend SendList index.html
+
+set f [open download.html w]
+puts $f {
+<html>
+<head>
+<title>TkHtml Download Page</title>
+</head>
+<body bgcolor=white>
+<h1 align=center>TkHtml Download Page</h1>
+}
+puts $f "<p align=center><i>Last update: [clock format [clock seconds]]</i></p>"
+puts $f {
+
+<p>The files shown below are available for download. For the very
+latest sources, visit the anonymous CVS server. Instructions for
+reaching the anonymous CVS server are on the tkhtml
+<a href="index.html">homepage</a>.</p>
+
+<ul>
+}
+foreach {file desc} {
+ tkhtml.tar.gz {A tarball containing all the latest source code}
+ hv.tcl.gz {The "Html Viewer" example application}
+ spec.html {A raw specification of how the tkhtml widget works}
+ tkhtml.so.gz {Shared library suitable for use on Linux}
+ tkhtml.dll.zip {A DLL suitable for use on Windows95/98/NT/2K}
+} {
+ if {![file readable $file]} continue
+ lappend SendList $file
+ puts $f "<li><p><a href=\"$file\">$file</a><br>"
+ puts $f "Description: $desc<br>"
+ puts $f "Size: [file size $file] bytes<br>"
+ puts $f "Last modified: [clock format [file mtime $file]]"
+ switch -glob -- $file {
+ *.zip -
+ *.gz {set access zcat}
+ default {set access cat}
+ }
+ if {![catch {exec $access $file | ident | grep {$Id: }} ident]} {
+ puts $f "<br>Version information:"
+ puts $f "<pre>\n$ident</pre>"
+ }
+ puts $f "</p></li>\n"
+}
+puts $f {
+</ul>
+
+<p><a href="index.html">Back</a> to the tkhtml home page</p>
+
+</body>
+</html>
+}
+close $f
+lappend SendList download.html
+
+puts $p "scp [lsort $SendList] hwaci@oak.he.net:public_html/sw/tkhtml"
+close $p