golden hour
/opt/alt/python37/lib64/python3.7
⬆️ Go Up
Upload
File/Folder
Size
Actions
__future__.py
4.98 KB
Del
OK
__phello__.foo.py
64 B
Del
OK
__pycache__
-
Del
OK
_bootlocale.py
1.76 KB
Del
OK
_collections_abc.py
25.8 KB
Del
OK
_compat_pickle.py
8.54 KB
Del
OK
_compression.py
5.21 KB
Del
OK
_dummy_thread.py
5.89 KB
Del
OK
_markupbase.py
14.26 KB
Del
OK
_osx_support.py
19.14 KB
Del
OK
_py_abc.py
6.04 KB
Del
OK
_pydecimal.py
223.33 KB
Del
OK
_pyio.py
89.47 KB
Del
OK
_sitebuiltins.py
3.04 KB
Del
OK
_strptime.py
24.91 KB
Del
OK
_sysconfigdata_dm_linux_x86_64-linux-gnu.py
26.36 KB
Del
OK
_sysconfigdata_m_linux_x86_64-linux-gnu.py
25 KB
Del
OK
_threading_local.py
7.04 KB
Del
OK
_weakrefset.py
5.55 KB
Del
OK
abc.py
5.45 KB
Del
OK
aifc.py
32.04 KB
Del
OK
antigravity.py
477 B
Del
OK
argparse.py
93.14 KB
Del
OK
ast.py
12.54 KB
Del
OK
asynchat.py
11.06 KB
Del
OK
asyncio
-
Del
OK
asyncore.py
19.65 KB
Del
OK
base64.py
19.92 KB
Del
OK
bdb.py
30.99 KB
Del
OK
binhex.py
13.63 KB
Del
OK
bisect.py
2.5 KB
Del
OK
bz2.py
12.12 KB
Del
OK
cProfile.py
6.11 KB
Del
OK
calendar.py
24.24 KB
Del
OK
cgi.py
34.23 KB
Del
OK
cgitb.py
11.74 KB
Del
OK
chunk.py
5.31 KB
Del
OK
cmd.py
14.51 KB
Del
OK
code.py
10.37 KB
Del
OK
codecs.py
35.76 KB
Del
OK
codeop.py
6.13 KB
Del
OK
collections
-
Del
OK
colorsys.py
3.97 KB
Del
OK
compileall.py
13.46 KB
Del
OK
concurrent
-
Del
OK
config-3.7m
-
Del
OK
configparser.py
53.01 KB
Del
OK
contextlib.py
24.18 KB
Del
OK
contextvars.py
129 B
Del
OK
copy.py
8.65 KB
Del
OK
copyreg.py
6.85 KB
Del
OK
crypt.py
3.27 KB
Del
OK
csv.py
15.8 KB
Del
OK
ctypes
-
Del
OK
curses
-
Del
OK
dataclasses.py
48.36 KB
Del
OK
datetime.py
84.52 KB
Del
OK
dbm
-
Del
OK
decimal.py
320 B
Del
OK
difflib.py
82.42 KB
Del
OK
dis.py
19.42 KB
Del
OK
distutils
-
Del
OK
doctest.py
102.11 KB
Del
OK
dummy_threading.py
2.75 KB
Del
OK
email
-
Del
OK
encodings
-
Del
OK
ensurepip
-
Del
OK
enum.py
34.22 KB
Del
OK
filecmp.py
9.6 KB
Del
OK
fileinput.py
14.28 KB
Del
OK
fnmatch.py
3.96 KB
Del
OK
formatter.py
14.79 KB
Del
OK
fractions.py
23.2 KB
Del
OK
ftplib.py
34.78 KB
Del
OK
functools.py
32.16 KB
Del
OK
genericpath.py
4.8 KB
Del
OK
getopt.py
7.31 KB
Del
OK
getpass.py
5.85 KB
Del
OK
gettext.py
21.45 KB
Del
OK
glob.py
5.51 KB
Del
OK
gzip.py
20.15 KB
Del
OK
hashlib.py
9.31 KB
Del
OK
heapq.py
22.48 KB
Del
OK
hmac.py
6.36 KB
Del
OK
html
-
Del
OK
http
-
Del
OK
idlelib
-
Del
OK
imaplib.py
52.04 KB
Del
OK
imghdr.py
3.71 KB
Del
OK
imp.py
10.29 KB
Del
OK
importlib
-
Del
OK
inspect.py
114.88 KB
Del
OK
io.py
3.43 KB
Del
OK
ipaddress.py
71.85 KB
Del
OK
json
-
Del
OK
keyword.py
2.2 KB
Del
OK
lib-dynload
-
Del
OK
lib2to3
-
Del
OK
linecache.py
5.21 KB
Del
OK
locale.py
76.36 KB
Del
OK
logging
-
Del
OK
lzma.py
12.68 KB
Del
OK
macpath.py
5.98 KB
Del
OK
mailbox.py
76.81 KB
Del
OK
mailcap.py
8.85 KB
Del
OK
mimetypes.py
20.99 KB
Del
OK
modulefinder.py
22.5 KB
Del
OK
multiprocessing
-
Del
OK
netrc.py
5.44 KB
Del
OK
nntplib.py
42.08 KB
Del
OK
ntpath.py
21.82 KB
Del
OK
nturl2path.py
2.52 KB
Del
OK
numbers.py
10 KB
Del
OK
opcode.py
5.69 KB
Del
OK
operator.py
10.61 KB
Del
OK
optparse.py
58.96 KB
Del
OK
os.py
37.01 KB
Del
OK
pathlib.py
49.15 KB
Del
OK
pdb.py
61.04 KB
Del
OK
pickle.py
56.63 KB
Del
OK
pickletools.py
89.08 KB
Del
OK
pipes.py
8.71 KB
Del
OK
pkgutil.py
20.96 KB
Del
OK
platform.py
45.89 KB
Del
OK
plistlib.py
29.99 KB
Del
OK
poplib.py
14.61 KB
Del
OK
posixpath.py
15.4 KB
Del
OK
pprint.py
20.39 KB
Del
OK
profile.py
21.97 KB
Del
OK
pstats.py
26.67 KB
Del
OK
pty.py
4.65 KB
Del
OK
py_compile.py
7.81 KB
Del
OK
pyclbr.py
14.78 KB
Del
OK
pydoc.py
103.39 KB
Del
OK
pydoc_data
-
Del
OK
queue.py
11.09 KB
Del
OK
quopri.py
7.09 KB
Del
OK
random.py
26.91 KB
Del
OK
re.py
14.95 KB
Del
OK
reprlib.py
5.14 KB
Del
OK
rlcompleter.py
6.93 KB
Del
OK
runpy.py
11.68 KB
Del
OK
sched.py
6.29 KB
Del
OK
secrets.py
1.99 KB
Del
OK
selectors.py
18.13 KB
Del
OK
shelve.py
8.33 KB
Del
OK
shlex.py
12.79 KB
Del
OK
shutil.py
40.97 KB
Del
OK
signal.py
2.07 KB
Del
OK
site-packages
-
Del
OK
site.py
21.07 KB
Del
OK
smtpd.py
33.91 KB
Del
OK
smtplib.py
43.4 KB
Del
OK
sndhdr.py
6.92 KB
Del
OK
socket.py
26.83 KB
Del
OK
socketserver.py
26.29 KB
Del
OK
sqlite3
-
Del
OK
sre_compile.py
26.24 KB
Del
OK
sre_constants.py
7.01 KB
Del
OK
sre_parse.py
38.24 KB
Del
OK
ssl.py
44.43 KB
Del
OK
stat.py
5.26 KB
Del
OK
statistics.py
20.17 KB
Del
OK
string.py
11.29 KB
Del
OK
stringprep.py
12.61 KB
Del
OK
struct.py
257 B
Del
OK
subprocess.py
70.95 KB
Del
OK
sunau.py
17.94 KB
Del
OK
symbol.py
2.09 KB
Del
OK
symtable.py
7.11 KB
Del
OK
sysconfig.py
23.87 KB
Del
OK
tabnanny.py
11.15 KB
Del
OK
tarfile.py
90.5 KB
Del
OK
telnetlib.py
22.59 KB
Del
OK
tempfile.py
26.1 KB
Del
OK
test
-
Del
OK
textwrap.py
18.95 KB
Del
OK
this.py
1003 B
Del
OK
threading.py
48.13 KB
Del
OK
timeit.py
13.18 KB
Del
OK
token.py
3.67 KB
Del
OK
tokenize.py
26.4 KB
Del
OK
trace.py
28.23 KB
Del
OK
traceback.py
22.89 KB
Del
OK
tracemalloc.py
16.68 KB
Del
OK
tty.py
879 B
Del
OK
types.py
9.67 KB
Del
OK
typing.py
55.12 KB
Del
OK
unittest
-
Del
OK
urllib
-
Del
OK
uu.py
7.11 KB
Del
OK
uuid.py
28.83 KB
Del
OK
venv
-
Del
OK
warnings.py
19.61 KB
Del
OK
wave.py
17.8 KB
Del
OK
weakref.py
21 KB
Del
OK
webbrowser.py
23.16 KB
Del
OK
wsgiref
-
Del
OK
xdrlib.py
5.77 KB
Del
OK
xml
-
Del
OK
xmlrpc
-
Del
OK
zipapp.py
7.36 KB
Del
OK
zipfile.py
79.19 KB
Del
OK
Edit: 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()
Save