Exemple #1
0
 def testValidLuaNoErrors(self):
     lxr = lexer.Lexer(version=4)
     for line in VALID_LUA.split(b'\n'):
         lxr._process_line(line)
     tokens = lxr.tokens
     self.assertEqual(lexer.TokName(b'v1'), tokens[0])
     self.assertEqual(lexer.TokSpace(b' '), tokens[1])
     self.assertEqual(lexer.TokSymbol(b'='), tokens[2])
     self.assertEqual(lexer.TokSpace(b' '), tokens[3])
     self.assertEqual(lexer.TokKeyword(b'nil'), tokens[4])
Exemple #2
0
def main(orig_args):
    arg_parser = _get_argparser()
    args = arg_parser.parse_args(args=orig_args)

    assert args.lua.endswith('.lua')
    game_fname = args.lua[:-len('.lua')] + '.p8'

    my_game = game.Game.make_empty_game(filename=game_fname)
    my_lexer = lexer.Lexer(version=4)
    with open(args.lua, 'rb') as lua_fh:
        my_lexer.process_lines(lua_fh)

    my_textlib = lzwlib.LzwLib(start_addr=args.startaddr,
                               end_addr=args.endaddr)

    saw_star = False
    for i, token in enumerate(my_lexer._tokens):
        if token.matches(lexer.TokSymbol(b'*')):
            saw_star = True
        elif token.matches(lexer.TokString) and saw_star:
            sid = my_textlib.id_for_string(token.value.decode())
            my_lexer._tokens[i - 1] = lexer.TokSpace(b'')
            my_lexer._tokens[i] = lexer.TokString(str.encode(sid))
            saw_star = False
        else:
            saw_star = False

    textlib_lua = str.encode(my_textlib.generate_lua())
    my_lexer.process_lines([(l + b'\n') for l in textlib_lua.split(b'\n')])

    my_game.lua._lexer = my_lexer
    my_game.lua._parser.process_tokens(my_game.lua._lexer.tokens)

    text_bytes = my_textlib.as_bytes()
    my_game.write_cart_data(text_bytes, args.startaddr)

    with open(game_fname, 'wb') as outstr:
        my_game.to_p8_file(outstr, filename=game_fname)

    return 0