Improve wmlparser2 compatibility with the C++ parser
After a line ending in a '+', the C++ parser ignores any number of newlines, wmlparser2 only ignored a single one. This case did not appear in mainline.
This commit is contained in:
parent
a006ef6540
commit
0c2d8564ef
1 changed files with 11 additions and 3 deletions
|
@ -204,6 +204,7 @@ class Parser:
|
|||
self.no_preprocess = no_preprocess
|
||||
self.preprocessed = None
|
||||
self.verbose = False
|
||||
self.skip_newlines = False
|
||||
|
||||
self.last_wml_line = "?"
|
||||
self.parser_line = 0
|
||||
|
@ -313,6 +314,9 @@ class Parser:
|
|||
self.temp_key_nodes[self.commas].value.append(
|
||||
self.temp_string_node)
|
||||
|
||||
if line[quote + 1:] == "\n":
|
||||
self.skip_newlines = False
|
||||
|
||||
self.in_string = False
|
||||
self.parse_line_without_commands(line[quote + 1:])
|
||||
else:
|
||||
|
@ -354,7 +358,11 @@ class Parser:
|
|||
segment = segment[1:].lstrip(" ")
|
||||
if not segment: continue
|
||||
|
||||
self.handle_value(segment, i == 0)
|
||||
if i > 0 and segment == "\n":
|
||||
self.skip_newlines = True
|
||||
elif segment != "\n":
|
||||
self.skip_newlines = False
|
||||
self.handle_value(segment)
|
||||
|
||||
def handle_tag(self, line):
|
||||
end = line.find("]")
|
||||
|
@ -389,7 +397,7 @@ class Parser:
|
|||
if remainder:
|
||||
self.parse_outside_strings(remainder)
|
||||
|
||||
def handle_value(self, segment, is_first):
|
||||
def handle_value(self, segment):
|
||||
|
||||
def add_text(segment):
|
||||
n = len(self.temp_key_nodes)
|
||||
|
@ -411,7 +419,7 @@ class Parser:
|
|||
if segment:
|
||||
add_text(segment)
|
||||
self.temp_key_nodes = []
|
||||
elif is_first:
|
||||
elif not self.skip_newlines:
|
||||
self.temp_key_nodes = []
|
||||
else:
|
||||
add_text(segment)
|
||||
|
|
Loading…
Add table
Reference in a new issue