URI: 
       Add zombie language to annna. - annna - Annna the nice friendly bot.
  HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
       ---
   DIR commit 708589d9a8cd100e0145e0a69a6a7f1f99b4b82f
   DIR parent 31edfad8e895852b55f40f26e64868c9cd4dd9d3
  HTML Author: Annna Robert-Houdin <annna@bitreich.org>
       Date:   Thu, 31 Oct 2024 19:31:04 +0100
       
       Add zombie language to annna.
       
       Diffstat:
         M annna-message-common                |      10 ++++++++++
         A zombie                              |     186 +++++++++++++++++++++++++++++++
       
       2 files changed, 196 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/annna-message-common b/annna-message-common
       @@ -624,6 +624,16 @@ case "${text}" in
                suri="$(printf "%s\n" "${word}" | bitreich-speak)"
                annna-say -s "${server}" -c "${channel}" "${suri}"
                ;;
       +"${ircuser}, please zombie "*)
       +        word="$(printf "%s\n" "${text}" | cut -c 22- | sed 's,\t,    ,g')"
       +        suri="$(printf "%s\n" "${word}" | zombie -e)"
       +        annna-say -s "${server}" -c "${channel}" "${suri}"
       +        ;;
       +"${ircuser}, please zombie say "*)
       +        word="$(printf "%s\n" "${text}" | cut -c 26- | sed 's,\t,    ,g')"
       +        suri="$(printf "%s\n" "${word}" | zombie -e | bitreich-speak)"
       +        annna-say -s "${server}" -c "${channel}" "${suri}"
       +        ;;
        "${ircuser}, what can I cook with "*)
                ingredients="$(printf "%s\n" "${text}" | cut -c 29- | sed 's,\t,    ,g')"
                case "$ingredients" in
   DIR diff --git a/zombie b/zombie
       @@ -0,0 +1,186 @@
       +#!/usr/bin/env python
       +# coding=utf-8
       +#
       +# Copy me if you can.
       +# by 20h
       +#
       +# Idea from: https://github.com/DanPlayz0/Chucky/blob/main/assets/zombie-translator/characters.js
       +
       +import os
       +import sys
       +import getopt
       +
       +zombiemapping = {
       +        "Ar": "a",
       +        "AA": "b",
       +        "Ab": "c",
       +        "RA": "d",
       +        "bb": "e",
       +        "BA": "f",
       +        "ll": "g",
       +        "bG": "h",
       +        "Gn": "i",
       +        "GA": "j",
       +        "GG": "k",
       +        "nh": "l",
       +        "hh": "m",
       +        "MM": "n",
       +        "hr": "o",
       +        "hA": "p",
       +        "hb": "q",
       +        "rr": "r",
       +        "hG": "s",
       +        "Gg": "t",
       +        "GM": "u",
       +        "nr": "v",
       +        "Mr": "w",
       +        "Gl": "x",
       +        "nn": "y",
       +        "KA": "z",
       +        "aR": "A",
       +        "aa": "B",
       +        "aB": "C",
       +        "rA": "D",
       +        "BB": "E",
       +        "ba": "F",
       +        "LL": "G",
       +        "Bg": "H",
       +        "gN": "I",
       +        "ga": "J",
       +        "gg": "K",
       +        "NH": "L",
       +        "HH": "M",
       +        "mm": "N",
       +        "HR": "O",
       +        "Ha": "P",
       +        "HB": "Q",
       +        "RR": "R",
       +        "Hq": "S",
       +        "gG": "T",
       +        "gm": "U",
       +        "NR": "V",
       +        "mR": "W",
       +        "gL": "X",
       +        "NN": "Y",
       +        "ka": "Z"
       +}
       +
       +humanmapping = {
       +        "a": "Ar",
       +        "b": "AA",
       +        "c": "Ab",
       +        "d": "RA",
       +        "e": "bb",
       +        "f": "BA",
       +        "g": "ll",
       +        "h": "bG",
       +        "i": "Gn",
       +        "j": "GA",
       +        "k": "GG",
       +        "l": "nh",
       +        "m": "hh",
       +        "n": "MM",
       +        "o": "hr",
       +        "p": "hA",
       +        "q": "hb",
       +        "r": "rr",
       +        "s": "hG",
       +        "t": "Gg",
       +        "u": "GM",
       +        "v": "nr",
       +        "w": "Mr",
       +        "x": "Gl",
       +        "y": "nn",
       +        "z": "KA",
       +        "A": "aR",
       +        "B": "aa",
       +        "C": "aB",
       +        "D": "ra",
       +        "E": "BB",
       +        "F": "ba",
       +        "G": "LL",
       +        "H": "Bg",
       +        "I": "gN",
       +        "J": "ga",
       +        "K": "gg",
       +        "L": "NH",
       +        "M": "HH",
       +        "N": "mm",
       +        "O": "HR",
       +        "P": "Ha",
       +        "Q": "HB",
       +        "R": "RR",
       +        "S": "Hg",
       +        "T": "gG",
       +        "U": "gm",
       +        "V": "NR",
       +        "W": "mR",
       +        "X": "gL",
       +        "Y": "NN",
       +        "Z": "ka"
       +}
       +
       +def human2zombie(s):
       +        r = ""
       +        for c in s:
       +                try:
       +                        r += humanmapping[c]
       +                except KeyError:
       +                        r += c
       +        return r 
       +
       +def zombie2human(s):
       +        r = ""
       +        while 1:
       +                c = s[:2]
       +                s = s[2:]
       +                try:
       +                        r += zombiemapping[c]
       +                except KeyError:
       +                        r += c
       +                if len(s) == 0:
       +                        break
       +        return r 
       +
       +def usage(app):
       +        app = os.path.basename(app)
       +        print("usage: %s [-h] [-e|-d]" % (app), file=sys.stderr)
       +        sys.exit(1)
       +
       +def main(args):
       +        try:
       +                opts, largs = getopt.getopt(args[1:], "hed")
       +        except getopt.GetoptError as err:
       +                print(str(err))
       +                usage(args[0])
       +
       +        dodecode=0
       +        doencode=0
       +
       +        for o, a in opts:
       +                if o == "-h":
       +                        usage(args[0])
       +                elif o == "-d":
       +                        dodecode=1
       +                elif o == "-e":
       +                        doencode=1
       +                else:
       +                        assert False, "unhandled option"
       +
       +        ins = sys.stdin.read()
       +        rs = None
       +        words = ins.split(" ")
       +        if doencode:
       +                rs = " ".join([human2zombie(w) for w in words])
       +        if dodecode:
       +                rs = " ".join([zombie2human(w) for w in words])
       +        if rs != None:
       +                print("%s" % (rs), end='')
       +        else:
       +                usage(args[0])
       +        
       +        return 0
       +
       +if __name__ == "__main__":
       +        sys.exit(main(sys.argv))
       +