12 from colours
import warning, mesg
17 for line
in open(settings.partdictpath):
19 if '<DICTIONARY>' in line:
23 partdict[line.split()[1]] = line.split()[0]
30 def inlist(partA, listA):
31 if isinstance(listA, list):
35 if isinstance(part, list):
36 if inlist(partA, part):
42 def convertToList(stringA):
43 stringA = stringA.replace(
'(',
' ( ')
44 stringA = stringA.replace(
')',
' ) ')
45 stringA = stringA.replace(
']',
' ] ')
46 stringA = stringA.replace(
'[',
' [ ')
47 stringA = stringA.replace(
'}',
' } ')
48 stringA = stringA.replace(
'{',
' { ')
49 list_base = stringA.split()
50 list_base = cleanList(
'{}', list_base)
51 list_base = cleanList(
'[]', list_base)
52 list_base = cleanList(
'()', list_base)
53 while len(list_base) == 1:
54 list_base = list_base[0]
55 list_base = postProcess(list_base)
59 def postProcess(list_base):
60 if not isinstance(list_base, list):
61 warning(
'Error building descriptor, not a list')
63 while i < len(list_base):
64 if isinstance(list_base[i], list):
65 if len(list_base[i]) == 1:
67 if isinstance(list_base[i - 1], str):
68 if list_base[i][0] ==
'os' or list_base[i][0] ==
'nos':
69 list_base[i - 1] = list_base[i - 1] +
'[' \
70 + list_base[i][0] +
']'
74 list_base[i - 1] = list_base[i - 1] +
'(' \
75 + list_base[i][0] +
')'
79 list_base[i] = list_base[i][0]
80 warning(
"You have a lone particle enclosed in '()' or some such stuff: " + list_base[i])
82 list_base[i] =
'(' + list_base[i][0] +
')'
84 list_base[i] = postProcess(list_base[i])
89 def cleanList(stringA, list_base):
93 while inlist(tag1, list_base):
96 for i
in range(len(list_base)):
97 if isinstance(list_base[i], list):
98 list_base[i] = cleanList(stringA, list_base[i])
99 if tag1 == list_base[i]:
101 if tag2 == list_base[i]:
102 newlist = list_base[start_index + 1:i]
103 list_base = list_base[:start_index] + [newlist] + list_base[i + 1:]
110 def convertPart(partA):
111 if partA
in partdict:
112 return partdict[partA]
114 if partA
not in [partdict[x]
for x
in partdict]
and not partA.lower() ==
'cc' and not partA ==
'->':
120 def compareList(listA, listB):
121 while not (listA == []
and listB == []):
127 if comparePart(partA, partB):
139 def comparePart(partA, partB):
140 if isinstance(partA, list)
and isinstance(partB, list):
141 return compareList(partA, partB)
142 elif not isinstance(partA, list)
and not isinstance(partB, list):
143 if convertPart(partA) == convertPart(partB):