1 ! Copyright (C) 2011-2012 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: accessors arrays assocs destructors fry io io.styles
5 kernel pdf.layout sequences splitting strings ;
11 ! FIXME: what about "proper" tab support?
13 : string>texts ( string style -- seq )
14 [ string-lines ] dip '[ _ <text> 1array ] map
20 TUPLE: pdf-writer data ;
22 : new-pdf-writer ( class -- pdf-writer )
23 new V{ } clone >>data ;
25 : <pdf-writer> ( -- pdf-writer )
26 pdf-writer new-pdf-writer ;
28 : with-pdf-writer ( quot -- pdf )
29 <pdf-writer> [ swap with-output-stream* ] keep data>> ; inline
31 TUPLE: pdf-sub-stream < pdf-writer parent ;
33 : new-pdf-sub-stream ( style stream class -- stream )
38 TUPLE: pdf-block-stream < pdf-sub-stream ;
40 M: pdf-block-stream dispose
41 [ data>> ] [ parent>> ] bi
42 [ data>> push-all ] [ stream-nl ] bi ;
47 M: pdf-writer stream-flush drop ;
49 M: pdf-writer stream-write1
50 [ 1string f <text> ] [ data>> ] bi* push ;
52 M: pdf-writer stream-write
53 [ f string>texts ] [ data>> ] bi* push-all ;
55 M: pdf-writer stream-format
56 [ string>texts ] [ data>> ] bi* push-all ;
58 M: pdf-writer stream-nl
59 <br> swap data>> push ; ! FIXME: <br> needs style?
61 M: pdf-writer make-span-stream
62 swap <style-stream> <ignore-close-stream> ;
64 M: pdf-writer make-block-stream
65 pdf-block-stream new-pdf-sub-stream ;
67 M: pdf-writer make-cell-stream
68 pdf-sub-stream new-pdf-sub-stream ;
70 ! FIXME: real table cells
71 M: pdf-writer stream-write-table ! FIXME: needs style?
73 [ stream>> data>> <table-cell> ] map <table-row>
74 ] map <table> swap data>> push ;
76 M: pdf-writer dispose drop ;