#----------------------------------------------------------------------
# POO help module Trevor Clarke 8/09/96
# last update: JJS 8/10/96
#----------------------------------------------------------------------
import pickle
import string
helpDB={}
class HelpRec:
def __init__(self):
self.syntax = '' # one-line syntax summary
self.desc = '' # long description
self.initial = 0 # if 1, appears in initial "topics" list
def show(self):
if self.syntax:
return "Syntax: " + self.syntax + "\n" + self.desc + "\n\n"
else:
return self.desc + "\n\n"
def enter(self):
self.syntax = raw_input("Enter syntax string: ")
print "Enter help message, period(.) alone to end:"
print "------------------------------------------"
done=0
self.desc=""
while not done:
tex = raw_input()
if tex==".": done = 1
else: self.desc = self.desc+"\n"+tex
ans = raw_input("Show on initial topics list? ")
self.initial = (ans[0]=='y' or ans[0]=='Y' or ans[0]=='1')
def hSave(filename='poohelp.dat'):
global helpDB
file = open(filename, 'w')
pickle.dump(helpDB, file)
file.close()
def hLoad(filename='poohelp.dat'):
global helpDB
file = open(filename, 'r')
helpDB = pickle.load(file)
file.close()
def new():
global helpDB
return "Creating empty help database..."
helpDB = {}
def help(topic=None):
global helpDB
if not topic:
output = "Available help topics:\n\n"
lst = filter(lambda x:helpDB[x].initial, helpDB.keys())
lst.sort()
for topic in lst:
output = output + " "+ topic + "\n"
return output + "\n"
else:
try:
return helpDB[topic].show()
except:
# if no exact match is found, what about a partial match?
lst = filter(lambda x,a=topic,l=len(topic): x[:l]==a,helpDB.keys())
if not (lst):
if (topic[:3] == "at_"):
return help( "@" + topic[3:] )
return "No help available on "+topic+".\n"
if len(lst) > 1:
return "Ambiguous topic:\n " + string.join(lst,'\n ')+'\n'
return helpDB[lst[0]].show()
def addTopic(topic):
global helpDB
hr = HelpRec()
hr.enter()
helpDB[topic] = hr
def deleteTopic(topic):
global helpDB
try: del helpDB[topic]
except: print "Couldn't delete topic",topic
def popDB():
done = 0
while not done:
foo = raw_input("help>")
cmd = foo[:2]
if cmd == ".q": done = 1
elif cmd == ".s": hSave()
elif cmd == ".l": hLoad()
elif cmd == ".n": new()
elif cmd == ".h" or cmd == ".d":
try: foo = string.split(foo)[1]
except: foo = ''
if not foo: foo = raw_input("topic>")
if cmd == ".h": print help(foo)
elif cmd==".d": deleteTopic(foo)
elif cmd == ".?":
print "Enter one of:"
print " .quit .save .load .new .help .del"
print "(Commands may be abbreviated to the first letter.)"
elif cmd == ".": pass
elif cmd == "": pass
else: addTopic(foo)
if __name__ == '__main__':
popDB()
#-------------------------
# End-of-file
#-------------------------