80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sublime_plugin
 | |
| 
 | |
| try:
 | |
| 	import os, sys
 | |
| 	# stupid python module system
 | |
| 	sys.path.append(os.path.dirname(os.path.realpath(__file__)))
 | |
| 	from .editorconfig import get_properties, EditorConfigError
 | |
| except:
 | |
| 	# Python 2
 | |
| 	from editorconfig import get_properties, EditorConfigError
 | |
| 
 | |
| 
 | |
| LINE_ENDINGS = {
 | |
| 	'lf': 'unix',
 | |
| 	'crlf': 'windows',
 | |
| 	'cr': 'cr'
 | |
| }
 | |
| 
 | |
| CHARSETS = {
 | |
| 	'latin1': 'Western (ISO 8859-1)',
 | |
| 	'utf-8': 'utf-8',
 | |
| 	'utf-8-bom': 'utf-8 with bom',
 | |
| 	'utf-16be': 'utf-16 be',
 | |
| 	'utf-16le': 'utf-16 le'
 | |
| }
 | |
| 
 | |
| class EditorConfig(sublime_plugin.EventListener):
 | |
| 	def on_load(self, view):
 | |
| 		self.init(view, False)
 | |
| 
 | |
| 	def on_pre_save(self, view):
 | |
| 		self.init(view, True)
 | |
| 
 | |
| 	def init(self, view, pre_save):
 | |
| 		path = view.file_name()
 | |
| 		if not path:
 | |
| 			return
 | |
| 		try:
 | |
| 			config = get_properties(path)
 | |
| 		except EditorConfigError:
 | |
| 			print('Error occurred while getting EditorConfig properties')
 | |
| 		else:
 | |
| 			if config:
 | |
| 				if pre_save:
 | |
| 					self.apply_charset(view, config)
 | |
| 				else:
 | |
| 					self.apply_config(view, config)
 | |
| 
 | |
| 	def apply_charset(self, view, config):
 | |
| 		charset = config.get('charset')
 | |
| 		if charset in CHARSETS:
 | |
| 			view.set_encoding(CHARSETS[charset])
 | |
| 
 | |
| 	def apply_config(self, view, config):
 | |
| 		settings = view.settings()
 | |
| 		indent_style = config.get('indent_style')
 | |
| 		indent_size = config.get('indent_size')
 | |
| 		end_of_line = config.get('end_of_line')
 | |
| 		trim_trailing_whitespace = config.get('trim_trailing_whitespace')
 | |
| 		insert_final_newline = config.get('insert_final_newline')
 | |
| 		if indent_style == 'space':
 | |
| 			settings.set('translate_tabs_to_spaces', True)
 | |
| 		elif indent_style == 'tab':
 | |
| 			settings.set('translate_tabs_to_spaces', False)
 | |
| 		if indent_size:
 | |
| 			try:
 | |
| 				settings.set('tab_size', int(indent_size))
 | |
| 			except ValueError:
 | |
| 				pass
 | |
| 		if end_of_line in LINE_ENDINGS:
 | |
| 			view.set_line_endings(LINE_ENDINGS[end_of_line])
 | |
| 		if trim_trailing_whitespace == 'true':
 | |
| 			settings.set('trim_trailing_white_space_on_save', True)
 | |
| 		elif trim_trailing_whitespace == 'false':
 | |
| 			settings.set('trim_trailing_white_space_on_save', False)
 | |
| 		if insert_final_newline == 'true':
 | |
| 			settings.set('ensure_newline_at_eof_on_save', True)
 | |
| 		elif insert_final_newline == 'false':
 | |
| 			settings.set('ensure_newline_at_eof_on_save', False)
 |