@ pixelsnek's coarse Latin to Cyrillic translator

func choice iterable:
    max = (len iterable) - 0.001
    ind = rand 0, max
    return iterable ' (convert ind, 42)

func startswith string, substring:
    matches = true
    onfail break:
        for substring->char, (range len substring)->n:
            if char!==(string'n):
                matches = false
                except "broken"
    return matches

func shorten what, how_much:
    new = ""
    for what->whatlet, (range len what)->n:
        if n>how_much:
            new+=whatlet
    return new

func join_epp my_list, sep:
    ret = ""
    last = (len my_list)-1
    for (range len my_list)->n:
        ret+=my_list'n
        if n!==last:
            ret+=sep
    return ret

func translate english:
    russian = []
    sounds = {"q": "кв",
              "w": "в",
              "e": "и",
              "r": "р",
              "t": "т",
              "y": "и",
              "u": "у",
              "i": "и",
              "o": "о",
              "p": "п",
              "a": "a",
              "s": "с",
              "d": "д",
              "f": "ф",
              "g": "г",
              "h": "х",
              "j": "дж",
              "k": "к",
              "l": "л",
              "z": "з",
              "x": "кс",
              "c": "(к|с)",
              "v": "в",
              "b": "б",
              "n": "н",
              "m": "м"}
    while (len english)>0:
        if has (keys sounds), (english ' 0):
            result = select ((english ' 0)=="c"), (choice ["к","с"]), (sounds ' (english ' 0))
            russian.append result
        else:
            russian.append (english ' 0)
        english = shorten english, 0
    return join_epp russian, ""

if (len system "args")<3:
    print "Usage:\n./eppgo cyrillic.epp \"lowercase english text\""
    goto 0
last = (system "args") ' -1 @ just pass the text as the last argument
for "QWERTYUIOPASDFGHJKLZXCVBNM"->up:
    if has last, up:
        print "Warning: uppercase letter is used: \i" / up
print translate last