From d35ef4b22162dd4f3318951ebc8be3a56319e27b Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 19 Feb 2016 16:18:12 -0800 Subject: [PATCH] make PDF button work --- quad/quad/foo.rkt | 4 ++-- quad/quad/foo2.rkt | 2 +- quad/quad/lang/buttons.rkt | 30 ++++++++++++++++++++++++++++++ quad/quad/lang/cmd-char.png | Bin 0 -> 163 bytes quad/quad/lang/quad.rkt | 7 ++++--- quad/quad/lang/reader.rkt | 17 ++++++++++++++++- quad/quad/quick-sample.rkt | 2 +- 7 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 quad/quad/lang/buttons.rkt create mode 100644 quad/quad/lang/cmd-char.png diff --git a/quad/quad/foo.rkt b/quad/quad/foo.rkt index 5d5cf43b..5ff13a3f 100644 --- a/quad/quad/foo.rkt +++ b/quad/quad/foo.rkt @@ -5,10 +5,10 @@ (require quad quad/quads quad/render) -(time (send (new pdf-renderer%) render-to-file (typeset 1-out) "f1-test.pdf")) +;(time (send (new pdf-renderer%) render-to-file (typeset 1-out) "f1-test.pdf")) (require (prefix-in 2- "foo2.rkt")) (time (send (new pdf-renderer%) render-to-file (typeset 2-out) "f2-test.pdf")) (require (prefix-in 3- "foo3.rkt")) -(time (send (new pdf-renderer%) render-to-file (typeset 3-out) "f3-test.pdf")) +;(time (send (new pdf-renderer%) render-to-file (typeset 3-out) "f3-test.pdf")) diff --git a/quad/quad/foo2.rkt b/quad/quad/foo2.rkt index dbb618a4..278f7888 100644 --- a/quad/quad/foo2.rkt +++ b/quad/quad/foo2.rkt @@ -1,3 +1,3 @@ #lang quad -◊(block '(measure 240.0 font "Times New Roman" leading 16.0 vmeasure 300.0 size 13.5 x-align justify x-align-last-line left) (box '(width 15.0)) (block '() (block '(weight bold) "Hot " (word '(size 22.0) "D") "ang, My Fellow Americans.") " This " (block '(no-break #t) "is some truly") " nonsense generated from my typesetting system, which is called Quad. I’m writing this in a source file in DrRacket. When I click [Run], a PDF pops out. Not bad\u200a—\u200aand no LaTeX needed. Quad, however, does use the fancy linebreaking algorithm developed for TeX. (It also includes a faster linebreaking algorithm for when speed is more important than quality.) Of course, it can also handle " (block '(font "Courier") "different fonts,") (block '(style italic) " styles, ") (word '(size 14.0 weight bold) "and sizes-") " within the same line. As you can see, it can also justify paragraphs.")) \ No newline at end of file +1 1.1 1.2 Hello world and so on. 2 Hello world and so on. 3 Hello world and so on. 4 Hello world and so on. \ No newline at end of file diff --git a/quad/quad/lang/buttons.rkt b/quad/quad/lang/buttons.rkt new file mode 100644 index 00000000..588711b6 --- /dev/null +++ b/quad/quad/lang/buttons.rkt @@ -0,0 +1,30 @@ +#lang racket/base +(require racket/runtime-path + racket/gui/base + racket/class + quad/render + quad) + +(provide make-drracket-buttons) + +(module test racket/base) ; suppress testing by `raco test` + +(define-runtime-path html-png-path "cmd-char.png") + +#| for toolbar callbacks, see + +http://pkg-build.racket-lang.org/doc/tools/drracket_module-language-tools.html#%28elem._drracket~3atoolbar-buttons%29 + +|# + +(define (make-command-char-button command-char) + (let ([label "Render PDF"] + [bitmap (make-object bitmap% html-png-path 'png/mask)] + [callback (λ (drr-frame) + (time (send (new pdf-renderer%) render-to-file (typeset 'boom) "f2-test.pdf")))] + [number 99]) + (list label bitmap callback number))) + +(define (make-drracket-buttons command-char) + (let ([command-char-button (make-command-char-button command-char)]) + (list command-char-button))) diff --git a/quad/quad/lang/cmd-char.png b/quad/quad/lang/cmd-char.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1c626fecdbdcae5ae469483a668f23cd23973a GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*B6H{m$P3;w5>zyD%`U z>Qy!Z^87qq977~7FYOEDWl-Q?U7M=5N}!A7io&trfH|LD*BX>ro6Qo5(wpNXxS~+- z#xstqrKYasNqLEU3Qqov5_en8{T~KuzFBUeqv+#VW5sZD-?lAWduDY5O=j?P^>bP0 Hl+XkKe_=6y literal 0 HcmV?d00001 diff --git a/quad/quad/lang/quad.rkt b/quad/quad/lang/quad.rkt index 61ad9407..8144c679 100644 --- a/quad/quad/lang/quad.rkt +++ b/quad/quad/lang/quad.rkt @@ -9,6 +9,7 @@ [(_ expr ...) (replace-context #'(expr ...) #'(#%module-begin - (define result (memf block? (list expr ...))) - (define out (if result (car result) (block #f))) - (provide out)))])) \ No newline at end of file + + (define out (block '(measure 200.0 font "Times New Roman" leading 16.0 vmeasure 300.0 size 13.5) expr ...)) + (provide out)))])) + diff --git a/quad/quad/lang/reader.rkt b/quad/quad/lang/reader.rkt index 995a43d7..bde15450 100644 --- a/quad/quad/lang/reader.rkt +++ b/quad/quad/lang/reader.rkt @@ -3,6 +3,7 @@ quad/lang/quad #:read quad-read #:read-syntax quad-read-syntax #:whole-body-readers? #t ;; need this to make at-reader work +#:info custom-get-info (require scribble/reader) (define (quad-read p) @@ -14,4 +15,18 @@ quad/lang/quad #:syntax? #t #:inside? #t)) (define source-stx (quad-at-reader path-string p)) - source-stx) \ No newline at end of file + source-stx) + +(define (custom-get-info key default [proc (λ _ #f)]) + (displayln 'yay) + (case key + [(color-lexer) + (define my-make-scribble-inside-lexer + (dynamic-require 'syntax-color/scribble-lexer 'make-scribble-inside-lexer (λ () #f))) + (cond [my-make-scribble-inside-lexer + (my-make-scribble-inside-lexer #:command-char #\◊)] + [else default])] + [(drracket:toolbar-buttons) + (define my-make-drracket-buttons (dynamic-require 'quad/lang/buttons 'make-drracket-buttons)) + (my-make-drracket-buttons #\◊)] + [else default])) \ No newline at end of file diff --git a/quad/quad/quick-sample.rkt b/quad/quad/quick-sample.rkt index 6e67d896..9cc33a0a 100644 --- a/quad/quad/quick-sample.rkt +++ b/quad/quad/quick-sample.rkt @@ -3,4 +3,4 @@ (provide quick-sample) (define quick-sample - (block '(measure 240.0 font "Times New Roman" leading 16.0 vmeasure 300.0 size 13.5 x-align justify x-align-last-line left) (box '(width 15.0)) (block '() (block '(weight bold) "Hot " (word '(size 22.0) "D") "ang, My Fellow Americans.") " This " (block '(no-break #t) "is some truly") " nonsense generated from my typesetting system, which is called Quad. I’m writing this in a source file in DrRacket. When I click [Run], a PDF pops out. Not bad\u200a—\u200aand no LaTeX needed. Quad, however, does use the fancy linebreaking algorithm developed for TeX. (It also includes a faster linebreaking algorithm for when speed is more important than quality.) Of course, it can also handle " (block '(font "Courier") "different fonts,") (block '(style italic) " styles, ") (word '(size 14.0 weight bold) "and sizes-") " within the same line. As you can see, it can also justify paragraphs." (block-break) (box '(width 15.0)) (block '() "“Each horizontal row represents " (box '(color "Red" background "Yellow") "an OS-level thread,") " and the colored dots represent important events in the execution of the program (they are color-coded to distinguish one event type from another). The upper-left blue dot in the timeline represents the future’s creation. The future executes for a brief period (represented by a green bar in the second line) on thread 1, and then pauses to allow the runtime thread to perform a future-unsafe operation.") (column-break) (box '(width 15.0))(block '() "In the Racket implementation, future-unsafe operations fall into one of two categories. A blocking operation halts the evaluation of the future, and will not allow it to continue until it is touched. After the operation completes within touch, the remainder of the future’s work will be evaluated sequentially by the runtime thread. A synchronized operation also halts the future, but the runtime thread may perform the operation at any time and, once completed, the future may continue running in parallel. Memory allocation and JIT compilation are two common examples of synchronized operations." (page-break) "another page")))) \ No newline at end of file + (block '(measure 480.0 font "Times New Roman" leading 16.0 vmeasure 300.0 size 13.5 x-align justify x-align-last-line left) (box '(width 15.0)) (block '() (block '(weight bold) "Hot " (word '(size 22.0) "D") "ang, My Fellow Americans.") " This " (block '(no-break #t) "is some truly") " nonsense generated from my typesetting system, which is called Quad. I’m writing this in a source file in DrRacket. When I click [Run], a PDF pops out. Not bad\u200a—\u200aand no LaTeX needed. Quad, however, does use the fancy linebreaking algorithm developed for TeX. (It also includes a faster linebreaking algorithm for when speed is more important than quality.) Of course, it can also handle " (block '(font "Courier") "different fonts,") (block '(style italic) " styles, ") (word '(size 14.0 weight bold) "and sizes-") " within the same line. As you can see, it can also justify paragraphs." (block-break) (box '(width 15.0)) (block '() "“Each horizontal row represents " (box '(color "Red" background "Yellow") "an OS-level thread,") " and the colored dots represent important events in the execution of the program (they are color-coded to distinguish one event type from another). The upper-left blue dot in the timeline represents the future’s creation. The future executes for a brief period (represented by a green bar in the second line) on thread 1, and then pauses to allow the runtime thread to perform a future-unsafe operation.") (column-break) (box '(width 15.0))(block '() "In the Racket implementation, future-unsafe operations fall into one of two categories. A blocking operation halts the evaluation of the future, and will not allow it to continue until it is touched. After the operation completes within touch, the remainder of the future’s work will be evaluated sequentially by the runtime thread. A synchronized operation also halts the future, but the runtime thread may perform the operation at any time and, once completed, the future may continue running in parallel. Memory allocation and JIT compilation are two common examples of synchronized operations." (page-break) "another page")))) \ No newline at end of file