Some checks are pending
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (BC, stable) (push) Waiting to run
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (CS, stable) (push) Waiting to run
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (true, BC, current) (push) Waiting to run
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (true, CS, current) (push) Waiting to run
53 lines
1.3 KiB
Racket
53 lines
1.3 KiB
Racket
#lang racket/base
|
|
|
|
(require (for-syntax racket/base racket/string)
|
|
"../main.rkt")
|
|
|
|
(provide en-français
|
|
auf-deutsch
|
|
magyarul)
|
|
|
|
(begin-for-syntax
|
|
(require racket/runtime-path)
|
|
(define-logger polyglot)
|
|
|
|
(define-runtime-path table-path "stdlib-words.tsv")
|
|
(define tsv-data
|
|
(call-with-input-file* table-path
|
|
#:mode 'text
|
|
(λ (ic)
|
|
(for/hash ([line (in-lines ic)])
|
|
(define vals (string-split line "\t"))
|
|
(values (car vals)
|
|
(apply vector-immutable (cdr vals)))))))
|
|
|
|
(define ((map-words lang-code column) name)
|
|
(cond
|
|
[(string-prefix? name "#%") name]
|
|
[else
|
|
(define translated
|
|
(regexp-replace*
|
|
#rx"[a-zA-Z]+" name
|
|
(λ (word)
|
|
(define translated (hash-ref tsv-data word #f))
|
|
(cond
|
|
[translated
|
|
(vector-ref translated column)]
|
|
[else word]))))
|
|
(log-polyglot-debug "~a -[~a]> ~a" name lang-code translated)
|
|
translated])))
|
|
|
|
(define-syntax en-français
|
|
(make-auto-rename-transformer
|
|
(tx/map (map-words 'fr 0))
|
|
(tx/disambiguate)))
|
|
|
|
(define-syntax auf-deutsch
|
|
(make-auto-rename-transformer
|
|
(tx/map (map-words 'de 1))
|
|
(tx/disambiguate)))
|
|
|
|
(define-syntax magyarul
|
|
(make-auto-rename-transformer
|
|
(tx/map (map-words 'hu 2))
|
|
(tx/disambiguate)))
|