 M: html-writer stream-write-table
     [
         table-style swap [
-            [ data>> [XML <td valign="top" style=<->><-></td> XML] ] with map
+            [ stream>> data>> [XML <td valign="top" style=<->><-></td> XML] ] with map
             [XML <tr><-></tr> XML]
         ] with map
         [XML <table style="display: inline-table; border-collapse: collapse;"><-></table> XML]
     ] emit-html ;
 
 M: html-writer dispose drop ;
-
-: <html-writer> ( -- html-writer )
-    html-writer new-html-writer ;
-
-: with-html-writer ( quot -- xml )
-    <html-writer> [ swap with-output-stream* ] keep data>> ; inline

! Copyright (C) 2004, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs combinators destructors fry html io
io.backend io.pathnames io.styles kernel macros make math
math.order math.parser namespaces sequences strings words
splitting xml xml.syntax ;
IN: html.streams

GENERIC: url-of ( object -- url )

TUPLE: html-writer data ;
INSTANCE: html-writer output-stream

: <html-writer> ( -- html-writer )
    html-writer new V{ } clone >>data ;

: with-html-writer ( quot -- xml )
    <html-writer> [ swap with-output-stream* ] keep data>> ; inline

<PRIVATE

TUPLE: html-sub-stream < style-stream parent ;

: new-html-sub-stream ( style stream class -- stream )
    [ <html-writer> ] 3dip boa ; inline

: end-sub-stream ( substream -- string style stream )
    [ stream>> data>> ] [ style>> ] [ parent>> ] tri ;

: object-link-tag ( xml style -- xml )
    presented of [ url-of [ simple-link ] when* ] when* ;
