diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/COPYING | 339 | ||||
-rw-r--r-- | doc/COPYRIGHT | 25 | ||||
-rw-r--r-- | doc/README | 15 | ||||
-rw-r--r-- | doc/notes1.txt | 52 | ||||
-rw-r--r-- | doc/simple.make | 80 | ||||
-rw-r--r-- | doc/spec.html | 677 | ||||
-rw-r--r-- | doc/webpage/mkwebpage.tcl | 195 |
7 files changed, 1383 insertions, 0 deletions
diff --git a/doc/COPYING b/doc/COPYING new file mode 100644 index 0000000..e77696a --- /dev/null +++ b/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/doc/COPYRIGHT b/doc/COPYRIGHT new file mode 100644 index 0000000..f42114b --- /dev/null +++ b/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/doc/README b/doc/README new file mode 100644 index 0000000..8f3613a --- /dev/null +++ b/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/doc/notes1.txt b/doc/notes1.txt new file mode 100644 index 0000000..120f33f --- /dev/null +++ b/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/doc/simple.make b/doc/simple.make new file mode 100644 index 0000000..cd99dc6 --- /dev/null +++ b/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/doc/spec.html b/doc/spec.html new file mode 100644 index 0000000..cc88b52 --- /dev/null +++ b/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><applet>...</applet></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><applet></tt> tag.</p> + + <p>The text between <tt><applet></tt> and <tt></applet></tt> + is normally suppressed. + However, if the <tt>-appletcommand</tt> option is set to the empty string, + the <tt><applet></tt> tag is ignored and all text between + <tt><applet></tt> and <tt></applet></tt> is displayed + normally.</p> + + <p>"<embed>" is treated as an alias for + "<applet></applet>".</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><body bgcolor=...></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><body></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 <textarea> 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><select> is quite a complicated case...</em> +The handler should create a window +appropriate for a <select> 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><frameset>...</frameset></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><noframe>...</noframe></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><img src=...></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><img></tt> tag instead of + an image. +</td></tr> + +<tr><td valign=top><tt>-isvisitedcommand</tt><td> +When the HTML widget encounters a hyperlink +(``<tt><a href=...></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 + <BASE> 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 (<HR>) markup. + The default is "sunken". This can also be "raised" or "flat". If + "flat", then the <HR> 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 <SCRIPT>...</SCRIPT> markup is encountered in + the input HTML, the attributes of the <SCRIPT> 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><em></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. + "&" is encoded as "&amp;", "<" is encoded as "&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>  <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>  <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>  <tt>configure</tt> ?<i>args...</i>?<p> +<dd> +The standard Tk configuration command. +<p> + +<dt><i>WIDGET</i>  <tt>href</tt>  <i>X  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>  <tt>index</tt>  <i>INDEX  ?COUNT  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>  <tt>insert</tt>  <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>  <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><a name=...></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>  <tt>parse</tt>  <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> <tt>resolver</tt> ?<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>  <tt>selection</tt>  <i>subcommand args...</i><p> +<dd>The selection widget command is used to control the selection.<p> + <dl> + <dt><i>WIDGET</i>  <tt>selection clear</tt><p> + <dd>Clear the current selection. No text will be selected after this + command executes.<p> + + <dt><i>WIDGET</i>  <tt>selection set</tt>  <i>START  END</i><p> + <dd>Change the selection to be all text contained within the given + indices.<p> + </dl> + <p> + +<dt><i>WIDGET</i>  <tt>text</tt>  <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> <tt>text ascii</tt>  <i>INDEX-1  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> <tt>text delete</tt>  <i>INDEX-1  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> <tt>text html</tt>  <i>INDEX-1  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> <tt>text insert</tt>  <i>INDEX  TEXT</i><p> + <dd><p> + Inserts one or more characters immediately before the character whose + index is given. + <p> + </dl> + + +<dt><i>WIDGET</i>  <tt>token</tt>  <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> <tt>token append</tt> + <i>TAG 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> <tt>token delete</tt> + <i>INDEX  ?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> <tt>token find</tt> + <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> <tt>token get</tt> + <i>INDEX  ?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> <tt>token handler</tt> + <i>TAG ?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> <tt>token insert</tt> + <i>INDEX  TAG  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> <tt>xview</tt> <i>args...</i><p> +<dd>Used to control horizontal scrolling.<p> + <dl> + <dt><i>WIDGET</i>  <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>  <tt>xview moveto</tt>  <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>  <tt>xview scroll</i>  <i>NUMBER  WHAT</i><p> + <dd> + Shifts the view in the window left or right according to + <i>NUMBER</i> and <i>WHAT</i>.   <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>  <tt>yview</tt> <i>args...</i><p> +<dd>Used to control the vertical position of the document.<p> + <dl> + <dt><i>WIDGET</i>  <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>  <tt>yview</tt>  <i>NAME</i><p> + <dd>Adjusts the vertical position of the document so that the tag + ``<tt><a name=</tt><i>NAME</i><tt>></tt>'' is on screen, + and preferably near the top of the screen.<p> + <dt><i>WIDGET</i>  <tt>yview moveto</tt>  <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>  <tt>xview scroll</i> <i>NUMBER WHAT</i><p> + <dd> + Shifts the view in the window up or down according to + <i>NUMBER</i> and <i>WHAT</i>.   <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/doc/webpage/mkwebpage.tcl b/doc/webpage/mkwebpage.tcl new file mode 100644 index 0000000..de1d25d --- /dev/null +++ b/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 <APPLET>, <SCRIPT> and <EMBED>. + (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 |