auto-rename/language/polyglot.rkt
eutro da8298d864
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
Initial commit
2025-04-01 18:22:20 +01:00

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)))