/usr/lib/cgi-bin/doc-central/docinfo.py is in doc-central 1.8.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | # docinfo.py
# This module implements DocumentationInfo, which is an object that holds information
# about a single document.
# Import all system packages we need
import sys, os, rfc822, string, re
# Import all our own packages
import sectionedfile
# Constants to select the sorting order for documents
SORT_TITLE = 1
SORT_SECTION = 2
# Default sorting order
SortMethod = [ SORT_TITLE ]
pat_paragraph = re.compile('^ \.\n', re.MULTILINE)
pat_verbatim = re.compile('((^ +[^ ].*\n)+)', re.MULTILINE)
pat_url = re.compile('((http|ftp)s?://[a-zA-Z0-9-]+\.[a-zA-Z0-9-./]+)')
class DocumentationInfo:
def __init__(self,docfile=None):
'''DocumentationInfo constructor. If a filename is passed assume
it is a doc-base file and read it.'''
self.title="Nameless document"
self.author="Unknown author"
self.section="Other"
self.abstract="Sorry, there is no abstract available."
self.docs={}
if docfile:
self.package=docfile.split('/')[-1]
self.parse_info(docfile)
def __getkey(self,key):
'''Return the sorting-key used for sorting. Used by __cmp__ to
simplify our sorting code.'''
if (key==SORT_SECTION):
return self.section
else:
return self.title
def __cmp__(self,other):
'''Compare ourself to another DocumentationInfo object using
the sorting options defined in SortMethod.'''
for key in SortMethod:
(a,b)=(string.lower(self.__getkey(key)), \
string.lower(other.__getkey(key)))
if (a<b):
return -1
elif (a>b):
return 1
return 0
def _html_encode(self, text):
'''HTML encodes text '''
text=string.replace(text, '&', '&')
text=string.replace(text, '<', '<')
text=string.replace(text, '>', '>')
return text
def _parse_abstract(self, abstract):
'''This function converts abstract section'''
abstract=self._html_encode(abstract)
abstract=re.sub(pat_paragraph, '<P>', abstract)
abstract=re.sub(pat_verbatim, '<PRE>\n\g<1></PRE>', abstract)
abstract=re.sub(pat_url, '<A HREF="\g<1>">\g<1></A>', abstract)
return abstract
def parse_info(self,docfile):
'''This function reads a doc-base registry file. We use the
sectionedfile object to get the individual sections from the
file, and rfc822 object to parse them.'''
fd=os.open(docfile, os.O_RDONLY)
fo=os.fdopen(fd)
dd = sectionedfile.SectionedFile(fo)
dd.divider=""
part=rfc822.Message(dd,0)
self.title=part.getheader("Title")
if part.has_key("Author"):
self.author=part.getheader("Author")
if part.has_key("Abstract"):
self.abstract=self._parse_abstract(part.getrawheader("Abstract"))
if part.has_key("Section"):
self.section=part.getheader("Section")
while dd.unblock():
part=rfc822.Message(dd,0)
if not part.has_key("Format"):
continue
format=string.lower(part["Format"])
if part.has_key("Index"):
self.docs[format]=part["Index"]
else:
self.docs[format]=part["Files"]
|