1 ! Copyright (C) 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: arrays generic hashtables kernel namespaces strings ;
6 TUPLE: nested-style-stream style ;
8 : (with-stream-style) ( quot style stream -- )
9 <nested-style-stream> swap with-stream* ; inline
11 : do-nested-style ( style stream -- style delegate )
12 [ nested-style-stream-style swap hash-union ] keep
15 C: nested-style-stream ( style delegate -- stream )
17 [ set-nested-style-stream-style ] keep ;
19 M: nested-style-stream stream-format
20 do-nested-style stream-format ;
22 M: nested-style-stream stream-write
23 H{ } swap do-nested-style stream-format ;
25 M: nested-style-stream stream-write1
26 >r ch>string r> H{ } swap do-nested-style stream-format ;
28 : do-nested-quot ( quot style stream -- quot style stream )
30 nested-style-stream-style swap \ with-style
32 r> r> do-nested-style ;
34 M: nested-style-stream with-stream-style
35 do-nested-style with-stream-style ;
37 M: nested-style-stream with-nested-stream
38 do-nested-quot with-nested-stream ;
40 M: nested-style-stream with-stream-table
41 do-nested-quot with-stream-table ;