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.
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
"""See module doc."""
|
|
|
|
import UltiSnips._vim as _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("&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
|