diff --git a/basis/html/streams/streams.factor b/basis/html/streams/streams.factor
index 026a39db00..cf413dde11 100644
--- a/basis/html/streams/streams.factor
+++ b/basis/html/streams/streams.factor
@@ -1,8 +1,9 @@
! Copyright (C) 2004, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs combinators destructors fry html io
-io.styles kernel macros make math math.parser sequences
-splitting strings xml.syntax ;
+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 )
@@ -12,21 +13,20 @@ M: object url-of drop f ;
TUPLE: html-writer data ;
INSTANCE: html-writer output-stream
-: ( -- html-writer )
- html-writer new V{ } clone >>data ;
-
-: with-html-writer ( quot -- xml )
- [ swap with-output-stream* ] keep data>> ; inline
-
>data ; inline
+
+TUPLE: html-sub-stream < html-writer style parent ;
: new-html-sub-stream ( style stream class -- stream )
- [ ] 3dip boa ; inline
+ new-html-writer
+ swap >>parent
+ swap >>style ; inline
: end-sub-stream ( substream -- string style stream )
- [ stream>> data>> ] [ style>> ] [ parent>> ] tri ;
+ [ data>> ] [ style>> ] [ parent>> ] tri ;
: object-link-tag ( xml style -- xml )
presented of [ url-of [ simple-link ] when* ] when* ;
@@ -173,10 +173,16 @@ M: html-writer make-cell-stream
M: html-writer stream-write-table
[
table-style swap [
- [ stream>> data>> [XML ><-> | XML] ] with map
+ [ data>> [XML ><-> | XML] ] with map
[XML <->
XML]
] with map
[XML XML]
] emit-html ;
M: html-writer dispose drop ;
+
+: ( -- html-writer )
+ html-writer new-html-writer ;
+
+: with-html-writer ( quot -- xml )
+ [ swap with-output-stream* ] keep data>> ; inline