mirror of
https://github.com/python/cpython
synced 2024-09-23 09:15:50 +00:00
More modifications to bring the script output in line with the real thing.
This commit is contained in:
parent
63cb99e4f0
commit
f3eaf01c23
|
@ -10,9 +10,10 @@
|
|||
BEGINDEFINITION=re.compile("^<<(?P<name>.*)>>=\s*")
|
||||
USEDEFINITION=re.compile("^(?P<pre>.*)<<(?P<name>.*)>>(?P<post>[^=].*)")
|
||||
ENDDEFINITION=re.compile("^@")
|
||||
GREMLINS=re.compile("[\xa0\xca]")
|
||||
|
||||
DEFAULT_CONFIG="""
|
||||
config = [
|
||||
filepatterns = [
|
||||
("^.*\.cp$", ":unweave-src"),
|
||||
("^.*\.h$", ":unweave-include"),
|
||||
]
|
||||
|
@ -38,6 +39,13 @@ def __init__(self, filename, config={}):
|
|||
self.gencomments = config["gencomments"]
|
||||
else:
|
||||
self.gencomments = 0
|
||||
if config.has_key("filepatterns"):
|
||||
self.filepatterns = config["filepatterns"]
|
||||
else:
|
||||
self.filepatterns = []
|
||||
self.filepattern_relist = []
|
||||
for pat, dummy in self.filepatterns:
|
||||
self.filepattern_relist.append(re.compile(pat))
|
||||
|
||||
def _readline(self):
|
||||
"""Read a line. Allow for pushback"""
|
||||
|
@ -100,9 +108,16 @@ def read(self):
|
|||
savedcomment = savedcomment + [(lineno, '//\n')] + defline
|
||||
else:
|
||||
savedcomment = defline
|
||||
savedcomment = self._extendlines(savedcomment)
|
||||
savedcomment = self._processcomment(savedcomment)
|
||||
value = savedcomment + value
|
||||
savedcomment = []
|
||||
isfilepattern = 0
|
||||
for rexp in self.filepattern_relist:
|
||||
if rexp.search(name):
|
||||
isfilepattern = 1
|
||||
break
|
||||
if 0 and not isfilepattern:
|
||||
value = self._addspace(value)
|
||||
self._define(name, value)
|
||||
else:
|
||||
if self.gencomments:
|
||||
|
@ -110,17 +125,25 @@ def read(self):
|
|||
if savedcomment or line.strip():
|
||||
savedcomment.append((lineno, '// '+line))
|
||||
|
||||
def _extendlines(self, comment):
|
||||
def _processcomment(self, comment):
|
||||
# This routine mimicks some artefact of Matthias' code.
|
||||
rv = []
|
||||
for lineno, line in comment:
|
||||
line = line[:-1]
|
||||
line = GREMLINS.subn(' ', line)[0]
|
||||
if len(line) < 75:
|
||||
line = line + (75-len(line))*' '
|
||||
line = line + '\n'
|
||||
rv.append((lineno, line))
|
||||
return rv
|
||||
|
||||
def _addspace(self, value, howmany):
|
||||
# Yet another routine to mimick yet another artefact
|
||||
rv = value[0:1]
|
||||
for lineno, line in value[1:]:
|
||||
rv.append((lineno, (' '*howmany)+line))
|
||||
return rv
|
||||
|
||||
def resolve(self):
|
||||
"""Resolve all references"""
|
||||
for name in self.items.keys():
|
||||
|
@ -141,15 +164,22 @@ def _resolve_one(self, name):
|
|||
# No rest for the wicked: we have work to do.
|
||||
self.resolving[name] = 1
|
||||
result = []
|
||||
lastlineincomplete = 0
|
||||
for lineno, line in self.items[name]:
|
||||
mo = USEDEFINITION.search(line)
|
||||
if mo:
|
||||
# We replace the complete line. Is this correct?
|
||||
macro = mo.group('name')
|
||||
replacement = self._resolve_one(macro)
|
||||
if lastlineincomplete:
|
||||
replacement = self._addspace(replacement, lastlineincomplete)
|
||||
result = result + replacement
|
||||
else:
|
||||
result.append((lineno, line))
|
||||
if line[-1] == '\n':
|
||||
lastlineincomplete = 0
|
||||
else:
|
||||
lastlineincomplete = len(line)
|
||||
self.items[name] = result
|
||||
self.resolved[name] = 1
|
||||
del self.resolving[name]
|
||||
|
@ -194,7 +224,7 @@ def process(file, config):
|
|||
pr = Processor(file, config)
|
||||
pr.read()
|
||||
pr.resolve()
|
||||
for pattern, folder in config['config']:
|
||||
for pattern, folder in config['filepatterns']:
|
||||
pr.save(folder, pattern)
|
||||
|
||||
def readconfig():
|
||||
|
|
Loading…
Reference in a new issue