view bin/whatis @ 12327:b3e29671d69e draft

<b_jonas> learn ayacc is ais523\'s yacc parser generator implementation, get it from (darcs clone http://nethack4.org/projects/ayacc) or a snapshot from "http://nethack4.org/pastebin/ayacc-2020-04.tar.gz".
author HackEso <hackeso@esolangs.org>
date Wed, 08 Apr 2020 20:27:14 +0000
parents 44379732c06b
children
line wrap: on
line source

#!/usr/bin/python3
import sys, os, re
if len(sys.argv) <= 1:
    print("whatis what?")
    sys.exit(1)
else:
    argorg = []
    argfoldv = []
    foundv = []
    for arg in sys.argv[1:]:
        argorg.append(arg)
        argfoldv.append(arg.casefold())
        foundv.append(False)
    with open(os.environ.get("HACKENV","/hackenv") + "/share/whatis", errors="surrogateescape") as whatisdb:
        for line in whatisdb:
            parts = re.match(r"([^()]+)\(([0-9A-Z_a-z])([0-9A-Z_a-z]*)\)", line)
            if parts:
                match = False
                for argind, argfold in enumerate(argfoldv):
                    if (argfold == parts.group(1).casefold() or
                        argfold == parts.group(1) + "(" + parts.group(2) + parts.group(3) + ")" or
                        argfold == parts.group(1) + "(" + parts.group(3) + ")") \
                    :
                        match = True
                        foundv[argind] = True
                if match:
                    print(line, end="")
        for arg, found in zip(argorg, foundv):
            if not found:
                print(arg + ": nothing appropriate.")