JargonFile/makeJargon.py

110 lines
2.8 KiB
Python
Raw Normal View History

2014-04-26 16:52:25 +00:00
import os
import string
2014-04-26 18:16:32 +00:00
import operator
2014-04-26 16:52:25 +00:00
def jargonParseEntry(filename):
if not os.path.isfile(filename):
return []
entry = []
line = []
with open(filename) as fp:
line = fp.readlines()
fp.close()
text = ''
if len(line) > 2:
for i in range(len(line)):
if i == 0:
entry.append(line[i].replace('\n','').strip())
if i >= 2:
text = text + line[i]
text = text.replace('\n',' ')
2014-04-26 21:47:37 +00:00
# remove any gaps
pos = text.find(' ')
while pos != -1:
text = text.replace(' ',' ')
pos = text.find(' ')
2014-04-26 16:52:25 +00:00
entry.append(text.strip())
return entry
2014-04-26 20:24:44 +00:00
# returns the number of sub-definitions within a description
def jargonSubdefinitions(text):
definitions = 0
2014-04-26 20:56:29 +00:00
prevpos = 0
2014-04-26 20:24:44 +00:00
for i in range(10):
definitionStr = str(i+1) + ". "
2014-04-26 20:56:29 +00:00
pos = text.find(definitionStr)
if pos == -1 or pos < prevpos:
2014-04-26 20:24:44 +00:00
break
2014-04-26 20:56:29 +00:00
else:
definitions = definitions + 1
prevpos = pos
2014-04-26 20:24:44 +00:00
if definitions == 0:
definitions = 1
# too many definitions
if definitions > 5:
definitions = 0
return definitions
2014-04-26 16:52:25 +00:00
def jargonGetEntries(entriesDir):
entries = []
for dirName, subdirList, fileList in os.walk(entriesDir):
for filename in fileList:
entry = jargonParseEntry(entriesDir + '/' + filename)
if entry:
entries.append(entry)
2014-04-26 18:16:32 +00:00
entries.sort(key=operator.itemgetter(0))
2014-04-26 16:52:25 +00:00
return entries
2014-04-26 20:24:44 +00:00
def jargonManpageWithDefinitions(text, definitions):
result = ''
prevpos = 0
for i in range(definitions):
pos = text.find(str(i+1) + ". ")
if pos > -1 and i > 0:
if result != '':
result = result + "\n\n"
result = result + text[prevpos:pos]
prevpos = pos
return result + "\n\n" + text[prevpos:]
2014-04-26 18:16:32 +00:00
def jargonToManpage(manpageFilename, entries, version):
2014-04-26 17:49:51 +00:00
if not os.path.isdir("man"):
os.system("mkdir man")
2014-04-26 18:18:58 +00:00
if os.path.isfile(manpageFilename + ".gz"):
os.system("rm " + manpageFilename + ".gz")
2014-04-26 17:49:51 +00:00
fp = open(manpageFilename,'w')
2014-04-26 18:16:32 +00:00
fp.write(".TH \"The Jargon File\" 1 \"April 26, 2014\" \"\" \"" + version + "\"\n\n")
2014-04-26 17:49:51 +00:00
for entry in entries:
title = entry[0]
text = entry[1]
2014-04-26 20:24:44 +00:00
definitions = jargonSubdefinitions(entry[1])
if definitions > 1:
text = jargonManpageWithDefinitions(text, definitions)
2014-04-26 17:49:51 +00:00
fp.write(".SH " + title + "\n")
fp.write(text + "\n\n")
fp.close()
os.system("gzip " + manpageFilename)
print "manpage can be installed with the command:"
print "sudo install -m 644 " + manpageFilename + ".gz /usr/local/share/man/man1"
2014-04-26 16:52:25 +00:00
if __name__ == "__main__":
2014-04-26 18:16:32 +00:00
version = "x.xx"
2014-04-26 16:52:25 +00:00
entries = jargonGetEntries('entries')
2014-04-26 18:16:32 +00:00
jargonToManpage("man/jargon.1", entries, version)