You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
#!/usr/bin/env python
|
|||
# encoding: utf-8
|
|||
|
|||
"""See module doc."""
|
|||
|
|||
from UltiSnips import _vim
|
|||
|
|||
|
|||
class IndentUtil(object):
|
|||
|
|||
"""Utility class for dealing properly with indentation."""
|
|||
|
|||
def __init__(self):
|
|||
self.reset()
|
|||
|
|||
def reset(self):
|
|||
"""Gets the spacing properties from Vim."""
|
|||
self.shiftwidth = int(
|
|||
_vim.eval("exists('*shiftwidth') ? shiftwidth() : &shiftwidth"))
|
|||
self._expandtab = (_vim.eval('&expandtab') == '1')
|
|||
self._tabstop = int(_vim.eval('&tabstop'))
|
|||
|
|||
def ntabs_to_proper_indent(self, ntabs):
|
|||
"""Convert 'ntabs' number of tabs to the proper indent prefix."""
|
|||
line_ind = ntabs * self.shiftwidth * ' '
|
|||
line_ind = self.indent_to_spaces(line_ind)
|
|||
line_ind = self.spaces_to_indent(line_ind)
|
|||
return line_ind
|
|||
|
|||
def indent_to_spaces(self, indent):
|
|||
"""Converts indentation to spaces respecting Vim settings."""
|
|||
indent = indent.expandtabs(self._tabstop)
|
|||
right = (len(indent) - len(indent.rstrip(' '))) * ' '
|
|||
indent = indent.replace(' ', '')
|
|||
indent = indent.replace('\t', ' ' * self._tabstop)
|
|||
return indent + right
|
|||
|
|||
def spaces_to_indent(self, indent):
|
|||
"""Converts spaces to proper indentation respecting Vim settings."""
|
|||
if not self._expandtab:
|
|||
indent = indent.replace(' ' * self._tabstop, '\t')
|
|||
return indent
|