Eventually we hope to add a 'url'-form to require, at which point it
will make a lot of sense to support that it bitmap. In the meantime, I
think the best thing is probably to make a new form, say bitmap-url,
and put it into a separate teachpack.

Robby

On Sunday, June 13, 2010, Nadeem Abdul Hamid <nadeem at acm.org> wrote:
> Below is a quick hack I did to allow loading a 2htdp/image bitmap from a url 
> like this:
>
>  ? ?(bitmap (url "http://docs.racket-lang.org/teachpack/4e85791a5.png";))
>
> There's no error checking, and I was too lazy to do a diff, but I've marked 
> the three pieces that I added with "; .nah." comments. Would it be possible 
> to add this feature to the library? This would have been a little easier 
> maybe if bitmap% provided load from ports, but I see that's an open PR (9335).
>
> Thanks,
> --- nadeem
>
>
> (define-syntax (bitmap stx)
>  ?(syntax-case stx ()
>  ? ?[(_ arg)
>  ? ? (let* ([arg (syntax->datum #'arg)]
>  ? ? ? ? ? ?[url? (and (pair? arg) (eq? (car arg) 'url))] ? ; .nah.
>  ? ? ? ? ? ?[path
>  ? ? ? ? ? ? (cond
>  ? ? ? ? ? ? ? [(and (pair? arg)
>  ? ? ? ? ? ? ? ? ? ? (eq? (car arg) 'planet))
>  ? ? ? ? ? ? ? ?(raise-syntax-error 'bitmap "planet paths not yet supported" 
> stx)]
>  ? ? ? ? ? ? ? ; .nah. ...
>  ? ? ? ? ? ? ? [url?
>  ? ? ? ? ? ? ? ?(let ([temp-path (make-temporary-file)])
>  ? ? ? ? ? ? ? ? ?(call-with-output-file temp-path
>  ? ? ? ? ? ? ? ? ? ?(lambda (outp)
>  ? ? ? ? ? ? ? ? ? ? ?(call/input-url
>  ? ? ? ? ? ? ? ? ? ? ? (string->url (cadr arg)) get-pure-port
>  ? ? ? ? ? ? ? ? ? ? ? (lambda (inp)
>  ? ? ? ? ? ? ? ? ? ? ? ? (copy-port inp outp)
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ?)))
>  ? ? ? ? ? ? ? ? ? ?#:exists 'replace
>  ? ? ? ? ? ? ? ? ? ?)
>  ? ? ? ? ? ? ? ? ?(display temp-path)
>  ? ? ? ? ? ? ? ? ?temp-path
>  ? ? ? ? ? ? ? ? ?)]
>  ? ? ? ? ? ? ? ; ... .nah.
>  ? ? ? ? ? ? ? [(symbol? arg)
>  ? ? ? ? ? ? ? ?(let ([pieces (regexp-split #rx"/" (symbol->string arg))])
>  ? ? ? ? ? ? ? ? ?(cond
>  ? ? ? ? ? ? ? ? ? ?[(null? pieces)
>  ? ? ? ? ? ? ? ? ? ? (raise-syntax-error 'bitmap "expected a path with a / in 
> it" stx)]
>  ? ? ? ? ? ? ? ? ? ?[else
>  ? ? ? ? ? ? ? ? ? ? (let loop ([cps (current-library-collection-paths)])
>  ? ? ? ? ? ? ? ? ? ? ? (cond
>  ? ? ? ? ? ? ? ? ? ? ? ? [(null? cps)
>  ? ? ? ? ? ? ? ? ? ? ? ? ?(raise-syntax-error 'bitmap
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(format "could not find the ~a 
> collection" (car pieces))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?stx)]
>  ? ? ? ? ? ? ? ? ? ? ? ? [else
>  ? ? ? ? ? ? ? ? ? ? ? ? ?(if (and (directory-exists? (car cps))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (member (build-path (car pieces))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (directory-list (car cps))))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(let ([candidate (apply build-path (car cps) 
> pieces)])
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(if (file-exists? candidate)
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?candidate
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(raise-syntax-error 'bitmap
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(format "could not 
> find ~a in the ~a collection"
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(apply 
> string-append (add-between (cdr pieces) "/"))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(car pieces))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?stx)))
>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(loop (cdr cps)))]))]))]
>  ? ? ? ? ? ? ? [(string? arg)
>  ? ? ? ? ? ? ? ?(path->complete-path
>  ? ? ? ? ? ? ? ? arg
>  ? ? ? ? ? ? ? ? (or (current-load-relative-directory)
>  ? ? ? ? ? ? ? ? ? ? (current-directory)))])]
>  ? ? ? ? ? ?)
>  ? ? ? ; .nah. ...
>  ? ? ? #`(let ([result (make-object image-snip% (make-object bitmap% #,path 
> 'unknown/mask))])
>  ? ? ? ? ? (when #,url? (delete-file #,path))
>  ? ? ? ? ? result)
>  ? ? ? ; ... .nah.
>  ? ? ? )]))
> _________________________________________________
>  ?For list-related administrative tasks:
>  ?http://lists.racket-lang.org/listinfo/dev
>

Reply via email to