118 lines
3.6 KiB
Python
118 lines
3.6 KiB
Python
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)
|