Macroscope refactoring step.
This commit is contained in:
parent
531d865801
commit
b8165f2f9e
1 changed files with 21 additions and 20 deletions
|
@ -29,6 +29,11 @@ class reference:
|
|||
def __init__(self, filename, line=None):
|
||||
self.filename = filename
|
||||
self.line = line
|
||||
self.references = {}
|
||||
def append(self, fn, n):
|
||||
if fn not in self.references:
|
||||
self.references[fn] = []
|
||||
self.references[fn].append(n+1)
|
||||
def __str__(self):
|
||||
if self.line:
|
||||
return self.filename + ":" + `self.line`
|
||||
|
@ -38,6 +43,17 @@ class reference:
|
|||
class CrossRef:
|
||||
macro_reference = re.compile(r"\{([A-Z_][A-Z0-9_:]*[A-Za-z0-9_])\b")
|
||||
file_reference = re.compile(r"[A-Za-z0-9{}][A-Za-z0-9_/+{}-]*\.(" + "|".join(resource_extensions) + ")")
|
||||
def imagesearch(self, name):
|
||||
# Here is where we implement the funky rules
|
||||
# for image resolution. If we can't identify
|
||||
# a reference to the image name under an image
|
||||
# directory, look for it under an image/units
|
||||
# or image/terrain directory.
|
||||
for super in ("units", "terrain", "portraits", "items"):
|
||||
trial = os.path.join(super, name)
|
||||
if trial in self.fileref:
|
||||
return trial
|
||||
return None
|
||||
def __init__(self, filelist):
|
||||
# First, collect macro definitions from the specified filelist."
|
||||
self.xref = {}
|
||||
|
@ -61,7 +77,7 @@ class CrossRef:
|
|||
if foundit > -1:
|
||||
name = filename[foundit:]
|
||||
name = name[len("images")+1:]
|
||||
self.fileref[name] = (reference(filename), {})
|
||||
self.fileref[name] = reference(filename)
|
||||
elif iswml(filename):
|
||||
dfp = open(filename)
|
||||
for (n, line) in enumerate(dfp):
|
||||
|
@ -72,7 +88,7 @@ class CrossRef:
|
|||
if name in self.xref:
|
||||
print >>sys.stderr, "*** Warning: duplicate definition of %s from %s, at %s" \
|
||||
% (name, self.xref[name][0], here)
|
||||
self.xref[name] = (here, {})
|
||||
self.xref[name] = here
|
||||
dfp.close()
|
||||
# Next, decorate definitions with all references from the filelist.
|
||||
self.unresolved = []
|
||||
|
@ -96,10 +112,7 @@ class CrossRef:
|
|||
if name in formals:
|
||||
continue
|
||||
elif name in self.xref:
|
||||
namedict = self.xref[name][1]
|
||||
if fn not in namedict:
|
||||
namedict[fn] = []
|
||||
namedict[fn].append(n+1)
|
||||
self.xref[name].append(fn, n+1)
|
||||
else:
|
||||
self.unresolved.append((name, reference(fn,n+1)))
|
||||
# Find references to resource files
|
||||
|
@ -109,21 +122,9 @@ class CrossRef:
|
|||
if name in self.fileref:
|
||||
key = name
|
||||
else:
|
||||
# Here is where we implement the funky rules
|
||||
# for image resolution. If we can't identify
|
||||
# a reference to the image name under an image
|
||||
# directory, look for it under an image/units
|
||||
# or image/terrain directory.
|
||||
for super in ("units", "terrain", "portraits", "items"):
|
||||
trial = os.path.join(super, name)
|
||||
if trial in self.fileref:
|
||||
key = trial
|
||||
break
|
||||
key = self.imagesearch(name)
|
||||
if key:
|
||||
namedict = self.fileref[key][1]
|
||||
if fn not in namedict:
|
||||
namedict[fn] = []
|
||||
namedict[fn].append(n+1)
|
||||
self.fileref[key].append(fn, n+1)
|
||||
else:
|
||||
self.missing.append((name, reference(fn,n+1)))
|
||||
rfp.close()
|
||||
|
|
Loading…
Add table
Reference in a new issue