1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#!/usr/bin/env python
# encoding: utf-8
"""Parses a snipMate snippet definition and launches it into Vim."""
from UltiSnips.snippet.parsing.base import (
tokenize_snippet_text,
finalize,
resolve_ambiguity,
)
from UltiSnips.snippet.parsing.lexer import (
EscapeCharToken,
VisualToken,
TabStopToken,
MirrorToken,
ShellCodeToken,
)
from UltiSnips.text_objects import EscapedChar, Mirror, VimLCode, Visual
_TOKEN_TO_TEXTOBJECT = {
EscapeCharToken: EscapedChar,
VisualToken: Visual,
ShellCodeToken: VimLCode, # `` is VimL in snipMate
}
__ALLOWED_TOKENS = [
EscapeCharToken,
VisualToken,
TabStopToken,
MirrorToken,
ShellCodeToken,
]
__ALLOWED_TOKENS_IN_TABSTOPS = [
EscapeCharToken,
VisualToken,
MirrorToken,
ShellCodeToken,
]
def parse_and_instantiate(parent_to, text, indent):
"""Parses a snippet definition in snipMate format from 'text' assuming the
current 'indent'.
Will instantiate all the objects and link them as children to
parent_to. Will also put the initial text into Vim.
"""
all_tokens, seen_ts = tokenize_snippet_text(
parent_to,
text,
indent,
__ALLOWED_TOKENS,
__ALLOWED_TOKENS_IN_TABSTOPS,
_TOKEN_TO_TEXTOBJECT,
)
resolve_ambiguity(all_tokens, seen_ts)
finalize(all_tokens, seen_ts, parent_to)
|