|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
#lang debug racket/base
|
|
|
|
|
(require racket/match
|
|
|
|
|
(require (for-syntax racket/base racket/syntax)
|
|
|
|
|
racket/match
|
|
|
|
|
txexpr/base
|
|
|
|
|
racket/contract
|
|
|
|
|
racket/file
|
|
|
|
@ -21,20 +22,36 @@
|
|
|
|
|
(define (setup-pdf-path pdf-path-arg)
|
|
|
|
|
(define fallback-path (build-path (find-system-path 'temp-dir) "quadwriter-temp.pdf"))
|
|
|
|
|
(path->complete-path (simplify-path (expand-user-path (->path (or pdf-path-arg fallback-path))))))
|
|
|
|
|
|
|
|
|
|
#|
|
|
|
|
|
(define para-break '(q ((break "para"))))
|
|
|
|
|
(define line-break '(q ((break "line"))))
|
|
|
|
|
(define page-break '(q ((break "page"))))
|
|
|
|
|
(define column-break '(q ((break "column"))))
|
|
|
|
|
(define hr-break '(q ((break "hr"))))
|
|
|
|
|
|#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(define-syntax (define-break-types stx)
|
|
|
|
|
(syntax-case stx ()
|
|
|
|
|
[(_ ALL-BREAKS-ID . TYPES)
|
|
|
|
|
(with-syntax ([((TYPE-BREAK TYPE-STR Q:TYPE-BREAK) ...)
|
|
|
|
|
(for/list ([type (in-list (syntax->list #'TYPES))])
|
|
|
|
|
(list
|
|
|
|
|
(format-id #'TYPES "~a-break" type)
|
|
|
|
|
(symbol->string (syntax->datum type))
|
|
|
|
|
(format-id #'TYPES "q:~a-break" type)))])
|
|
|
|
|
#'(begin
|
|
|
|
|
(define TYPE-BREAK '(q ((break TYPE-STR)))) ...
|
|
|
|
|
(define ALL-BREAKS-ID (list (cons TYPE-BREAK Q:TYPE-BREAK) ...))))]))
|
|
|
|
|
|
|
|
|
|
(define-break-types all-breaks para line page column hr)
|
|
|
|
|
|
|
|
|
|
(define (replace-breaks x)
|
|
|
|
|
(map-elements (λ (el)
|
|
|
|
|
(match el
|
|
|
|
|
[(== para-break) q:para-break]
|
|
|
|
|
[(== line-break) q:line-break]
|
|
|
|
|
[(== column-break) q:column-break]
|
|
|
|
|
[(== page-break) q:page-break]
|
|
|
|
|
[_ el])) x))
|
|
|
|
|
(cond
|
|
|
|
|
[(assoc el all-breaks) => cdr]
|
|
|
|
|
[else el])) x))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(define (handle-hyphenate qs)
|
|
|
|
|
;; find quads that want hyphenation and split them into smaller pieces
|
|
|
|
|