Large diffs are not rendered by default.

Binary file not shown.
@@ -63,7 +63,8 @@ def assemble_file(self, real_file):
@param real_file: Actual output stream.
@type real_file: C{io.IOBase}
"""
real_file.write(self.file.getvalue())
#real_file.write(self.file.getvalue())
real_file.write(''.join(self.file))

def discard(self):
"""
@@ -38,7 +38,7 @@ def __init__(self, filename, start_sprite_num):
self.sprite_num = start_sprite_num

def open(self):
self.file = io.StringIO()
self.file = []

def open_file(self):
handle = codecs.open(self.filename, 'w', encoding='utf-8')
@@ -52,41 +52,41 @@ def open_file(self):

def print_byte(self, value):
value = self.prepare_byte(value)
self.file.write("\\b" + str(value) + " ")
self.file.append("\\b" + str(value) + " ")

def print_bytex(self, value, pretty_print = None):
value = self.prepare_byte(value)
if pretty_print is not None:
self.file.write(pretty_print + " ")
self.file.append(pretty_print + " ")
return
self.file.write("{:02X} ".format(value))
self.file.append("{:02X} ".format(value))

def print_word(self, value):
value = self.prepare_word(value)
self.file.write("\\w{:d} ".format(value))
self.file.append("\\w{:d} ".format(value))

def print_wordx(self, value):
value = self.prepare_word(value)
self.file.write("\\wx{:04X} ".format(value))
self.file.append("\\wx{:04X} ".format(value))

def print_dword(self, value):
value = self.prepare_dword(value)
self.file.write("\\d{:d} ".format(value))
self.file.append("\\d{:d} ".format(value))

def print_dwordx(self, value):
value = self.prepare_dword(value)
self.file.write("\\dx{:08X} ".format(value))
self.file.append("\\dx{:08X} ".format(value))

def print_string(self, value, final_zero = True, force_ascii = False):
assert self.in_sprite
self.file.write('"')
self.file.append('"')
if not grfstrings.is_ascii_string(value):
if force_ascii:
raise generic.ScriptError("Expected ascii string but got a unicode string")
self.file.write('Ăž') # b'\xC3\x9E'.decode('utf-8')
self.file.write(value.replace('"', '\\"'))
self.file.append('Ăž') # b'\xC3\x9E'.decode('utf-8')
self.file.append(value.replace('"', '\\"'))
self.byte_count += grfstrings.get_string_size(value, final_zero, force_ascii)
self.file.write('" ')
self.file.append('" ')
if final_zero:
self.print_bytex(0)
# get_string_size already includes the final 0 byte
@@ -96,21 +96,21 @@ def print_string(self, value, final_zero = True, force_ascii = False):

def print_decimal(self, value):
assert self.in_sprite
self.file.write(str(value) + " ")
#self.file.append(str(value) + " ")

def newline(self, msg = "", prefix = "\t"):
if msg != "": msg = prefix + "// " + msg
self.file.write(msg + "\n")
self.file.append(msg + "\n")

def comment(self, msg):
self.file.write("// " + msg + "\n")
self.file.append("// " + msg + "\n")

def start_sprite(self, size, is_real_sprite = False):
output_base.SpriteOutputBase.start_sprite(self, size)
self.print_decimal(self.sprite_num)
self.sprite_num += 1
if not is_real_sprite:
self.file.write("* ")
self.file.append("* ")
self.print_decimal(size)

def print_sprite(self, sprite_list):
@@ -120,28 +120,28 @@ def print_sprite(self, sprite_list):
"""
self.start_sprite(0, True)
for i, sprite_info in enumerate(sprite_list):
self.file.write(sprite_info.file.value + " ")
self.file.write(bit_depths[sprite_info.bit_depth] + " ")
self.file.append(sprite_info.file.value + " ")
self.file.append(bit_depths[sprite_info.bit_depth] + " ")
self.print_decimal(sprite_info.xpos.value)
self.print_decimal(sprite_info.ypos.value)
self.print_decimal(sprite_info.xsize.value)
self.print_decimal(sprite_info.ysize.value)
self.print_decimal(sprite_info.xrel.value)
self.print_decimal(sprite_info.yrel.value)
self.file.write(zoom_levels[sprite_info.zoom_level] + " ")
self.file.append(zoom_levels[sprite_info.zoom_level] + " ")
if (sprite_info.flags.value & real_sprite.FLAG_NOCROP) != 0:
self.file.write("nocrop ")
self.file.append("nocrop ")
if sprite_info.mask_file is not None:
self.newline()
self.file.write("|\t")
self.file.write(sprite_info.mask_file.value)
self.file.write(" mask ")
self.file.append("|\t")
self.file.append(sprite_info.mask_file.value)
self.file.append(" mask ")
mask_x, mask_y = sprite_info.mask_pos if sprite_info.mask_pos is not None else (sprite_info.xpos, sprite_info.ypos)
self.print_decimal(mask_x.value)
self.print_decimal(mask_y.value)
if i + 1 < len(sprite_list):
self.newline()
self.file.write("|\t")
self.file.append("|\t")
self.end_sprite()

def print_empty_realsprite(self):
@@ -151,5 +151,5 @@ def print_empty_realsprite(self):

def print_named_filedata(self, filename):
self.start_sprite(0, True)
self.file.write("** " + filename)
self.file.append("** " + filename)
self.end_sprite()
19 open
@@ -0,0 +1,19 @@
diff --git a/nml/parser.py b/nml/parser.py
index 8d28382..7193262 100644
--- a/nml/parser.py
+++ b/nml/parser.py
@@ -441,8 +441,12 @@ class NMLParser(object):
else: t[0] = t[1] + [switch.RandomChoice(t[2], t[4])]

def p_produce(self, t):
- 'produce : PRODUCE LPAREN expression_list RPAREN SEMICOLON'
- t[0] = produce.Produce(t[3], t.lineno(1))
+ '''produce : PRODUCE LPAREN ID COMMA expression COMMA expression COMMA expression COMMA expression COMMA expression RPAREN SEMICOLON
+ | PRODUCE LPAREN ID COMMA expression COMMA expression COMMA expression COMMA expression COMMA expression COMMA expression RPAREN SEMICOLON'''
+ if len(t) == 16:
+ t[0] = produce.Produce([t[3], t[5], t[7], t[9], t[11], t[13]], t.lineno(1))
+ else:
+ t[0] = produce.Produce([t[3], t[5], t[7], t[9], t[11], t[13], t[15]], t.lineno(1))

def p_produce_cargo_list(self, t):
'''produce_cargo_list : LBRACKET RBRACKET