65816.tmbundle/merlin-fixs.py

86 lines
1.3 KiB
Python

import sublime
import sublime_plugin
SPACE = [" ", "\t"]
QUOTES = ["'", '"']
#
# need to do something clever for ; comments to put in comment field?
#
def fixs(s):
f = 0
q = None
sp = False
comment = False
rv = ''
if not len(s): return s
if s[0] == "*": comment = True
if s[0] == ";": comment = True ; rv = "\t\t\t"
for c in s:
if comment:
if c == "\t": c = " "
rv += c
continue
if q:
rv += c
if c == q: q = None
continue
if c in QUOTES:
rv += c
q = c
sp = False
continue
if c in SPACE:
if sp: continue
f += 1
c = "\t"
sp = True
rv += c
continue
if sp:
if c == ';':
comment = True
rv += "\t" * (3-f)
elif f == 3:
comment = True
rv += "; "
sp = False
rv += c
return rv;
class MerlinFixs(sublime_plugin.TextCommand):
def is_enabled(self):
scope = self.view.scope_name(0)
lang = scope.split(' ')[0]
return lang == 'source.asm.65816.merlin' or lang == "source.linker.merlin"
def run(self, edit):
view = self.view
all = sublime.Region(0, view.size())
# disable space indentation.
view.settings().set('translate_tabs_to_spaces', False)
data = []
for r in view.lines(all):
text = view.substr(r).rstrip()
data.append(fixs(text))
data.append('')
text = '\n'.join(data)
view.replace(edit, all, text)