mirror of
https://github.com/ksherlock/65816.tmbundle.git
synced 2024-11-22 11:34:35 +00:00
86 lines
1.3 KiB
Python
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)
|