39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
-
+
-
+
+
-
+
+
+
+
+
|
s = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', s)
s = re.sub(r"[\\](\d+)", 'lToken[\\1]', s)
return s
def changeReferenceToken (s, dPos):
for i in range(len(dPos), 0, -1):
s = s.replace("\\"+str(i), "\\"+dPos[i])
s = s.replace("\\"+str(i), "\\"+str(dPos[i]))
return s
def genTokenRules (sTokenLine):
lToken = sTokenLine.split()
lTokenRules = None
for i, sToken in enumerate(lToken):
if sToken.startswith("{") and sToken.endswith("}") and sToken in dDEF:
lToken[i] = dDEF[sToken]
if sToken.startswith("[") and sToken.endswith("]"):
if ( (sToken.startswith("[") and sToken.endswith("]")) or (sToken.startswith("([") and sToken.endswith("])")) ):
bSelectedGroup = sToken.startswith("(") and sToken.endswith(")")
# multiple token
if not lTokenRules:
lTokenRules = [ sToken[1:-1].split("|") ]
else:
lNewTemp = []
for aRule in lTokenRules:
lElem = sToken[1:-1].split("|")
lElem = sToken[1:-1].split("|") if not bSelectedGroup else sToken[2:-2].split("|")
sElem1 = lElem.pop(0)
if bSelectedGroup:
sElem1 = "(" + sElem1 + ")"
for sElem in lElem:
if bSelectedGroup:
sElem = "(" + sElem + ")"
aNew = list(aRule)
aNew.append(sElem)
lNewTemp.append(aNew)
aRule.append(sElem1)
lTokenRules.extend(lNewTemp)
else:
# simple token
|
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
+
-
-
+
+
+
+
|
# Action
cAction = m.group(1)
sAction = sAction[m.end():].strip()
sAction = changeReferenceToken(sAction, dPos)
iStartAction = int(m.group(2)) if m.group(2) else 0
iEndAction = int(m.group(3)[1:]) if m.group(3) else iStartAction
if nGroup:
try:
iStartAction = dPos[iStartAction]
iEndAction = dPos[iEndAction]
iStartAction = dPos[iStartAction]
iEndAction = dPos[iEndAction]
except:
print("# Error. Wrong groups in: " + sIdAction)
if cAction == "-":
## error
iMsg = sAction.find(" # ")
if iMsg == -1:
sMsg = "# Error. Error message not found."
sURL = ""
|