guard against missing scribble and syntax-color libraries

we don't want an actual dependency from at-exp-lib to those libraries,
so when they aren't present, don't just crash, but instead fall back
to the defaults passed to the get-info procs
This commit is contained in:
Robby Findler 2017-01-27 11:12:36 -06:00
parent 0e12201c4d
commit a5118f7525
2 changed files with 13 additions and 9 deletions

View File

@ -28,15 +28,15 @@
(lambda (proc) (lambda (proc)
(lambda (key defval) (lambda (key defval)
(define (fallback) (if proc (proc key defval) defval)) (define (fallback) (if proc (proc key defval) defval))
(define (try-dynamic-require mod export) (define (try-dynamic-require lib export)
(or (with-handlers ([exn:fail? (λ (x) #f)]) (with-handlers ([exn:missing-module?
(dynamic-require mod export)) (λ (x) (fallback))])
(fallback))) (dynamic-require lib export)))
(case key (case key
[(color-lexer) [(color-lexer)
(try-dynamic-require 'syntax-color/scribble-lexer 'scribble-lexer)] (try-dynamic-require 'syntax-color/scribble-lexer 'scribble-lexer)]
[(drracket:indentation) [(drracket:indentation)
(dynamic-require 'scribble/private/indentation 'determine-spaces)] (try-dynamic-require 'scribble/private/indentation 'determine-spaces)]
[(drracket:keystrokes) [(drracket:keystrokes)
(dynamic-require 'scribble/private/indentation 'keystrokes)] (try-dynamic-require 'scribble/private/indentation 'keystrokes)]
[else (fallback)]))))) [else (fallback)])))))

View File

@ -23,13 +23,17 @@
;; Settings that apply just to the surface syntax: ;; Settings that apply just to the surface syntax:
(define (scribble-base-reader-info) (define (scribble-base-reader-info)
(lambda (key defval default) (lambda (key defval default)
(define (try-dynamic-require lib export)
(with-handlers ([exn:missing-module?
(λ (x) (default key defval))])
(dynamic-require lib export)))
(case key (case key
[(color-lexer) [(color-lexer)
(dynamic-require 'syntax-color/scribble-lexer 'scribble-inside-lexer)] (try-dynamic-require 'syntax-color/scribble-lexer 'scribble-inside-lexer)]
[(drracket:indentation) [(drracket:indentation)
(dynamic-require 'scribble/private/indentation 'determine-spaces)] (try-dynamic-require 'scribble/private/indentation 'determine-spaces)]
[(drracket:keystrokes) [(drracket:keystrokes)
(dynamic-require 'scribble/private/indentation 'keystrokes)] (try-dynamic-require 'scribble/private/indentation 'keystrokes)]
[(drracket:default-extension) "scrbl"] [(drracket:default-extension) "scrbl"]
[else (default key defval)]))) [else (default key defval)])))