diff --git a/Main.sublime-menu b/Main.sublime-menu new file mode 100644 index 0000000..86e7408 --- /dev/null +++ b/Main.sublime-menu @@ -0,0 +1,47 @@ +[ + { + "caption": "Edit", + "mnemonic": "n", + "id": "edit", + "children": + [ + { + "caption" : "Php: Format Code", + "command": "php_beautifier" + } + ] + }, + { + "caption": "Preferences", + "mnemonic": "n", + "id": "preferences", + "children": + [ + { + "caption": "Package Settings", + "mnemonic": "P", + "id": "package-settings", + "children": + [ + { + "caption": "PhpBeautifier", + "children": + [ + { + "command": "open_file", + "args": {"file": "${packages}/PhpBeautifier/PhpBeautifier.sublime-settings"}, + "caption": "Settings – Default" + }, + { + "command": "open_file", + "args": {"file": "${packages}/User/PhpBeautifier.sublime-settings"}, + "caption": "Settings – User" + }, + { "caption": "-" } + ] + } + ] + } + ] + } +] \ No newline at end of file diff --git a/PhpBeautifier.sublime-settings b/PhpBeautifier.sublime-settings new file mode 100644 index 0000000..dfa0a0d --- /dev/null +++ b/PhpBeautifier.sublime-settings @@ -0,0 +1,9 @@ +{ + "filters" : [ + "ArrayNested()", + "NewLines(before=switch:while:for:foreach:T_CLASS:return:break)", + "Pear(add-header=false)" + ], + "indent" : "-s4", + "extensions" : ["php"] +} \ No newline at end of file diff --git a/php_beautifier.py b/php_beautifier.py index 3a8f1eb..66b1c03 100644 --- a/php_beautifier.py +++ b/php_beautifier.py @@ -7,39 +7,49 @@ class PhpBeautifierCommand(sublime_plugin.TextCommand): - def run(self, edit): + def run(self, edit): + # Load settings + settings = sublime.load_settings('PhpBeautifier.sublime-settings') # Test environment if self.view.is_scratch(): return if self.view.is_dirty(): - return sublime.status_message("Please save the file.") + return self.error("Please save the file.") + # check if file exists. FILE = self.view.file_name() if not FILE or not os.path.exists(FILE): - return self.status("File does not exist.") + return self.error("File {0} does not exist.".format(FILE)) - if not FILE[-3:] == 'php': - return self.status("File does not have php extension.") + # check if extension is allowed. + fileName, fileExtension = os.path.splitext(FILE) + if fileExtension[1:] not in settings.get('extensions'): + if not self.missingFileExtension(fileExtension[1:], settings): + return # Start doing stuff cmd = "php_beautifier" - indent = "-s4" - filters = "ArrayNested() NewLines(before=switch:while:for:foreach:T_CLASS:return:break) Pear(add-header=false)" + # Load indent and filters settings + indent = settings.get('indent'); + filters = ' '.join(settings.get('filters')); + allFile = sublime.Region(0, self.view.size()) AllFileText = self.view.substr(allFile).encode('utf-8') if os.name == 'nt': + cmd_win = cmd + ".bat" startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = subprocess.SW_HIDE - p = subprocess.Popen([cmd, indent, "-l", filters, "-f", "-", "-o", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo) + p = subprocess.Popen([cmd_win, indent, "-l", filters, "-f", "-", "-o", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo) else: p = subprocess.Popen([cmd, indent, "-l", filters, "-f", "-", "-o", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate(AllFileText) if len(stderr) == 0: self.view.replace(edit, allFile, self.fixup(stdout)) + self.status("PhpBeautifier: File processed.") else: self.show_error_panel(self.fixup(stderr)) @@ -57,3 +67,19 @@ def show_error_panel(self, stderr): def fixup(self, string): return re.sub(r'\r\n|\r', '\n', string.decode('utf-8')) + + def status(self, string): + return sublime.status_message(string) + + def error(self, string): + return sublime.error_message(string) + + def missingFileExtension(self, fileExtension, settings): + if sublime.ok_cancel_dialog("Extension {0} is not a valid php extension. Would you like to add this extension to your preferences?.".format(fileExtension), "Yes, add {0} extension to my preferences".format(fileExtension)): + extensions = settings.get('extensions') + extensions.append(fileExtension) + settings.set('extensions', extensions) + settings = sublime.save_settings('PhpBeautifier.sublime-settings') + return True + return False +