: <text> ( string style -- text )
[ convert-string ] dip text boa ;
+! FIXME: need to make links clickable, render text first, draw
+! box over text that is "link"
+
+! https://www.w3.org/WAI/WCAG21/Techniques/pdf/PDF11.html
+
M: text pdf-render
[ style>> set-style ] keep
[
[ widths [ 0 or max ] change-at ] each-index
] each widths >alist sort-keys values
- ! make last cell larger
- dup sum 400 swap [-] [ + ] curry dupd sequences.extras:change-last
+ dup sum dup 450 > [
+
+ over first 150 < [
+ ! special-case small first column
+ drop dup unclip-slice over sum swap
+ 450 swap - swap / [ * ] curry map! drop
+ ] [
+ ! size down all columns
+ 450 swap / [ * ] curry map
+ ] if
- ! size down each column
- dup sum dup 400 > [ 400 swap / [ * ] curry map ] [ drop ] if ;
+ ] [
+ ! make last cell larger
+ 450 swap [-] [ + ] curry dupd
+ sequences.extras:change-last
+ ] if ;
: set-col-widths ( canvas rows -- )
[ max-col-widths ] keep [
} 2cleave ;
M: table pdf-width
- 2drop 400 ; ! FIXME: hardcoded max-width
+ 2drop 450 ; ! FIXME: hardcoded max-width
: pdf-object ( str n -- str' )
PRIVATE>
-TUPLE: pdf-writer style data ;
+TUPLE: pdf-writer data ;
: new-pdf-writer ( class -- pdf-writer )
- new H{ } >>style V{ } clone >>data ;
+ new V{ } clone >>data ;
: <pdf-writer> ( -- pdf-writer )
pdf-writer new-pdf-writer ;
: new-pdf-sub-stream ( style stream class -- stream )
new-pdf-writer
swap >>parent
- swap >>style
- dup parent>> style>> '[ _ swap assoc-union ] change-style ;
+ swap <style-stream> ;
TUPLE: pdf-block-stream < pdf-sub-stream ;
[ data>> ] [ parent>> ] bi
[ data>> push-all ] [ stream-nl ] bi ;
-TUPLE: pdf-span-stream < pdf-sub-stream ;
-
-M: pdf-span-stream dispose
- [ data>> ] [ parent>> data>> ] bi push-all ;
-
-
! Stream protocol
M: pdf-writer stream-flush drop ;
M: pdf-writer stream-write1
- dup style>> '[ 1string _ <text> ] [ data>> ] bi* push ;
+ [ 1string f <text> ] [ data>> ] bi* push ;
M: pdf-writer stream-write
- dup style>> '[ _ string>texts ] [ data>> ] bi* push-all ;
+ [ f string>texts ] [ data>> ] bi* push-all ;
M: pdf-writer stream-format
- swap [ dup style>> ] dip assoc-union
- '[ _ string>texts ] [ data>> ] bi* push-all ;
+ [ string>texts ] [ data>> ] bi* push-all ;
M: pdf-writer stream-nl
<br> swap data>> push ; ! FIXME: <br> needs style?
M: pdf-writer make-span-stream
- pdf-span-stream new-pdf-sub-stream ;
+ swap <style-stream> <ignore-close-stream> ;
M: pdf-writer make-block-stream
pdf-block-stream new-pdf-sub-stream ;
! FIXME: real table cells
M: pdf-writer stream-write-table ! FIXME: needs style?
nip swap [
- [ data>> <table-cell> ] map <table-row>
+ [ stream>> data>> <table-cell> ] map <table-row>
] map <table> swap data>> push ;
M: pdf-writer dispose drop ;