aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/vim-snipmate/autoload/snipmate/legacy.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/bundle/vim-snipmate/autoload/snipmate/legacy.vim')
m---------vim/bundle/vim-snipmate0
-rw-r--r--vim/bundle/vim-snipmate/autoload/snipmate/legacy.vim139
2 files changed, 0 insertions, 139 deletions
diff --git a/vim/bundle/vim-snipmate b/vim/bundle/vim-snipmate
new file mode 160000
+Subproject ee433e43c76c768c95ad6d9af67c4cd4b40f7ea
diff --git a/vim/bundle/vim-snipmate/autoload/snipmate/legacy.vim b/vim/bundle/vim-snipmate/autoload/snipmate/legacy.vim
deleted file mode 100644
index 7ff39cb..0000000
--- a/vim/bundle/vim-snipmate/autoload/snipmate/legacy.vim
+++ /dev/null
@@ -1,139 +0,0 @@
-let s:sigil = nr2char(31)
-let snipmate#legacy#sigil = s:sigil
-
-" Prepare snippet to be processed by s:BuildTabStops
-function! snipmate#legacy#process_snippet(snip) abort
- let snippet = a:snip
- let esc_bslash = '\%(\\\@<!\%(\\\\\)*\)\@<='
-
- if exists('b:snipmate_visual')
- let visual = substitute(b:snipmate_visual, "\n$", '', '')
- unlet b:snipmate_visual
- else
- let visual = ''
- endif
- let snippet = s:substitute_visual(snippet, visual)
-
- " Evaluate eval (`...`) expressions.
- " Backquotes prefixed with a backslash "\" are ignored.
- " And backslash can be escaped by doubling it.
- " Using a loop here instead of a regex fixes a bug with nested "\=".
- if stridx(snippet, '`') != -1
- let new = []
- let snip = split(snippet, esc_bslash . '`', 1)
- let isexp = 0
- for i in snip
- if isexp
- call add(new, substitute(snipmate#util#eval(i),
- \ "\n\\%$", '', ''))
- else
- call add(new, i)
- endif
- let isexp = !isexp
- endfor
- let snippet = join(new, '')
- let snippet = substitute(snippet, "\r", "\n", 'g')
- let snippet = substitute(snippet, '\\`', "`", 'g')
- endif
-
- " Place all text after a colon in a tab stop after the tab stop
- " (e.g. "${#:foo}" becomes "${:foo}foo").
- " This helps tell the position of the tab stops later.
- let snippet = substitute(snippet, esc_bslash . '\$\({\d\+:\(.\{-}\)}\|{\d\+}\)', s:sigil . '\1\2', 'g')
- let snippet = substitute(snippet, esc_bslash . '\$\(\d\+\)', s:sigil . '\1', 'g')
- let snippet = substitute(snippet, esc_bslash . '\\\$', '$', 'g')
- let snippet = substitute(snippet, '\\\\', "\\", 'g')
-
- " Update the a:snip so that all the $# become the text after
- " the colon in their associated ${#}.
- " (e.g. "${1:foo}" turns all "$1"'s into "foo")
- let i = 0
- if snippet !~ s:sigil . '{0'
- let snippet .= s:sigil . '{0}'
- endif
- while snippet =~ s:sigil.'{'.i
- let s = matchstr(snippet, s:sigil . '{' . i . ':\zs.\{-}\ze}')
- if s != ''
- let snippet = substitute(snippet, s:sigil . i, s.'&', 'g')
- endif
- let i += 1
- endw
-
- if &et " Expand tabs to spaces if 'expandtab' is set.
- return substitute(snippet, '\t', repeat(' ', snipmate#util#tabwidth()), 'g')
- endif
- return snippet
-endfunction
-
-" Builds a list of a list of each tab stop in the snippet containing:
-" 1.) The tab stop's line number.
-" 2.) The tab stop's column number
-" (by getting the length of the string between the last "\n" and the
-" tab stop).
-" 3.) The length of the text after the colon for the current tab stop
-" (e.g. "${1:foo}" would return 3).
-" 4.) If the "${#:}" construct is given, another list containing all
-" the matches of "$#", to be replaced with the placeholder. This list is
-" composed the same way as the parent; the first item is the line number,
-" and the second is the column.
-function! snipmate#legacy#build_stops(snip, lnum, col, indent) abort
- let stops = {}
- let i = 0
- let withoutVars = substitute(a:snip, s:sigil . '\d\+', '', 'g')
- while a:snip =~ s:sigil . '{' . i
- let beforeTabStop = matchstr(withoutVars, '^.*\ze'.s:sigil .'{'.i.'\D')
- let withoutOthers = substitute(withoutVars, ''.s:sigil .'{\('.i.'\D\)\@!\d\+.\{-}}', '', 'g')
-
- let stops[i] = {}
- let stops[i].line = a:lnum + s:count(beforeTabStop, "\n")
- let stops[i].col = a:indent + len(matchstr(withoutOthers, '[^\n]\{-}\ze'.s:sigil .'{'.i.'\D'))
- let stops[i].placeholder = 0
- let stops[i].mirrors = []
- if stops[i].line == a:lnum
- let stops[i].col += a:col
- endif
-
- " Get all $# matches in another list, if ${#:name} is given
- if withoutVars =~ printf('%s{%d:', s:sigil, i)
- let stops[i].placeholder = len(matchstr(withoutVars, ''.s:sigil .'{'.i.':\zs.\{-}\ze}'))
- let withoutOthers = substitute(a:snip, ''.s:sigil .'{\d\+.\{-}}\|'.s:sigil .''.i.'\@!\d\+', '', 'g')
-
- while match(withoutOthers, ''.s:sigil .''.i.'\(\D\|$\)') != -1
- let stops[i].mirrors = get(stops[i], 'mirrors', [])
- let beforeMark = matchstr(withoutOthers,
- \ printf('^.\{-}\ze%s%s%d\(\D\|$\)',
- \ repeat('.', stops[i].placeholder), s:sigil, i))
- let line = a:lnum + s:count(beforeMark, "\n")
- let col = a:indent + (line > a:lnum
- \ ? len(matchstr(beforeMark, '.*\n\zs.*'))
- \ : a:col + len(beforeMark))
- call add(stops[i].mirrors, { 'line' : line, 'col' : col })
- let withoutOthers = substitute(withoutOthers, ''.s:sigil .''.i.'\ze\(\D\|$\)', '', '')
- endw
- endif
- let i += 1
- endw
- let stops[i] = stops[0]
- return [stops, i + 1]
-endfunction
-
-function! s:substitute_visual(snippet, visual) abort
- let lines = []
- for line in split(a:snippet, "\n")
- let indent = matchstr(line, '^\t\+')
- call add(lines, substitute(line, '{VISUAL}',
- \ substitute(escape(a:visual, '%\'), "\n", "\n" . indent, 'g'), 'g'))
- endfor
- return join(lines, "\n")
-endfunction
-
-" Counts occurences of haystack in needle
-function! s:count(haystack, needle) abort
- let counter = 0
- let index = stridx(a:haystack, a:needle)
- while index != -1
- let index = stridx(a:haystack, a:needle, index+1)
- let counter += 1
- endw
- return counter
-endfunction