UltiSnips/pythonx/UltiSnips/indent_util.py
Holger Rapp fe7cb4cf8d Makes UltiSnips a drop in replacement for snipMate.
This includes massive refactorings and lots of new features.
2014-02-25 22:51:45 +01:00

40 lines
1.3 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("&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