main.go raw
1 // Command shadow transliterates text into the Shadow Alphabet.
2 //
3 // Usage:
4 //
5 // echo "the cat sat on the mat" | shadow -lang en
6 // echo "dobar dan" | shadow -lang hr
7 // shadow -lang en -word "church"
8 // shadow -lang hr -word "život"
9 package main
10
11 import (
12 "bufio"
13 "flag"
14 "fmt"
15 "os"
16
17 "git.mleku.dev/mleku/dendrite/pkg/shadow"
18 )
19
20 func main() {
21 lang := flag.String("lang", "en", "source language: en (English), hr (Croatian)")
22 word := flag.String("word", "", "single word to transliterate (instead of stdin)")
23 flag.Parse()
24
25 switch *lang {
26 case "en":
27 runEnglish(*word)
28 case "hr":
29 runCroatian(*word)
30 default:
31 fmt.Fprintf(os.Stderr, "unknown language: %s (supported: en, hr)\n", *lang)
32 os.Exit(1)
33 }
34 }
35
36 func runEnglish(word string) {
37 dict, err := shadow.LoadEnglishDict()
38 if err != nil {
39 fmt.Fprintf(os.Stderr, "error loading dictionary: %v\n", err)
40 os.Exit(1)
41 }
42
43 if word != "" {
44 result, ok := dict.Lookup(word)
45 if !ok {
46 fmt.Fprintf(os.Stderr, "%s: not found in dictionary\n", word)
47 os.Exit(1)
48 }
49 fmt.Println(result)
50 return
51 }
52
53 sc := bufio.NewScanner(os.Stdin)
54 for sc.Scan() {
55 line := sc.Text()
56 fmt.Println(dict.FromEnglish(line))
57 }
58 if err := sc.Err(); err != nil {
59 fmt.Fprintf(os.Stderr, "read error: %v\n", err)
60 os.Exit(1)
61 }
62 }
63
64 func runCroatian(word string) {
65 if word != "" {
66 fmt.Println(shadow.FromCroatian(word))
67 return
68 }
69
70 sc := bufio.NewScanner(os.Stdin)
71 for sc.Scan() {
72 fmt.Println(shadow.FromCroatian(sc.Text()))
73 }
74 if err := sc.Err(); err != nil {
75 fmt.Fprintf(os.Stderr, "read error: %v\n", err)
76 os.Exit(1)
77 }
78 }
79
80 func init() {
81 flag.Usage = func() {
82 fmt.Fprintf(os.Stderr, "shadow — transliterate text to the Shadow Alphabet\n\n")
83 fmt.Fprintf(os.Stderr, "Usage:\n")
84 fmt.Fprintf(os.Stderr, " echo \"text\" | shadow -lang en\n")
85 fmt.Fprintf(os.Stderr, " shadow -lang hr -word \"život\"\n\n")
86 fmt.Fprintf(os.Stderr, "Languages:\n")
87 fmt.Fprintf(os.Stderr, " en English (uses CMU Pronouncing Dictionary, %s entries)\n",
88 "134k+")
89 fmt.Fprintf(os.Stderr, " hr Croatian (Gaj's Latin, direct phonemic mapping)\n\n")
90 fmt.Fprintf(os.Stderr, "Flags:\n")
91 flag.PrintDefaults()
92 }
93 }
94