File: encode.rkt

package info (click to toggle)
racket 7.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,432 kB
  • sloc: ansic: 258,980; pascal: 59,975; sh: 33,650; asm: 13,558; lisp: 7,124; makefile: 3,329; cpp: 2,889; exp: 499; python: 274; xml: 11
file content (34 lines) | stat: -rw-r--r-- 1,102 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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")