From a5118f752586ab8cd90fd00d5ff61f6dfd1c83f4 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 27 Jan 2017 11:12:36 -0600 Subject: [PATCH] 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 --- pkgs/at-exp-lib/at-exp/lang/reader.rkt | 12 ++++++------ pkgs/at-exp-lib/scribble/base/reader.rkt | 10 +++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/pkgs/at-exp-lib/at-exp/lang/reader.rkt b/pkgs/at-exp-lib/at-exp/lang/reader.rkt index 8070335e61..9c37e1c7f2 100644 --- a/pkgs/at-exp-lib/at-exp/lang/reader.rkt +++ b/pkgs/at-exp-lib/at-exp/lang/reader.rkt @@ -28,15 +28,15 @@ (lambda (proc) (lambda (key defval) (define (fallback) (if proc (proc key defval) defval)) - (define (try-dynamic-require mod export) - (or (with-handlers ([exn:fail? (λ (x) #f)]) - (dynamic-require mod export)) - (fallback))) + (define (try-dynamic-require lib export) + (with-handlers ([exn:missing-module? + (λ (x) (fallback))]) + (dynamic-require lib export))) (case key [(color-lexer) (try-dynamic-require 'syntax-color/scribble-lexer 'scribble-lexer)] [(drracket:indentation) - (dynamic-require 'scribble/private/indentation 'determine-spaces)] + (try-dynamic-require 'scribble/private/indentation 'determine-spaces)] [(drracket:keystrokes) - (dynamic-require 'scribble/private/indentation 'keystrokes)] + (try-dynamic-require 'scribble/private/indentation 'keystrokes)] [else (fallback)]))))) diff --git a/pkgs/at-exp-lib/scribble/base/reader.rkt b/pkgs/at-exp-lib/scribble/base/reader.rkt index 8ac6ed6a6a..96895025b6 100644 --- a/pkgs/at-exp-lib/scribble/base/reader.rkt +++ b/pkgs/at-exp-lib/scribble/base/reader.rkt @@ -23,13 +23,17 @@ ;; Settings that apply just to the surface syntax: (define (scribble-base-reader-info) (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 [(color-lexer) - (dynamic-require 'syntax-color/scribble-lexer 'scribble-inside-lexer)] + (try-dynamic-require 'syntax-color/scribble-lexer 'scribble-inside-lexer)] [(drracket:indentation) - (dynamic-require 'scribble/private/indentation 'determine-spaces)] + (try-dynamic-require 'scribble/private/indentation 'determine-spaces)] [(drracket:keystrokes) - (dynamic-require 'scribble/private/indentation 'keystrokes)] + (try-dynamic-require 'scribble/private/indentation 'keystrokes)] [(drracket:default-extension) "scrbl"] [else (default key defval)])))