forked from akalongman/sublimetext-codeformatter
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathformatter.py
More file actions
152 lines (117 loc) · 4.96 KB
/
formatter.py
File metadata and controls
152 lines (117 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# @author Avtandil Kikabidze
# @copyright Copyright (c) 2008-2015, Avtandil Kikabidze aka LONGMAN (akalongman@gmail.com)
# @link http://longman.me
# @license The MIT License (MIT)
import os, sys, re, sublime
directory = os.path.dirname(os.path.realpath(__file__))
libs_path = os.path.join(directory, "lib")
if libs_path not in sys.path:
sys.path.append(libs_path)
try:
# Python 3
from .phpformatter import PhpFormatter
from .jsformatter import JsFormatter
from .htmlformatter import HtmlFormatter
from .cssformatter import CssFormatter
from .scssformatter import ScssFormatter
from .pyformatter import PyFormatter
from .vbscriptformatter import VbscriptFormatter
from .coldfusionformatter import ColdfusionFormatter
except (ValueError):
# Python 2
from phpformatter import PhpFormatter
from jsformatter import JsFormatter
from htmlformatter import HtmlFormatter
from cssformatter import CssFormatter
from scssformatter import ScssFormatter
from pyformatter import PyFormatter
from vbscriptformatter import VbscriptFormatter
from coldfusionformatter import ColdfusionFormatter
class Formatter:
def __init__(self, view=False, file_name=False, syntax=False, saving=False):
self.platform = sublime.platform()
self.classmap = {}
self.st_version = 2
if sublime.version() == '' or int(sublime.version()) > 3000:
self.st_version = 3
self.file_name = file_name
self.settings = sublime.load_settings('CodeFormatter.sublime-settings')
self.packages_path = sublime.packages_path()
self.syntax_file = view.settings().get('syntax')
if syntax == False:
self.syntax = self.getSyntax()
else:
self.syntax = syntax
self.saving = saving
# PHP
opts = self.settings.get('codeformatter_php_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = PhpFormatter
# Javascript
opts = self.settings.get('codeformatter_js_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = JsFormatter
# CSS
opts = self.settings.get('codeformatter_css_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = CssFormatter
# HTML
opts = self.settings.get('codeformatter_html_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = HtmlFormatter
# Python
opts = self.settings.get('codeformatter_python_options')
print(opts)
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = PyFormatter
# VBScript
opts = self.settings.get('codeformatter_vbscript_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = VbscriptFormatter
# SCSS
opts = self.settings.get('codeformatter_scss_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = ScssFormatter
# COLDFUSION
opts = self.settings.get('codeformatter_coldfusion_options')
if ("syntaxes" in opts and opts["syntaxes"]):
for _formatter in opts["syntaxes"].split(","):
self.classmap[_formatter.strip()] = ColdfusionFormatter
def format(self, text):
formatter = self.classmap[self.syntax](self)
try:
stdout, stderr = formatter.format(text)
except Exception as e:
stdout = ""
stderr = str(e)
return self.clean(stdout), self.clean(stderr)
def exists(self):
if self.syntax in self.classmap:
return True
else:
return False
def getSyntax(self):
pattern = re.compile(r"Packages/.*/(.+?).(?=tmLanguage|sublime-syntax)")
m = pattern.search(self.syntax_file)
found = ""
if (m):
for s in m.groups():
found = s
break
return found.lower()
def formatOnSaveEnabled(self):
if (not self.exists()):
return False
formatter = self.classmap[self.syntax](self)
return formatter.formatOnSaveEnabled(self.file_name)
def clean(self, string):
if hasattr(string, 'decode'):
string = string.decode('UTF-8', 'ignore')
return re.sub(r'\r\n|\r', '\n', string)