Add inscript lua code

master
rubenwardy 2014-10-19 19:37:57 +01:00
parent b4aa4ca530
commit 463b60d051
2 changed files with 43 additions and 9 deletions

View File

@ -59,12 +59,31 @@ class MeseCodeParser:
file = open(filename, "r")
lineno = 0
is_lua = False
for line in file.readlines():
lineno += 1
orig = line
# Remove comments
if line.find("--") != -1:
line = line[:line.find("--")]
# Lua code blocks
if is_lua:
if line.strip().lower() == "!! end lua":
is_lua = False
else:
self.objects[len(self.objects) - 1].value += line
continue
if line.strip().lower() == "!! lua":
is_lua = True
self.objects.append(self.Node(None, "lua", "", line, lineno))
continue
# Skip Blank Lines
if line.strip() == "":
continue
@ -98,15 +117,15 @@ class MeseCodeParser:
node.children.append(self.createNode(node, line, filename + ":" + str(lineno)))
return self
def __iter__(self):
return self.objects.__iter__()
def printOut(self, l, objs):
for obj in objs:
print((l*" ") + obj.name + ": " + obj.value)
self.printOut(l + 1, obj.children)
def createNode(self, parent, line, lineno):
return self.Node(parent, line.split(" ")[0], line[len(line.split(" ")[0]) + 1:], line, lineno)
@ -117,11 +136,15 @@ language_syntax = {
'requires': True,
'uses': True,
'depends': True,
'lua': True,
'node': {
# Item
'name': True,
'is': True,
'drops': True,
'eaten': True,
# Node
'drops': True,
'tiles': True
}
}
@ -247,10 +270,11 @@ def interpretNode(project, item, lua):
else:
for tile in tiles.as_list():
lua.append("tiles", "\"" + tile.name + "\"")
class MeseCodeProject:
def __init__(self, filename, directory):
try:
#try:
if True:
self.parser = MeseCodeParser().parse(filename)
self.modname = None
self.requires_eat = False
@ -304,12 +328,16 @@ class MeseCodeProject:
retval += lb.build("minetest.register_node(\"" + getNameFromItem(self.modname, item) + "\", ", 1) + "\n"
elif item.name == "script":
retval += "dofile(minetest.get_modpath(\"" + self.modname + "\") .. \"/" + item.value + "\")\n\n"
elif item.name == "lua":
retval += item.value
elif item.name == "requires":
depends.write(item.value + "\n")
elif item.name == "depends":
depends.write(item.value + "\n")
elif item.name == "uses":
depends.write(item.value + "?\n")
elif item.name != "mod":
throwParseError("Unrecognised item on line " + str(item.lineno))
except SystemExit:
return
except Exception, e:
@ -331,8 +359,8 @@ class MeseCodeProject:
output = open(directory + "init.lua", "w")
output.write(libs + retval)
output.close()
except Exception, e:
throwParseError(str(e))
#except Exception, e:
# throwParseError(str(e))
if __name__ == "__main__":
if len(sys.argv) == 2:

View File

@ -11,4 +11,10 @@ node My Node
craftitem Another Node
name node2
eaten 5
eaten 5
!! Lua
print("Hello!")
!! End Lua