Scribble: refine Latex output again to allow more page breaks

svn: r15505

original commit: 0fc2ad54db528fabed80ee895269b8e0e3bd3401
This commit is contained in:
Matthew Flatt 2009-07-20 19:40:14 +00:00
parent 483607b4ca
commit 1966bd5bb7
4 changed files with 55 additions and 48 deletions

View File

@ -425,28 +425,29 @@
(define/public (render-paragraph p part ri)
(render-content (paragraph-content p) part ri))
(define/public (render-compound-paragraph p part ri)
(define/public (render-compound-paragraph p part ri starting-item?)
(apply append (let loop ([l (compound-paragraph-blocks p)]
[first? #t])
(cond
[(null? l) null]
[else (cons
(render-intrapara-block (car l) part ri first? (null? (cdr l)))
(render-intrapara-block (car l) part ri first? (null? (cdr l))
(and first? starting-item?))
(loop (cdr l) #f))]))))
(define/public (render-flow p part ri start-inline?)
(define/public (render-flow p part ri starting-item?)
(if (null? (flow-paragraphs p))
null
(append
(render-block (car (flow-paragraphs p))
part ri start-inline?)
part ri starting-item?)
(apply append
(map (lambda (p)
(render-block p part ri #f))
(cdr (flow-paragraphs p)))))))
(define/public (render-intrapara-block p part ri first? last?)
(render-block p part ri first?))
(define/public (render-intrapara-block p part ri first? last? starting-item?)
(render-block p part ri starting-item?))
(define/public (render-block p part ri inline?)
(cond
@ -455,7 +456,7 @@
(render-table p part ri inline?))]
[(itemization? p) (render-itemization p part ri)]
[(blockquote? p) (render-blockquote p part ri)]
[(compound-paragraph? p) (render-compound-paragraph p part ri)]
[(compound-paragraph? p) (render-compound-paragraph p part ri inline?)]
[(delayed-block? p)
(render-block (delayed-block-blocks p ri) part ri inline?)]
[else (render-paragraph p part ri)]))

View File

@ -837,21 +837,21 @@
(append (render-part (car secs) ri)
(loop (add1 pos) (cdr secs))))))))
(define/private (render-flow* p part ri start-inline? special-last?)
(define/private (render-flow* p part ri starting-item? special-last?)
;; Wrap each table with <p>, except for a trailing table
;; when `special-last?' is #t
(let loop ([f (flow-paragraphs p)] [inline? start-inline?])
(let loop ([f (flow-paragraphs p)] [starting-item? starting-item?])
(cond
[(null? f) null]
[(and (table? (car f))
(or (not special-last?) (not (null? (cdr f)))))
(cons `(p ,@(render-block (car f) part ri inline?))
(cons `(p ,@(render-block (car f) part ri starting-item?))
(loop (cdr f) #f))]
[else (append (render-block (car f) part ri inline?)
[else (append (render-block (car f) part ri starting-item?)
(loop (cdr f) #f))])))
(define/override (render-flow p part ri start-inline?)
(render-flow* p part ri start-inline? #t))
(define/override (render-flow p part ri starting-item?)
(render-flow* p part ri starting-item? #t))
(define/private (do-render-paragraph p part ri flatten-unstyled?)
;; HACK: for the search, we need to be able to render a `div'
@ -877,11 +877,11 @@
(define/override (render-paragraph p part ri)
(do-render-paragraph p part ri #f))
(define/override (render-intrapara-block p part ri first? last?)
(define/override (render-intrapara-block p part ri first? last? starting-item?)
`((div ([class "SIntrapara"])
,@(cond
[(paragraph? p) (do-render-paragraph p part ri #t)]
[else (render-block p part ri #t)]))))
[else (render-block p part ri starting-item?)]))))
(define/override (render-element e part ri)
(cond
@ -1067,7 +1067,7 @@
,@sz))))]
[else (render*)])))
(define/override (render-table t part ri need-inline?)
(define/override (render-table t part ri starting-item?)
(define raw-style (flatten-style (table-style t)))
(define t-style (if (with-attributes? raw-style)
(with-attributes-style raw-style)
@ -1124,7 +1124,7 @@
(render-flow d part ri #f)))
(loop (cdr ds) (cdr as) (cdr vas) (cdr sts) #f)))]))))
`((table ([cellspacing "0"]
,@(if need-inline?
,@(if starting-item?
'([style "display: inline-table; vertical-align: text-top;"])
null)
,@(case t-style

View File

@ -130,11 +130,11 @@
(when (string? style) (printf "}"))))
null)
(define/override (render-intrapara-block p part ri first? last?)
(define/override (render-intrapara-block p part ri first? last? starting-item?)
(unless first?
(printf "\n\n\\noindent "))
(begin0
(super render-intrapara-block p part ri first? last?)))
(super render-intrapara-block p part ri first? last? starting-item?)))
(define/override (render-element e part ri)
(when (render-element? e)
@ -243,17 +243,17 @@
[else (format "x~x" (char->integer c))]))
(string->list (format "~s" s)))))
(define/override (render-flow p part ri start-inline?)
(define/override (render-flow p part ri starting-item?)
(if (null? (flow-paragraphs p))
null
(begin
(render-block (car (flow-paragraphs p)) part ri start-inline?)
(render-block (car (flow-paragraphs p)) part ri starting-item?)
(for ([b (in-list (cdr (flow-paragraphs p)))])
(printf "\n\n")
(render-block b part ri #f))
null)))
(define/override (render-table t part ri inline-table?)
(define/override (render-table t part ri starting-item?)
(let* ([boxed? (eq? 'boxed (table-style t))]
[index? (eq? 'index (table-style t))]
[tableform
@ -267,30 +267,36 @@
[row-styles (cdr (or (and (list? (table-style t))
(assoc 'row-styles (table-style t)))
(cons #f (map (lambda (x) #f) flowss))))]
[inline?
(and (not boxed?)
(not index?)
(ormap (lambda (rs) (equal? rs "inferencetop")) row-styles)
(or (null? (table-flowss t))
(= 1 (length (car (table-flowss t)))))
(let ([m (current-table-mode)])
(and m
(equal? "bigtabular" (car m))
(= 1 (length (car (table-flowss (cadr m))))))))]
[boxline "{\\setlength{\\unitlength}{\\linewidth}\\begin{picture}(1,0)\\put(0,0){\\line(1,0){1}}\\end{picture}}"]
[twidth (if (null? (table-flowss t))
1
(length (car (table-flowss t))))]
[single-column? (and (= 1 twidth)
(not (table-style t))
(not (current-table-mode)))])
(or (not (table-style t))
(string? (table-style t)))
(not (current-table-mode)))]
[inline?
(and (not single-column?)
(not boxed?)
(not index?)
(ormap (lambda (rs) (equal? rs "inferencetop")) row-styles)
(= 1 twidth)
(let ([m (current-table-mode)])
(and m
(equal? "bigtabular" (car m))
(= 1 (length (car (table-flowss (cadr m))))))))]
[boxline "{\\setlength{\\unitlength}{\\linewidth}\\begin{picture}(1,0)\\put(0,0){\\line(1,0){1}}\\end{picture}}"])
(if single-column?
(do-render-blockquote
(make-blockquote "SingleColumn"
(apply append (map flow-paragraphs (map car (table-flowss t)))))
part
ri
#t)
(begin
(when (string? (table-style t))
(printf "\\begin{~a}" (table-style t)))
(do-render-blockquote
(make-blockquote "SingleColumn"
(apply append (map flow-paragraphs (map car (table-flowss t)))))
part
ri
#t)
(when (string? (table-style t))
(printf "\\end{~a}" (table-style t))))
(unless (or (null? flowss) (null? (car flowss)))
(parameterize ([current-table-mode
(if inline? (current-table-mode) (list tableform t))]
@ -302,7 +308,7 @@
[single-column? (printf "\\begin{tabbing}\n")]
[else
(printf "~a~a\\begin{~a}~a{@{~a}~a}\n~a"
(if (and inline-table? (equal? tableform "bigtabular"))
(if (and starting-item? (equal? tableform "bigtabular"))
"\\bigtableinlinecorrect"
"")
(if (string? (table-style t))
@ -435,7 +441,8 @@
(if (regexp-match #rx"^[\\]" kind)
(printf "~a{" kind)
(printf "\\begin{~a}" kind))
(parameterize ([current-table-mode (if single-column?
(parameterize ([current-table-mode (if (or single-column?
(not (current-table-mode)))
(current-table-mode)
(list "blockquote" t))])
(render-flow (make-flow (blockquote-paragraphs t)) part ri #f))
@ -447,14 +454,13 @@
(define/override (render-blockquote t part ri)
(do-render-blockquote t part ri #f))
(define/override (render-compound-paragraph t part ri)
(define/override (render-compound-paragraph t part ri starting-item?)
(let ([kind (compound-paragraph-style t)])
(when kind
(if (regexp-match #rx"^[\\]" kind)
(printf "~a{" kind)
(printf "\\begin{~a}" kind)))
(parameterize ([current-table-mode (list "blockquote" t)])
(super render-compound-paragraph t part ri))
(super render-compound-paragraph t part ri starting-item?)
(when kind
(if (regexp-match #rx"^[\\]" kind)
(printf "}")

View File

@ -43,13 +43,13 @@
(render-part (car secs) ht)
(loop (add1 pos) (cdr secs))))))
(define/override (render-flow f part ht start-inline?)
(define/override (render-flow f part ht starting-item?)
(let ([f (flow-paragraphs f)])
(if (null? f)
null
(apply
append
(render-block (car f) part ht start-inline?)
(render-block (car f) part ht starting-item?)
(map (lambda (p)
(newline) (newline)
(render-block p part ht #f))