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