moving files
This commit is contained in:
81 files changed
+126
No files matched your search
@@ -0,0 +1,68 @@
|
||||
ttcagttgtgaatgaatggacgtgccaaatagacgtgccgccgccgctcgattcgcactt
|
||||
tgctttcggttttgccgtcgtttcacgcgtttagttccgttcggttcattcccagttctt
|
||||
aaataccggacgtaaaaatacactctaacggtcccgcgaagaaaaagataaagacatctc
|
||||
gtagaaatattaaaataaattcctaaagtcgttggtttctcgttcactttcgctgcctgc
|
||||
tcaggacgagggccacaccaagaggcaagagaaacaaaaagagggaacataggaacagga
|
||||
accagataatagtgacataagcgaccctttcgcaaatattttggcgcaaaatgagcgggc
|
||||
gccaagtgccgcgtggtggagccgcctgaaaatgacatggaaaattcgccgaaaatcgcg
|
||||
cgttttggcagcatcaatcccaaagcacaaaattaatttctatcataatttctgggtgca
|
||||
acacggacccataattgaatcgaatatagggcttatctgatagcccggcagcaacattga
|
||||
actttccggctgcaaaggagacgacaccgagatcgccaattttcgttgggctcgttctct
|
||||
gggctccggcgataagaaatccatgctgataaggacaggaggacggtctgcggcaaattg
|
||||
aattcgattctgacctgtatgaaagccagcggagatacggatacctctgggtttatgggt
|
||||
agaaaacgcagagcgtcgcgccaacatcgaaattatttgcgtttgcatcttctcgtcctt
|
||||
tcgtttatcgttctgattgccatcgtggtggcgcggtttctattaattttgcttctgtat
|
||||
cgtttgcaaaatctcaaaagattcaaaaagttcgtcatcagcagccgcaacacaaaaacc
|
||||
aacgagtgtaaagccgagcatacaaatatcaataaaaacataaacatttacccaatctca
|
||||
atctcaaaacattcgcatcgtttccacacaaatatgcttagttcgcccaaattgtgattg
|
||||
tatatatatatttaacggcattaaatacaaaagattaagccctaaattaagtgtaaatct
|
||||
tacaaaacgtctacgtttttaaacaagaaattgtgatattatatattaatcgggaaattc
|
||||
gaagtatgagaacaaaacggtgtatatatgtaagtgggcgatgaacatcaatgaatattt
|
||||
tagctgagcaaagtacacacgaatgaatataaatatacatgaaaatatattttgggcacc
|
||||
gacttttacaccacaattatatatcgatagaaaagacacgaaaacaatcacagaaaacta
|
||||
agagtttcaaaatcaaaattgaggaataccaactagaggataaggctacttaaggatcaa
|
||||
aaaacaccaaggagacgagattttctaccaaatcgagagacgaggggcaggttaatttcg
|
||||
tcatttttggccaagacagcaaatagaggaacagcaaagcgaaaatcattttatacctca
|
||||
cacaacaactacacactaactaagattaggctacgcaactgtacattgtacttaagtgtt
|
||||
caaagtatatttagtttactttgtatataagaaaagtagctaaaagcacgcggacaggga
|
||||
ggcaggagcaccacagtcactagccactaagcagagtcacagtcacgatcacgttcactc
|
||||
caggatcaggactcggggcgggatcagcagacgctgaggaagctgccacgatgacgatga
|
||||
gtacaaacaactgcgagagcatgacctcgtacttcaccaactcgtacatgggggcggaca
|
||||
tgcatcatgggcactacccgggcaacggggtcaccgacctggacgcccagcagatgcacc
|
||||
actacagccagaacgcgaatcaccagggcaacatgccctacccgcgctttccaccctacg
|
||||
accgcatgccctactacaacggccaggggatggaccagcagcagcagcaccaggtctact
|
||||
cccgcccggacagcccctccagccaggtgggcggggtcatgccccaggcgcagaccaacg
|
||||
gtcagttgggtgttccccagcagcaacagcagcagcagcaacagccctcgcagaaccagc
|
||||
agcaacagcaggcgcagcaggccccacagcaactgcagcagcagctgccgcaggtgacgc
|
||||
aacaggtgacacatccgcagcagcaacaacagcagcccgtcgtctacgccagctgcaagt
|
||||
tgcaagcggccgttggtggactgggtatggttcccgagggcggatcgcctccgctggtgg
|
||||
atcaaatgtccggtcaccacatgaacgcccagatgacgctgccccatcacatgggacatc
|
||||
cgcaggcgcagttgggctatacggacgttggagttcccgacgtgacagaggtccatcaga
|
||||
accatcacaacatgggcatgtaccagcagcagtcgggagttccgccggtgggtgccccac
|
||||
ctcagggcatgatgcaccagggccagggtcctccacagatgcaccagggacatcctggcc
|
||||
aacacacgcctccttcccaaaacccgaactcgcagtcctcggggatgccgtctccactgt
|
||||
atccctggatgcgaagtcagtttggtaagtgtcaaggaaagtgatcgacaattccacgaa
|
||||
acgtattaagtggaatttttcttcttcttatcgtagtgggttgaagtagttagttccccg
|
||||
tttagaattggtcgtagttcccattagaatcgtaactgtgcatacaacagctagagctgt
|
||||
attatcttaaattgtataataccataactattacagcgaacctcgtgcagcgaagcaaag
|
||||
cagtaaaaagcagtctagatgtactgctttatattgtgtttcctgcttgatattagatca
|
||||
ctaagcaagcagacgcgcaagcagttcacgcagatcacgcagacgttaaaaatttaaaaa
|
||||
tgtttttgtttgcagaaagaagtaccctcttcgcttttcaattttgtagttaaaattcga
|
||||
gcaaatatatttaaattaaaaaggctcaaacttaaagtactatgtatgtcttgtattttt
|
||||
gaaaaaattctaaagtttattataaaatgcattttaaatacattttttaacctaccttgt
|
||||
cgcttgaaatatataaaatttaagttttagatatggaatagataaacaaaatatttccct
|
||||
ctgtcttaactaatttctttaattaaatgttaagccccaaagcgactacagcttcatgtc
|
||||
aaactcttaccttaaatatttagagtttgtttgcatttgaactgagaacgttttgtcgac
|
||||
gaccttgacacgtccgggtaatttcactttattgccttggccaattgcttgacatcatcc
|
||||
gtaatccatctgcaaagacatcccgatacctgacatttgttcaaatttgcgaatttccca
|
||||
aatccgagcaaatcgatgaatgcaggcagatgaaagacgaaagaggtggcggaagaggtg
|
||||
ctccttgggttccgcttgcccagaagatcgcagcacaggaggcggtcctgccagctaatg
|
||||
caaattgacaatagctcgaaatcgtgcaagaaaaaggtttgccaaaaccctaggcgtaac
|
||||
taatgagggctggaaaatagagcacactgactgcatgtggtactgctttaggcttagagg
|
||||
atgttgcataagtggggatagggctcggccgcctttcgagcgaaaaaggtgtaaggtcta
|
||||
ggaggcgagtccttttcaaatatagaattccaatggcatgtcactttcctcggagaaagt
|
||||
gaaagtaggcctcaagtggtcggtgcctttgccttgccctccagctgacctgctccctgg
|
||||
tcattacgcagtccaaggagctctagctctccccatacccagctctcaatgttgttgtgg
|
||||
ttttttgtttgtagccggctgaattttttcgccaaagccagattgagatgtaaagcacaa
|
||||
ttgatgagcgccattagttacacgttatgtgcaatggatgccatcaatttattaatctcc
|
||||
agaacacgccgaggctccattcatagcaccacttcgtcgtcttaatcccctccctcatcc
|
||||
Executable
+90
@@ -0,0 +1,90 @@
|
||||
#!/bin/python
|
||||
""" Compression
|
||||
Usage:
|
||||
compression.py (-c|-d) -t <type> --in <input> [--out <output>]
|
||||
compression.py -h | --help
|
||||
compression.py --version
|
||||
|
||||
Options:
|
||||
-h --help Show this screen
|
||||
--version Show Version
|
||||
-c Compress
|
||||
-d Decompress
|
||||
-t Choose Compression Type (currently supported: lz, rle)
|
||||
--in Input file
|
||||
--out Output file
|
||||
"""
|
||||
|
||||
def read_file(filename:str) -> str:
|
||||
try:
|
||||
with open(filename) as file:
|
||||
return file.read()
|
||||
except e:
|
||||
print(e)
|
||||
|
||||
|
||||
def lz_compression(text:str):
|
||||
"""compress all duplicate word
|
||||
put each word into a list and make make a string of all the occurence
|
||||
|
||||
:text: string to compress
|
||||
:returns: tuple with (list of word, decoding string)
|
||||
|
||||
"""
|
||||
splitted_text = text.split()
|
||||
word_list = list()
|
||||
key = dict()
|
||||
key_value = 0
|
||||
for v in splitted_text:
|
||||
if v not in key.keys():
|
||||
key[v] = key_value
|
||||
key_value += 1
|
||||
word_list.append(key[v])
|
||||
return word_list, key
|
||||
|
||||
def save_lz(filename, word_list, key_list):
|
||||
with open(filename, 'w') as file:
|
||||
word_list = map(str, word_list)
|
||||
file.writelines(' '.join(word_list))
|
||||
file.writelines(' '.join(list(key_list.items())))
|
||||
|
||||
|
||||
def lz_decompression(text:str):
|
||||
pass
|
||||
|
||||
|
||||
def rle_compression(text:str):
|
||||
"""compress all duplicate word
|
||||
put each word into a list and make make a string of all the occurence
|
||||
|
||||
:text: string to compress
|
||||
:returns: tuple with (list of word, decoding string)
|
||||
|
||||
"""
|
||||
splitted_text = text.split()
|
||||
|
||||
|
||||
def rle_decompression(text:str):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from docopt import docopt
|
||||
argument = docopt(__doc__, version="V1")
|
||||
print(argument)
|
||||
if argument['<type>'].lower() == 'lz':
|
||||
if argument['-d']:
|
||||
result = lz_decompression(read_file(argument['<input>']))
|
||||
print(result)
|
||||
if argument['-c']:
|
||||
w_list, k_list = lz_compression(read_file(argument['<input>']))
|
||||
save_lz('test.Ltxt', w_list, k_list)
|
||||
elif argument['<type>'].lower() == 'rle':
|
||||
if argument['-d']:
|
||||
result = rle_decompression(read_file(argument['<input>']))
|
||||
print(result)
|
||||
if argument['-c']:
|
||||
result = rle_compression(read_file(argument['<input>']))
|
||||
print(result)
|
||||
else:
|
||||
raise TypeError("choose a type between lz and rle")
|
||||
@@ -0,0 +1,581 @@
|
||||
"""Pythonic command-line interface parser that will make you smile.
|
||||
|
||||
* http://docopt.org
|
||||
* Repository and issue-tracker: https://github.com/docopt/docopt
|
||||
* Licensed under terms of MIT license (see LICENSE-MIT)
|
||||
* Copyright (c) 2013 Vladimir Keleshev, vladimir@keleshev.com
|
||||
|
||||
"""
|
||||
import sys
|
||||
import re
|
||||
|
||||
|
||||
__all__ = ['docopt']
|
||||
__version__ = '0.6.2'
|
||||
|
||||
|
||||
class DocoptLanguageError(Exception):
|
||||
|
||||
"""Error in construction of usage-message by developer."""
|
||||
|
||||
|
||||
class DocoptExit(SystemExit):
|
||||
|
||||
"""Exit in case user invoked program with incorrect arguments."""
|
||||
|
||||
usage = ''
|
||||
|
||||
def __init__(self, message=''):
|
||||
SystemExit.__init__(self, (message + '\n' + self.usage).strip())
|
||||
|
||||
|
||||
class Pattern(object):
|
||||
|
||||
def __eq__(self, other):
|
||||
return repr(self) == repr(other)
|
||||
|
||||
def __hash__(self):
|
||||
return hash(repr(self))
|
||||
|
||||
def fix(self):
|
||||
self.fix_identities()
|
||||
self.fix_repeating_arguments()
|
||||
return self
|
||||
|
||||
def fix_identities(self, uniq=None):
|
||||
"""Make pattern-tree tips point to same object if they are equal."""
|
||||
if not hasattr(self, 'children'):
|
||||
return self
|
||||
uniq = list(set(self.flat())) if uniq is None else uniq
|
||||
for i, child in enumerate(self.children):
|
||||
if not hasattr(child, 'children'):
|
||||
assert child in uniq
|
||||
self.children[i] = uniq[uniq.index(child)]
|
||||
else:
|
||||
child.fix_identities(uniq)
|
||||
|
||||
def fix_repeating_arguments(self):
|
||||
"""Fix elements that should accumulate/increment values."""
|
||||
either = [list(child.children) for child in transform(self).children]
|
||||
for case in either:
|
||||
for e in [child for child in case if case.count(child) > 1]:
|
||||
if type(e) is Argument or type(e) is Option and e.argcount:
|
||||
if e.value is None:
|
||||
e.value = []
|
||||
elif type(e.value) is not list:
|
||||
e.value = e.value.split()
|
||||
if type(e) is Command or type(e) is Option and e.argcount == 0:
|
||||
e.value = 0
|
||||
return self
|
||||
|
||||
|
||||
def transform(pattern):
|
||||
"""Expand pattern into an (almost) equivalent one, but with single Either.
|
||||
|
||||
Example: ((-a | -b) (-c | -d)) => (-a -c | -a -d | -b -c | -b -d)
|
||||
Quirks: [-a] => (-a), (-a...) => (-a -a)
|
||||
|
||||
"""
|
||||
result = []
|
||||
groups = [[pattern]]
|
||||
while groups:
|
||||
children = groups.pop(0)
|
||||
parents = [Required, Optional, OptionsShortcut, Either, OneOrMore]
|
||||
if any(t in map(type, children) for t in parents):
|
||||
child = [c for c in children if type(c) in parents][0]
|
||||
children.remove(child)
|
||||
if type(child) is Either:
|
||||
for c in child.children:
|
||||
groups.append([c] + children)
|
||||
elif type(child) is OneOrMore:
|
||||
groups.append(child.children * 2 + children)
|
||||
else:
|
||||
groups.append(child.children + children)
|
||||
else:
|
||||
result.append(children)
|
||||
return Either(*[Required(*e) for e in result])
|
||||
|
||||
|
||||
class LeafPattern(Pattern):
|
||||
|
||||
"""Leaf/terminal node of a pattern tree."""
|
||||
|
||||
def __init__(self, name, value=None):
|
||||
self.name, self.value = name, value
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.value)
|
||||
|
||||
def flat(self, *types):
|
||||
return [self] if not types or type(self) in types else []
|
||||
|
||||
def match(self, left, collected=None):
|
||||
collected = [] if collected is None else collected
|
||||
pos, match = self.single_match(left)
|
||||
if match is None:
|
||||
return False, left, collected
|
||||
left_ = left[:pos] + left[pos + 1:]
|
||||
same_name = [a for a in collected if a.name == self.name]
|
||||
if type(self.value) in (int, list):
|
||||
if type(self.value) is int:
|
||||
increment = 1
|
||||
else:
|
||||
increment = ([match.value] if type(match.value) is str
|
||||
else match.value)
|
||||
if not same_name:
|
||||
match.value = increment
|
||||
return True, left_, collected + [match]
|
||||
same_name[0].value += increment
|
||||
return True, left_, collected
|
||||
return True, left_, collected + [match]
|
||||
|
||||
|
||||
class BranchPattern(Pattern):
|
||||
|
||||
"""Branch/inner node of a pattern tree."""
|
||||
|
||||
def __init__(self, *children):
|
||||
self.children = list(children)
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(%s)' % (self.__class__.__name__,
|
||||
', '.join(repr(a) for a in self.children))
|
||||
|
||||
def flat(self, *types):
|
||||
if type(self) in types:
|
||||
return [self]
|
||||
return sum([child.flat(*types) for child in self.children], [])
|
||||
|
||||
|
||||
class Argument(LeafPattern):
|
||||
|
||||
def single_match(self, left):
|
||||
for n, pattern in enumerate(left):
|
||||
if type(pattern) is Argument:
|
||||
return n, Argument(self.name, pattern.value)
|
||||
return None, None
|
||||
|
||||
@classmethod
|
||||
def parse(class_, source):
|
||||
name = re.findall('(<\S*?>)', source)[0]
|
||||
value = re.findall('\[default: (.*)\]', source, flags=re.I)
|
||||
return class_(name, value[0] if value else None)
|
||||
|
||||
|
||||
class Command(Argument):
|
||||
|
||||
def __init__(self, name, value=False):
|
||||
self.name, self.value = name, value
|
||||
|
||||
def single_match(self, left):
|
||||
for n, pattern in enumerate(left):
|
||||
if type(pattern) is Argument:
|
||||
if pattern.value == self.name:
|
||||
return n, Command(self.name, True)
|
||||
else:
|
||||
break
|
||||
return None, None
|
||||
|
||||
|
||||
class Option(LeafPattern):
|
||||
|
||||
def __init__(self, short=None, long=None, argcount=0, value=False):
|
||||
assert argcount in (0, 1)
|
||||
self.short, self.long, self.argcount = short, long, argcount
|
||||
self.value = None if value is False and argcount else value
|
||||
|
||||
@classmethod
|
||||
def parse(class_, option_description):
|
||||
short, long, argcount, value = None, None, 0, False
|
||||
options, _, description = option_description.strip().partition(' ')
|
||||
options = options.replace(',', ' ').replace('=', ' ')
|
||||
for s in options.split():
|
||||
if s.startswith('--'):
|
||||
long = s
|
||||
elif s.startswith('-'):
|
||||
short = s
|
||||
else:
|
||||
argcount = 1
|
||||
if argcount:
|
||||
matched = re.findall('\[default: (.*)\]', description, flags=re.I)
|
||||
value = matched[0] if matched else None
|
||||
return class_(short, long, argcount, value)
|
||||
|
||||
def single_match(self, left):
|
||||
for n, pattern in enumerate(left):
|
||||
if self.name == pattern.name:
|
||||
return n, pattern
|
||||
return None, None
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.long or self.short
|
||||
|
||||
def __repr__(self):
|
||||
return 'Option(%r, %r, %r, %r)' % (self.short, self.long,
|
||||
self.argcount, self.value)
|
||||
|
||||
|
||||
class Required(BranchPattern):
|
||||
|
||||
def match(self, left, collected=None):
|
||||
collected = [] if collected is None else collected
|
||||
l = left
|
||||
c = collected
|
||||
for pattern in self.children:
|
||||
matched, l, c = pattern.match(l, c)
|
||||
if not matched:
|
||||
return False, left, collected
|
||||
return True, l, c
|
||||
|
||||
|
||||
class Optional(BranchPattern):
|
||||
|
||||
def match(self, left, collected=None):
|
||||
collected = [] if collected is None else collected
|
||||
for pattern in self.children:
|
||||
m, left, collected = pattern.match(left, collected)
|
||||
return True, left, collected
|
||||
|
||||
|
||||
class OptionsShortcut(Optional):
|
||||
|
||||
"""Marker/placeholder for [options] shortcut."""
|
||||
|
||||
|
||||
class OneOrMore(BranchPattern):
|
||||
|
||||
def match(self, left, collected=None):
|
||||
assert len(self.children) == 1
|
||||
collected = [] if collected is None else collected
|
||||
l = left
|
||||
c = collected
|
||||
l_ = None
|
||||
matched = True
|
||||
times = 0
|
||||
while matched:
|
||||
# could it be that something didn't match but changed l or c?
|
||||
matched, l, c = self.children[0].match(l, c)
|
||||
times += 1 if matched else 0
|
||||
if l_ == l:
|
||||
break
|
||||
l_ = l
|
||||
if times >= 1:
|
||||
return True, l, c
|
||||
return False, left, collected
|
||||
|
||||
|
||||
class Either(BranchPattern):
|
||||
|
||||
def match(self, left, collected=None):
|
||||
collected = [] if collected is None else collected
|
||||
outcomes = []
|
||||
for pattern in self.children:
|
||||
matched, _, _ = outcome = pattern.match(left, collected)
|
||||
if matched:
|
||||
outcomes.append(outcome)
|
||||
if outcomes:
|
||||
return min(outcomes, key=lambda outcome: len(outcome[1]))
|
||||
return False, left, collected
|
||||
|
||||
|
||||
class Tokens(list):
|
||||
|
||||
def __init__(self, source, error=DocoptExit):
|
||||
self += source.split() if hasattr(source, 'split') else source
|
||||
self.error = error
|
||||
|
||||
@staticmethod
|
||||
def from_pattern(source):
|
||||
source = re.sub(r'([\[\]\(\)\|]|\.\.\.)', r' \1 ', source)
|
||||
source = [s for s in re.split('\s+|(\S*<.*?>)', source) if s]
|
||||
return Tokens(source, error=DocoptLanguageError)
|
||||
|
||||
def move(self):
|
||||
return self.pop(0) if len(self) else None
|
||||
|
||||
def current(self):
|
||||
return self[0] if len(self) else None
|
||||
|
||||
|
||||
def parse_long(tokens, options):
|
||||
"""long ::= '--' chars [ ( ' ' | '=' ) chars ] ;"""
|
||||
long, eq, value = tokens.move().partition('=')
|
||||
assert long.startswith('--')
|
||||
value = None if eq == value == '' else value
|
||||
similar = [o for o in options if o.long == long]
|
||||
if tokens.error is DocoptExit and similar == []: # if no exact match
|
||||
similar = [o for o in options if o.long and o.long.startswith(long)]
|
||||
if len(similar) > 1: # might be simply specified ambiguously 2+ times?
|
||||
raise tokens.error('%s is not a unique prefix: %s?' %
|
||||
(long, ', '.join(o.long for o in similar)))
|
||||
elif len(similar) < 1:
|
||||
argcount = 1 if eq == '=' else 0
|
||||
o = Option(None, long, argcount)
|
||||
options.append(o)
|
||||
if tokens.error is DocoptExit:
|
||||
o = Option(None, long, argcount, value if argcount else True)
|
||||
else:
|
||||
o = Option(similar[0].short, similar[0].long,
|
||||
similar[0].argcount, similar[0].value)
|
||||
if o.argcount == 0:
|
||||
if value is not None:
|
||||
raise tokens.error('%s must not have an argument' % o.long)
|
||||
else:
|
||||
if value is None:
|
||||
if tokens.current() in [None, '--']:
|
||||
raise tokens.error('%s requires argument' % o.long)
|
||||
value = tokens.move()
|
||||
if tokens.error is DocoptExit:
|
||||
o.value = value if value is not None else True
|
||||
return [o]
|
||||
|
||||
|
||||
def parse_shorts(tokens, options):
|
||||
"""shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;"""
|
||||
token = tokens.move()
|
||||
assert token.startswith('-') and not token.startswith('--')
|
||||
left = token.lstrip('-')
|
||||
parsed = []
|
||||
while left != '':
|
||||
short, left = '-' + left[0], left[1:]
|
||||
similar = [o for o in options if o.short == short]
|
||||
if len(similar) > 1:
|
||||
raise tokens.error('%s is specified ambiguously %d times' %
|
||||
(short, len(similar)))
|
||||
elif len(similar) < 1:
|
||||
o = Option(short, None, 0)
|
||||
options.append(o)
|
||||
if tokens.error is DocoptExit:
|
||||
o = Option(short, None, 0, True)
|
||||
else: # why copying is necessary here?
|
||||
o = Option(short, similar[0].long,
|
||||
similar[0].argcount, similar[0].value)
|
||||
value = None
|
||||
if o.argcount != 0:
|
||||
if left == '':
|
||||
if tokens.current() in [None, '--']:
|
||||
raise tokens.error('%s requires argument' % short)
|
||||
value = tokens.move()
|
||||
else:
|
||||
value = left
|
||||
left = ''
|
||||
if tokens.error is DocoptExit:
|
||||
o.value = value if value is not None else True
|
||||
parsed.append(o)
|
||||
return parsed
|
||||
|
||||
|
||||
def parse_pattern(source, options):
|
||||
tokens = Tokens.from_pattern(source)
|
||||
result = parse_expr(tokens, options)
|
||||
if tokens.current() is not None:
|
||||
raise tokens.error('unexpected ending: %r' % ' '.join(tokens))
|
||||
return Required(*result)
|
||||
|
||||
|
||||
def parse_expr(tokens, options):
|
||||
"""expr ::= seq ( '|' seq )* ;"""
|
||||
seq = parse_seq(tokens, options)
|
||||
if tokens.current() != '|':
|
||||
return seq
|
||||
result = [Required(*seq)] if len(seq) > 1 else seq
|
||||
while tokens.current() == '|':
|
||||
tokens.move()
|
||||
seq = parse_seq(tokens, options)
|
||||
result += [Required(*seq)] if len(seq) > 1 else seq
|
||||
return [Either(*result)] if len(result) > 1 else result
|
||||
|
||||
|
||||
def parse_seq(tokens, options):
|
||||
"""seq ::= ( atom [ '...' ] )* ;"""
|
||||
result = []
|
||||
while tokens.current() not in [None, ']', ')', '|']:
|
||||
atom = parse_atom(tokens, options)
|
||||
if tokens.current() == '...':
|
||||
atom = [OneOrMore(*atom)]
|
||||
tokens.move()
|
||||
result += atom
|
||||
return result
|
||||
|
||||
|
||||
def parse_atom(tokens, options):
|
||||
"""atom ::= '(' expr ')' | '[' expr ']' | 'options'
|
||||
| long | shorts | argument | command ;
|
||||
"""
|
||||
token = tokens.current()
|
||||
result = []
|
||||
if token in '([':
|
||||
tokens.move()
|
||||
matching, pattern = {'(': [')', Required], '[': [']', Optional]}[token]
|
||||
result = pattern(*parse_expr(tokens, options))
|
||||
if tokens.move() != matching:
|
||||
raise tokens.error("unmatched '%s'" % token)
|
||||
return [result]
|
||||
elif token == 'options':
|
||||
tokens.move()
|
||||
return [OptionsShortcut()]
|
||||
elif token.startswith('--') and token != '--':
|
||||
return parse_long(tokens, options)
|
||||
elif token.startswith('-') and token not in ('-', '--'):
|
||||
return parse_shorts(tokens, options)
|
||||
elif token.startswith('<') and token.endswith('>') or token.isupper():
|
||||
return [Argument(tokens.move())]
|
||||
else:
|
||||
return [Command(tokens.move())]
|
||||
|
||||
|
||||
def parse_argv(tokens, options, options_first=False):
|
||||
"""Parse command-line argument vector.
|
||||
|
||||
If options_first:
|
||||
argv ::= [ long | shorts ]* [ argument ]* [ '--' [ argument ]* ] ;
|
||||
else:
|
||||
argv ::= [ long | shorts | argument ]* [ '--' [ argument ]* ] ;
|
||||
|
||||
"""
|
||||
parsed = []
|
||||
while tokens.current() is not None:
|
||||
if tokens.current() == '--':
|
||||
return parsed + [Argument(None, v) for v in tokens]
|
||||
elif tokens.current().startswith('--'):
|
||||
parsed += parse_long(tokens, options)
|
||||
elif tokens.current().startswith('-') and tokens.current() != '-':
|
||||
parsed += parse_shorts(tokens, options)
|
||||
elif options_first:
|
||||
return parsed + [Argument(None, v) for v in tokens]
|
||||
else:
|
||||
parsed.append(Argument(None, tokens.move()))
|
||||
return parsed
|
||||
|
||||
|
||||
def parse_defaults(doc):
|
||||
defaults = []
|
||||
for s in parse_section('options:', doc):
|
||||
# FIXME corner case "bla: options: --foo"
|
||||
_, _, s = s.partition(':') # get rid of "options:"
|
||||
split = re.split('\n[ \t]*(-\S+?)', '\n' + s)[1:]
|
||||
split = [s1 + s2 for s1, s2 in zip(split[::2], split[1::2])]
|
||||
options = [Option.parse(s) for s in split if s.startswith('-')]
|
||||
defaults += options
|
||||
return defaults
|
||||
|
||||
|
||||
def parse_section(name, source):
|
||||
pattern = re.compile('^([^\n]*' + name + '[^\n]*\n?(?:[ \t].*?(?:\n|$))*)',
|
||||
re.IGNORECASE | re.MULTILINE)
|
||||
return [s.strip() for s in pattern.findall(source)]
|
||||
|
||||
|
||||
def formal_usage(section):
|
||||
_, _, section = section.partition(':') # drop "usage:"
|
||||
pu = section.split()
|
||||
return '( ' + ' '.join(') | (' if s == pu[0] else s for s in pu[1:]) + ' )'
|
||||
|
||||
|
||||
def extras(help, version, options, doc):
|
||||
if help and any((o.name in ('-h', '--help')) and o.value for o in options):
|
||||
print(doc.strip("\n"))
|
||||
sys.exit()
|
||||
if version and any(o.name == '--version' and o.value for o in options):
|
||||
print(version)
|
||||
sys.exit()
|
||||
|
||||
|
||||
class Dict(dict):
|
||||
def __repr__(self):
|
||||
return '{%s}' % ',\n '.join('%r: %r' % i for i in sorted(self.items()))
|
||||
|
||||
|
||||
def docopt(doc, argv=None, help=True, version=None, options_first=False):
|
||||
"""Parse `argv` based on command-line interface described in `doc`.
|
||||
|
||||
`docopt` creates your command-line interface based on its
|
||||
description that you pass as `doc`. Such description can contain
|
||||
--options, <positional-argument>, commands, which could be
|
||||
[optional], (required), (mutually | exclusive) or repeated...
|
||||
|
||||
Parameters
|
||||
----------
|
||||
doc : str
|
||||
Description of your command-line interface.
|
||||
argv : list of str, optional
|
||||
Argument vector to be parsed. sys.argv[1:] is used if not
|
||||
provided.
|
||||
help : bool (default: True)
|
||||
Set to False to disable automatic help on -h or --help
|
||||
options.
|
||||
version : any object
|
||||
If passed, the object will be printed if --version is in
|
||||
`argv`.
|
||||
options_first : bool (default: False)
|
||||
Set to True to require options precede positional arguments,
|
||||
i.e. to forbid options and positional arguments intermix.
|
||||
|
||||
Returns
|
||||
-------
|
||||
args : dict
|
||||
A dictionary, where keys are names of command-line elements
|
||||
such as e.g. "--verbose" and "<path>", and values are the
|
||||
parsed values of those elements.
|
||||
|
||||
Example
|
||||
-------
|
||||
>>> from docopt import docopt
|
||||
>>> doc = '''
|
||||
... Usage:
|
||||
... my_program tcp <host> <port> [--timeout=<seconds>]
|
||||
... my_program serial <port> [--baud=<n>] [--timeout=<seconds>]
|
||||
... my_program (-h | --help | --version)
|
||||
...
|
||||
... Options:
|
||||
... -h, --help Show this screen and exit.
|
||||
... --baud=<n> Baudrate [default: 9600]
|
||||
... '''
|
||||
>>> argv = ['tcp', '127.0.0.1', '80', '--timeout', '30']
|
||||
>>> docopt(doc, argv)
|
||||
{'--baud': '9600',
|
||||
'--help': False,
|
||||
'--timeout': '30',
|
||||
'--version': False,
|
||||
'<host>': '127.0.0.1',
|
||||
'<port>': '80',
|
||||
'serial': False,
|
||||
'tcp': True}
|
||||
|
||||
See also
|
||||
--------
|
||||
* For video introduction see http://docopt.org
|
||||
* Full documentation is available in README.rst as well as online
|
||||
at https://github.com/docopt/docopt#readme
|
||||
|
||||
"""
|
||||
argv = sys.argv[1:] if argv is None else argv
|
||||
|
||||
usage_sections = parse_section('usage:', doc)
|
||||
if len(usage_sections) == 0:
|
||||
raise DocoptLanguageError('"usage:" (case-insensitive) not found.')
|
||||
if len(usage_sections) > 1:
|
||||
raise DocoptLanguageError('More than one "usage:" (case-insensitive).')
|
||||
DocoptExit.usage = usage_sections[0]
|
||||
|
||||
options = parse_defaults(doc)
|
||||
pattern = parse_pattern(formal_usage(DocoptExit.usage), options)
|
||||
# [default] syntax for argument is disabled
|
||||
#for a in pattern.flat(Argument):
|
||||
# same_name = [d for d in arguments if d.name == a.name]
|
||||
# if same_name:
|
||||
# a.value = same_name[0].value
|
||||
argv = parse_argv(Tokens(argv), list(options), options_first)
|
||||
pattern_options = set(pattern.flat(Option))
|
||||
for options_shortcut in pattern.flat(OptionsShortcut):
|
||||
doc_options = parse_defaults(doc)
|
||||
options_shortcut.children = list(set(doc_options) - pattern_options)
|
||||
#if any_options:
|
||||
# options_shortcut.children += [Option(o.short, o.long, o.argcount)
|
||||
# for o in argv if type(o) is Option]
|
||||
extras(help, version, argv, doc)
|
||||
matched, left, collected = pattern.fix().match(argv)
|
||||
if matched and left == []: # better error message if left?
|
||||
return Dict((a.name, a.value) for a in (pattern.flat() + collected))
|
||||
raise DocoptExit()
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 2 3 4 5 0 1 35 2 3 4 5 6 7 8 9 10 11 12 13 36 15 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 37 38 39 40 41 42 43 44 45 10 11 12 46 15 1 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 60 70 57 71 72 73 64 74 75 53 76 77 78 79 80 81 82 83 70 84 85 86 87 24 88 89 90 51 91 51 92 93 51 94 95 96 97 51 98 99 100 101 102 103 20 88 104 70 105 106 107 108 102 109 110 111 53 112 70 113 114 115 4 116 117 118 119 120 121 51 52 122 123 124 125 126 127 128 129 102 130 131 51 132 133 93 102 134 135 136 88 74 137 138 93 139 140 141 51 142 20 88 143 67 144 145 146 147 148 149 150 151 152 128 153 154 155 10 11 12 156 157 158 159 20 160 20 161 162 163 164 165 166 167 168 20 88 169 93 4 170 171 172 173 174 175 93 176 51 88 177 152 178 179 180 93 181 182 183 184 185 186 4 166 187 128 188 93 189 178 190 191 192 193 185 194 137 195 20 196 197 198 199 200 201 202 93 111 203 70 49 204 205 53 206 207 125 181 208 209 210 211 20 212 93 213 214 215 216 93 217 218 139 219 220 221 181 222 181 223 51 224 225 226 227 228 229 230 231 181 178 232 233 234 64 235 236 20 237 51 238 239 53 240 20 69 241 139 53 242 102 243 149 244 181 245 126 246 247 248 249 244 250 251 139 248 252 253 254 236 230 255 178 256 257 93 258 181 259 260 20 225 261 102 262 263 67 264 53 109 234 53 265 20 266 93 267 236 268 230 53 269 270 271 272 236 70 273 274 187 178 275 126 276 277 51 278 279 67 280 51 281 53 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 48 297 298 102 299 300 301 69 302 303 128 304 305 306 307 308 309 20 310 311 20 312 313 314 315 93 316 230 317 318 319 149 320 321 226 322 323 324 325 326 20 53 327 152 64 143 328 329 330 49 181 331 332 93 258 181 333 334 335 336 337 338 149 185 339 123 226 340 341 342 271 343 344 270 185 285 345 346 4 347 15 1 348 349 93 350 307 351 102 352 51 353 354 20 355 51 53 356 51 53 357 149 358 51 288 359 360 361 362 363 20 64 364 93 20 365 366 67 100 367 368 369 93 370 20 371 372 93 185 373 287 70 374 375 20 376 377 378 379 380 381 382 69 383 236 93 384 385 236 152 181 174 20 386 93 20 387 388 389 137 390 391 51 392 20 69 393 389 144 394 395 93 258 396 397 398 399 400 93 401 70 402 403 404 389 405 187 128 406 288 169 407 408 53 409 410 2 411 412 413 414 178 415 178 416 93 178 417 4 418 332 93 419 51 420 421 236 93 422 423 93 137 424 51 425 426 64 427 428 171 51 429 128 430 20 431 432 128 433 51 88 434 435 436 93 437 438 139 439 440 198 288 441 146 442 93 220 443 444 445 53 446 447 448 449 288 450 451 51 452 236 453 454 455 456 24 69 457 236 458 459 460 181 461 70 462 187 128 463 93 464 2 465 466 88 467 67 468 4 469 93 470 51 88 471 472 48 137 473 474 270 475 287 167 476 67 477 288 478 479 480 181 481 482 483 288 481 484 485 51 285 287 357 20 486 93 258 51 285 487 357 4 488 489 20 88 149 490 491 362 126 53 492 493 494 215 495 51 496 20 497 187 53 498 51 499 500 501 322 502 285 100 287 347 51 189 503 403 504 505 506 507 508 10 11 12 156 157 509 510 51 511 93 512 513 200 514 365 515 516 388 185 285 517 518 53 519 93 285 520 521 522 523 230 70 524 525 93 526 20 527 146 528 291 529 230 530 20 531 469 532 49 533 534 328 83 93 535 380 536 230 537 61 487 51 249 123 538 539 102 540 67 541 70 542 20 543 544 545 546 67 137 547 548 549 20 137 550 51 365 515 93 185 137 551 552 67 553 554 20 555 556 557 554 558 51 559 560 561 144 562 563 69 564 565 566 567 53 568 569 67 570 521 53 571 572 53 573 215 169 574 572 20 88 575 67 576 577 578 214 20 579 580 225 88 581 582 583 220 88 584 102 585 200 234 88 586 93 587 588 589 187 88 590 51 181 591 592 234 593 185 594 20 69 595 2 596 318 597 598 181 599 600 601 93 602 152 479 149 603 604 171 20 605 606 93 607 51 178 260 608 217 609 20 610 93 418 611 612 613 67 137 614 615 258 288 616 181 617 93 288 618 67 285 619 287 620 621 368 622 623 328 624 20 625 626 24 53 113 627 628 186 288 629 630 612 631 93 632 181 633 634 612 635 149 288 636 637 178 638 20 639 362 88 640 641 93 642 20 643 644 645 646 88 647 20 627 455 3 4 648 93 128 649 20 650 20 651 652 646 653 128 654 200 649 20 328 655 656 657 658 659 15 1 660 661 93 217 662 663 288 664 665 93 666 667 53 668 185 669 288 670 671 93 672 673 674 93 675 53 676 51 677 678 88 679 455 680 681 93 682 683 684 181 685 686 178 687 688 207 178 689 20 450 690 181 691 20 692 51 693 694 93 695 70 449 20 696 697 93 698 215 699 236 125 700 691 701 185 702 703 236 704 276 705 612 126 53 617 706 146 215 707 93 708 24 709 710 181 711 288 712 20 713 714 295 715 126 53 716 717 67 718 719 53 720 721 722 93 581 139 86 320 64 723 724 67 137 725 726 727 149 53 728 53 146 729 93 730 53 146 728 362 93 137 731 187 732 149 733 729 24 734 226 735 736 737 738 20 69 149 739 362 740 93 741 67 144 119 742 185 144 743 288 744 368 745 20 88 746 344 185 747 521 119 748 67 61 88 749 70 750 236 751 752 93 753 93 347 53 754 328 755 293 287 756 187 318 757 758 139 759 149 760 102 761 362 580 187 762 149 285 487 763 704 320 181 332 764 49 577 765 20 766 226 3Line truncated
|
||||
@@ -0,0 +1,417 @@
|
||||
CHARLES BAUDELAIRE
|
||||
|
||||
|
||||
|
||||
Les Fleurs du Mal
|
||||
|
||||
AVEC UNE ÉTUDE
|
||||
|
||||
SUR LA VIE ET LES OEUVRES DE BAUDELAIRE
|
||||
|
||||
Par CAMILLE VERGNIOL
|
||||
|
||||
Illustrations de TONY GEORGE-ROUX
|
||||
Gravées par CH. CLÉMENT
|
||||
|
||||
|
||||
|
||||
|
||||
PARIS
|
||||
|
||||
LIBRAIRIE ALPHONSE LEMERRE
|
||||
|
||||
^3'53> po-^^^tge Choiseul, 2}-^^
|
||||
|
||||
|
||||
|
||||
Les Fleurs du Mal
|
||||
|
||||
|
||||
|
||||
CHARLES BAUDELAIRE
|
||||
|
||||
|
||||
|
||||
f'f
|
||||
|
||||
|
||||
|
||||
Les Fleurs du Mal
|
||||
|
||||
AVEC UNE ÉTUDE
|
||||
|
||||
SUR LA VIE ET LES ŒUVRES DE BAUDELAIRE
|
||||
|
||||
Par CAMILLE VERGNIOL
|
||||
|
||||
Illustrations de TONY GEORGE-ROUX
|
||||
Gravées par CH. CLÉMENT
|
||||
|
||||
|
||||
|
||||
|
||||
PARIS
|
||||
LIBRAIRIE ALPHONSE LEMERRE
|
||||
|
||||
23-33, PASSAGE CHOISEUL, 23-33
|
||||
|
||||
|
||||
|
||||
|
||||
fh
|
||||
|
||||
Uf-^ 689502
|
||||
|
||||
51 ia.5-,p
|
||||
|
||||
|
||||
|
||||
|
||||
LA VIE ET L'OEUVRE DE BAUDELAIRE
|
||||
|
||||
|
||||
|
||||
Charles-Pierre Baudelaire est né à Paris le
|
||||
9 avril 182 1 . Son père avait 62 ans; sa mère, 27.
|
||||
Il perdit son père en 1 827. L'an d'après, sa mère épousa
|
||||
le commandant Aupick. Celui-ci, nommé lieutenant-
|
||||
colonel, puis général en i8]o (il devait être, par la
|
||||
suite, ambassadeur à Constantinople, à Londres et à
|
||||
Madrid), alla tenir garnison à Lyon. L'enfant fut mis
|
||||
au collège de la ville, en qualité d'interne. Interne
|
||||
également au lycée Louis-le-Grand, lorsque le général,
|
||||
en bon crédit auprès du duc d'Orléans, eut été rap-
|
||||
pelé à Paris (1836). Charles souffrit ce que souffrent
|
||||
les enfants au sang vif, à l'imagination ardente et au
|
||||
cœur tendre, dont la mère se remarie et qui sont
|
||||
tenus à l'écart de la famille. Il a écrit plus tard :
|
||||
« ... Batailles avec les professeurs... Lourde mclan-
|
||||
|
||||
|
||||
|
||||
LA VIE ET L OEUVRE
|
||||
|
||||
|
||||
|
||||
colie... Sentiment de solitude, de destinée éternelle-
|
||||
ment solitaire. Cependant, goût très vif de la vie et du
|
||||
plaisir... » Élève médiocre, peu laborieux et rebelle
|
||||
à la discipline, avec des élans brefs et un enthou-
|
||||
siasme fragile, il montre du goût pour les lettres et
|
||||
fait des vers. Des camarades (mais il faut se défier de
|
||||
souvenirs notés après vingt ou trente ans, et lorsque
|
||||
l'objet en est devenu célèbre) le dépeignent comme
|
||||
ce un esprit exalté, plein parfois de mysticisme et par-
|
||||
fois d'une immoralité et d'un cynisme qui dépassaient
|
||||
toute mesure..., un excentrique, un cerveau à l'en-
|
||||
vers ». D'autres témoignages prouvent qu'il tint un
|
||||
des premiers rangs dans sa classe, — de façon à justi-
|
||||
fier le mot de son beau-père qui le présentait au
|
||||
proviseur: « Voici un cadeau que je viens vous faire.
|
||||
Voici un' élève qui vous fera honneur... »; — qu'il
|
||||
emporta des succès scolaires, et même un second
|
||||
prix de vers latins au Concours général. Il quitta le
|
||||
lycée dans le courant de 1839, et peut-être — puis-
|
||||
qu'il le dit, mais sans détails — en fut-il renvoyé,
|
||||
pour des causes que l'on devine, à cet âge. Il obtint
|
||||
à grand'peine le baccalauréat. Tout ceci ne marque
|
||||
pas une rare originalité.
|
||||
|
||||
La suite n'est guère moins banale. Baudelaire fré-
|
||||
quente, au quartier latin, selon son goût, parmi les
|
||||
obscurs cénacles littéraires. 11 connaît Leconte de
|
||||
Lisle, Gérard de Nerval, L. Ménard, etc., et déclare
|
||||
qu'il veut, lui aussi, « être auteur ». Cette belle réso-
|
||||
lution achève de le brouiller avec sa famille. Le géné-
|
||||
ral est un honnête homme et même un brave homme.
|
||||
Sa femme affirme qu' « il adorait Charles ». C'est
|
||||
beaucoup dire, sans doute ; mais il ne l'a point du tout
|
||||
|
||||
|
||||
|
||||
DE BAUDELAIRE III
|
||||
|
||||
|
||||
|
||||
négligé et rudoyé. 11 prétendait, au contraire, à s'oc-
|
||||
cuper de lui, à le pousser, à le faire « arriver à une
|
||||
haute position sociale », digne de sa naissance et de
|
||||
ses relations. Il fut donc fort déçu et irrité de cette
|
||||
résistance et il n'avait pas en vain l'habitude de l'auto-
|
||||
rité militaire. M""* Aupick aime tendrement son fils, —
|
||||
et l'aimera toujours, — avec un peu de pitié et de
|
||||
crainte. Mais elle se plie docilement à l'influence de
|
||||
son mari; elle a l'âme bourgeoise et même fonction-
|
||||
naire, l'esprit assez court, et indigent en somme. Elle
|
||||
mène, elle veut pour les siens une vie régulière. Alors,
|
||||
le conflit ordinaire. Les parents, humiliés, blessés,
|
||||
courroucés des goûts, des amitiés et des desseins du
|
||||
jeune homme et tâchant à l'en détourner, — et celui-ci
|
||||
s'obstinant et se raidissant à mesure, opposant sa
|
||||
<£ vocation » à tous les conseils de prudence, toutes
|
||||
les exhortations à la sagesse pratique. Piques et dis-
|
||||
putes qui s'enveniment. Puis, après une scène plus
|
||||
violente, et toute conciliation jugée impossible, le
|
||||
grand moyen. On forme une petite pacotille à Charles,
|
||||
— mis, d'abord, aux arrêts par son beau-père, — on
|
||||
l'embarque sur un navire en partance pour les Iles et
|
||||
l'Inde. Les voyages forment la jeunesse. Il verra du
|
||||
pays et reviendra à la raison (1841). Baudelaire se
|
||||
laissa embarquer mais n'alla pas très loin. Il montra
|
||||
une telle force d'inertie, un si morne ennui, une si
|
||||
invincible obstination à ne pas faire de commerce, et
|
||||
même à ne rien faire du tout, hormis de la « littéra-
|
||||
ture », que le capitaine marchand profita d'une
|
||||
relâche à Saint-Denis de Bourbon pour le renvoyer à
|
||||
Bordeaux (mai 1842). Cette aventure ne fut pas tout
|
||||
à fait inutile. Elle fournit quelques souvenirs, quel-
|
||||
|
||||
|
||||
|
||||
i.
|
||||
|
||||
|
||||
|
||||
LA VIE ET L OEUVRE
|
||||
|
||||
|
||||
|
||||
ques images à Baudelaire, et suscita peut-être, ou
|
||||
servit, ses goûts d'exotisme. Mais il ne fit qu'entrevoir
|
||||
le Tropique et ne vit jamais l'Inde, quoi qu'il en ait dit
|
||||
et affecté de dire plus tard. La nostalgie qu'il marquait
|
||||
de ces pays merveilleux est purement imaginaire.
|
||||
|
||||
Le général et M™' Aupick reconnurent qu'il n'y
|
||||
avait rien à faire. Charles était majeur, au reste. Il
|
||||
entra en possession de l'héritage paternel, environ
|
||||
yf.ooofr. Il se trouvait maître enfin de se livrer à ses
|
||||
goûts et il se croyait riche. Il habite quai de Béthune,
|
||||
rue Vaneau, quai d'Anjou, à l'hôtel Pimodan (qui a
|
||||
repris, aujourd'hui, son nom d'hôtel Lauzun), où le
|
||||
rencontra Gautier. Il n'eut jamais le désir ni le sens
|
||||
d'une vie stable, ni de la maison. Il changea quelque
|
||||
cinquante fois de logement, et, vers la fin, passait
|
||||
presque toute la journée au café ou dans la rue,
|
||||
et allait demander asile, pour la nuit, à un ami. Mais,
|
||||
dans l'instant, il jouit de son luxe. Les brocanteurs
|
||||
lui ont composé un mobilier disparate, somptueux et
|
||||
affligeant*, avec force « objets d'art » de rencontre,
|
||||
camelote et bric-à-brac, à des prix dignes d'un fils de
|
||||
famille et jeune poète bien rente. Il se compose lui-
|
||||
même une tête, un costume et une attitude. Il ne peut
|
||||
pas s'empêcher d'être fort gentil garçon. Le portrait
|
||||
de Deroy, commenté par le bon Gautier % montre
|
||||
une taille moyenne, bien prise et robuste, un large
|
||||
front bien modelé, « une peau ambrée, des yeux de
|
||||
velours », la bouche fine et ironique, de longs che-
|
||||
|
||||
1. Voir la Préface de Gautier aux Fleurs du Mal, et les Souvenirs
|
||||
de Théodore de Banville.
|
||||
|
||||
2. Voir aussi les Lettres ou Souvenirs de Le Vavasscur, E. Prarond,
|
||||
Hignard, etc.
|
||||
|
||||
|
||||
|
||||
DE BAUDELAIRE
|
||||
|
||||
|
||||
|
||||
veux crespelés et d'un noir chatoyant, une barbe
|
||||
légère et frisée. Dans le vêtement, il poursuit une
|
||||
élégance laborieuse et indiscrète: l'habit ample et
|
||||
flottant, le gilet à quinze boutons, la cravate aux
|
||||
nuances éclatantes et négligemment nouée sous un col
|
||||
rabattu, des escarpins ouverts comme des mules de
|
||||
petite maîtresse, un chapeau de soie à bords vastes et
|
||||
plats, en forme de cône tronqué et haut d'une coudée,
|
||||
— ce fameux chapeau auquel il demeura fidèle, —
|
||||
car l'on pense bien que le costume varia plus d'une
|
||||
fois, et l'habit, par exemple, devint un paletot-sac,
|
||||
une sorte de blouse, non moins notoire que le cha-
|
||||
peau. Il soignait particulièrement le linge, blanc,
|
||||
souple et fin, qui devait être sa suprême coquetterie.
|
||||
Il se flattait ainsi d'avoir « le déshabillé le plus habillé
|
||||
et l'habillé le plus déshabillé », et se proposait pour
|
||||
modèle « Byron, habillé par Brummel ». Aussi bien,
|
||||
c'est l'époque de son « dandysme », physique et
|
||||
moral. Il a été pauvre, il a subi une gêne fort voisine
|
||||
de la misère ; il n'a jamais été bohème. Il avait la
|
||||
bohème en horreur, — vie, tenue et style, et tout
|
||||
le débraillé. Le Dandy n'est pas seulement pour lui
|
||||
l'être supérieur, qui doit « aspirer au sublime », et,
|
||||
pour cela, « ne rien faire, car être un homme utile
|
||||
est quelque chose de hideux ». Le Dandy est tout
|
||||
l'opposé des oc autres hommes de lettres, pour la plu-
|
||||
part vils piocheurs très ignorants ». Il s'évertue donc
|
||||
à se distinguer encore des hommes de lettres, par son
|
||||
attitude et son langage. Des gestes brefs, une parole
|
||||
lente, une voix grave, qui débite paisiblement des
|
||||
mots choisis et précieux ; une politesse calculée,
|
||||
raffinée, quasi cérémonieuse, qui fuit tout éclat et
|
||||
|
||||
|
||||
|
||||
VI LA VIE ET L OEUVRE
|
||||
|
||||
tout excès. Tout cela est un peu ridicule et bien
|
||||
puéril, mais pas beaucoup plus que les moeurs du
|
||||
temps, où les artistes et les écrivains avaient grand
|
||||
soin de se séparer du commun, par n'importe quel
|
||||
moyen. Tout cela, au reste, n'empêchait pas Baude-
|
||||
laire d'avoir vingt-cinq ans. Il ne peut se contraindre
|
||||
assez, ou assez longtemps, pour refouler toujours le
|
||||
naturel. Il mène la vie qui lui plaît. II est jeune, il a de
|
||||
l'entrain, il est gai. Il aime les longues promenades
|
||||
en joyeuse compagnie; il aime les controverses esthé-
|
||||
tiques, où il écoute plus qu'il ne parle ; il aime les
|
||||
bons repas à la Tour d'Argent, ou sous les tonnelles
|
||||
des guinguettes de banlieue. Il fait des vers, sans
|
||||
autre dessein et autre joie que d'en faire, car il ne
|
||||
les publie pas, et, toujours modeste, ou discret, ou
|
||||
mystérieux, il ne les lit, « d'une voix monotone et
|
||||
impérieuse », que si on l'en prie avec instances.
|
||||
Mais on sait qu'il a une vingtaine de pièces, qu'il
|
||||
retouche et polit sans cesse. Il est heureux (1842-45-).
|
||||
Ce bonheur ne dura guère. En deux ans, Baudelaire
|
||||
avait dissipé plus de la moitié de son patrimoine. Il fût
|
||||
mort de faim plutôt que de demander aide à sa fa-
|
||||
mille. Mais le général Aupick, qui triomphait d'avoir
|
||||
trop prévu ce qui arrivait, lui infligea un conseil judi-
|
||||
ciaire (le brave, l'excellent homme quefutM'Ancelle).
|
||||
Le poète vécut dès lors du maigre revenu d'une tren-
|
||||
taine de mille francs, toujours écorné ou dépensé par
|
||||
avance, auquel s'ajoutent le produit plus maigre en-
|
||||
core de sa plume*, et, sur la fin, les sommes assez
|
||||
|
||||
I. Vers 186), faisant le calcul de ce que lui avaient rapporté ses
|
||||
œuvres, — vers et prose, — il n'arrivait pas à 15.000 fr. Il n'a
|
||||
jamais sollicité d'emploi, ni de sinécures. Mais on le voit demander
|
||||
|
||||
|
||||
|
||||
DE BAUDELAIRE VII
|
||||
|
||||
|
||||
|
||||
fortes que lui fit tenir, assez souvent, sa mère. C'est
|
||||
la gêne, et ce sera bientôt le dénûment, que n'allège,
|
||||
ni ne dissimule, la fierté qui les porte. Baudelaire se
|
||||
débat parmi les emprunts, billets, protêts, rongé par
|
||||
les usuriers. Sa correspondance est toute pleine de
|
||||
ces luttes. Mais comme ses besoins sont modiques, —
|
||||
et qu'en dépit de son dandysme et de ses artifices
|
||||
il a gardé un fonds d'ordre et de décence bourgeoise,
|
||||
|
||||
— il s'accommode de cette indigence. En vingt ans, il
|
||||
ne dépasse pas dix mille francs de dettes, avec le
|
||||
constant souci et le très sincère désir de les payer,
|
||||
sans tarder. Il a d'autres misères et d'autres tares. Il
|
||||
s'est acoquiné avec Jeanne Duval, — la Vénus noire,
|
||||
|
||||
— dénuée de tout charme et agrément apparents,
|
||||
sotte, fausse et méchante. Elle le trompe à la journée,
|
||||
elle lui tire tout l'argent qu'elle peut; il la méprise et
|
||||
la rudoie, mais il lui revient toujours, soit qu'il la
|
||||
prenne avec lui, soit qu'il paye ses mois d'hôpital. Sa
|
||||
santé s'altère. A vingt-sept ans, les tempes se dénudent
|
||||
et s'argentent; — et, quant au moral, il essaie — ou
|
||||
fait semblant — de se suicider. Pourtant, il travaille.
|
||||
Il a le goût de l'art, formé dans les ateliers de l'hôtel
|
||||
Pimodan, des connaissances techniques, un joli talent
|
||||
d'amateur, fantasque et macabre. Il publie un Salon
|
||||
en 1845', ce qui lui vaut d'entrer au Corsaire, où il
|
||||
donne des chroniques et des fantaisies, justement
|
||||
dignes d'oubli. Entre temps, il ajoute quelques pièces
|
||||
ou quelques vers à son volume, qui s'appelle, à ce
|
||||
moment, les Limbes. Il semble donc en bonne voie.
|
||||
|
||||
de petites avances à la Société des Gens de Lettres : 100 fr., — 80,
|
||||
|
||||
— deux louis, — et avec force excuses et promesses. Quelle
|
||||
pitié 1 •
|
||||
|
||||
|
||||
|
||||
VIII LAVIEETL OEUVRE
|
||||
|
||||
Mais non. La Révolution de 1848 le jette dans la poli-
|
||||
tique, et, du premier coup, il va à l'extrême, naturel-
|
||||
lement. Lui qui, l'année précédente, flétrissait le parti
|
||||
républicain comme « l'ennemi acharné des Beaux-
|
||||
Arts et des Belles-Lettres », il traverse une crise
|
||||
aiguë de démocratie, à forme socialo-humanitaire. Il
|
||||
se lie avec Proudhon, fraye avec les innombrables
|
||||
tribuns de réunions publiques. Aux journées de Fé-
|
||||
vrier, des amis le voient mêlé à la foule qui pille les
|
||||
boutiques d'armuriers, brandissant un fusil à deux
|
||||
coups, « pour tuer le général Aupick ». D'autres le
|
||||
rencontrent au Palais-Royal, où il gesticule, tonne,
|
||||
prêche la banqueroute et réclame a la mort des
|
||||
tyrans ». Ce dernier propos est possible, le premier
|
||||
certain. L'accès dure assez longtemps pour le lancer
|
||||
dans les velléités électorales et les campagnes de
|
||||
presse. En 185'!, il rédige un journal de Châteauroux,
|
||||
et voici le début de son premier article: « Lorsque
|
||||
Marat, cet homme doux, et Robespierre, cet homme
|
||||
propre, demandaient, celui-là, 300.000 têtes, celui-ci,
|
||||
la permanence de la guillotine, ils obéissaient à l'iné-
|
||||
luctable logique de leur système... » Les abonnés
|
||||
blêmissent, braves gens qui ne savaient pas ce que
|
||||
c'est que mystifier le lecteur. Baudelaire fut congédié
|
||||
sur l'heure, ravi de cette bonne plaisanterie, et guéri,
|
||||
non seulement de la politique, mais de la démocratie.
|
||||
Il sauta à l'autre bord, et ne cessa plus de proclamer
|
||||
son horreur et sa haine de la République, de la libre
|
||||
pensée, de l'humanitarisme, « toute cette sottise et
|
||||
cette canaille ». Au surplus, « il se f... du genre hu-
|
||||
main ». Il finit par se reconnaître et déclarer catho-
|
||||
lique et grand admirateur des Jésuites. Il fut catholi-
|
||||
|
||||
|
||||
|
||||
DE BAUDELAIRE IX
|
||||
|
||||
|
||||
|
||||
que de la même façon qu'il avait été démocrate.
|
||||
Mais, à la différence de la République, la religion —
|
||||
et non pas du tout la foi — devait lui fournir des
|
||||
souvenirs et des sensations, que l'on retrouve — sans
|
||||
plus — dans son œuvre.
|
||||
|
||||
De cette crise, il tomba dans une autre. — « En
|
||||
1846-47, dit-il, j'eus connaissance de quelques frag-
|
||||
ments d'Edgar Poe. J'éprouvai une commotion singu-
|
||||
lière. Je trouvai — croyez-moi, si vous voulez —
|
||||
des poèmes et des nouvelles dont j'avais eu la pensée,
|
||||
mais vague et confuse, mal ordonnée, et que Poe avait
|
||||
su combiner et mener à la perfection... » Il en conçut
|
||||
une admiration frénétique. Il se voua tout entier à la
|
||||
gloire de Poe, impatient de le révéler au public,
|
||||
comme un bonheur et un bienfait. Il en devient exact
|
||||
et ponctuel. Il travaille assidûment. C'est la seule
|
||||
période où il ait travaillé, le seul sujet qui l'ait fait
|
||||
travailler, et jusqu'à la fin. Traduction excellente,
|
||||
tant les deux hommes — Poe, avec une imagination
|
||||
bien autrement riche et puissante — sont en parfaite
|
||||
communion de goûts et de sensations. Il savait l'anglais
|
||||
dès l'enfance. Pour se rendre mieux maître du texte,
|
||||
pour s'assimiler le savoureux dialecte populaire, il
|
||||
allait l'apprendre dans les tavernes anglaises, buvant
|
||||
le gin et le whisky avec les grooms et les lads. Il est
|
||||
payé de sa ferveur, car cette traduction l'a mis en
|
||||
vue. 11 place, de divers côtés, des articles de critique
|
||||
et des Petits Poèmes en Prose. En i8f6, la Revue des
|
||||
Deux-Mondes publie dix-huit poésies. Oh ! choisies
|
||||
parmi les moins pernicieuses, avec toute sorte de
|
||||
réserves et d'atténuations qui frisent le désaveu! Mais
|
||||
cet acte de hardiesse — car ce n'est rien de moins
|
||||
|
||||
|
||||
|
||||
LA VIE ET L OEUVRE
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user