// Command shadow transliterates text into the Shadow Alphabet. // // Usage: // // echo "the cat sat on the mat" | shadow -lang en // echo "dobar dan" | shadow -lang hr // shadow -lang en -word "church" // shadow -lang hr -word "život" package main import ( "bufio" "flag" "fmt" "os" "git.mleku.dev/mleku/dendrite/pkg/shadow" ) func main() { lang := flag.String("lang", "en", "source language: en (English), hr (Croatian)") word := flag.String("word", "", "single word to transliterate (instead of stdin)") flag.Parse() switch *lang { case "en": runEnglish(*word) case "hr": runCroatian(*word) default: fmt.Fprintf(os.Stderr, "unknown language: %s (supported: en, hr)\n", *lang) os.Exit(1) } } func runEnglish(word string) { dict, err := shadow.LoadEnglishDict() if err != nil { fmt.Fprintf(os.Stderr, "error loading dictionary: %v\n", err) os.Exit(1) } if word != "" { result, ok := dict.Lookup(word) if !ok { fmt.Fprintf(os.Stderr, "%s: not found in dictionary\n", word) os.Exit(1) } fmt.Println(result) return } sc := bufio.NewScanner(os.Stdin) for sc.Scan() { line := sc.Text() fmt.Println(dict.FromEnglish(line)) } if err := sc.Err(); err != nil { fmt.Fprintf(os.Stderr, "read error: %v\n", err) os.Exit(1) } } func runCroatian(word string) { if word != "" { fmt.Println(shadow.FromCroatian(word)) return } sc := bufio.NewScanner(os.Stdin) for sc.Scan() { fmt.Println(shadow.FromCroatian(sc.Text())) } if err := sc.Err(); err != nil { fmt.Fprintf(os.Stderr, "read error: %v\n", err) os.Exit(1) } } func init() { flag.Usage = func() { fmt.Fprintf(os.Stderr, "shadow — transliterate text to the Shadow Alphabet\n\n") fmt.Fprintf(os.Stderr, "Usage:\n") fmt.Fprintf(os.Stderr, " echo \"text\" | shadow -lang en\n") fmt.Fprintf(os.Stderr, " shadow -lang hr -word \"život\"\n\n") fmt.Fprintf(os.Stderr, "Languages:\n") fmt.Fprintf(os.Stderr, " en English (uses CMU Pronouncing Dictionary, %s entries)\n", "134k+") fmt.Fprintf(os.Stderr, " hr Croatian (Gaj's Latin, direct phonemic mapping)\n\n") fmt.Fprintf(os.Stderr, "Flags:\n") flag.PrintDefaults() } }