You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/quad/world-typed.rkt

98 lines
3.3 KiB
Racket

10 years ago
#lang typed/racket/base
(require (for-syntax typed/racket/base racket/syntax) "core-types.rkt")
10 years ago
(provide (prefix-out world: (all-defined-out)))
(define-syntax-rule (define-parameter-typed name val type)
(define name : (Parameterof type) (make-parameter val)))
10 years ago
(define-syntax (define-key-and-parameter stx)
(syntax-case stx ()
[(_ name keyname val type)
10 years ago
(with-syntax ([name-key (format-id #'name "~a-key" #'name)]
[name-default (format-id #'name "~a-default" #'name)])
#'(begin
(define name-key : QuadAttrKey keyname)
(define-parameter-typed name-default val type)))]))
10 years ago
(define-key-and-parameter measure 'measure 300.0 QuadAttrValue)
10 years ago
(define-key-and-parameter font-size 'size 13.0 Font-Size)
(define-key-and-parameter font-name 'font "Triplicate T4" Font-Name)
(define-key-and-parameter font-weight 'weight 'normal Font-Weight)
(define-key-and-parameter font-style 'style 'normal Font-Style)
(define-key-and-parameter font-color 'color "black" String)
(define-key-and-parameter font-background 'background "none" String)
10 years ago
(define-key-and-parameter column-count 'column-count 2 Index)
(define-key-and-parameter column-gutter 'column-gutter 30.0 Float)
10 years ago
(define max-quality 100)
(define adaptive-quality 50)
(define draft-quality 20)
(define-key-and-parameter quality 'quality max-quality Index)
10 years ago
(define-key-and-parameter horiz-alignment 'x-align 'left QuadAttrKey)
(define-key-and-parameter leading 'leading (floor (* (font-size-default) 1.4)) Float)
10 years ago
(define-key-and-parameter paper-width 'paper-width (* 8.5 72) Float)
(define-key-and-parameter paper-height 'paper-height (* 11.0 72) Float)
10 years ago
(define line-looseness-key 'looseness)
(define width-key 'width)
(define horiz-alignment-last-line-key 'x-align-last-line)
(define word-break-key 'word-break)
(define no-break-key 'nb)
(define before-break-key 'bb)
(define ascent-key 'ascent)
(define height-key 'height)
(define unbreakable-key 'no-break)
(define split-quad-key 'word)
10 years ago
(define line-index-key 'line-idx)
(define total-lines-key 'lines)
(define page-index-key 'page-idx)
(define column-index-key 'column-idx)
(define x-position-key 'x)
(define y-position-key 'y)
(define page-key 'page)
(define soft-hyphen #\u00AD)
(define hyphens-and-dashes (list "-" "" "" (format "~a" soft-hyphen)))
(define spaces '(" "))
(define empty-string '"")
(define mergeable-quad-types '(char run word))
(define default-word-break-list : (Parameterof JoinableType) (make-parameter '(nb "" bb "-")))
10 years ago
(define-parameter-typed optical-overhang 0.8 Float)
10 years ago
(define line-looseness-tolerance 0.05) ; 0.04 seems to be the magic point that avoids a lot of hyphenation
(define hyphen-limit 1) ; does not work with first-fit wrapping
(define minimum-last-line-chars 5)
(define allow-hyphenated-last-word-in-paragraph #t)
(define allowed-overfull-ratio 1.015)
(define last-line-can-be-short #t)
(define use-optical-kerns? #t)
(define use-hyphenation? #t)
(define new-line-penalty 5000)
(define hyphen-penalty 5000)
(define hanging-chars (regexp-match* #rx"." ".-,‘’“”'\"()[]{}:;"))
10 years ago
(define minimum-lines-per-column 4)
(define min-first-lines 2)
(define min-last-lines 2)
(define default-lines-per-column 36)
(define-parameter-typed logging-level 'debug Log-Level) ;; usually 'debug for dev. change to 'info for less