gui/gui-lib/framework/private/encode.rkt
2014-12-02 02:33:07 -05:00

35 lines
1.1 KiB
Racket

#lang racket/base
(require racket/cmdline file/gzip file/gunzip net/base64)
(define do-lang? #f)
(define (encode/decode-text who lang-from lang-to convert1 convert2)
(when do-lang?
(let ([l (cadr (or (regexp-match #rx"^ *#lang +(.*[^ ]) *$" (read-line))
(error who "missing #lang line")))])
(if (equal? l lang-from)
(printf "#lang ~a\n" lang-to)
(error who "bad #lang: expected ~s, got ~s" lang-from l))))
(define O (open-output-bytes))
(convert1 (current-input-port) O)
(convert2 (open-input-bytes (get-output-bytes O)) (current-output-port))
(flush-output))
(define (encode-text)
(encode/decode-text
'encode-text "racket/base" "s-exp framework/private/decode"
deflate base64-encode-stream))
(define (decode-text)
(encode/decode-text
'decode-text "s-exp framework/private/decode" "racket/base"
base64-decode-stream inflate))
(command-line
#:once-each
["-l" "translate lang line" (set! do-lang? #t)]
#:once-any
["-e" "encode" (encode-text) (exit)]
["-d" "decode" (decode-text) (exit)])
(printf "Use `-h' for help\n")