From 201f2799407068a73ccf265af4e408ce296f6123 Mon Sep 17 00:00:00 2001
From: Matthew Flatt <mflatt@racket-lang.org>
Date: Sat, 26 Nov 2011 09:01:46 -0700
Subject: [PATCH] scribble: use Latex skull package only if needed

original commit: 93bcc58a0c348429a6fc145d83211d4e038f95e6
---
 collects/scribble/base-render.rkt    |  6 ++++++
 collects/scribble/latex-render.rkt   | 11 ++++++++++-
 collects/scribble/scribble-skull.tex |  1 +
 collects/scribble/scribble.tex       |  1 -
 4 files changed, 17 insertions(+), 2 deletions(-)
 create mode 100644 collects/scribble/scribble-skull.tex

diff --git a/collects/scribble/base-render.rkt b/collects/scribble/base-render.rkt
index eb0cc782..04453059 100644
--- a/collects/scribble/base-render.rkt
+++ b/collects/scribble/base-render.rkt
@@ -117,8 +117,14 @@
          (extract-style-style-files (paragraph-style p) ht pred extract)
          (extract-content-style-files (paragraph-content p) d ri ht pred extract)]))
 
+    (define/public (string-to-implicit-styles e) null)
+
     (define/private (extract-content-style-files e d ri ht pred extract)
       (cond
+       [(string? e) (let ([ses (string-to-implicit-styles e)])
+                      (when (pair? ses)
+                        (for ([s (in-list ses)])
+                          (extract-style-style-files s ht pred extract))))]
        [(element? e)
         (when (style? (element-style e))
           (extract-style-style-files (element-style e) ht pred extract))
diff --git a/collects/scribble/latex-render.rkt b/collects/scribble/latex-render.rkt
index 373dbfca..3a3da10e 100644
--- a/collects/scribble/latex-render.rkt
+++ b/collects/scribble/latex-render.rkt
@@ -40,6 +40,9 @@
       (define/override (render-part-depth) n)
       (super-new))))
 
+(define-runtime-path skull-tex "scribble-skull.tex")
+(define skull-style (make-style #f (list (tex-addition skull-tex))))
+
 (define (render-mixin %)
   (class %
     (inherit-field prefix-file style-file style-extra-files)
@@ -706,6 +709,12 @@
         [else (display-protected (format "~s" i))])
       null)
 
+    (define/override (string-to-implicit-styles e)
+      (for/fold ([ses null]) ([ch (in-string e)])
+        (case ch
+          [(#\☠) (cons skull-style ses)]
+          [else ses])))
+
     (define/private (display-protected s)
       (if (eq? (rendering-tt) 'exact)
           (display s)
@@ -892,7 +901,7 @@
                             [(#\∝) "$\\propto$"]
                             [(#\⊢) "$\\vdash$"]
                             [(#\⊣) "$\\dashv$"]    
-                            [(#\☠) "$\\skull$"] 
+                            [(#\☠) "$\\skull$"]
                             [(#\☺) "$\\smiley$"]
                             [(#\☻) "$\\blacksmiley$"]
                             [(#\☹) "$\\frownie$"]
diff --git a/collects/scribble/scribble-skull.tex b/collects/scribble/scribble-skull.tex
new file mode 100644
index 00000000..3834c40a
--- /dev/null
+++ b/collects/scribble/scribble-skull.tex
@@ -0,0 +1 @@
+\usepackage{skull}
diff --git a/collects/scribble/scribble.tex b/collects/scribble/scribble.tex
index 2c8cda96..93731738 100644
--- a/collects/scribble/scribble.tex
+++ b/collects/scribble/scribble.tex
@@ -6,7 +6,6 @@
 \usepackage{stabular}
 \usepackage{relsize}
 \usepackage{wasysym}
-\usepackage{skull}
 \usepackage{textcomp}
 \usepackage{framed}
 \usepackage[htt]{hyphenat}