File: tkhtml.html

package info (click to toggle)
tk-html3 3.0~fossil20110109-6
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 6,644 kB
  • ctags: 5,882
  • sloc: ansic: 48,994; tcl: 26,030; sh: 1,190; yacc: 161; makefile: 24
file content (905 lines) | stat: -rw-r--r-- 25,817 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905

       <html>
       <head>
       <title>tkhtml (n)</title>
       </head>
       <body>
       <h1>tkhtml (n)</h1>
       <p><a href="#TOC">Table Of Contents</a>
       <a name="section1"><h2>Name</h2></a>

<p>
tkhtml - Widget to render html documents.
</p>


<a name="section2"><h2>Synopsis</h2></a>

<p>
html pathName ?options?
</p>


<a name="section3"><h2>Standard Options</h2></a>


<div style="margin-left:8ex"><pre><p>
-exportselection
-height
-width
-xscrollcommand   
-xscrollincrement
-yscrollcommand   
-yscrollincrement
</pre></div>



<a name="section4"><h2>Widget-Specific Options</h2></a>



    <p>Command-Line Name: -defaultstyle<br>
       Database Name: defaultstyle<br>
       Database Class: Defaultstyle
    </p>
    <div style="margin-left:8ex">

       <p>
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, or an empty string, in which case a
built-in default stylesheet (for HTML) is used. 
</p>

<p>
TODO: Describe the role of the default stylesheet.


    </div>
  



    <p>Command-Line Name: -imagecmd<br>
       Database Name: imagecmd<br>
       Database Class: Imagecmd
    </p>
    <div style="margin-left:8ex">

       <p>
Specify a Tcl command to be run when an image URI is
encountered by the widget. The URI is appended to the value
of this option and the resulting list evaluated. The value
returned should be the name of a Tk image, or an empty
string if an error occurs.
</p>

<p>
See section "IMAGE LOADING" for more detail.


    </div>
  



    <p>Command-Line Name: -logcmd<br>
       Database Name: logcmd<br>
       Database Class: Logcmd
    </p>
    <div style="margin-left:8ex">

       <p>
This option is only used for internally debugging the widget.


    </div>
  



<a name="section5"><h2>Description</h2></a>


<p>
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.
</p>


<a name="section6"><h2>Widget Command</h2></a>

<p>
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:
</p>



      <p>
      pathName cget option
      </p>
  <div style="margin-left:8ex"><p>
Returns the current value of the configuration option given
by option. Option may have any of the values accepted by
the [html] command.
</div>




      <p>
      pathName configure option value
      </p>
  <div style="margin-left:8ex"><p>
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.
</div>




      <p>
      pathName handler type tag script
      </p>
  <div style="margin-left:8ex"><p>
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". The type parameter to this command must
take one of these two values.
</p>

<p>
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.
</p>

<p>
If the handler script is a "script" handler, whenever a
document node of type tag is parsed, then the text
that appears between the start and end tags of the node is
appended to script and the resulting list evaluated
as a Tcl command.
</p>

<p>
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.
</div>




      <p>
      pathName image
      </p>
  <div style="margin-left:8ex"><p>
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.
</p>

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

<div style="margin-left:8ex"><pre><p>
set img [.html image]
# ... Use $img ...
image delete $img
</pre></div>


<p>
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.
</div>




      <p>
      pathName node ? ?-index? x y?
      </p>
  <div style="margin-left:8ex"><p>
This command is used to retrieve a handle for a document
node that is part of the currently parsed 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).
</p>

<p>
If the x and y arguments are present, then the handle
returned is for the node which generated the document
content currently located at viewport coordinates (x, y).
If no content is located at the specified coordinates or
the widget window is not mapped, then an empty string is
returned. 
</p>

<p>
If both the -index option is also specified, then instead
of a node handle, a list of two elements is returned. The
first element of the list is the node-handle. The second
element is -1 if the returned node is not a text node (would
return other than an empty string for [nodeHandle tag]).
If the node is a text node, then the value returned is an
index into the text obtainable by [nodeHandle text] for
the character at coordinates (x, y). The index may be used
with the [pathName select] commands.
</p>

<p>
The document node can be queried and manipulated using the
interface described in the "NODE COMMAND" section.
</div>




      <p>
      pathName parse ?-final? html-text
      </p>
  <div style="margin-left:8ex"><p>
Append extra text to the end of the (possibly empty)
document currently stored by the widget. 
</p>

<p>
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.
</div>




      <p>
      pathName reset
      </p>
  <div style="margin-left:8ex"><p>
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).
</div>




      <p>
      pathName select clear<br>pathName select from ?nodeHandle ?index? ?<br>pathName select to ?nodeHandle ?index? ?
      </p>
  <div style="margin-left:8ex"><p>
The [pathName select] commands are used to query and
manipulate the widget selection. If the widget
-exportselection option is set to true, then these commands
may also manipulate the X11-selection.
</p>

<p>
TODO: Describe these commands.
</div>




      <p>
      pathName style ?options? stylesheet-text
      </p>
  <div style="margin-left:8ex"><p>
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.
</p>

<p>
The following options are supported:
</p>

<div style="margin-left:8ex"><pre><p>
Option                   Default Value
--------------------------------------
-id &lt;stylesheet-id&gt;      "author"
-importcmd &lt;script&gt;      ""
-urlcmd    &lt;script&gt;      ""
</pre></div>


<p>
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.  
</p>

<p>
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.
</p>

<p>
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.
</p>

<p>
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.
</div>




      <p>
      pathName xview ?options?
      </p>
  <div style="margin-left:8ex"><p>
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.
</div>




      <p>
      pathName yview ?options?
      </p>
  <div style="margin-left:8ex"><p>
This command is used to query or adjust the vertical
position of the viewport relative to the document layout.
It is identical to the [pathName yview] command
implemented by the canvas and text widgets.
</div>



<a name="section7"><h2>Node Command</h2></a>

<p>
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:
</p>



      <p>
      nodeHandle attr ?attribute?
      </p>
  <div style="margin-left:8ex"><p>
If the attribute argument is present, then return the value
of the named html attribute, or an empty string if the
attribute specified does not exist. If it is not present,
return a key-value list of the defined attributes of the
form that can be passed to [array set].
</p>


<div style="margin-left:8ex"><pre><p>
# Html code for node
&lt;p class="normal" id="second" style="color : red"&gt;
</p>

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

<p>
# Value returned by [nodeHandle attr class]
normal
</pre></div>
</div>




      <p>
      nodeHandle child index
      </p>
  <div style="margin-left:8ex"><p>
Return the node handle for the index'th child of the node.
Children are numbered from zero upward.
</div>



      <p>
      nodeHandle nChild
      </p>
  <div style="margin-left:8ex"><p>
Return the number of children the node has.
</div>



      <p>
      nodeHandle parent
      </p>
  <div style="margin-left:8ex"><p>
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.
</div>



      <p>
      nodeHandle replace ? ?options? newValue?
      </p>
  <div style="margin-left:8ex"><p>
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.
</p>

<p>
A nodes replacement object may be set to the name of a Tk
image, 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 it is set to the name of a Tk
image, then the image is displayed in the widget in place
of any other node content (for example to implement HTML
&lt;img&gt; tags). 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).
</p>

<p>
The following options are supported:
</p>


<div style="margin-left:8ex"><pre><p>
Option                   Default Value
--------------------------------------
-deletecmd    &lt;script&gt;   See below
-configurecmd &lt;script&gt;   ""
</pre></div>


<p>
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. The default
-deletecmd script (used if no explicit -deletecmd option is
provided) deletes the Tk image or window.
</p>

<p>
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.
</p>


<div style="margin-left:8ex"><pre><p>
background-color    color
font                selected
</pre></div>


<p>
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.
</p>

<p>
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.
</div>



      <p>
      nodeHandle tag
      </p>
  <div style="margin-left:8ex"><p>
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.
</div>



      <p>
      nodeHandle text
      </p>
  <div style="margin-left:8ex"><p>
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.
</div>


<p>
TODO: Add the "write" part of the DOM compatible interface to this
section.
</p>


<a name="section8"><h2>Replaced Objects</h2></a>

<p>
Replaced objects are html document nodes that are replaced by
either a Tk image or a Tk window. For example &lt;IMG&gt; or &lt;INPUT&gt;
tags. To implement replaced objects in Tkhtml the user supplies the
widget with a Tcl script to create and return the name of the image
or window, and the widget maps, manages and eventually destroys the
image or window. 
</p>

<p>
TODO: Finish this section.
</p>


<a name="section9"><h2>Image Loading</h2></a>

<p>
As well as for replaced objects, 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. 
</p>

<p>
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.
</p>


<a name="section10"><h2>Stylesheet Loading</h2></a>

<p>
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.
</p>

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


<ul><li>
Embedded in the document itself, using a &lt;style&gt; tag. To
handle this case an application script must register a
"script" type handler for &lt;style&gt; tags using the 
[pathName handler] command. The handler command should
call [pathName style] to configure the widget with the
stylesheet text.
<li>
Linked from the document, using a &lt;link&gt; tag. To handle
this case the application script should register a "node"
type handler for &lt;link&gt; tags.
<li>
Linked from another stylesheet, using the @import
directive. To handle this, an application needs to
configure the widget -importcommand option.
</ul>



<div style="margin-left:8ex"><pre><p>
# 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 &lt;LOAD URI CONTENTS&gt; is used to indicate
# code to load and return the content located at $URI.
</p>

<p>
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
}
</p>

<p>
proc link_handler {node} {
    if {[node attr rel] == "stylesheet"} {
        set URI [node attr href]
set stylesheet [&lt;LOAD URI CONTENTS&gt;]
</p>

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

<p>
proc import_handler {parentid URI} {
    set stylesheet [&lt;LOAD URI CONTENTS&gt;]
</p>

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

<p>
.html handler script style script_handler
.html handler node link link_handler
</p>

<p>
set ::stylecount 0
</p>

<p>
.html parse -final $document
</pre></div>


<p>
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.
</p>

<p>
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).
</p>


<div style="margin-left:8ex"><pre><p>
#
# Contents of HTML document
#
</p>

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

<p>
#
# Contents of B.css
#
</p>

<p>
@import "E.css"
... rules ...
</pre></div>


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


<ul><li>
Linked, embedded or imported stylesheets take precedence
over stylesheets linked, embedded or imported earlier in
the same document or stylesheet.
<li>
Rules specified in a stylesheet take precedence over rules
specified in imported stylesheets.
</ul>


<p>
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 &lt;stylesheet&gt;, 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: 
</p>


<div style="margin-left:8ex"><pre><p>
Stylesheet         Stylesheet-id
-------------------------------
A.css              author.0001.9999
&lt;embedded style&gt;   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
</pre></div>


<p>
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.
</p>

<p>
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 [1].
</p>


<a name="section11"><h2>Incremental Document Loading</h2></a>

<p>
This section discusses the widget API in the context of loading a
document incrementally, for example from a network server. We
assume both remote stylesheets and image files are retrieved as
well as the document.
</p>

<p>
Before a new document (html file) is loaded, any previous document
should be purged from memory using the [pathName reset] command.
The portion of the new document that is read is passed to the
widget using the [pathName parse] command. As new chunks of the
document are downloaded, they should also be passed to 
[pathName parse]. When the final chunk of the document file is
passed to the [pathName parse] command the -final option should
be specified. This ensures node-handler callbacks (see the 
description of the [pathname handler] command above) are made
for tags that are closed implicitly by the end of the document.
</p>

<p>
The widget display is updated in an idle callback scheduled after
each invocation of the [pathName parse] command.
</p>


<a name="section12"><h2>HTML Specific Processing</h2></a>

<p>
TODO: Detail implicit opening and closing tag rules here.
</p>


<a name="section13"><h2>References</h2></a>


<p>
[1] CSS2 specification.

       </p>
       <a name="TOC"><h1>tkhtml (n) - Table Of Contents</h1></a>
       <a name="index"><ul></a><li><a href="#section1">Name</a><li><a href="#section2">Synopsis</a><li><a href="#section3">Standard Options</a><li><a href="#section4">Widget-Specific Options</a><li><a href="#section5">Description</a><li><a href="#section6">Widget Command</a><li><a href="#section7">Node Command</a><li><a href="#section8">Replaced Objects</a><li><a href="#section9">Image Loading</a><li><a href="#section10">Stylesheet Loading</a><li><a href="#section11">Incremental Document Loading</a><li><a href="#section12">HTML Specific Processing</a><li><a href="#section13">References</a></ul>
       </body>
       </html>