Provided by: tk-html3_3.0~fossil20110109-6_amd64 bug

NAME

       tkhtml - Widget to render html documents.

SYNOPSIS

       html pathName ?options?

STANDARD OPTIONS

              -height
              -width
              -xscrollcommand
              -xscrollincrement
              -yscrollcommand
              -yscrollincrement

       See the options(n) manual entry for details on the standard options.

WIDGET-SPECIFIC OPTIONS

       Command-Line Name:-defaultstyle
        .br Database Name:  defaultstyle
        .br Database Class: Defaultstyle
        .br
        .RS
        .PP  This  option is used to set the default style-sheet for the widget. The option value
       should be the entire text of the default style-sheet.

       The default stylesheet defines things that are "built-in" to the document  -  for  example
       the behaviour of <p> or <img> tags in html. The idea behind making it flexible is to allow
       Tkhtml to display anything that looks roughly like an XML document. But this will not work
       at the moment because of other assumptions the implementation makes about the set of valid
       tags. Currently, only valid HTML tags are recognized.

       The Tkhtml package adds the [::tkhtml::htmlstyle] command to the interpreter it is  loaded
       into.  Invoking  this  command  returns  a  CSS  document suitable for use with Tkhml as a
       default  stylesheet  for  HTML  documents.  If   the   -quirks   option   is   passed   to
       [::tkhtml::htmlstyle]  then  the  returned  document  includes  some extra rules used when
       rendering legacy documents.

       If the value of the -defaultstyle option is changed, the new value does  not  take  effect
       until after the next call to the widget [reset] method.

       The   default   value  of  this  option  is  the  same  as  the  string  returned  by  the
       [::tkhtml::htmlstyle] command.
        .RE Command-Line Name:-fontscale
        .br Database Name:  fontscale
        .br Database Class: Fontscale
        .br
        .RS
        .PP This option is set to a floating point number, default 1.0.  After CSS algorithms are
       used  to determine a font size, it is multiplied by the value of this option. Setting this
       to a value other than 1.0 breaks standards compliance.
        .RE Command-Line Name:-fonttable
        .br Database Name:  fonttable
        .br Database Class: Fonttable
        .br
        .RS
        .PP This option must be set to a list of 7 integers. The first integer  must  be  greater
       than 0 and each subsequent integer must be greater than or equal to its predecessor.

       The  seven integers define the sizes of the Tk fonts (in points) used when a CSS formatted
       document requests font-size "xx-small", "x-small", "small", "medium",  "large",  "x-large"
       or "xx-large", respectively.

       The default value is {8 9 10 11 13 15 17}.
        .RE Command-Line Name:-forcefontmetrics
        .br Database Name:  forcefontmetrics
        .br Database Class: Forcefontmetrics
        .br
        .RS
        .PP  This  is  a  boolean option. If true, the font-metrics returned by Tk are overridden
       with calculated values based on the font requested. This improves CSS  compatibility,  but
       on some systems may cause problems. The default is true.
        .RE Command-Line Name:-forcewidth
        .br Database Name:  forcewidth
        .br Database Class: Forcewidth
        .br
        .RS
        .PP  When  determining the layout of a document, Tkhtml3 (and all other HTML/CSS engines)
       require as an input the width of the containing block for the  whole  document.  For  web-
       browsers,  this  is  usually  the  width  of  the  viewport  in which the document will be
       displayed.

       If this option is true or the widget window is not mapped, Tkhtml3 uses the value  of  the
       -width  option  as  the initial containing block width. Otherwise, the width of the widget
       window is used.

       The default value is false.
        .RE Command-Line Name:-imagecache
        .br Database Name:  imagecache
        .br Database Class: Imagecache
        .br
        .RS
        .PP This boolean option (default true) determines  whether  or  not  Tkhtml3  caches  the
       images  returned  to  it  by the -imagecmd callback script. If true, all images are cached
       until the next time the [reset] sub-command is invoked. If false, images are discarded  as
       soon as they are not in use.

       For simple applications, or applications that retrieve images from local sources, false is
       usually a better value for this option (since it may save memory). However for web-browser
       applications  where  the background images of elements may be modified by mouseover events
       and so on, true is a better choice.
        .RE Command-Line Name:-imagecmd
        .br Database Name:  imagecmd
        .br Database Class: Imagecmd
        .br
        .RS
        .PP As well as for replacing entire document nodes  (i.e.  <img>),  images  are  used  in
       several  other  contexts  in  CSS  formatted  documents,  for  example  as list markers or
       backgrounds. If the
        -imagecmd option is not set to an empty string (the default), then each time an image URI
       is  encountered  in the document, it is appended to the -imagecmd script and the resulting
       list evaluated.

       The command should return either an empty string, the name of a Tk image,  or  a  list  of
       exactly  two  elements,  the  name  of  a Tk image and a script. If the result is an empty
       string, then no image can be displayed. If the result is a Tk image name, then  the  image
       is  displayed  in  the widget. When the image is no longer required, it is deleted. If the
       result of the command is a list containing a Tk image name and a script, then  instead  of
       deleting the image when it is no longer required, the script is evaluated.

       If  the size or content of the image are modified while it is in use the widget display is
       updated automatically.
        .RE Command-Line Name:-mode
        .br Database Name:  mode
        .br Database Class: Mode
        .br
        .RS
        .PP This option may be set to "quirks", "standards" or "almost  standards",  to  set  the
       rendering engine mode. The default value is "standards".

       TODO: List the differences between the three modes in Tkhtml.
        .RE Command-Line Name:-parsemode
        .br Database Name:  parsemode
        .br Database Class: Parsemode
        .br
        .RS
        .PP  This  option  may  be  set  to "html", "xhtml" or "xml", to set the parser mode. The
       default value is "html".

       In "html" mode, the parser attempts to mimic the tag-soup  approach  inherited  by  modern
       web-browsers  from  the bad old days. Explicit XML style self-closing tags (i.e. closing a
       markup tag with "/>" instead of ">") are not handled specially. Unknown tags are ignored.

       "xhtml" mode is the same as  "html"  mode  except  that  explicit  self-closing  tags  are
       recognized.

       "xml"  mode  is  the  same  as  "xhtml"  mode  except that unknown tag names and XML CDATA
       sections are recognized.
        .RE Command-Line Name:-shrink
        .br Database Name:  shrink
        .br Database Class: Shrink
        .br
        .RS
        .PP This boolean option governs the way  the  widgets  requested  width  and  height  are
       calculated.  If  it is set to false (the default), then the requested width and height are
       set by the -width and -height options as per usual.

       If this option is set to true, then the widgets requested width and height are  determined
       by  the  current  document.  Each  time  the  document  layout  is calculated, the widgets
       requested height and width are set to the size of the document layout. If  the  widget  is
       unmapped  when  the  layout  is calculated, then the value of the -width option is used to
       determine the width of the initial containing block for the layout. Otherwise, the current
       window width is used.
        .RE Command-Line Name:-zoom
        .br Database Name:  zoom
        .br Database Class: Zoom
        .br
        .RS
        .PP  This  option  may be set to any floating point number. Before the document layout is
       calculated,  all  lengths  and  sizes  specified  in  the  HTML  document  or  CSS   style
       configuration, implicit or explicit, are multiplied by this value.

       The default value is 1.0.
        .RE Command-Line Name:-logcmd
        .br Database Name:  logcmd
        .br Database Class: Logcmd
        .br
        .RS
        .PP  This  option  is  used  for  debugging  the  widget.  It is not part of the official
       interface and may be modified or removed at any time. Don"t worry about it.
        .RE Command-Line Name:-timercmd
        .br Database Name:  timercmd
        .br Database Class: Timercmd
        .br
        .RS
        .PP This option is used for debugging  the  widget.  It  is  not  part  of  the  official
       interface and may be modified or removed at any time. Don"t worry about it.
        .RE Command-Line Name:-layoutcache
        .br Database Name:  layoutcache
        .br Database Class: Layoutcache
        .br
        .RS
        .PP  This  option  is  used  for  debugging  the  widget.  It is not part of the official
       interface and may be modified or removed at any time. Don"t worry about it.

       If this boolean option is set to true, then Tkhtml caches layout  information  to  improve
       performance when the layout of a document must be recomputed. This can happen in a variety
       of situations, for example when extra text is appended to the document,  a  new  style  is
       applied  to  the  document,  a dynamic CSS selector (i.e. :hover) is activated, the widget
       window is resized, or when the size of an embedded image or Tk window changes.

       Layout caching consumes no extra memory or significant processing cycles, so in  an  ideal
       world there is no real reason to turn it off. But it can be a source of layout bugs, hence
       this option.

       The default value is true.
        .RE

DESCRIPTION

       The [html] command creates a new window (given by the pathName argument) and makes it into
       an  html  widget. The html command returns its pathName argument. At the time this command
       is invoked, there must not exist a window  named  pathName,  but  pathName"s  parent  must
       exist.

WIDGET COMMAND

       The  [html]  command creates a new Tcl command whose name is pathName. This command may be
       used to invoke various operations on the widget as follows:

       pathName bbox nodeHandle
              If node nodeHandle generates content, this command returns a list of four  integers
              that  define  the  bounding-box  of the generated content, relative to the top-left
              hand corner of the rendered document. The first  two  integers  are  the  x  and  y
              coordinates of the top-left corner of the bounding-box, the later two are the x and
              y coordinates of the bottom-right corner of the same box.  If  the  node  does  not
              generate content, then an empty string is returned.

       pathName cget option
              Returns  the  current value of the configuration option given by option. Option may
              have any of the values accepted by the [html] command.

       pathName configure ?option? ?value?
              Query or modify the configuration options of the widget. If no option is specified,
              returns  a  list  describing  all  of  the  available  options  for  pathName  (see
              Tk_ConfigureInfo for information  on  the  format  of  this  list).  If  option  is
              specified  with  no value, then the command returns a list describing the one named
              option (this list will be identical to  the  corresponding  sublist  of  the  value
              returned  if  no  option  is  specified).  If  one  or  more option-value pairs are
              specified, then the command modifies the given widget option(s) to have  the  given
              value(s);  in this case the command returns an empty string. Option may have any of
              the values accepted by the [html] command.

       pathName fragment html-text
              TODO: Document this command.

       pathName handler node tag script
       pathName handler attribute tag script
       pathName handler script tag script
       pathName handler parse tag script
              This command is used to define "handler" scripts - Tcl callback  scripts  that  are
              invoked  by  the  widget when document elements of specified types are encountered.
              The widget supports two types of handler scripts: "node" and "script".

              For a "node" handler script, whenever a document element having the  specified  tag
              type  (e.g.  "p" or "link") is encountered during parsing, then the node handle for
              the node is appended to script and the resulting list evaluated as a  Tcl  command.
              See  the  section  "NODE  COMMAND"  for details of how a node handle may be used to
              query and manipulate a document node. A node  handler  is  called  only  after  the
              subtree rooted at the node has been completely parsed.

              If  the  handler script is a "script" handler, whenever a document node of type tag
              is parsed, two arguments  are  appended  to  the  specified  script  before  it  is
              evaluated.   The  first  argument  is a key-value list (suitable for passing to the
              [array set] command containing the HTML attributes that were part  of  the  element
              declaration. The second argument is the literal text that appears between the start
              and end tags of the element.

              Elements for which a "script" handler is evaluated are not included in  the  parsed
              form  of the HTML document. Instead, the result of the script handler evaluation is
              substituted into the document and parsed. For  example,  to  handle  the  following
              embedded javascript:

                     <SCRIPT>
                       document.write("<p>A paragraph</p>")
                     </SCRIPT>

              a  script  handler  that returns the string "<p>A paragraph</p>" must be configured
              for nodes of type "SCRIPT".

              Unlike node or script handlers, a "parse" handler may be associated with a specific
              opening  tag, a closing tag or with text tags (by specifying an empty string as the
              tag type). Whenever such a tag is encountered the parse handler script  is  invoked
              with  two  arguments, the node handle for the created node and the character offset
              of the in the parsed document. For a closing tag (i.e. "/form") an empty string  is
              passed instead of a node handle.

              TODO: Describe "attribute" handlers.

              TODO:  The  offset  values passed to parse handler scripts currently have problems.
              See http://tkhtml.tcl.tk/cvstrac/tktview?tn=126

              Handler callbacks are always  made  from  within  [pathName  parse]  commands.  The
              callback  for  a given node is made as soon as the node is completely parsed.  This
              can happen because an implicit or explicit closing tag is parsed, or because  there
              is  no  more document data and the -final switch was passed to the [pathName parse]
              command.

              TODO: Return values of handler scripts? If an exception occurs in a handler script?

       pathName image
              This command returns the name of a new Tk image containing the  rendered  document.
              Where Tk widgets would be mapped in a live display, the image contains blank space.

              The  returned  image  should  be  deleted when the script has finished with it, for
              example:

                     set img [.html image]
                     # ... Use $img ...
                     image delete $img

              This command is included mainly for automated testing and should be used with care,
              as  large documents can result in very large images that take a long time to create
              and use vast amounts of memory.

              Currently this command is not available on  windows.  On  that  platform  an  empty
              string is always returned.

       pathName node ? ?-index? x y?
              This command is used to retrieve one or more document node handles from the current
              document. If the x and y parameters are omitted, then the handle  returned  is  the
              root-node  of  the  document,  or  an empty string if the document has no root-node
              (i.e. an empty document).

              If the x and y arguments are present, then a list of node handles is returned.  The
              list  contains one handle for each node that generates content currently located at
              viewport coordinates (x, y). Usually this is only a single node, but floating boxes
              and  other  overlapped content can cause this command to return more than one node.
              If no content is located at the specified coordinates or the widget window  is  not
              mapped, then an empty string is returned.

              If  the -index option is specified along with the x and y coordinates, then instead
              of a list of node handles, a list of two elements is returned. The first element of
              the  list  is  the  node-handle  associated  with the generated text closest to the
              specified (x, y) coordinates. The second list  value  is  a  byte  (not  character)
              offset  into  the text obtainable by [nodeHandle text] for the character closest to
              coordinates (x, y). The index may be used with the [pathName tag] commands.

              The document node can be queried and manipulated using the interface  described  in
              the "NODE COMMAND" section.

       pathName parse ?-final? html-text
              Append  extra  text to the end of the (possibly empty) document currently stored by
              the widget.

              If the -final option is present, this indicates that the supplied text is the  last
              of the document. Any subsequent call to [pathName parse] before a call to [pathName
              reset] will raise an error.

              If the -final option is not passed to [pathName parse] along with the final part of
              the  document  text, node handler scripts for any elements closed implicitly by the
              end of the document will not be executed. It is not an error to  specify  an  empty
              string for the html-text argument.

       pathName preload uri
              This  command  is  only  useful  if  the  -imagecache  option is set to true and an
              -imagecmd script is defined. It causes the widget to invoke the -imagecmd script to
              retrieve  the image at URI uri. Assuming -imagecache is true, the returned image is
              then stored in the image-cache.

              This command may be useful when implementing scripting  environments  that  support
              "preloading" of images.

       pathName reset
              This  is  used  to clear the internal contents of the widget prior to parsing a new
              document. The widget is reset such that the document tree is empty (as if no  calls
              to  [pathName  parse]  had  ever  been  made) and no stylesheets except the default
              stylesheet are loaded (as if no invocations of [pathName style] had occured).

       pathName search selector
              The selector argument passed to this command must be  a  valid  CSS  selector,  for
              example   "h1"   or   "a[href]".  This  command  returns  a  list  of  node-handles
              corresponding to the set of document nodes that match the supplied selector.

       pathName style ?options? stylesheet-text
              Add a  stylesheet  to  the  widgets  internal  configuration.  The  stylesheet-text
              argument  should contain the text of a complete stylesheet.  Incremental parsing of
              stylesheets is not supported, although of course multiple stylesheets may be  added
              to a single widget.

              The following options are supported:

                     Option                   Default Value
                     --------------------------------------
                     -id <stylesheet-id>      "author"
                     -importcmd <script>      ""
                     -urlcmd    <script>      ""

              The  value  of the -id option determines the priority taken by the style-sheet when
              assigning property values to document nodes (see chapter 6 of the CSS specification
              for more detail on this process).  The first part of the style-sheet id must be one
              of the strings "agent", "user" or "author". Following this, a  style-sheet  id  may
              contain any text.

              When  comparing  two  style-ids  to  determine which stylesheet takes priority, the
              widget uses the following approach: If the initial  strings  of  the  two  style-id
              values  are not identical, then "user" takes precedence over "author", and "author"
              takes precedence over "agent".  Otherwise,  the  lexographically  largest  style-id
              value  takes  precedence.   For  more  detail on why this seemingly odd approach is
              taken, please refer to the "STYLESHEET LOADING" below.

              The -importcmd option is used to provide a handler script  for  @import  directives
              encountered  within  the  stylesheet  text.  Each  time  an  @import  directive  is
              encountered, if the -importcmd option is set to other than an empty string, the URI
              to  be imported is appended to the option value and the resulting list evaluated as
              a Tcl script. The return value of the script is ignored. If the  script  raises  an
              error, then it is propagated up the call-chain to the [pathName style] caller.

              The -urlcmd option is used to supply a script to translate "url(...)" CSS attribute
              values. If this option is not set to "", each time a url() value is encountered the
              URI  is  appended  to  the value of -urlcmd and the resulting script evaluated. The
              return value is stored as the URL in the parsed stylesheet.

       pathName tag add tag-name node1 index1 node2 index2
       pathName tag remove tag-name node1 index1 node2 index2
       pathName tag configure tag-name option value ?option value...?
       pathName tag delete tag-name
              The [pathName tag] command is used to highlight regions of text  displayed  by  the
              widget. For example, a region of text selected using the pointer.

              Each  displayed  document character is identified by a text node-handle (see below)
              and an index into the text returned by the [node text] command. The index is a byte
              (not  character)  offset. See also the documentation for the [pathName node -index]
              command.   Both  the  [pathName  tag  add]  and  [pathName  tag  remove]  use  this
              convention.

              Evaluating  the  [pathName tag add] command adds the specified tag to all displayed
              characters between the point in the document described by (node1, index1)  and  the
              point  described  by  (node2,  index2).  If the specified tag does not exist, it is
              created with default option values. The order in which  the  two  specified  points
              occur in the document is not important.

              The  [pathName  tag  remove]  command  removes the specified tag from all displayed
              characters between the point in the document described by (node1, index1)  and  the
              point described by (node2, index2).

              The  [pathName  tag  configure]  command is used to configure a tags options, which
              determine how tagged characters are displayed. If the specified tag does not exist,
              it is created. The following options are supported:

                     Option                   Default Value
                     --------------------------------------
                     -background              black
                     -foreground              white

              A  tag  can be completely deleted (removed from all characters and have it"s option
              values set to the defaults) using the [pathName tag delete] command.

              The [pathName tag] command replaces the [pathName select] command that was  present
              in early alpha versions of Tkhtml3. Users should note that the options supported by
              [pathName tag configure] are likely to change before beta release. See
                              http://tkhtml.tcl.tk/cvstrac/tktview?tn=73 (ticket #73).

       pathName text bbox node1 index1 node2 index2
       pathName text index offset ?offset...?
       pathName text offset node index
       pathName text text
              The [pathName text] commands allow an application to query and  interact  with  the
              text  of  the  displayed  document.  This can be used, for example, to search for a
              string within an Html document,  or  to  copy  a  region  of  text  to  the  system
              clipboard.

              The  [pathName  text text] command returns a string containing the raw, unformatted
              text of the displayed document.  Each block box is separated from  the  next  by  a
              newline  character. Each block of whitespace is collapsed to a single space, except
              within blocks with the CSS "white-space" property set to "pre".

              The [pathName text index] command is used to transform from a character  offset  in
              the  string  returned by [pathName text text] to a node/index pair that can be used
              with the [pathName tag] commands. The return value is a list of two  elements,  the
              node-handle followed by the index.

              Command  [pathName  text  offset]  is the reverse of [pathName text index]. Given a
              node-handle and index of the type similar  to  that  used  by  the  [pathName  tag]
              commands,  this  command  returns  the corresponding character offset in the string
              returned by [pathName text text] command.

       pathName write continue
       pathName write text html-text
       pathName write wait
              TODO

       pathName xview
       pathName xview moveto fraction
       pathName xview scroll number what
              This command is used to query or adjust the horizontal  position  of  the  viewport
              relative  to  the document layout.  It is identical to the [pathName xview] command
              implemented by the canvas and text widgets.

       pathName yview
       pathName yview moveto fraction
       pathName yview scroll number what
       pathName yview nodeHandle
              This command is used to query or adjust  the  vertical  position  of  the  viewport
              relative  to  the  document layout.  It supports a superset of the [pathName yview]
              interface implemented by the canvas and text widgets.

              As well as the standard interface copied from the canvas and text  widgets,  Tkhtml
              supports  passing a single node-handle as the only argument to [pathName yview]. In
              this case the viewport is scrolled so  that  the  content  generated  by  the  node
              nodeHandle  is  visible.  This  can  be  useful  for  implementing  support for URI
              fragments.

NODE COMMAND

       There are several interfaces by which a script can obtain  a  "node  handle".   Each  node
       handle is a Tcl command that may be used to access the document node that it represents. A
       node handle is valid from the time it is obtained until the next call to [pathName reset].
       The  node  handle  may be used to query and manipulate the document node via the following
       subcommands:

       nodeHandle attribute ??-default default-value? ?attribute? ?new-value??
              If the attribute argument is present, then return  the  value  of  the  named  html
              attribute.  If  the  attribute  is  not  defined  for  the node, then a copy of the
              default-value argument is returned instead. If no  -default  option  was  specified
              (and  hence  there  is  no default-value argument) and the named attribute does not
              exist, an error is raised.

              If the new-value argument is present, then set the named
                              attribute to the specified new-value.

              If no attribute argument is  present,  return  a  key-value  list  of  the  defined
              attributes of the form that can be passed to [array set].

                     # Html code for node
                     <p class="normal" id="second" style="color : red">

                     # Value returned by [nodeHandle attr]
                     {class normal id second style {color : red}}

                     # Value returned by [nodeHandle attr class]
                     normal

       nodeHandle children
              Return  a  list of node handles for all children of nodeHandle.  The leftmost child
              node becomes element 0 of the list, the second leftmost element 1, and so on.

       nodeHandle destroy
              TODO. Experimental.

       nodeHandle dynamic set ?flag?
       nodeHandle dynamic clear ?flag?
              Set or clear a dynamic flag on a node.

              The supported values for the flag argument are "active", "hover",  "focus",  "link"
              and  "visited".  The  status  of  each  dynamic  flag determines whether or not the
              corresponding CSS dynamic pseudo-classes are considered  to  match  the  node.  For
              example, when the mouse moves over node $N, a script could invoke:

                     $N dynamic set hover
              Or possibly, if $PN were the node the mouse hovered over previously:

                     for {set n $PN} {$n ne ""} {set n [$n parent]} {
                             $n dynamic clear hover
                     }
                     for {set n $N} {$n ne ""} {set n [$n parent]} {
                             $n dynamic set hover
                     }

       nodeHandle insert ?-before node? node-list
              TODO. Experimental.

       nodeHandle override ?value?
              TODO. Experimental.

       nodeHandle parent
              Return  the  node  handle for the node"s parent. If the node does not have a parent
              (i.e. it is the document root), then return an empty string.

       nodeHandle property ?-before|-after? ?property-name?
              TODO.

       nodeHandle remove ?node-list?
              TODO.

       nodeHandle replace ? ?options? newValue?
              This command is used to set and get the name of  the  replacement  object  for  the
              node, if any. If the newValue argument is present, then this command sets the nodes
              replacement object name and returns the new value. If newValue is not present, then
              the current value is returned.

              A  nodes  replacement  object  may  be  set  to the name of a Tk window or an empty
              string. If it is an empty string (the default and usual case),  then  the  node  is
              rendered  normally.   If  the  node  replacement  object is set to the name of a Tk
              window, then the Tk window is mapped into the widget in place of any other  content
              (for example to implement form elements or plugins).

              The following options are supported:

                     Option                   Default Value
                     --------------------------------------
                     -deletecmd    <script>   ""
                     -configurecmd <script>   ""
                     -stylecmd     <script>   ""

              When  a  replacement object is no longer being used by the widget (e.g. because the
              node has been deleted or [pathName reset] is invoked), the value of the  -deletecmd
              option is evaluated as Tcl script.

              If  it  is  not  set  to  an  empty  string  (the  default) each time the nodes CSS
              properties are recalculated, a serialized array is appended to  the  value  of  the
              -configurecmd  option  and the result evaluated as a Tcl command. The script should
              update the replacement objects appearance where appropriate to reflect the property
              values. The format of the appended argument is {p1 v1 p2 v2 ... pN vN} where the pX
              values are property names (i.e. "background-color") and the vX values are  property
              values  (i.e.  "#CCCCCC").  The CSS properties that currently may be present in the
              array are listed below. More may be added in the future.

                     background-color    color
                     font                selected

              The value of the "font" property, if present in the serialized array is not set  to
              the  value of the corresponding CSS property. Instead it is set to the name of a Tk
              font determined by combining the various font-related CSS properties.  Unless  they
              are  set  to  "transparent",  the  two  color  values are guaranteed to parse as Tk
              colors. The "selected" property is either true or false, depending  on  whether  or
              not  the  replaced object is part of the selection or not. Whether or not an object
              is part of the selection is governed by previous calls  to  the  [pathName  select]
              command.

              The -configurecmd callback is always executed at least once between the [nodeHandle
              replace] command and when the replaced object is mapped into the widget display.

       nodeHandle tag
              Return the name of the Html tag that generated this  document  node  (i.e.  "p"  or
              "link"), or an empty string if the node is a text node.

       nodeHandle text ?-tokens|-pre?
              If  the node is a "text" node, return the string contained by the node. If the node
              is not a "text" node, return an empty string.

              TODO: Document -tokens and -pre.

STYLESHEET LOADING

       Apart from the default stylesheet that is  always  loaded  (see  the  description  of  the
       -defaultstyle  option  above),  a  script  may  configure  the  widget  with  extra  style
       information in the form of CSS stylesheet documents. Complete stylesheet documents (it  is
       not  possible  to incrementally parse stylesheets as it is HTML document files) are passed
       to the widget using the [pathName style] command.

       As well as any stylesheets specified by the application, stylesheets may  be  included  in
       HTML documents by document authors in several ways:

              * Embedded  in  the  document  itself,  using a <style> tag. To handle this case an
                application script must register a "script" type handler for <style>  tags  using
                the  [pathName handler] command. The handler command should call [pathName style]
                to configure the widget with the stylesheet text.

              * Linked from the document, using a <link> tag. To handle this case the application
                script should register a "node" type handler for <link> tags.

              * Linked  from  another stylesheet, using the @import directive. To handle this, an
                application needs to configure the widget -importcommand option.

              # Implementations of application callbacks to load
              # stylesheets from the various sources enumerated above.
              # ".html" is the name of the applications tkhtml widget.
              # The variable $document contains an entire HTML document.
              # The pseudo-code <LOAD URI CONTENTS> is used to indicate
              # code to load and return the content located at $URI.

              proc script_handler {tagcontents} {
                  incr ::stylecount
                  set id "author.[format %.4d $::stylecount]"
                  set handler "import_handler $id"
                  .html style -id $id.9999 -importcmd $handler $tagcontents
              }

              proc link_handler {node} {
                  if {[node attr rel] == "stylesheet"} {
                      set URI [node attr href]
                      set stylesheet [<LOAD URI CONTENTS>]

                      incr ::stylecount
                      set id "author.[format %.4d $::stylecount]"
                      set handler "import_handler $id"
                      .html style -id $id.9999 -importcmd $handler $stylesheet
                  }
              }

              proc import_handler {parentid URI} {
                  set stylesheet [<LOAD URI CONTENTS>]

                  incr ::stylecount
                  set id "$parentid.[format %.4d $::stylecount]"
                  set handler "import_handler $id"
                  .html style -id $id.9999 -importcmd $handler $stylesheet
              }

               .html handler script style script_handler
               .html handler node link link_handler

              set ::stylecount 0

               .html parse -final $document

       The complicated part of the example code above is the generation  of  stylesheet-ids,  the
       values  passed  to the -id option of the [.html style] command. Stylesheet-ids are used to
       determine the precedence of each stylesheet passed to the widget, and the role it plays in
       the  CSS  cascade algorithm used to assign properties to document nodes. The first part of
       each stylesheet-id, which must be either "user", "author" or "agent", determines the  role
       the  stylesheet  plays  in  the  cascade  algorithm.  In  general, author stylesheets take
       precedence over user stylesheets which take precedence over agent stylesheets.  An  author
       stylesheet  is  one supplied or linked by the author of the document. A user stylesheet is
       supplied by the user of the viewing application, possibly  by  configuring  a  preferences
       dialog or similar. An agent stylesheet is supplied by the viewing application, for example
       the default stylesheet configured using the -defaultstyle option.

       The stylesheet id mechanism is designed so that the cascade can be  correctly  implemented
       even when the various stylesheets are passed to the widget asynchronously and out of order
       (as may be the case if they are being downloaded from a network server or servers).

              #
              # Contents of HTML document
              #

              <html><head>
                  <link rel="stylesheet" href="A.css">
                  <style>
                      @import uri("B.css")
                      @import uri("C.css")
                      ... rules ...
                  </style>
                  <link rel="stylesheet" href="D.css">
               ... remainder of document ...

              #
              # Contents of B.css
              #

              @import "E.css"
               ... rules ...

       In the example above, the stylesheet documents A.css, B.css, C.css, D.css, E.css  and  the
       stylesheet  embedded  in  the  <style> tag are all author stylesheets. CSS states that the
       relative precedences of the stylesheets in this case is governed by the following rules:

              * Linked, embedded or imported stylesheets take precedence over stylesheets linked,
                embedded or imported earlier in the same document or stylesheet.

              * Rules  specified in a stylesheet take precedence over rules specified in imported
                stylesheets.

       Applying the above two rules to the example documents indicates  that  the  order  of  the
       stylesheets  from  least  to  most  important  is:  A.css,  E.css,  B.css, C.css, embedded
       <stylesheet>, D.css. For the widget to implement the cascade correctly, the stylesheet-ids
       passed to the six [pathName style] commands must sort lexigraphically in the same order as
       the stylesheet precedence determined by the above two rules. The example code above  shows
       one  approach  to  this.  Using  the  example  code,  stylesheets would be associated with
       stylesheet-ids as follows:

              Stylesheet         Stylesheet-id
              -------------------------------
              A.css              author.0001.9999
              <embedded style>   author.0002.9999
              B.css              author.0002.0003.9999
              E.css              author.0002.0003.0004.9999
              C.css              author.0002.0005.9999
              D.css              author.0006.9999

       Entries are specified in the above table in the order in which the calls to  [html  style]
       would  be  made.  Of course, the example code fails if 10000 or more individual stylesheet
       documents are loaded.  More inventive solutions that avoid this  kind  of  limitation  are
       possible.

       Other  factors,  namely  rule  specificity  and  the  !IMPORTANT directive are involved in
       determining  the  precedence  of  individual  stylesheet  rules.  These   are   completely
       encapsulated  by  the  widget,  so are not described here. For complete details of the CSS
       cascade algorithm, refer to the CSS and CSS 2 specifications (www.w3.org).

ORPHAN NODES

                                         Sat Feb 25 2006                             tkhtml(3tcl)