#!/usr/bin/env python # -*- coding: utf8 -*- # # Filename: prettylua.py # Version: 0.1 # Status: unstable # # Copyright (c) 2015 Odd Stråbø # License: MIT - http://opensource.org/licenses/MIT # import sys write = sys.stdout.write input = "input.lua" output = "output.lua" with open(input) as fh: buf = fh.read() class Colors: DEFAULT = '\033[0m' STRING = '\033[0;33m' COMMENT = '\033[0;35m' WORDCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_." QUOTATION = "'\"" INDENT_AFTER = ['function', 'do', 'then', '{'] INDENT_BEFORE = [] UNINDENT_AFTER = ['}'] UNINDENT_BEFORE = ['end', 'elseif', 'else'] OPERATORS = ['+', '-', '*', '/', '='] INDENTATION = " " level = 0 prelevel = 0 postlevel = 0 line = '' word = '' stringchar = '' MAX = len(buf) i = 0 while i < MAX: j = i lastword = word word = '' if buf[j] == '\n': while j < MAX and buf[j] in ' \t\n': word += buf[j] j += 1 word = '\n' elif buf[j] in ' \t': while buf[j] in ' \t': word += buf[j] j += 1 word = ' ' elif buf[j] == '-' and buf[j+1] == '-': while buf[j] != '\n': word += buf[j] j += 1 elif buf[j] in QUOTATION: while True: word += buf[j] j += 1 if len(word) > 1 and buf[j-1] == word[0]: break elif buf[j] == ',': word += buf[j] j += 1 while buf[j] in ' \t': j += 1 word += ' ' elif buf[j] in OPERATORS: word += buf[j] j += 1 if buf[j] == '=': word += buf[j] j += 1 while buf[j] in ' \t': j += 1 if lastword != ' ': word = ' ' + word word += ' ' else: while buf[j] in WORDCHARS: word += buf[j] j += 1 if word: pass #print(i, j - i, word) else: word = buf[j] #print(i, 1, word) if word in INDENT_BEFORE: #print("+before '{}'".format(word)) prelevel += 1 if word in UNINDENT_BEFORE: #print("-before '{}'".format(word)) prelevel -= 1 if word in INDENT_AFTER: #print("+after '{}'".format(word)) postlevel += 1 if word in UNINDENT_AFTER: #print("-after '{}'".format(word)) postlevel -= 1 if i != j: i = j else: i += 1 line += word if word == '\n': level = level + prelevel #print(level, prelevel, postlevel, line, level + prelevel + postlevel) write((level)*INDENTATION + line) #print(level, postlevel) level = level + postlevel postlevel = 0 prelevel = 0 line = ''