http://tkhtml.tcl.tk/ is the home page for one of the Tk HTML widgets that renders HTML into formatted text with hyperlinks. It is a compiled extension.
As of late winter 2005, Dan Kennedy is revitalizing tkhtml [L1 ]. The new version of tkhtml is tkhtml3, which has its own wiki page.
"Which HTML renderer?" [L2 ]
this revision is possibly the dividing line in the repository between versions 2 and 3.
Here is what I did to get it working with tcl8.4.19 and tk8.4.19 on RHEL
Unfortunately it starts with the build of both tcl and tk. For each one of these I did the following:
Build TCL 8.4.19
cd tcl8.4.19/unix ./configure --enable-shared=no make mkdir static mv libtcl8*.a static make clean ./configure --enable-shared=yes make make install cp static/* /usr/local/lib
Build TK 8.4.19
cd tk8.4.19/unix ./configure --enable-shared=no make mkdir static mv libtk8*.a static make clean ./configure --enable-shared=yes make make install cp static/* /usr/local/lib
OK now you have a build tree to build against. Untar the tkhtml.tar.gz
cd htmlwidget
Replace the following line in configure
s%@TARGET_SHLIB_LINK@%$TARGET_SHLIB_LINK%g
with
s%@TARGET_SHLIB_LINK@%${TARGET_CC} -shared ${CFLAGS} ${LDFLAGS}%g
Then you should be able to do this...
mkdir ../bld cd ../bld ../htmlwidget/configure \ --prefix=/home/sklass/perforce/dev/tools/tcl/Linux/x86_64 \ --with-tcl=/home/sklass/rpm/BUILD/x86_64/tcl8.4.19 \ --with-tk=/home/sklass/rpm/BUILD/x86_64/tk8.4.19 --with-x --enable-shared make make install make install-libs
Done - it works on both i386 and x86_64
As always YMMV.
It appears that Tkhtml depends on Tk 8.0-8.3 . Pointers to modifications for Tk 8.4 or newer would be appreciated.
It does work with Tk 8.4 (recent CVS sources), with non-threaded build. But with threaded build I'm encountering misterious segfaults. Victor Wagner
Update 28.12.04. I've fixed problem with threaded build. It was related to mixed use of Tcl_Alloc and malloc and Tcl_Free and free respectively. Patches are available in my Debian package repository at http://45.free.net/debian/repository Victor Wagner
Has anyone done any new versions of the Windows DLL? Seems to also show occasonal windows errors with current builds of TCL. A pointer to the latest DLL build available would be appreciated. {Daniel B.] ---
The author writes, on the tkhtml mailing list, that he is working on making the tkhtml cvs accessible as well as setting up a new web site about tkhtml.
Does tkhtml only do HTML rendering, or is there actual code for acting as a WWW client in the widget? I can't tell from the web site.
Only rendering - see below for www clients created using tkHTML.
During late 2003, the author of tkhtml wrote on the tkhtml mailing list:
> I've seen recent postings to news:comp.lang.tcl about people having all > sorts of bug fixes and enhancements for this widget and now this week > we see some uploaded files here for the widget. > > Has anyone contacted the original author to see if there would be interest > in creating an sf.net project, getting tkhtml source into it, then letting > people loose to start fixing and upgrading it? Anybody who wants to undertake the task of starting a sf.net project for tkhtml has my blessing. Or if sf.net is too slow for you, I can put the code on the [CVS] server at www.sqlite.org and turn folks loose on it there.
See http://www.sqlite.org/ (or [L3 ]; also, Victor Wagner has a recent image [L4 ] of the sources) for the cvs server machine mentioned.
Note that TkHTML uses LGPL.
2003-11-13 - In late 2002 D. Richard Hipp released the files that he wrote to the public domain. The remaining LGPLed file htmlexts.c was written by Peter MacDonald, and he has indicated that this will be re-licensed in the next release. (New release with some simple CSS support still a few months off at least apparently)
Thanks to both of them for the great work and for releasing it with a license compatible with the Tcl/Tk core! Hopefully we'll see TkHTML included in the Tk distribution some time. (others have mentioned that this is on the cards..)
Kitten, a compilation of extensions for the Tclkit user, includes compiled versions of tkhtml for Linux, Solaris, and Windows.
The ActiveTcl Batteries included distribution includes tkhtml [L5 ].
TkHTML is one of the numerous packages in the Tcl community which has its own pecular build requirements. Be certain to read carefully the COMPILE.txt instructions - and take their instructions literally ! You do NOT just do a compile; make ; make install on this package!
Neil Madden has provided a neat little 5 line .sig that points one to this wiki - see the code at Simple Tkhtml web page displayer.
Detlef Groth has written a snit::widget wrapper for the tkhtml widget called snitbrowser. snitbrowser is also used inside the Tcl-documentation tool dgHelpBrowser.
kroc has written a Help.kit with Tkhtml.
TkHTML shares its code base with BrowseX; the latter uses TkHTML, and Peter MacDonald regularly updates the TkHTML CVS repository.
LV We should determine which tkhtml cvs repository Peter MacDonald is updating regularly and mention that here.
A mailing list for discussing D. Richard Hipp's Tk widget for rendering HTML used to exist, but it appears to have been deleted (along with all archives and code updates and enhancmenets) during February or March 2007.
What: Hipp miscellaneous widgets Where: http://www.hwaci.com/sw/ http://tkhtml.hwaci.com/ Description: Author has a variety of software available. A Tree and Notebook widget written in pure Tcl/Tk code is available. Also there is a new tk_messageBox which uses color icons and tkhtml, an HTML widget for Tcl/Tk. There is a DLL for the TkHTML widget built using the Tcl 8.x Stub library, as well as a shared library for RedHat Linux 6.0. Support continues to improve - support for table, script and applet tags recently added. See cvs -d :pserver:[email protected]:/tkhtml for the source code. Note that the TkHTML widget is distributed as GPL. Updated: 11/2004 Contact: mailto:[email protected] (D. Richard Hipp) What: Scout Where: http://www.sanmay.freeserve.co.uk/ Description: WWW browser which uses tkhtml . Updated: 08/2001 Contact: mailto:[email protected] What: Tixapps Where: http://tix.sourceforge.net/Tixapps/ Description: Suite of development applications that run with Tcl/Tk/Tix or Python/Tkinter/Tix. Includes an inspector, debugger and GNU texinfo browser. The code includes Python wrappers for TkHTML and TkTable. Currently at version 1.6 . Updated: 06/2002 Contact: See web site. What: VAD (Visual Ada Developer) Where: http://www.websamba.com/ldulman/vad.htm Description: Tcl/Tk oriented Ada-95 GUI builder, portable to different platforms such as Windows, unix, MacOS, and OS/2 . You can use it as an IDE for any Ada-95 (C, C++, Tcl) project. Uses GNAT, TASH, RAPID, Tcl/Tk 8.x, Img, icons, Help System, TkPaint, BWidgets, mcListBox, mComboBox, Tktable, ftp_library, csh, snack, BLT, itcl, Tix, QuickTimeTcl, XanimTcl, Tcl-gtk, Oratcl, XBit, Tkogl, tom, Vtktcl, Tkhtml, Fve, August, ASED, TclDOM, Tclxml Whiteboard, TkMC, tkxmlive, IDL_To_Ada. Currently at version 6.0 . Updated: 08/2002 Contact: See web site What: WebSamba package repository Where: http://www.websamba.com/tcltk Description: A variety of packages for Tcl/Tk 8.4a3, working with Windows and RedHat 7.1. Includes BLT, Snack, Tix, COST, TclX, Tktable, Img, Tkhtml, itcl, and TkOgl. Updated: 10/2001 Contact: mailto:[email protected] ) (Leonid Dulman) What: browser Where: http://sourceforge.net/projects/tkbrowser Description: A wrapper around TkHTML with default bindings and functionality to create simple web browsing widgets. Currently at version 0.1 . Updated: 03/2002 Contact: mailto:[email protected] (Neil Madden)
NEM: Note that the above code hasn't been touched for a while. I did spend quite a lot of time improving this, but apparently I neglected to upload the changes to sourceforge. I have no idea where the newer code is now (probably lost). Somebody created a snit wrapper on this wiki which has approximately the same functionality as my package, and is probably a better starting point.
What: kitten Where: http://www.equi4.com/pub/tk/examples/ Description: Kitten is a tclkit collection of Tcl/Tk extensions aimed at reducing the work a developer has to do while developing a scripted document. It contains scripting extensions like tcllib and BWidgets, as well as Expect, itcl/itk/iwidgets/tkhtml, and others. Binary extensions are compiled for Windows, Linux, and Solaris as possible. Updated: 07/2001 Contact: See web site.
EKB I found this post from comp.lang.tcl by Victor Wagner to be invaluable:
I've build Tkhtml widget 2.0 from CVS and find out that it works very strange way. hv.tcl works and processes hyperlinks fine, but when I'm trying to use html widget in my code, mouse click events are ignored. It took me about half of day to find out that HtmlClip widget is silently created when page is loaded into html widget, and silently intercerts all events except on tiny border around widget. Also mouse wheel scrolling is not supported. I think that set of default bindings should be included into Tkhtml package, just as it is done for core Tk widget. At least following bindings should appear 1. <Motion> binding which would change cursor to hand when over hyperlink (such binding already present in the hv.tcl code) 2. <Button-1> binding to invoke a command, specified with -hyperlinkcommand widget option 3. <Mouse-Wheel> bindings (for instance, copied from text widget) Here is an prototype for this bindings: # # Change cursor to hand if over hyperlink # Copied from hv.tcl # bind HtmlClip <Motion> { set parent [winfo parent %W] set url [$parent href %x %y] if {[string length $url] > 0} { $parent configure -cursor hand2 } else { $parent configure -cursor {} } } # # Mouse Wheel bindings # Cut'n'pasted from Text widget binding # if {[string equal [tk windowingsystem] "classic"] || [string equal [tk windowingsystem] "aqua"]} { bind HtmlClip <MouseWheel> { %W yview scroll [expr {- (%D)}] units } bind HtmlClip <Option-MouseWheel> { %W yview scroll [expr {-10 * (%D)}] units } bind HtmlClip <Shift-MouseWheel> { %W xview scroll [expr {- (%D)}] units } bind HtmlClip <Shift-Option-MouseWheel> { %W xview scroll [expr {-10 * (%D)}] units } } else { bind HtmlClip <MouseWheel> { %W yview scroll [expr {- (%D / 120) * 4}] units } } if {[string equal "x11" [tk windowingsystem]]} { # Support for mousewheels on Linux/Unix commonly comes through mapping # the wheel to the extended buttons. If you have a mousewheel, find # Linux configuration info at: # http://www.inria.fr/koala/colas/mouse-wheel-scroll/ bind HtmlClip <4> { if {!$tk_strictMotif} { %W yview scroll -5 units } } bind HtmlClip <5> { if {!$tk_strictMotif} { %W yview scroll 5 units } } } # # Invoke widget hyperlink command on the hyperlink # Invented by myself # bind HtmlClip <1> { set parent [winfo parent %W] set url [$parent href %x %y] if {[string length $url]} { eval [$parent cget -hyperlinkcommand] $url } }