diff --git a/collects/scribble/base.rkt b/collects/scribble/base.rkt index 94e88abe..71285dbf 100644 --- a/collects/scribble/base.rkt +++ b/collects/scribble/base.rkt @@ -40,10 +40,13 @@ (provide include-section) (define (gen-tag content) - (regexp-replace* "[^-a-zA-Z0-9_=]" (content->string content) "_")) + (read-intern-literal + (regexp-replace* "[^-a-zA-Z0-9_=]" (content->string content) "_"))) (define (prefix->string p) - (and p (if (string? p) p (module-path-prefix->string p)))) + (and p (if (string? p) + (read-intern-literal p) + (module-path-prefix->string p)))) (define (convert-tag tag content) (if (list? tag) @@ -171,7 +174,7 @@ (define (intern-taglet v) (let ([v (if (list? v) (map intern-taglet v) - v)]) + (read-intern-literal v))]) (if (or (string? v) (bytes? v) (list? v)) @@ -226,7 +229,8 @@ v))) (define (module-path-prefix->string p) - (format "~a" (module-path-index->taglet (module-path-index-join p #f)))) + (read-intern-literal + (format "~a" (module-path-index->taglet (module-path-index-join p #f))))) (define doc-prefix (case-lambda diff --git a/collects/scribble/decode.rkt b/collects/scribble/decode.rkt index c6d8beff..cb97601f 100644 --- a/collects/scribble/decode.rkt +++ b/collects/scribble/decode.rkt @@ -88,7 +88,7 @@ (let* ([s (regexp-replace* #px"\\s+" s " ")] [s (regexp-replace* #rx"^ " s "")] [s (regexp-replace* #rx" $" s "")]) - s)) + (read-intern-literal s))) (define (decode-string s) (let loop ([l '((#rx"---" mdash) @@ -99,9 +99,10 @@ (cond [(null? l) (list s)] [(regexp-match-positions (caar l) s) => (lambda (m) - (append (decode-string (substring s 0 (caar m))) - (cdar l) - (decode-string (substring s (cdar m)))))] + (read-intern-literal + (append (decode-string (substring s 0 (caar m))) + (cdar l) + (decode-string (substring s (cdar m))))))] [else (loop (cdr l))]))) (define (line-break? v) diff --git a/collects/scribble/private/manual-bind.rkt b/collects/scribble/private/manual-bind.rkt index d5c4c839..fa94fc33 100644 --- a/collects/scribble/private/manual-bind.rkt +++ b/collects/scribble/private/manual-bind.rkt @@ -4,6 +4,8 @@ "../search.rkt" "../basic.rkt" "../manual-struct.rkt" + (only-in "../core.rkt" make-style) + "../html-properties.rkt" "manual-ex.rkt" racket/contract/base (for-syntax scheme/base) @@ -53,21 +55,28 @@ (lambda () s) (lambda () s)))) +(define hovers (make-weak-hasheq)) +(define (intern-hover-style text) + (let ([text (read-intern-literal text)]) + (or (hash-ref hovers text #f) + (let ([s (make-style #f (list (make-hover-property text)))]) + (hash-set! hovers text s) + s)))) + (define (annote-exporting-library e) (make-delayed-element (lambda (render p ri) (let ([from (resolve-get/tentative p ri '(exporting-libraries #f))]) (if (and from (pair? from)) - (list (make-hover-element - #f - (list e) - (intern-taglet + (list (make-element + (intern-hover-style (string-append "Provided from: " (let loop ([from from]) (if (null? (cdr from)) (format "~s" (car from)) - (format "~s, ~a" (car from) (loop (cdr from))))))))) + (format "~s, ~a" (car from) (loop (cdr from))))))) + e)) (list e)))) (lambda () e) (lambda () e))) @@ -184,7 +193,7 @@ (if index? (make-index-element #f (list elem) tag - (list (symbol->string (syntax-e id))) + (list (read-intern-literal (symbol->string (syntax-e id)))) (list elem) (and show-libs? (with-exporting-libraries @@ -218,23 +227,25 @@ #f (list (make-one (if form? 'form 'def)) (make-one 'dep) - (make-index-element #f - null - (list (if form? 'form 'def) - (list taglet id)) - (list (symbol->string id)) - (list - (make-element - symbol-color + (let ([str (read-intern-literal (symbol->string id))]) + (make-index-element #f + null + (intern-taglet + (list (if form? 'form 'def) + (list taglet id))) + (list str) (list (make-element - (if form? - syntax-link-color - value-link-color) - (list (symbol->string id)))))) - ((if form? - make-form-index-desc - make-procedure-index-desc) - id - (list mod-path)))))))) + symbol-color + (list + (make-element + (if form? + syntax-link-color + value-link-color) + (list str))))) + ((if form? + make-form-index-desc + make-procedure-index-desc) + id + (list mod-path))))))))) redirects)))) diff --git a/collects/scribble/private/manual-class.rkt b/collects/scribble/private/manual-class.rkt index 54b5f1b2..aa8eb0b8 100644 --- a/collects/scribble/private/manual-class.rkt +++ b/collects/scribble/private/manual-class.rkt @@ -101,7 +101,7 @@ (if (hash-ref ht k #f) #f (begin (hash-set! ht k #t) - (cons (symbol->string k) + (cons (read-intern-literal (symbol->string k)) (**method k (car super)))))) (cls/intf-methods (cdr super)))]) (if (null? inh) @@ -133,7 +133,8 @@ symbol-color (list (make-link-element value-link-color - (list (symbol->string (syntax-e (decl-name decl)))) + (list (read-intern-literal + (symbol->string (syntax-e (decl-name decl))))) tag))) (map id-info (decl-app-mixins decl)) (and (decl-super decl) @@ -206,7 +207,8 @@ (list (make-index-element #f content tag - (list (symbol->string (syntax-e stx-id))) + (list (read-intern-literal + (symbol->string (syntax-e stx-id)))) content (with-exporting-libraries (lambda (libs) diff --git a/collects/scribble/private/manual-form.rkt b/collects/scribble/private/manual-form.rkt index 17c0de12..f40bdef4 100644 --- a/collects/scribble/private/manual-form.rkt +++ b/collects/scribble/private/manual-form.rkt @@ -326,7 +326,7 @@ (if kw-id (list (make-index-element #f content tag - (list (symbol->string (syntax-e kw-id))) + (list (read-intern-literal (symbol->string (syntax-e kw-id)))) content (with-exporting-libraries (lambda (libs) diff --git a/collects/scribble/private/manual-mod.rkt b/collects/scribble/private/manual-mod.rkt index 10c7df11..ba7b5571 100644 --- a/collects/scribble/private/manual-mod.rkt +++ b/collects/scribble/private/manual-mod.rkt @@ -127,13 +127,14 @@ names modpaths)) (append (map (lambda (modpath) - (make-part-tag-decl `(mod-path ,(element->string modpath)))) + (make-part-tag-decl `(mod-path ,(read-intern-literal + (element->string modpath))))) modpaths) (flow-paragraphs (decode-flow content))))))) (define (make-defracketmodname mn mp) - (let ([name-str (element->string mn)] - [path-str (element->string mp)]) + (let ([name-str (read-intern-literal (element->string mn))] + [path-str (read-intern-literal (element->string mp))]) (make-index-element #f (list mn) `(mod-path ,path-str) diff --git a/collects/scribble/private/manual-proc.rkt b/collects/scribble/private/manual-proc.rkt index 191cbcb4..15318a0b 100644 --- a/collects/scribble/private/manual-proc.rkt +++ b/collects/scribble/private/manual-proc.rkt @@ -145,7 +145,7 @@ (if (eq? mode 'new) (make-element #f (list (racketparenfont "[") - (racketidfont (keyword->string (arg-kw arg))) + (racketidfont (read-intern-literal (keyword->string (arg-kw arg)))) spacer (to-element (make-var-id (arg-id arg))) (racketparenfont "]"))) @@ -267,7 +267,7 @@ #f content tag - (list (symbol->string mname)) + (list (read-intern-literal (symbol->string mname))) content (with-exporting-libraries (lambda (libs) @@ -289,7 +289,7 @@ #f (list (make-index-element #f content tag - (list (symbol->string (extract-id prototype))) + (list (read-intern-literal (symbol->string (extract-id prototype)))) content (with-exporting-libraries (lambda (libs) @@ -899,7 +899,7 @@ #f content tag - (list (symbol->string name)) + (list (read-intern-literal (symbol->string name))) content (with-exporting-libraries (lambda (libs) (make-thing-index-desc name libs))))) @@ -942,7 +942,7 @@ (make-target-element* make-target-element stx-id - (let* ([name (string-append* (map symbol->string (cdar wrappers)))] + (let* ([name (read-intern-literal (string-append* (map symbol->string (cdar wrappers))))] [target-maker (id-to-target-maker (datum->syntax stx-id (string->symbol name)) #t)]) diff --git a/collects/scribble/private/manual-scheme.rkt b/collects/scribble/private/manual-scheme.rkt index 113d6a1e..6a955421 100644 --- a/collects/scribble/private/manual-scheme.rkt +++ b/collects/scribble/private/manual-scheme.rkt @@ -207,7 +207,7 @@ (define (*as-modname-link s e) (make-link-element module-link-color (list e) - `(mod-path ,(format "~s" s)))) + `(mod-path ,(read-intern-literal (format "~s" s))))) (define-syntax-rule (indexed-racket x) (add-racket-index 'x (racket x))) diff --git a/collects/scribble/private/manual-style.rkt b/collects/scribble/private/manual-style.rkt index 61ad3bb5..3ff61594 100644 --- a/collects/scribble/private/manual-style.rkt +++ b/collects/scribble/private/manual-style.rkt @@ -112,8 +112,9 @@ (define (indexed-file . str) (let* ([f (apply filepath str)] [s (element->string f)]) - (index* (list (clean-up-index-string - (substring s 1 (sub1 (string-length s))))) + (index* (list (read-intern-literal + (clean-up-index-string + (substring s 1 (sub1 (string-length s)))))) (list f) f))) (define (exec . str) diff --git a/collects/scribble/private/manual-tech.rkt b/collects/scribble/private/manual-tech.rkt index 1a508b75..c608472f 100644 --- a/collects/scribble/private/manual-tech.rkt +++ b/collects/scribble/private/manual-tech.rkt @@ -21,7 +21,8 @@ [s (string-foldcase (or key (content->string c)))] [s (regexp-replace #rx"ies$" s "y")] [s (regexp-replace #rx"s$" s "")] - [s (regexp-replace* #px"[-\\s]+" s " ")]) + [s (regexp-replace* #px"[-\\s]+" s " ")] + [s (read-intern-literal s)]) (make-elem style c (list 'tech (doc-prefix doc prefix s))))) (define (deftech #:style? [style? #t] . s) @@ -32,7 +33,8 @@ (make-index-element #f (list t) (target-element-tag t) - (list (clean-up-index-string (element->string e))) + (list (read-intern-literal + (clean-up-index-string (element->string e)))) (list e) 'tech))) diff --git a/collects/scribble/racket.rkt b/collects/scribble/racket.rkt index e408e88b..3dc5de0e 100644 --- a/collects/scribble/racket.rkt +++ b/collects/scribble/racket.rkt @@ -149,18 +149,19 @@ (lambda (renderer sec ri) (let* ([tag (find-racket-tag sec ri c #f)]) (if tag - (list - (case (car tag) - [(form) - (make-link-element syntax-link-color (nonbreak-leading-hyphens s) tag)] - [else - (make-link-element value-link-color (nonbreak-leading-hyphens s) tag)])) + (let ([tag (intern-taglet tag)]) + (list + (case (car tag) + [(form) + (make-link-element syntax-link-color (nonbreak-leading-hyphens s) tag)] + [else + (make-link-element value-link-color (nonbreak-leading-hyphens s) tag)]))) (list (make-element "badlink" (make-element value-link-color s)))))) (lambda () s) (lambda () s) - key)]) + (intern-taglet key))]) (when key (hash-set! id-element-cache key (make-weak-box e))) e)))) @@ -194,13 +195,18 @@ (inc!) (to-unquoted expr? (sub1 quote-depth) out color? inc!)))) + (define iformat + (case-lambda + [(str val) (read-intern-literal (format str val))] + [(str . vals) (read-intern-literal (apply format str vals))])) + (define (typeset-atom c out color? quote-depth expr?) (if (and (var-id? (syntax-e c)) (zero? quote-depth)) - (out (format "~s" (let ([v (var-id-sym (syntax-e c))]) - (if (syntax? v) - (syntax-e v) - v))) + (out (iformat "~s" (let ([v (var-id-sym (syntax-e c))]) + (if (syntax? v) + (syntax-e v) + v))) variable-color) (let*-values ([(is-var?) (and (identifier? c) (memq (syntax-e c) (current-variable-list)))] @@ -208,8 +214,8 @@ (let ([sc (syntax-e c)]) (let ([s (cond [(syntax-property c 'display-string) => values] - [(literal-syntax? sc) (format "~s" (literal-syntax-stx sc))] - [(var-id? sc) (format "~s" (var-id-sym sc))] + [(literal-syntax? sc) (iformat "~s" (literal-syntax-stx sc))] + [(var-id? sc) (iformat "~s" (var-id-sym sc))] [(eq? sc #t) (if (equal? (syntax-span c) 5) "#true" @@ -218,7 +224,7 @@ (if (equal? (syntax-span c) 6) "#false" "#f")] - [else (format "~s" sc)])]) + [else (iformat "~s" sc)])]) (if (and (symbol? sc) ((string-length s) . > . 1) (char=? (string-ref s 0) #\_) @@ -564,10 +570,10 @@ "cons"))] [(vector? (syntax-e c)) "vector"] [(mpair? (syntax-e c)) "mcons"] - [else (format "~a" - (if (struct-proxy? (syntax-e c)) - (syntax-e (struct-proxy-name (syntax-e c))) - (object-name (syntax-e c))))])]) + [else (iformat "~a" + (if (struct-proxy? (syntax-e c)) + (syntax-e (struct-proxy-name (syntax-e c))) + (object-name (syntax-e c))))])]) (set! src-col (+ src-col (if (struct-proxy? (syntax-e c)) 1 (string-length s)))) @@ -785,7 +791,7 @@ (set! src-col (+ orig-col (syntax-span c)))))] [(graph-reference? (syntax-e c)) (advance c init-line!) - (out (format "#~a#" (unbox (graph-reference-bx (syntax-e c)))) + (out (iformat "#~a#" (unbox (graph-reference-bx (syntax-e c)))) (if (positive? quote-depth) value-color paren-color)) @@ -793,7 +799,7 @@ [(graph-defn? (syntax-e c)) (advance c init-line!) (let ([bx (graph-defn-bx (syntax-e c))]) - (out (format "#~a=" (unbox bx)) + (out (iformat "#~a=" (unbox bx)) (if (positive? quote-depth) value-color paren-color))