SILENT KILLERPanel

Current Path: > > opt > alt > python35 > lib64 > > python3.5


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/alt/python35/lib64//python3.5

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
asyncio Directory - -
collections Directory - -
concurrent Directory - -
config-3.5m Directory - -
ctypes Directory - -
curses Directory - -
dbm Directory - -
distutils Directory - -
email Directory - -
encodings Directory - -
ensurepip Directory - -
html Directory - -
http Directory - -
idlelib Directory - -
importlib Directory - -
json Directory - -
lib-dynload Directory - -
lib2to3 Directory - -
logging Directory - -
multiprocessing Directory - -
plat-linux Directory - -
pydoc_data Directory - -
site-packages Directory - -
sqlite3 Directory - -
test Directory - -
unittest Directory - -
urllib Directory - -
venv Directory - -
wsgiref Directory - -
xml Directory - -
xmlrpc Directory - -
__future__.py File 4841 bytes May 31 2024 13:51:46.
__phello__.foo.py File 64 bytes May 31 2024 13:51:44.
_bootlocale.py File 1301 bytes May 31 2024 13:51:40.
_collections_abc.py File 24794 bytes May 31 2024 13:51:40.
_compat_pickle.py File 8556 bytes May 31 2024 13:51:43.
_compression.py File 5340 bytes May 31 2024 13:51:41.
_dummy_thread.py File 5118 bytes May 31 2024 13:51:44.
_markupbase.py File 14598 bytes May 31 2024 13:51:40.
_osx_support.py File 19115 bytes May 31 2024 13:51:44.
_pydecimal.py File 228628 bytes May 31 2024 13:51:40.
_pyio.py File 87968 bytes May 31 2024 13:51:41.
_sitebuiltins.py File 3115 bytes May 31 2024 13:51:41.
_strptime.py File 22185 bytes May 31 2024 13:51:45.
_sysconfigdata.py File 26951 bytes May 31 2024 13:51:44.
_threading_local.py File 7410 bytes May 31 2024 13:51:40.
_weakrefset.py File 5705 bytes May 31 2024 13:51:40.
abc.py File 8628 bytes May 31 2024 13:51:40.
aifc.py File 31967 bytes May 31 2024 13:51:45.
antigravity.py File 476 bytes May 31 2024 13:51:40.
argparse.py File 90138 bytes May 31 2024 13:51:44.
ast.py File 12001 bytes May 31 2024 13:51:44.
asynchat.py File 11971 bytes May 31 2024 13:51:44.
asyncore.py File 20104 bytes May 31 2024 13:51:46.
base64.py File 20522 bytes May 31 2024 13:51:40.
bdb.py File 23354 bytes May 31 2024 13:51:43.
binhex.py File 13954 bytes May 31 2024 13:51:40.
bisect.py File 2595 bytes May 31 2024 13:51:40.
bz2.py File 12424 bytes May 31 2024 13:51:44.
cProfile.py File 5324 bytes May 31 2024 13:51:40.
calendar.py File 22998 bytes May 31 2024 13:51:44.
cgi.py File 36046 bytes May 31 2024 13:51:44.
cgitb.py File 12023 bytes May 31 2024 13:51:46.
chunk.py File 5425 bytes May 31 2024 13:51:41.
cmd.py File 14860 bytes May 31 2024 13:51:40.
code.py File 10118 bytes May 31 2024 13:51:40.
codecs.py File 36231 bytes May 31 2024 13:51:40.
codeop.py File 5994 bytes May 31 2024 13:51:40.
colorsys.py File 4064 bytes May 31 2024 13:51:40.
compileall.py File 11711 bytes May 31 2024 13:51:40.
configparser.py File 53452 bytes May 31 2024 13:51:40.
contextlib.py File 12451 bytes May 31 2024 13:51:40.
copy.py File 8946 bytes May 31 2024 13:51:40.
copyreg.py File 6833 bytes May 31 2024 13:51:44.
crypt.py File 1879 bytes May 31 2024 13:51:40.
csv.py File 16128 bytes May 31 2024 13:51:40.
datetime.py File 75899 bytes May 31 2024 13:51:46.
decimal.py File 320 bytes May 31 2024 13:51:44.
difflib.py File 84204 bytes May 31 2024 13:51:41.
dis.py File 17350 bytes May 31 2024 13:51:40.
doctest.py File 104036 bytes May 31 2024 13:51:40.
dummy_threading.py File 2815 bytes May 31 2024 13:51:40.
enum.py File 22226 bytes May 31 2024 13:51:40.
filecmp.py File 9830 bytes May 31 2024 13:51:40.
fileinput.py File 14259 bytes May 31 2024 13:51:41.
fnmatch.py File 3163 bytes May 31 2024 13:51:40.
formatter.py File 15143 bytes May 31 2024 13:51:40.
fractions.py File 24612 bytes May 31 2024 13:51:40.
ftplib.py File 34951 bytes May 31 2024 13:51:40.
functools.py File 28944 bytes May 31 2024 13:51:46.
genericpath.py File 4364 bytes May 31 2024 13:51:46.
getopt.py File 7489 bytes May 31 2024 13:51:44.
getpass.py File 5994 bytes May 31 2024 13:51:40.
gettext.py File 21530 bytes May 31 2024 13:51:44.
glob.py File 5072 bytes May 31 2024 13:51:40.
gzip.py File 20260 bytes May 31 2024 13:51:44.
hashlib.py File 7979 bytes May 31 2024 13:51:46.
heapq.py File 22929 bytes May 31 2024 13:51:40.
hmac.py File 5063 bytes May 31 2024 13:51:41.
imaplib.py File 52183 bytes May 31 2024 13:51:44.
imghdr.py File 3758 bytes May 31 2024 13:51:44.
imp.py File 10676 bytes May 31 2024 13:51:40.
inspect.py File 114199 bytes May 31 2024 13:51:43.
io.py File 3396 bytes May 31 2024 13:51:40.
ipaddress.py File 75733 bytes May 31 2024 13:51:44.
keyword.py File 2222 bytes May 31 2024 13:51:44.
linecache.py File 5312 bytes May 31 2024 13:51:40.
locale.py File 74713 bytes May 31 2024 13:51:44.
lzma.py File 12925 bytes May 31 2024 13:51:45.
macpath.py File 5907 bytes May 31 2024 13:51:40.
macurl2path.py File 2732 bytes May 31 2024 13:51:40.
mailbox.py File 78418 bytes May 31 2024 13:51:43.
mailcap.py File 8104 bytes May 31 2024 13:51:40.
mimetypes.py File 20847 bytes May 31 2024 13:51:44.
modulefinder.py File 23085 bytes May 31 2024 13:51:40.
netrc.py File 5748 bytes May 31 2024 13:51:41.
nntplib.py File 43078 bytes May 31 2024 13:51:40.
ntpath.py File 22793 bytes May 31 2024 13:51:40.
nturl2path.py File 2444 bytes May 31 2024 13:51:44.
numbers.py File 10243 bytes May 31 2024 13:51:45.
opcode.py File 5885 bytes May 31 2024 13:51:46.
operator.py File 10863 bytes May 31 2024 13:51:44.
optparse.py File 60344 bytes May 31 2024 13:51:44.
os.py File 37033 bytes May 31 2024 13:51:40.
pathlib.py File 47001 bytes May 31 2024 13:51:44.
pdb.py File 61149 bytes May 31 2024 13:51:40.
pickle.py File 56176 bytes May 31 2024 13:51:41.
pickletools.py File 91761 bytes May 31 2024 13:51:40.
pipes.py File 8916 bytes May 31 2024 13:51:44.
pkgutil.py File 21355 bytes May 31 2024 13:51:40.
platform.py File 46147 bytes May 31 2024 13:51:40.
plistlib.py File 31810 bytes May 31 2024 13:51:40.
poplib.py File 14717 bytes May 31 2024 13:51:40.
posixpath.py File 14911 bytes May 31 2024 13:51:40.
pprint.py File 20860 bytes May 31 2024 13:51:40.
profile.py File 22032 bytes May 31 2024 13:51:41.
pstats.py File 26564 bytes May 31 2024 13:51:40.
pty.py File 4763 bytes May 31 2024 13:51:40.
py_compile.py File 7181 bytes May 31 2024 13:51:44.
pyclbr.py File 13564 bytes May 31 2024 13:51:39.
pydoc.py File 103652 bytes May 31 2024 13:51:40.
queue.py File 8780 bytes May 31 2024 13:51:44.
quopri.py File 7265 bytes May 31 2024 13:51:44.
random.py File 26463 bytes May 31 2024 13:51:40.
re.py File 15501 bytes May 31 2024 13:51:40.
reprlib.py File 5336 bytes May 31 2024 13:51:40.
rlcompleter.py File 6307 bytes May 31 2024 13:51:46.
runpy.py File 11959 bytes May 31 2024 13:51:40.
sched.py File 6216 bytes May 31 2024 13:51:44.
selectors.py File 19438 bytes May 31 2024 13:51:40.
shelve.py File 8528 bytes May 31 2024 13:51:44.
shlex.py File 11448 bytes May 31 2024 13:51:46.
shutil.py File 40048 bytes May 31 2024 13:51:44.
signal.py File 2123 bytes May 31 2024 13:51:44.
site.py File 21509 bytes May 31 2024 13:51:43.
smtpd.py File 35373 bytes May 31 2024 13:51:40.
smtplib.py File 43635 bytes May 31 2024 13:51:40.
sndhdr.py File 6418 bytes May 31 2024 13:51:44.
socket.py File 27135 bytes May 31 2024 13:51:45.
socketserver.py File 24666 bytes May 31 2024 13:51:46.
sre_compile.py File 18410 bytes May 31 2024 13:51:40.
sre_constants.py File 6821 bytes May 31 2024 13:51:40.
sre_parse.py File 35117 bytes May 31 2024 13:51:40.
ssl.py File 42352 bytes May 31 2024 13:51:44.
stat.py File 5038 bytes May 31 2024 13:51:44.
statistics.py File 19533 bytes May 31 2024 13:51:40.
string.py File 11854 bytes May 31 2024 13:51:44.
stringprep.py File 12917 bytes May 31 2024 13:51:41.
struct.py File 257 bytes May 31 2024 13:51:40.
subprocess.py File 58912 bytes May 31 2024 13:51:40.
sunau.py File 18095 bytes May 31 2024 13:51:40.
symbol.py File 2106 bytes May 31 2024 13:51:40.
symtable.py File 7191 bytes May 31 2024 13:51:44.
sysconfig.py File 24462 bytes May 31 2024 13:51:44.
tabnanny.py File 11414 bytes May 31 2024 13:51:44.
tarfile.py File 93070 bytes May 31 2024 13:51:40.
telnetlib.py File 23016 bytes May 31 2024 13:51:40.
tempfile.py File 26636 bytes May 31 2024 13:51:40.
textwrap.py File 19558 bytes May 31 2024 13:51:40.
this.py File 1003 bytes May 31 2024 13:51:41.
threading.py File 49027 bytes May 31 2024 13:51:44.
timeit.py File 12403 bytes May 31 2024 13:51:40.
token.py File 3075 bytes May 31 2024 13:51:40.
tokenize.py File 27790 bytes May 31 2024 13:51:44.
trace.py File 31553 bytes May 31 2024 13:51:40.
traceback.py File 22175 bytes May 31 2024 13:51:44.
tracemalloc.py File 15641 bytes May 31 2024 13:51:44.
tty.py File 879 bytes May 31 2024 13:51:40.
types.py File 8799 bytes May 31 2024 13:51:40.
typing.py File 80135 bytes May 31 2024 13:51:44.
uu.py File 6766 bytes May 31 2024 13:51:40.
uuid.py File 23261 bytes May 31 2024 13:51:40.
warnings.py File 15850 bytes May 31 2024 13:51:40.
wave.py File 17682 bytes May 31 2024 13:51:40.
weakref.py File 20466 bytes May 31 2024 13:51:44.
webbrowser.py File 21828 bytes May 31 2024 13:51:44.
xdrlib.py File 5913 bytes May 31 2024 13:51:46.
zipapp.py File 7157 bytes May 31 2024 13:51:40.
zipfile.py File 73672 bytes May 31 2024 13:51:46.

Reading File: //opt/alt/python35/lib64//python3.5/formatter.py

"""Generic output formatting.

Formatter objects transform an abstract flow of formatting events into
specific output events on writer objects. Formatters manage several stack
structures to allow various properties of a writer object to be changed and
restored; writers need not be able to handle relative changes nor any sort
of ``change back'' operation. Specific writer properties which may be
controlled via formatter objects are horizontal alignment, font, and left
margin indentations. A mechanism is provided which supports providing
arbitrary, non-exclusive style settings to a writer as well. Additional
interfaces facilitate formatting events which are not reversible, such as
paragraph separation.

Writer objects encapsulate device interfaces. Abstract devices, such as
file formats, are supported as well as physical devices. The provided
implementations all work with abstract devices. The interface makes
available mechanisms for setting the properties which formatter objects
manage and inserting data into the output.
"""

import sys
import warnings
warnings.warn('the formatter module is deprecated', DeprecationWarning,
              stacklevel=2)


AS_IS = None


class NullFormatter:
    """A formatter which does nothing.

    If the writer parameter is omitted, a NullWriter instance is created.
    No methods of the writer are called by NullFormatter instances.

    Implementations should inherit from this class if implementing a writer
    interface but don't need to inherit any implementation.

    """

    def __init__(self, writer=None):
        if writer is None:
            writer = NullWriter()
        self.writer = writer
    def end_paragraph(self, blankline): pass
    def add_line_break(self): pass
    def add_hor_rule(self, *args, **kw): pass
    def add_label_data(self, format, counter, blankline=None): pass
    def add_flowing_data(self, data): pass
    def add_literal_data(self, data): pass
    def flush_softspace(self): pass
    def push_alignment(self, align): pass
    def pop_alignment(self): pass
    def push_font(self, x): pass
    def pop_font(self): pass
    def push_margin(self, margin): pass
    def pop_margin(self): pass
    def set_spacing(self, spacing): pass
    def push_style(self, *styles): pass
    def pop_style(self, n=1): pass
    def assert_line_data(self, flag=1): pass


class AbstractFormatter:
    """The standard formatter.

    This implementation has demonstrated wide applicability to many writers,
    and may be used directly in most circumstances.  It has been used to
    implement a full-featured World Wide Web browser.

    """

    #  Space handling policy:  blank spaces at the boundary between elements
    #  are handled by the outermost context.  "Literal" data is not checked
    #  to determine context, so spaces in literal data are handled directly
    #  in all circumstances.

    def __init__(self, writer):
        self.writer = writer            # Output device
        self.align = None               # Current alignment
        self.align_stack = []           # Alignment stack
        self.font_stack = []            # Font state
        self.margin_stack = []          # Margin state
        self.spacing = None             # Vertical spacing state
        self.style_stack = []           # Other state, e.g. color
        self.nospace = 1                # Should leading space be suppressed
        self.softspace = 0              # Should a space be inserted
        self.para_end = 1               # Just ended a paragraph
        self.parskip = 0                # Skipped space between paragraphs?
        self.hard_break = 1             # Have a hard break
        self.have_label = 0

    def end_paragraph(self, blankline):
        if not self.hard_break:
            self.writer.send_line_break()
            self.have_label = 0
        if self.parskip < blankline and not self.have_label:
            self.writer.send_paragraph(blankline - self.parskip)
            self.parskip = blankline
            self.have_label = 0
        self.hard_break = self.nospace = self.para_end = 1
        self.softspace = 0

    def add_line_break(self):
        if not (self.hard_break or self.para_end):
            self.writer.send_line_break()
            self.have_label = self.parskip = 0
        self.hard_break = self.nospace = 1
        self.softspace = 0

    def add_hor_rule(self, *args, **kw):
        if not self.hard_break:
            self.writer.send_line_break()
        self.writer.send_hor_rule(*args, **kw)
        self.hard_break = self.nospace = 1
        self.have_label = self.para_end = self.softspace = self.parskip = 0

    def add_label_data(self, format, counter, blankline = None):
        if self.have_label or not self.hard_break:
            self.writer.send_line_break()
        if not self.para_end:
            self.writer.send_paragraph((blankline and 1) or 0)
        if isinstance(format, str):
            self.writer.send_label_data(self.format_counter(format, counter))
        else:
            self.writer.send_label_data(format)
        self.nospace = self.have_label = self.hard_break = self.para_end = 1
        self.softspace = self.parskip = 0

    def format_counter(self, format, counter):
        label = ''
        for c in format:
            if c == '1':
                label = label + ('%d' % counter)
            elif c in 'aA':
                if counter > 0:
                    label = label + self.format_letter(c, counter)
            elif c in 'iI':
                if counter > 0:
                    label = label + self.format_roman(c, counter)
            else:
                label = label + c
        return label

    def format_letter(self, case, counter):
        label = ''
        while counter > 0:
            counter, x = divmod(counter-1, 26)
            # This makes a strong assumption that lowercase letters
            # and uppercase letters form two contiguous blocks, with
            # letters in order!
            s = chr(ord(case) + x)
            label = s + label
        return label

    def format_roman(self, case, counter):
        ones = ['i', 'x', 'c', 'm']
        fives = ['v', 'l', 'd']
        label, index = '', 0
        # This will die of IndexError when counter is too big
        while counter > 0:
            counter, x = divmod(counter, 10)
            if x == 9:
                label = ones[index] + ones[index+1] + label
            elif x == 4:
                label = ones[index] + fives[index] + label
            else:
                if x >= 5:
                    s = fives[index]
                    x = x-5
                else:
                    s = ''
                s = s + ones[index]*x
                label = s + label
            index = index + 1
        if case == 'I':
            return label.upper()
        return label

    def add_flowing_data(self, data):
        if not data: return
        prespace = data[:1].isspace()
        postspace = data[-1:].isspace()
        data = " ".join(data.split())
        if self.nospace and not data:
            return
        elif prespace or self.softspace:
            if not data:
                if not self.nospace:
                    self.softspace = 1
                    self.parskip = 0
                return
            if not self.nospace:
                data = ' ' + data
        self.hard_break = self.nospace = self.para_end = \
                          self.parskip = self.have_label = 0
        self.softspace = postspace
        self.writer.send_flowing_data(data)

    def add_literal_data(self, data):
        if not data: return
        if self.softspace:
            self.writer.send_flowing_data(" ")
        self.hard_break = data[-1:] == '\n'
        self.nospace = self.para_end = self.softspace = \
                       self.parskip = self.have_label = 0
        self.writer.send_literal_data(data)

    def flush_softspace(self):
        if self.softspace:
            self.hard_break = self.para_end = self.parskip = \
                              self.have_label = self.softspace = 0
            self.nospace = 1
            self.writer.send_flowing_data(' ')

    def push_alignment(self, align):
        if align and align != self.align:
            self.writer.new_alignment(align)
            self.align = align
            self.align_stack.append(align)
        else:
            self.align_stack.append(self.align)

    def pop_alignment(self):
        if self.align_stack:
            del self.align_stack[-1]
        if self.align_stack:
            self.align = align = self.align_stack[-1]
            self.writer.new_alignment(align)
        else:
            self.align = None
            self.writer.new_alignment(None)

    def push_font(self, font):
        size, i, b, tt = font
        if self.softspace:
            self.hard_break = self.para_end = self.softspace = 0
            self.nospace = 1
            self.writer.send_flowing_data(' ')
        if self.font_stack:
            csize, ci, cb, ctt = self.font_stack[-1]
            if size is AS_IS: size = csize
            if i is AS_IS: i = ci
            if b is AS_IS: b = cb
            if tt is AS_IS: tt = ctt
        font = (size, i, b, tt)
        self.font_stack.append(font)
        self.writer.new_font(font)

    def pop_font(self):
        if self.font_stack:
            del self.font_stack[-1]
        if self.font_stack:
            font = self.font_stack[-1]
        else:
            font = None
        self.writer.new_font(font)

    def push_margin(self, margin):
        self.margin_stack.append(margin)
        fstack = [m for m in self.margin_stack if m]
        if not margin and fstack:
            margin = fstack[-1]
        self.writer.new_margin(margin, len(fstack))

    def pop_margin(self):
        if self.margin_stack:
            del self.margin_stack[-1]
        fstack = [m for m in self.margin_stack if m]
        if fstack:
            margin = fstack[-1]
        else:
            margin = None
        self.writer.new_margin(margin, len(fstack))

    def set_spacing(self, spacing):
        self.spacing = spacing
        self.writer.new_spacing(spacing)

    def push_style(self, *styles):
        if self.softspace:
            self.hard_break = self.para_end = self.softspace = 0
            self.nospace = 1
            self.writer.send_flowing_data(' ')
        for style in styles:
            self.style_stack.append(style)
        self.writer.new_styles(tuple(self.style_stack))

    def pop_style(self, n=1):
        del self.style_stack[-n:]
        self.writer.new_styles(tuple(self.style_stack))

    def assert_line_data(self, flag=1):
        self.nospace = self.hard_break = not flag
        self.para_end = self.parskip = self.have_label = 0


class NullWriter:
    """Minimal writer interface to use in testing & inheritance.

    A writer which only provides the interface definition; no actions are
    taken on any methods.  This should be the base class for all writers
    which do not need to inherit any implementation methods.

    """
    def __init__(self): pass
    def flush(self): pass
    def new_alignment(self, align): pass
    def new_font(self, font): pass
    def new_margin(self, margin, level): pass
    def new_spacing(self, spacing): pass
    def new_styles(self, styles): pass
    def send_paragraph(self, blankline): pass
    def send_line_break(self): pass
    def send_hor_rule(self, *args, **kw): pass
    def send_label_data(self, data): pass
    def send_flowing_data(self, data): pass
    def send_literal_data(self, data): pass


class AbstractWriter(NullWriter):
    """A writer which can be used in debugging formatters, but not much else.

    Each method simply announces itself by printing its name and
    arguments on standard output.

    """

    def new_alignment(self, align):
        print("new_alignment(%r)" % (align,))

    def new_font(self, font):
        print("new_font(%r)" % (font,))

    def new_margin(self, margin, level):
        print("new_margin(%r, %d)" % (margin, level))

    def new_spacing(self, spacing):
        print("new_spacing(%r)" % (spacing,))

    def new_styles(self, styles):
        print("new_styles(%r)" % (styles,))

    def send_paragraph(self, blankline):
        print("send_paragraph(%r)" % (blankline,))

    def send_line_break(self):
        print("send_line_break()")

    def send_hor_rule(self, *args, **kw):
        print("send_hor_rule()")

    def send_label_data(self, data):
        print("send_label_data(%r)" % (data,))

    def send_flowing_data(self, data):
        print("send_flowing_data(%r)" % (data,))

    def send_literal_data(self, data):
        print("send_literal_data(%r)" % (data,))


class DumbWriter(NullWriter):
    """Simple writer class which writes output on the file object passed in
    as the file parameter or, if file is omitted, on standard output.  The
    output is simply word-wrapped to the number of columns specified by
    the maxcol parameter.  This class is suitable for reflowing a sequence
    of paragraphs.

    """

    def __init__(self, file=None, maxcol=72):
        self.file = file or sys.stdout
        self.maxcol = maxcol
        NullWriter.__init__(self)
        self.reset()

    def reset(self):
        self.col = 0
        self.atbreak = 0

    def send_paragraph(self, blankline):
        self.file.write('\n'*blankline)
        self.col = 0
        self.atbreak = 0

    def send_line_break(self):
        self.file.write('\n')
        self.col = 0
        self.atbreak = 0

    def send_hor_rule(self, *args, **kw):
        self.file.write('\n')
        self.file.write('-'*self.maxcol)
        self.file.write('\n')
        self.col = 0
        self.atbreak = 0

    def send_literal_data(self, data):
        self.file.write(data)
        i = data.rfind('\n')
        if i >= 0:
            self.col = 0
            data = data[i+1:]
        data = data.expandtabs()
        self.col = self.col + len(data)
        self.atbreak = 0

    def send_flowing_data(self, data):
        if not data: return
        atbreak = self.atbreak or data[0].isspace()
        col = self.col
        maxcol = self.maxcol
        write = self.file.write
        for word in data.split():
            if atbreak:
                if col + len(word) >= maxcol:
                    write('\n')
                    col = 0
                else:
                    write(' ')
                    col = col + 1
            write(word)
            col = col + len(word)
            atbreak = 1
        self.col = col
        self.atbreak = data[-1].isspace()


def test(file = None):
    w = DumbWriter()
    f = AbstractFormatter(w)
    if file is not None:
        fp = open(file)
    elif sys.argv[1:]:
        fp = open(sys.argv[1])
    else:
        fp = sys.stdin
    try:
        for line in fp:
            if line == '\n':
                f.end_paragraph(1)
            else:
                f.add_flowing_data(line)
    finally:
        if fp is not sys.stdin:
            fp.close()
    f.end_paragraph(0)


if __name__ == '__main__':
    test()

SILENT KILLER Tool