Browser-to-Racket

Update the browser collection to use Racket lang instead of mzscheme.
This commit is contained in:
Patrick Mahoney 2013-02-23 00:47:18 -05:00 committed by Robby Findler
parent 9c4fcd4623
commit 2f2bbd09cc
30 changed files with 846 additions and 843 deletions

View File

@ -1,5 +1,5 @@
(module browser-sig mzscheme #lang racket
(require mzlib/unit (require racket/unit
"private/sig.rkt") "private/sig.rkt")
(provide browser^) (provide browser^)
@ -7,4 +7,4 @@
(define-signature browser^ (define-signature browser^
((open hyper^) ((open hyper^)
(open html-export^) (open html-export^)
(open bullet-export^)))) (open bullet-export^)))

View File

@ -1,15 +1,16 @@
(module browser-unit mzscheme
(require mzlib/unit #lang racket/base
(require racket/unit
mred/mred-sig mred/mred-sig
setup/plt-installer-sig setup/plt-installer-sig
net/tcp-sig net/tcp-sig
net/url-sig net/url-sig
net/url-unit net/url-unit
"browser-sig.rkt" "browser-sig.rkt"
"private/sig.rkt"
"private/bullet.rkt" "private/bullet.rkt"
"private/html.rkt" "private/html.rkt"
"private/hyper.rkt") "private/hyper.rkt"
"private/sig.rkt")
(provide browser@) (provide browser@)
@ -31,8 +32,4 @@
pre-browser@ pre-browser@
setup:plt-installer^ setup:plt-installer^
mred^ mred^
url^))) url^))

View File

@ -1,6 +1,6 @@
(module browser mzscheme #lang racket
(require mzlib/unit (require racket/unit
mred racket/gui
mred/mred-sig mred/mred-sig
setup/plt-installer-sig setup/plt-installer-sig
setup/plt-installer setup/plt-installer
@ -12,4 +12,4 @@
(provide-signature-elements browser^) (provide-signature-elements browser^)
(define-values/invoke-unit/infer browser@)) (define-values/invoke-unit/infer browser@)

View File

@ -36,7 +36,7 @@ launching an external browser (such as Firefox).
@declare-exporting[browser/browser browser] @declare-exporting[browser/browser browser]
The browser supports basic HTML commands, plus special Racket hyperlinks The browser supports basic HTML commands, plus special Racket hyperlinks
of the form @litchar{<A MZSCHEME=sexpr>...</A>}. When the user clicks of the form @litchar{<A RACKET=sexpr>...</A>}. When the user clicks
on such a link, the string @racket[sexpr] is parsed as a Racket program on such a link, the string @racket[sexpr] is parsed as a Racket program
and evaluated. Since @racket[sexpr] is likely to contain Racket and evaluated. Since @racket[sexpr] is likely to contain Racket
strings, and since escape characters are difficult for people to read, a strings, and since escape characters are difficult for people to read, a
@ -44,7 +44,7 @@ strings, and since escape characters are difficult for people to read, a
character before it is parsed. Thus, character before it is parsed. Thus,
@verbatim[#:indent 2]{ @verbatim[#:indent 2]{
<A MZSCHEME="|This goes nowhere.|">Nowhere</A> <A RACKET="|This goes nowhere.|">Nowhere</A>
} }
creates a ``Nowhere'' hyperlink, which executes the Racket program creates a ``Nowhere'' hyperlink, which executes the Racket program
@ -59,15 +59,15 @@ clicks on ``Nowhere,'' the result is a new page that says ``This goes
nowhere.'' nowhere.''
The browser also treats comment forms containing The browser also treats comment forms containing
@litchar{MZSCHEME=sexpr} specially. Whereas the @litchar{RACKET=sexpr} specially. Whereas the
@litchar{<A MZSCHEME=sexpr>...</A>} form executes the expression when @litchar{<A RACKET=sexpr>...</A>} form executes the expression when
the user clicks, the @litchar{MZSCHEME} expression in a comment is the user clicks, the @litchar{RACKET} expression in a comment is
executed immediately during HTML rendering. If the result is a string, executed immediately during HTML rendering. If the result is a string,
the comment is replaced in the input HTML stream with the content of the the comment is replaced in the input HTML stream with the content of the
string. Thus, string. Thus,
@verbatim[#:indent 2]{ @verbatim[#:indent 2]{
<!-- MZSCHEME="(format |<B>Here</B>: ~a| (current-directory))" --> <!-- RACKET="(format |<B>Here</B>: ~a| (current-directory))" -->
} }
inserts the path of the current working directory into the containing inserts the path of the current working directory into the containing
@ -77,10 +77,10 @@ return values are ignored.
If the html file is being accessed as a @litchar{file:} url, the If the html file is being accessed as a @litchar{file:} url, the
@racket[current-load-relative-directory] parameter is set to the @racket[current-load-relative-directory] parameter is set to the
directory during the evaluation of the mzscheme code (in both directory during the evaluation of the Racket code (in both
examples). The Racket code is executed through @racket[eval]. examples). The Racket code is executed through @racket[eval].
The @litchar{MZSCHEME} forms are disabled unless the web page is a The @litchar{RACKET} forms are disabled unless the web page is a
@litchar{file:} url that points into the @racket[doc] collection. @litchar{file:} url that points into the @racket[doc] collection.
@defproc[(open-url [url (or/c url? string? input-port?)]) (is-a?/c hyper-frame%)]{ @defproc[(open-url [url (or/c url? string? input-port?)]) (is-a?/c hyper-frame%)]{
@ -94,7 +94,7 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
} }
@defboolparam[html-eval-ok ok?]{ @defboolparam[html-eval-ok ok?]{
A parameter that determines whether @litchar{MZSCHEME=} tags are A parameter that determines whether @litchar{RACKET=} tags are
evaluated. evaluated.
} }
@ -145,7 +145,7 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
@definterface[hyper-text<%> ()]{ @definterface[hyper-text<%> ()]{
@defmethod[(url-allows-evalling? [url (or/c port? url?)]) boolean?]{ @defmethod[(url-allows-evalling? [url (or/c port? url?)]) boolean?]{
Determines if @litchar{MZSCHEME} annotations are actually evaluated, Determines if @litchar{RACKET} annotations are actually evaluated,
for a given url. for a given url.
} }
} }
@ -244,8 +244,8 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
} }
@defmethod[(eval-racket-string [str string?]) any]{ @defmethod[(eval-racket-string [str string?]) any]{
Called to handle the @litchar{<A MZSCHEME="expr">...</A>} tag and Called to handle the @litchar{<A RACKET="expr">...</A>} tag and
@litchar{<! MZSCHEME="expr">} comments (see above). Evaluates the @litchar{<! RACKET="expr">} comments (see above). Evaluates the
string; if the result is a string, it is opened as an HTML page. string; if the result is a string, it is opened as an HTML page.
} }
@ -559,11 +559,11 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
@defproc[(render-html-to-text [in input-port?] @defproc[(render-html-to-text [in input-port?]
[dest (is-a? html-text<%>)] [dest (is-a? html-text<%>)]
[load-img? any/c] [load-img? any/c]
[eval-mz? any/c]) [eval-rkt? any/c])
void?]{ void?]{
Reads HTML from @racket[in] and renders it to @racket[dest]. If Reads HTML from @racket[in] and renders it to @racket[dest]. If
@racket[load-img?] is @racket[#f], then images are rendered as Xed-out @racket[load-img?] is @racket[#f], then images are rendered as Xed-out
boxes. If @racket[eval-mz?] is @racket[#f], then @litchar{MZSCHEME} boxes. If @racket[eval-rkt?] is @racket[#f], then @litchar{RACKET}
hyperlink expressions and comments are not evaluated. hyperlink expressions and comments are not evaluated.
Uses the style named @racket["Html Standard"] in the editor's Uses the style named @racket["Html Standard"] in the editor's

View File

@ -1,3 +1,3 @@
(module bullet-snip mzscheme #lang racket
(require "private/bullet.rkt") (require "private/bullet.rkt")
(provide (rename bullet-snip-class snip-class))) (provide (rename-out (bullet-snip-class snip-class)))

View File

@ -1,6 +1,6 @@
#lang racket/base #lang racket/base
(require string-constants (require string-constants
mred racket/gui
racket/class racket/class
racket/file racket/file
racket/list racket/list

View File

@ -1,14 +1,13 @@
#lang racket
(module htmltext mzscheme (require racket/unit
(require mzlib/unit racket/class
mzlib/class
"browser-sig.rkt" "browser-sig.rkt"
"private/sig.rkt" "private/sig.rkt"
"private/html.rkt" "private/html.rkt"
"private/bullet.rkt" "private/bullet.rkt"
net/url net/url
net/url-sig net/url-sig
mred racket/gui
mred/mred-unit mred/mred-unit
mred/mred-sig mred/mred-sig
browser/external) browser/external)
@ -28,7 +27,7 @@
add-link add-link
add-tag add-tag
make-link-style make-link-style
add-scheme-callback add-racket-callback
add-thunk-callback add-thunk-callback
post-url)) post-url))
@ -47,7 +46,7 @@
(define/public (add-tag label pos) (void)) (define/public (add-tag label pos) (void))
(define/public (make-link-style pos endpos) (define/public (make-link-style pos endpos)
(change-style url-delta pos endpos)) (change-style url-delta pos endpos))
(define/public (add-scheme-callback pos endpos scheme) (void)) (define/public (add-racket-callback pos endpos racket) (void))
(define/public (add-thunk-callback pos endpos thunk) (define/public (add-thunk-callback pos endpos thunk)
(set-clickback pos endpos (lambda (e start-pos eou-pos) (set-clickback pos endpos (lambda (e start-pos eou-pos)
(thunk)))) (thunk))))
@ -73,5 +72,5 @@
(provide html-text<%> (provide html-text<%>
html-text-mixin html-text-mixin
render-html-to-text)) render-html-to-text)

View File

@ -1,6 +1,5 @@
#lang setup/infotab #lang setup/infotab
(define tools (list (list "tool.rkt"))) (define drracket-tools (list (list "tool.rkt")))
(define tool-names (list "Browser")) (define drracket-tool-names (list "Browser"))
(define scribblings '(("browser.scrbl" () (gui-library)))) (define scribblings '(("browser.scrbl" () (gui-library))))

View File

@ -1,3 +1,3 @@
#lang scheme/base #lang racket/base
(require "browser.rkt") (require "browser.rkt")
(provide (all-from-out "browser.rkt")) (provide (all-from-out "browser.rkt"))

View File

@ -1,4 +1,4 @@
#lang scheme/unit #lang racket/unit
(require "sig.rkt") (require "sig.rkt")
@ -12,9 +12,9 @@
(export (rename relative-btree^ (export (rename relative-btree^
(create-btree make-btree))) (create-btree make-btree)))
(define-struct btree (root) #:mutable) (struct btree (root) #:mutable)
(define-struct node (pos data parent left right color) #:mutable) (struct node (pos data parent left right color) #:mutable)
(define (adjust-offsets n new-child) (define (adjust-offsets n new-child)
(when new-child (when new-child
@ -66,7 +66,7 @@
(define (insert before? n btree pos data) (define (insert before? n btree pos data)
(let ([new (make-node pos data #f #f #f 'black)]) (let ([new (node pos data #f #f #f 'black)])
(if (not (btree-root btree)) (if (not (btree-root btree))
(set-btree-root! btree new) (set-btree-root! btree new)
@ -166,7 +166,7 @@
(loop (node-right n) so-far so-far-pos npos)])))))) (loop (node-right n) so-far so-far-pos npos)]))))))
(define (create-btree) (define (create-btree)
(make-btree #f)) (btree #f))
(define (btree-get btree pos) (define (btree-get btree pos)
(let-values ([(n npos) (find-following-node btree pos)]) (let-values ([(n npos) (find-following-node btree pos)])

View File

@ -1,13 +1,13 @@
(module bullet mzscheme #lang racket
(require mred (require racket/gui
mzlib/class) racket/class)
(provide bullet-snip% (provide bullet-snip%
get-bullet-width get-bullet-width
bullet-size bullet-size
bullet-snip-class) bullet-snip-class)
(define snip-class-name "(lib \"bullet-snip.ss\" \"browser\")") (define snip-class-name "(lib \"bullet-snip.rkt\" \"browser\")")
(define bullet-size (define bullet-size
(make-parameter (make-parameter
@ -90,5 +90,5 @@
(super-new) (super-new)
(set-classname snip-class-name)))) (set-classname snip-class-name))))
(send (get-the-snip-class-list) add bullet-snip-class)) (send (get-the-snip-class-list) add bullet-snip-class)

View File

@ -1,8 +1,8 @@
(module entity-names mzscheme #lang racket
(provide entity-name->integer) (provide entity-name->integer)
(define table (define table
#cs#hasheq((nbsp . 160) #hasheq((nbsp . 160)
(iexcl . 161) (iexcl . 161)
(cent . 162) (cent . 162)
(pound . 163) (pound . 163)
@ -256,6 +256,6 @@
(euro . 8364))) (euro . 8364)))
(define (entity-name->integer s) (define (entity-name->integer s)
(hash-table-get table s (lambda () #f)))) (hash-ref table s (lambda () #f)))

View File

@ -1,13 +1,13 @@
#lang scheme/unit #lang racket/unit
(require "sig.rkt" (require "sig.rkt"
mred/mred-sig mred/mred-sig
scheme/file racket/file
mzlib/port racket/port
net/url-sig net/url-sig
(only-in html read-html-as-xml read-html-comments use-html-spec) (only-in html read-html-as-xml read-html-comments use-html-spec)
(except-in xml read-comments) (except-in xml read-comments)
mzlib/class racket/class
"bullet.rkt" "bullet.rkt"
"option-snip.rkt" "option-snip.rkt"
"entity-names.rkt") "entity-names.rkt")
@ -140,24 +140,24 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Hardwired Scheme colorization; should come from a .css file ;; Hardwired Racket colorization; should come from a .css file
;; ;;
(define (make-scheme-color-delta col) (define (make-racket-color-delta col)
(let ([d (make-object style-delta%)]) (let ([d (make-object style-delta%)])
(send d set-delta-foreground col) (send d set-delta-foreground col)
d)) d))
(define scheme-code-delta (make-scheme-color-delta "brown")) (define racket-code-delta (make-racket-color-delta "brown"))
(define scheme-code-delta/keyword (define racket-code-delta/keyword
(let ([d (make-scheme-color-delta (make-object color% #x99 0 0))]) (let ([d (make-racket-color-delta (make-object color% #x99 0 0))])
(send d set-weight-on 'bold) (send d set-weight-on 'bold)
d)) d))
(define scheme-code-delta/variable (make-scheme-color-delta "navy")) (define racket-code-delta/variable (make-racket-color-delta "navy"))
(define scheme-code-delta/global (make-scheme-color-delta "purple")) (define racket-code-delta/global (make-racket-color-delta "purple"))
(define scheme-code-delta/selfeval (make-scheme-color-delta "forest green")) (define racket-code-delta/selfeval (make-racket-color-delta "forest green"))
(define scheme-code-delta/comment (make-scheme-color-delta "cornflower blue")) (define racket-code-delta/comment (make-racket-color-delta "cornflower blue"))
(define navigation-delta (let ([d (make-scheme-color-delta "red")]) (define navigation-delta (let ([d (make-racket-color-delta "red")])
(send d set-style-on 'italic) (send d set-style-on 'italic)
d)) d))
@ -166,13 +166,13 @@
(define (lookup-class-delta class) (define (lookup-class-delta class)
(let ([class-path (cons class (current-style-class))]) (let ([class-path (cons class (current-style-class))])
(cond (cond
[(sub-path? class-path '("scheme")) scheme-code-delta] [(sub-path? class-path '("racket")) racket-code-delta]
[(sub-path? class-path '("keyword" "scheme")) scheme-code-delta/keyword] [(sub-path? class-path '("keyword" "racket")) racket-code-delta/keyword]
[(sub-path? class-path '("variable" "scheme")) scheme-code-delta/variable] [(sub-path? class-path '("variable" "racket")) racket-code-delta/variable]
[(sub-path? class-path '("global" "scheme")) scheme-code-delta/global] [(sub-path? class-path '("global" "racket")) racket-code-delta/global]
[(or (sub-path? class-path '("selfeval" "scheme")) [(or (sub-path? class-path '("selfeval" "racket"))
(sub-path? class-path '("schemeresponse"))) scheme-code-delta/selfeval] (sub-path? class-path '("racketresponse"))) racket-code-delta/selfeval]
[(sub-path? class-path '("comment" "scheme")) scheme-code-delta/comment] [(sub-path? class-path '("comment" "racket")) racket-code-delta/comment]
[(sub-path? class-path '("navigation")) navigation-delta] [(sub-path? class-path '("navigation")) navigation-delta]
[else #f]))) [else #f])))
@ -209,7 +209,7 @@
(define (get-bitmap-from-url url) (define (get-bitmap-from-url url)
(if (html-img-ok) (if (html-img-ok)
(let ([tmp-filename (make-temporary-file "mredimg~a")]) (let ([tmp-filename (make-temporary-file "rktguiimg~a")])
(load-status #t "image" url) (load-status #t "image" url)
(call-with-output-file* tmp-filename (call-with-output-file* tmp-filename
(lambda (op) (lambda (op)
@ -331,7 +331,7 @@
;; parse-coords : string -> (listof number) ;; parse-coords : string -> (listof number)
;; separates out a bunch of comma separated numbers in a string ;; separates out a bunch of comma separated numbers in a string
;; into a list of scheme numbers ;; into a list of racket numbers
(define (parse-coords str) (define (parse-coords str)
(let loop ([str str]) (let loop ([str str])
(cond (cond
@ -369,13 +369,13 @@
(let ([a (assq name (cadr e))]) (let ([a (assq name (cadr e))])
(and a (cadr a)))) (and a (cadr a))))
(define get-mzscheme-arg (define get-racket-arg
(let ([get-mz (make-get-field "mzscheme")]) (let ([get-rkt (make-get-field "racket")])
(lambda (str) (lambda (str)
(let ([v (get-mz str)]) (let ([v (get-rkt str)])
(and v (filter-mzscheme v)))))) (and v (filter-racket v))))))
(define filter-mzscheme (define filter-racket
(lambda (v) (lambda (v)
(regexp-replace* "[|]" v "\""))) (regexp-replace* "[|]" v "\"")))
@ -475,12 +475,12 @@
[(symbol? c) (values c #t)] [(symbol? c) (values c #t)]
[(number? c) (values c #t)] [(number? c) (values c #t)]
[(comment? c) [(comment? c)
(let ([code (get-mzscheme-arg (comment-text c))]) (let ([code (get-racket-arg (comment-text c))])
(if code (if code
(let ([s (with-handlers ([exn:fail? (let ([s (with-handlers ([exn:fail?
(lambda (exn) (lambda (exn)
(format (format
"<font color=\"red\">Error during &lt;!-- MZSCHEME=... --&gt;: <i>~a</i></font>" "<font color=\"red\">Error during &lt;!-- RACKET=... --&gt;: <i>~a</i></font>"
(if (exn? exn) (if (exn? exn)
(exn-message exn) (exn-message exn)
(format "~s" exn))))]) (format "~s" exn))))])
@ -646,9 +646,9 @@
(unescape str)))] (unescape str)))]
[else #f])] [else #f])]
[label (get-field s 'name)] [label (get-field s 'name)]
[scheme (let ([v (get-field s 'mzscheme)]) [racket (let ([v (get-field s 'racket)])
(and v (filter-mzscheme v)))]) (and v (filter-racket v)))])
(values url-string label scheme))))] (values url-string label racket))))]
[parse-font [parse-font
(let ([face-regexp (regexp "([^,]*), *(.*)")]) (let ([face-regexp (regexp "([^,]*), *(.*)")])
@ -908,7 +908,7 @@
(delete pos (current-pos))) (delete pos (current-pos)))
(values void forced-lines)] (values void forced-lines)]
[(a) [(a)
(let-values ([(url-string label scheme) (parse-href e)]) (let-values ([(url-string label racket) (parse-href e)])
(let* ([style (get-field e 'style)] (let* ([style (get-field e 'style)]
[pos (current-pos)]) [pos (current-pos)])
(let-values ([(r rfl) (rest)]) (let-values ([(r rfl) (rest)])
@ -929,8 +929,8 @@
[label [label
(send a-text add-tag label pos) (send a-text add-tag label pos)
(values r rfl)] (values r rfl)]
[scheme [racket
(send a-text add-scheme-callback pos end-pos scheme) (send a-text add-racket-callback pos end-pos racket)
(values (values
(lambda () (lambda ()
(when (or (not style) (when (or (not style)

View File

@ -1,8 +1,8 @@
#| #|
A test case: A test case:
(module tmp mzscheme #lang racket
(require mzlib/class mred browser framework) (require racket/gui browser framework)
(define f% (define f%
(frame:status-line-mixin (frame:status-line-mixin
@ -22,15 +22,16 @@ A test case:
;; The starting URL: ;; The starting URL:
"http://www.htdp.org/"; "http://www.htdp.org/";
;; #f means not a relative URL: ;; #f means not a relative URL:
#f)) #f)
|# |#
#lang scheme/unit #lang racket/unit
(require mzlib/class (require racket/class
(only-in racket/list last-pair)
"sig.rkt" "sig.rkt"
scheme/path racket/path
scheme/file racket/file
net/url-sig net/url-sig
net/url-structs net/url-structs
net/head net/head
@ -39,7 +40,6 @@ A test case:
string-constants string-constants
setup/plt-installer-sig) setup/plt-installer-sig)
(import html^ (import html^
mred^ mred^
setup:plt-installer^ setup:plt-installer^
@ -47,20 +47,15 @@ A test case:
(export hyper^) (export hyper^)
(init-depend mred^) (init-depend mred^)
(define (last-pair l) (struct exn:file-saved-instead exn (pathname))
(if (null? (cdr l)) (struct exn:cancelled exn ())
l (struct exn:tcp-problem exn ())
(last-pair (cdr l))))
(define-struct (exn:file-saved-instead exn) (pathname))
(define-struct (exn:cancelled exn) ())
(define-struct (exn:tcp-problem exn) ())
(define history-limit 20) (define history-limit 20)
(define-struct hyperlink (anchor-start anchor-end url-string)) (struct hyperlink (anchor-start anchor-end url-string))
(define-struct hypertag (name position)) (struct hypertag (name position))
(define (same-page-url? a b) (define (same-page-url? a b)
(or (eq? a b) (or (eq? a b)
@ -104,7 +99,7 @@ A test case:
(equal? "file" (url-scheme url))) (equal? "file" (url-scheme url)))
(with-handlers ([exn:fail:filesystem? (lambda (x) #f)]) (with-handlers ([exn:fail:filesystem? (lambda (x) #f)])
(path-below? (path-below?
(normal-case-path (normalize-path (build-path (collection-path "mzlib") (normal-case-path (normalize-path (build-path (collection-path "racket")
'up 'up
'up))) 'up)))
(normal-case-path (normalize-path (apply build-path (normal-case-path (normalize-path (apply build-path
@ -115,7 +110,7 @@ A test case:
(define title #f) (define title #f)
(define htmling? #f) (define htmling? #f)
(define redirection #f) (define redirection #f)
(define hypertags-list (list (make-hypertag "top" 0))) (define hypertags-list (list (hypertag "top" 0)))
(define hyper-delta (make-object style-delta% 'change-underline #t)) (define hyper-delta (make-object style-delta% 'change-underline #t))
(let ([mult (send hyper-delta get-foreground-mult)] (let ([mult (send hyper-delta get-foreground-mult)]
[add (send hyper-delta get-foreground-add)]) [add (send hyper-delta get-foreground-add)])
@ -162,7 +157,7 @@ A test case:
(when (string=? name (hypertag-name tag)) (when (string=? name (hypertag-name tag))
(remove-tag name))) (remove-tag name)))
hypertags-list) hypertags-list)
(let ([new-tag (make-hypertag name pos)]) (let ([new-tag (hypertag name pos)])
(set! hypertags-list (set! hypertags-list
(let insert-loop ([tags-left hypertags-list]) (let insert-loop ([tags-left hypertags-list])
(cond [(null? tags-left)(cons new-tag '())] (cond [(null? tags-left)(cons new-tag '())]
@ -184,30 +179,30 @@ A test case:
(filter (lambda (x) (not (string=? name (hypertag-name x)))) (filter (lambda (x) (not (string=? name (hypertag-name x))))
hypertags-list))) hypertags-list)))
(define/public (add-link start end url-string) (define/public (add-link start end url-string)
(let* ([new-link (make-hyperlink start end url-string)]) (let* ([new-link (hyperlink start end url-string)])
(set-clickback start end (set-clickback start end
(lambda (x y z) (lambda (x y z)
(post-url url-string))))) (post-url url-string)))))
;; remember the directory when the callback is added (during parsing) ;; remember the directory when the callback is added (during parsing)
;; and restore it during the evaluation of the callback. ;; and restore it during the evaluation of the callback.
(define/public (add-scheme-callback start end scheme-string) (define/public (add-racket-callback start end racket-string)
(let ([dir (current-load-relative-directory)]) (let ([dir (current-load-relative-directory)])
(set-clickback (set-clickback
start end start end
(lambda (edit start end) (lambda (edit start end)
(if (url-allows-evaling? url) (if (url-allows-evaling? url)
(parameterize ([current-load-relative-directory dir]) (parameterize ([current-load-relative-directory dir])
(eval-scheme-string scheme-string)) (eval-racket-string racket-string))
(message-box (string-constant help-desk) (message-box (string-constant help-desk)
"<A MZSCHEME= ...> disabled")))))) "<A RACKET= ...> disabled"))))))
(define/public (add-thunk-callback start end thunk) (define/public (add-thunk-callback start end thunk)
(set-clickback (set-clickback
start end start end
(lambda (edit start end) (lambda (edit start end)
(thunk)))) (thunk))))
(define/public (eval-scheme-string s) (define/public (eval-racket-string s)
(let ([v (let ([v
(dynamic-wind (dynamic-wind
begin-busy-cursor begin-busy-cursor
@ -388,13 +383,13 @@ A test case:
(send d center) (send d center)
(send d show #t) (send d show #t)
(unless (or d? i?) (unless (or d? i?)
(raise (make-exn:cancelled (raise (exn:cancelled
"Package Cancelled" "Package Cancelled"
(current-continuation-marks)))) (current-continuation-marks))))
i?))] i?))]
[tmp-plt-filename [tmp-plt-filename
(if install? (if install?
(make-temporary-file "tmp~a.plt") (make-temporary-file "tmp~a.rkt")
(put-file (put-file
(if size (if size
(format (format
@ -449,7 +444,7 @@ A test case:
(queue-callback (lambda () (semaphore-post wait-to-start))) (queue-callback (lambda () (semaphore-post wait-to-start)))
(send d show #t) (send d show #t)
(when exn (when exn
(raise (make-exn:tcp-problem (exn-message exn) (current-continuation-marks))))) (raise (exn:tcp-problem (exn-message exn) (current-continuation-marks)))))
(let ([sema (make-semaphore 0)]) (let ([sema (make-semaphore 0)])
(when (and tmp-plt-filename install?) (when (and tmp-plt-filename install?)
(run-installer tmp-plt-filename (run-installer tmp-plt-filename
@ -458,13 +453,13 @@ A test case:
(yield sema)))) (yield sema))))
(raise (raise
(if tmp-plt-filename (if tmp-plt-filename
(make-exn:file-saved-instead (exn:file-saved-instead
(if install? (if install?
(string-constant package-was-installed) (string-constant package-was-installed)
(string-constant download-was-saved)) (string-constant download-was-saved))
(current-continuation-marks) (current-continuation-marks)
tmp-plt-filename) tmp-plt-filename)
(make-exn:cancelled "The download was cancelled." (exn:cancelled "The download was cancelled."
(current-continuation-marks)))))] (current-continuation-marks)))))]
[(or (and (url? url) [(or (and (url? url)
(not (null? (url-path url))) (not (null? (url-path url)))
@ -576,9 +571,9 @@ A test case:
;; build-html-error-message : exn -> string[html] ;; build-html-error-message : exn -> string[html]
(define ((build-html-error-message str) exn) (define ((build-html-error-message str) exn)
(string-append (string-append
"<html><head><title>Error Evaluating Scheme</title></head>" "<html><head><title>Error Evaluating Racket</title></head>"
"<body>" "<body>"
"<h2>Error Evaluating Scheme Code</h2>" "<h2>Error Evaluating Racket Code</h2>"
(format "<pre>\n~a\n</pre>" str) (format "<pre>\n~a\n</pre>" str)
"<p><p>" "<p><p>"
(format "<font color=\"red\">~a</font>" (format "<font color=\"red\">~a</font>"
@ -743,7 +738,7 @@ A test case:
(set-page (list e (or tag-pos 0) (send e last-position)) #t) (set-page (list e (or tag-pos 0) (send e last-position)) #t)
(when tag-pos (send e set-position tag-pos)))] (when tag-pos (send e set-position tag-pos)))]
[(exn? result) [(exn? result)
(message-box (string-constant drscheme) (message-box (string-constant drracket)
(exn-message result) (exn-message result)
tlw)] tlw)]
[else (void)])))))) [else (void)]))))))

View File

@ -1,7 +1,5 @@
(module option-snip mzscheme #lang racket
(require mred (require racket/gui)
mzlib/class
mzlib/string)
(provide option-snip% (provide option-snip%
checkbox-snip%) checkbox-snip%)
@ -198,4 +196,4 @@
(super-instantiate ()) (super-instantiate ())
(set-flags (cons 'handles-events (get-flags))) (set-flags (cons 'handles-events (get-flags)))
(set-count 1)))) (set-count 1)))

View File

@ -1,5 +1,5 @@
(module sig scheme/base #lang racket
(require scheme/unit) (require racket/unit)
(provide relative-btree^ (provide relative-btree^
bullet-export^ bullet-export^
@ -21,8 +21,8 @@
(define-signature hyper^ (define-signature hyper^
(open-url (open-url
(struct exn:file-saved-instead (pathname)) (struct exn:file-saved-instead (pathname) #:omit-constructor)
(struct exn:cancelled ()) (struct exn:cancelled () #:omit-constructor)
hyper-text<%> hyper-text<%>
hyper-text-mixin hyper-text-mixin
@ -54,4 +54,4 @@
btree-shift! btree-shift!
btree-for-each btree-for-each
btree-map))) btree-map))

View File

@ -1,15 +1,16 @@
(module tool mzscheme #lang racket
(require browser/external (require (only-in "external.rkt" install-help-browser-preference-panel)
mzlib/unit racket/unit
drscheme/tool) drracket/tool)
(provide tool@) (provide tool@)
;; to add a preference pannel to drscheme that sets the browser preference ;; to add a preference pannel to drracket that sets the browser preference
(define tool@ (define tool@
(unit (unit
(import drscheme:tool^) (import drracket:tool^)
(export drscheme:tool-exports^) (export drracket:tool-exports^)
(define phase1 void)
(define phase2 void)
(install-help-browser-preference-panel)))) (define (phase1) (void))
(define (phase2) (void))
(install-help-browser-preference-panel)))

View File

@ -106,6 +106,7 @@ please adhere to these guidelines:
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "Ok") (ok "Ok")
(cancel "Fortryd") (cancel "Fortryd")
(abort "Afbryd") (abort "Afbryd")

View File

@ -19,6 +19,7 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Annuleren") (cancel "Annuleren")
(untitled "Naamloos") (untitled "Naamloos")

View File

@ -106,6 +106,7 @@ please adhere to these guidelines:
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Cancel") (cancel "Cancel")
(abort "Abort") (abort "Abort")

View File

@ -106,6 +106,7 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Annuler") (cancel "Annuler")
(abort "Abandonner") (abort "Abandonner")

View File

@ -13,6 +13,7 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
;; We can't use "Abbrechen" here because that's much closer in ;; We can't use "Abbrechen" here because that's much closer in
;; meaning to "abort", and it appears in dialogs saying "Quit?" "OK" ;; meaning to "abort", and it appears in dialogs saying "Quit?" "OK"

View File

@ -106,6 +106,7 @@ please adhere to these guidelines:
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "キャンセル") (cancel "キャンセル")
(abort "中止") (abort "中止")

View File

@ -24,6 +24,7 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "확인") (ok "확인")
(cancel "취소") (cancel "취소")
(abort "중단") (abort "중단")

View File

@ -106,6 +106,7 @@ please adhere to these guidelines:
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Cancelar") (cancel "Cancelar")
(abort "Abortar") (abort "Abortar")

View File

@ -106,6 +106,7 @@ please adhere to these guidelines:
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Отмена") (cancel "Отмена")
(abort "Отмена") (abort "Отмена")

View File

@ -33,6 +33,7 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "确定") (ok "确定")
(cancel "取消") (cancel "取消")
(abort "中止") (abort "中止")

View File

@ -16,6 +16,7 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Cancelar") (cancel "Cancelar")
(abort "Abortar") (abort "Abortar")

View File

@ -16,6 +16,8 @@
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "確定") (ok "確定")
(cancel "取消") (cancel "取消")
(abort "中止") (abort "中止")

View File

@ -106,6 +106,7 @@ please adhere to these guidelines:
;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :) ;;; general purpose (DrRacket is hereby a word in every language, by decree of Robby :)
(plt "PLT") (plt "PLT")
(drscheme "DrRacket") (drscheme "DrRacket")
(drracket "DrRacket")
(ok "OK") (ok "OK")
(cancel "Скасувати") (cancel "Скасувати")
(abort "Скасувати") (abort "Скасувати")