Paste number 307448: | experimental press generator |
Pasted by: | phf |
When: | 9 years, 1 month ago |
Share: | Tweet this! | http://paste.lisp.org/+6L88 |
Channel: | None |
Paste contents: |
comment = ''' /****************************\\
* EXPERIMENTAL BRANCH. *
* FOR LABORATORY USE ONLY. *
********************************
************
**************
****************
**** **** ****
*** *** ***
*** *** ***
*** * * **
******** ********
******* ******
*** **
* ******* **
** * * * * *
** * * ***
**** * * * * ****
**** *** * * ** ***
**** ********* ******
******* ***** *******
********* ****** **
** ****** ******
** ******* **
** ******* ***
**** ******** ************
************ ************
******** *******
****** ****
*** ***
********************************'''
from os import walk, remove
from sys import argv
from os.path import splitext, join, dirname
from tempfile import NamedTemporaryFile
from shutil import copyfileobj, move
def exact(filename): return lambda fn: filename==fn
def byext(ext): return lambda filename: splitext(filename)[1] == ext
def bybase(base): return lambda filename: splitext(filename)[0] == base
def check(filename, text):
with open(filename, 'r') as inp:
return text == inp.read(len(text))
def prepend(filename, text):
tmp = NamedTemporaryFile(dir=dirname(filename), delete=False)
tmp.write(text)
with open(filename, 'r') as inp:
copyfileobj(inp, tmp)
tmp.close()
move(tmp.name, filename)
def prepending(text, prefix=None):
if prefix:
text = prefix + ('\n{}'.format(prefix).join(text.split('\n')))
text = text + '\n'
def _(filename):
if not check(filename, text):
prepend(filename, text)
return _
def pc(prefix=None): return prepending(comment, prefix)
commenters = [
(exact('COPYING') , pc()),
(exact('README') , pc()),
(byext('.txt') , pc()),
(byext('.h') , pc('// ')),
(byext('.cpp') , pc('// ')),
(exact('.gitignore') , pc('# ')),
(bybase('makefile') , pc('# ')),
]
for dirpath, dirnames, filenames in walk(argv[1]):
for filename in filenames:
for test, handler in commenters:
if test(filename):
handler(join(dirpath, filename))
break
else:
raise Exception('missing handler for %s' % filename)
This paste has no annotations.