-
-
Notifications
You must be signed in to change notification settings - Fork 991
/
nodemanip.py
118 lines (97 loc) · 3.55 KB
/
nodemanip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import re
import pywmlx.postring as pos
from pywmlx.wmlerr import wmlerr
from pywmlx.wmlerr import wmlwarn
fileref = None
fileno = None
nodes = None
onDefineMacro = False
def _closenode_update_dict(podict):
if nodes[-1].sentences is not None:
for i in nodes[-1].sentences:
posentence = podict.get(i.sentence)
if posentence is None:
podict[i.sentence] = (
nodes[-1].nodesentence_to_posentence(i) )
else:
posentence.update_with_commented_string(
nodes[-1].nodesentence_to_posentence(i) )
def newfile(file_ref, file_no):
global fileref
global fileno
global nodes
global onDefineMacro
onDefineMacro = False
fileref = file_ref
fileno = file_no
if nodes is not None:
del nodes[:]
nodes = None
def closefile(mydict, lineno):
if nodes is not None:
if len(nodes) > 1:
err_message = ("End of WML file reached, but some tags were " +
"not properly closed.\n"
"(nearest unclosed tag is: " +
nodes[-1].tagname + ")" )
finfo = fileref + ":" + str(lineno)
wmlerr(finfo, err_message)
else:
_closenode_update_dict(mydict)
def newnode(tagname):
global fileref
global fileno
global nodes
if nodes is None:
nodes = [pos.WmlNode(fileref, fileno, "", autowml=False)]
if tagname == "[lua]":
nodes.append( pos.WmlNode(fileref, fileno,
tagname, autowml=False) )
else:
nodes.append( pos.WmlNode(fileref, fileno,
tagname, autowml=True) )
def closenode(closetag, mydict, lineno):
global fileref
global fileno
global nodes
if nodes is None:
err_message = ("unexpected closing tag '" +
closetag + "' outside any scope.")
finfo = fileref + ":" + str(lineno)
wmlerr(finfo, err_message)
else:
# node to close is the LAST element in self.nodes list
mytag = nodes[-1].tagname
mynode = nodes[-1]
expected_closetag = re.sub(r'\[', r'[/', mytag)
finfo = fileref + ":" + str(lineno)
if mynode.tagname == "":
err_message = ("unexpected closing tag '" +
closetag + "' outside any scope.")
wmlerr(finfo, err_message)
else:
if closetag != expected_closetag:
err_message = ("expected closing tag '" +
expected_closetag + "' but '" +
closetag + "' found.")
wmlerr(finfo, err_message)
_closenode_update_dict(mydict)
nodes.pop()
def addNodeSentence(sentence, *, ismultiline, lineno, lineno_sub,
override, addition, plural=None):
global nodes
if nodes is None:
nodes = [pos.WmlNode(fileref=fileref, fileno=fileno,
tagname="", autowml=False)]
nodes[-1].add_sentence(sentence, ismultiline=ismultiline,
lineno=lineno, lineno_sub=lineno_sub,
override=override, addition=addition,
plural=plural)
def addWmlInfo(info):
global nodes
if nodes is None:
nodes = [pos.WmlNode(fileref=fileref, fileno=fileno,
tagname="", autowml=False)]
if nodes[-1].wmlinfos is None:
nodes[-1].wmlinfos = []
nodes[-1].wmlinfos.append(info)