diff --git a/README.md b/README.md index 999dd405..41e9fc19 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,6 @@ I recommend reading the docs of these plugins to understand them better. Each of * [ctrlp.vim](https://github.com/kien/ctrlp.vim): Fuzzy file, buffer, mru and tag finder. In my config it's mapped to `<Ctrl+F>`, because `<Ctrl+P>` is used by YankRing * [mru.vim](https://github.com/vim-scripts/mru.vim): Plugin to manage Most Recently Used (MRU) files. Includes my own fork which adds syntax highlighting to MRU. This plugin can be opened with `<leader+f>` * [open_file_under_cursor.vim](https://github.com/amix/open_file_under_cursor.vim): Open file under cursor when pressing `gf` -* [zencoding](https://github.com/mattn/emmet-vim): Expanding abbreviation like zen-coding, very useful for editing XML, HTML. * [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object): Defines a new text object representing lines of code at the same indent level. Useful for python/vim scripts * [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors): Sublime Text style multiple selections for Vim, CTRL+N is remapped to CTRL+S (due to YankRing) * [vim-expand-region](https://github.com/terryma/vim-expand-region): Allows you to visually select increasingly larger regions of text using the same key combination. diff --git a/sources_forked/zencoding/.gitignore b/sources_forked/zencoding/.gitignore deleted file mode 100755 index 0a56e3fc..00000000 --- a/sources_forked/zencoding/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/doc/tags diff --git a/sources_forked/zencoding/.gitmodules b/sources_forked/zencoding/.gitmodules deleted file mode 100755 index 8225cc06..00000000 --- a/sources_forked/zencoding/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "docs"] - path = docs - url = git@github.com:mattn/zencoding-vim.git - branch = gh-pages diff --git a/sources_forked/zencoding/Makefile b/sources_forked/zencoding/Makefile deleted file mode 100755 index 94c355a8..00000000 --- a/sources_forked/zencoding/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all : zencoding-vim.zip - -remove-zip: - -rm doc/tags - -rm zencoding-vim.zip - -zencoding-vim.zip: remove-zip - zip -r zencoding-vim.zip autoload plugin doc - -release: zencoding-vim.zip - vimup update-script zencoding.vim diff --git a/sources_forked/zencoding/README.mkd b/sources_forked/zencoding/README.mkd deleted file mode 100755 index 36eead34..00000000 --- a/sources_forked/zencoding/README.mkd +++ /dev/null @@ -1,103 +0,0 @@ -# ZenCoding-vim - -[zencoding-vim](http://mattn.github.com/zencoding-vim) is vim script support for expanding abbreviation like zen-coding(emmet). - -## Installation - -[Download zip file](http://www.vim.org/scripts/script.php?script_id=2981): - - cd ~/.vim - unzip zencoding-vim.zip - -If you install pathogen.vim: - - cd ~/.vim/bundle # or make directory - unzip /path/to/zencoding-vim.zip - -If you get source from repository: - - cd ~/.vim/bundle # or make directory - git clone http://github.com/mattn/zencoding-vim.git - -or: - - git clone http://github.com/mattn/zencoding-vim.git - cd zencoding-vim - cp plugin/zencoding.vim ~/.vim/plugin/ - cp autoload/zencoding.vim ~/.vim/autoload/ - cp -a autoload/zencoding ~/.vim/autoload/ - - -## Quick Tutorial - -Open or create New File: - - vim index.html - -Type ("_" is the cursor position): - - html:5_ - -Then type "<c-y>," (Ctrl + y + ','), you should see: - - <!DOCTYPE HTML> - <html lang="en"> - <head> - <meta charset="UTF-8"> - <title></title> - </head> - <body> - _ - </body> - </html> - -[More Tutorials](https://raw.github.com/mattn/zencoding-vim/master/TUTORIAL) - - -## Enable in different mode - -If you don't want enable zencoding in all mode, -you can use set a option in `vimrc`: - - let g:user_zen_mode='n' "only enable normal mode functions. - let g:user_zen_mode='inv' "enable all functions, which is equal to - let g:user_zen_mode='a' "enable all function in all mode. - -## Project Authors - -[Yasuhiro Matsumoto](http://mattn.kaoriya.net/) - -## Links - -### zen-coding official site: - -> <http://code.google.com/p/zen-coding/> - -### zencoding.vim: - -> <http://mattn.github.com/zencoding-vim> - -### development repository: - -> <https://github.com/mattn/zencoding-vim> - -### my blog posts about zencoding-vim: - -> <http://mattn.kaoriya.net/software/vim/20100222103327.htm> - -> <http://mattn.kaoriya.net/software/vim/20100306021632.htm> - -### japanese blog posts about zencoding-vim: - -> <http://d.hatena.ne.jp/idesaku/20100424/1272092255> - -> <http://d.hatena.ne.jp/griefworker/20110118/vim_zen_coding> - -> <http://d.hatena.ne.jp/sakurako_s/20110126/1295988873> - -> <http://looxu.blogspot.jp/2010/02/zencodingvimhtml.html> - -### tutorial traslated in chinese: - -> <http://www.zfanw.com/blog/zencoding-vim-tutorial-chinese.html> - diff --git a/sources_forked/zencoding/TODO b/sources_forked/zencoding/TODO deleted file mode 100755 index e69de29b..00000000 diff --git a/sources_forked/zencoding/TUTORIAL b/sources_forked/zencoding/TUTORIAL deleted file mode 100755 index ad460418..00000000 --- a/sources_forked/zencoding/TUTORIAL +++ /dev/null @@ -1,212 +0,0 @@ -Tutorial of zencoding.vim - - mattn <mattn.jp@gmail.com> - -1. Expand Abbreviation - - Type abbreviation as 'div>p#foo$*3>a' and type '<c-y>,'. - --------------------- - <div> - <p id="foo1"> - <a href=""></a> - </p> - <p id="foo2"> - <a href=""></a> - </p> - <p id="foo3"> - <a href=""></a> - </p> - </div> - --------------------- - -2. Wrap with Abbreviation - - Write as below. - --------------------- - test1 - test2 - test3 - --------------------- - Then do visual select(line wize) and type '<c-y>,'. - If you request 'Tag:', then type 'ul>li*'. - --------------------- - <ul> - <li>test1</li> - <li>test2</li> - <li>test3</li> - </ul> - --------------------- - - If you type tag as 'blockquote', then you'll see as following. - --------------------- - <blockquote> - test1 - test2 - test3 - </blockquote> - --------------------- - -3. Balance Tag Inward - - type '<c-y>d' in insert mode. - -4. Balance Tag Outward - - type '<c-y>D' in insert mode. - -5. Go to Next Edit Point - - type '<c-y>n' in insert mode. - -6. Go to Previous Edit Point - - type '<c-y>N' in insert mode. - -7. Update <img> Size - - Move cursor to img tag. - --------------------- - <img src="foo.png" /> - --------------------- - Type '<c-y>i' on img tag - --------------------- - <img src="foo.png" width="32" height="48" /> - --------------------- - -8. Merge Lines - - select the lines included '<li>' - --------------------- - <ul> - <li class="list1"></li> - <li class="list2"></li> - <li class="list3"></li> - </ul> - --------------------- - and type '<c-y>m' - --------------------- - <ul> - <li class="list1"></li><li class="list2"></li><li class="list3"></li> - </ul> - --------------------- - -9. Remove Tag - - Move cursor in block - --------------------- - <div class="foo"> - <a>cursor is here</a> - </div> - --------------------- - Type '<c-y>k' in insert mode. - --------------------- - <div class="foo"> - - </div> - --------------------- - - And type '<c-y>k' in there again. - --------------------- - - --------------------- - -10. Split/Join Tag - - Move cursor in block - --------------------- - <div class="foo"> - cursor is here - </div> - --------------------- - Type '<c-y>j' in insert mode. - --------------------- - <div class="foo"/> - --------------------- - - And type '<c-y>j' in there again. - --------------------- - <div class="foo"> - </div> - --------------------- - -11. Toggle Comment - - Move cursor to block - --------------------- - <div> - hello world - </div> - --------------------- - Type '<c-y>/' in insert mode. - --------------------- - <!-- <div> - hello world - </div> --> - --------------------- - Type '<c-y>/' in there again. - --------------------- - <div> - hello world - </div> - --------------------- - -12. Make anchor from URL - - Move cursor to URL - --------------------- - http://www.google.com/ - --------------------- - Type '<c-y>a' - --------------------- - <a href="http://www.google.com/">Google</a> - --------------------- - -13. Make quoted text from URL - - Move cursor to URL - --------------------- - http://github.com/ - --------------------- - Type '<c-y>A' - --------------------- - <blockquote class="quote"> - <a href="http://github.com/">Secure source code hosting and collaborative development - GitHub</a><br /> - <p>How does it work? Get up and running in seconds by forking a project, pushing an existing repository...</p> - <cite>http://github.com/</cite> - </blockquote> - --------------------- - -14. Installing zencoding.vim for language you using. - - # cd ~/.vim - # unzip zencoding-vim.zip - - or if you install pathogen.vim: - - # cd ~/.vim/bundle # or make directory - # unzip /path/to/zencoding-vim.zip - - if you get sources from repository: - - # cd ~/.vim/bundle # or make directory - # git clone http://github.com/mattn/zencoding-vim.git - -15. Enable zencoding.vim for language you using. - - You can customize the behavior of language you using. - - --------------------- - # cat >> ~/.vimrc - let g:user_zen_settings = { - \ 'php' : { - \ 'extends' : 'html', - \ 'filters' : 'c', - \ }, - \ 'xml' : { - \ 'extends' : 'html', - \ }, - \ 'haml' : { - \ 'extends' : 'html', - \ }, - \} - --------------------- diff --git a/sources_forked/zencoding/autoload/zencoding.vim b/sources_forked/zencoding/autoload/zencoding.vim deleted file mode 100755 index a6961439..00000000 --- a/sources_forked/zencoding/autoload/zencoding.vim +++ /dev/null @@ -1,1486 +0,0 @@ -"============================================================================= -" zencoding.vim -" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com> -" Last Change: 09-Apr-2013. - -let s:save_cpo = &cpo -set cpo&vim - -function! zencoding#getExpandos(type, key) - let expandos = zencoding#getResource(a:type, 'expandos', {}) - if has_key(expandos, a:key) - return expandos[a:key] - endif - return a:key -endfunction - -function! zencoding#splitFilterArg(filters) - for f in a:filters - if f =~ '^/' - return f[1:] - endif - endfor - return '' -endfunction - -function! zencoding#useFilter(filters, filter) - for f in a:filters - if a:filter == '/' && f =~ '^/' - return 1 - elseif f == a:filter - return 1 - endif - endfor - return 0 -endfunction - -function! zencoding#getIndentation(...) - if a:0 > 0 - let type = a:1 - else - let type = zencoding#getFileType() - endif - if has_key(s:zen_settings, type) && has_key(s:zen_settings[type], 'indentation') - let indent = s:zen_settings[type].indentation - elseif has_key(s:zen_settings, 'indentation') - let indent = s:zen_settings.indentation - else - let indent = (&l:expandtab || &l:tabstop != &l:shiftwidth) ? repeat(' ', &l:shiftwidth) : "\t" - endif - return indent -endfunction - -function! zencoding#getBaseType(type) - if !has_key(s:zen_settings, a:type) - return '' - endif - if !has_key(s:zen_settings[a:type], 'extends') - return a:type - endif - let extends = s:zen_settings[a:type].extends - if type(extends) == 1 - let tmp = split(extends, '\s*,\s*') - let ext = tmp[0] - else - let ext = extends[0] - endif - if a:type != ext - return zencoding#getBaseType(ext) - endif - return '' -endfunction - -function! zencoding#isExtends(type, extend) - if a:type == a:extend - return 1 - endif - if !has_key(s:zen_settings, a:type) - return 0 - endif - if !has_key(s:zen_settings[a:type], 'extends') - return 0 - endif - let extends = s:zen_settings[a:type].extends - if type(extends) == 1 - let tmp = split(extends, '\s*,\s*') - unlet! extends - let extends = tmp - endif - for ext in extends - if a:extend == ext - return 1 - endif - endfor - return 0 -endfunction - -function! zencoding#parseIntoTree(abbr, type) - let abbr = a:abbr - let type = a:type - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#parseIntoTree(abbr, type) -endfunction - -function! s:mergeConfig(lhs, rhs) - if type(a:lhs) == 3 && type(a:rhs) == 3 - let a:lhs += a:rhs - if len(a:lhs) - call remove(a:lhs, 0, len(a:lhs)-1) - endif - for rhi in a:rhs - call add(a:lhs, a:rhs[rhi]) - endfor - elseif type(a:lhs) == 4 && type(a:rhs) == 4 - for key in keys(a:rhs) - if type(a:rhs[key]) == 3 - if !has_key(a:lhs, key) - let a:lhs[key] = [] - endif - let a:lhs[key] += a:rhs[key] - elseif type(a:rhs[key]) == 4 - if has_key(a:lhs, key) - call s:mergeConfig(a:lhs[key], a:rhs[key]) - else - let a:lhs[key] = a:rhs[key] - endif - else - let a:lhs[key] = a:rhs[key] - endif - endfor - endif -endfunction - -function! zencoding#toString(...) - let current = a:1 - if a:0 > 1 - let type = a:2 - else - let type = &ft - endif - if len(type) == 0 | let type = 'html' | endif - if a:0 > 2 - let inline = a:3 - else - let inline = 0 - endif - if a:0 > 3 - if type(a:4) == 1 - let filters = split(a:4, '\s*,\s*') - else - let filters = a:4 - endif - else - let filters = ['html'] - endif - if a:0 > 4 - let group_itemno = a:5 - else - let group_itemno = 0 - endif - - let dollar_expr = zencoding#getResource(type, 'dollar_expr', 1) - let indent = zencoding#getIndentation(type) - let itemno = 0 - let str = '' - let use_pipe_for_cursor = zencoding#getResource(type, 'use_pipe_for_cursor', 1) - let rtype = zencoding#lang#exists(type) ? type : 'html' - while itemno < current.multiplier - if len(current.name) - if group_itemno != 0 - let inner = zencoding#lang#{rtype}#toString(s:zen_settings, current, type, inline, filters, group_itemno, indent) - else - let inner = zencoding#lang#{rtype}#toString(s:zen_settings, current, type, inline, filters, itemno, indent) - endif - if current.multiplier > 1 - let inner = substitute(inner, '\$#', '$line'.(itemno+1).'$', 'g') - endif - let str .= inner - else - let snippet = current.snippet - if len(current.snippet) == 0 - let snippets = zencoding#getResource(type, 'snippets', {}) - if !empty(snippets) && has_key(snippets, 'zensnippet') - let snippet = snippets['zensnippet'] - endif - endif - if len(snippet) > 0 - let tmp = snippet - if use_pipe_for_cursor - let tmp = substitute(tmp, '|', '${cursor}', 'g') - endif - let tmp = substitute(tmp, '\${zenname}', current.name, 'g') - let snippet_node = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 0, 'parent': {}, 'value': '{'.tmp.'}', 'pos': 0, 'important': current.important } - let str = zencoding#lang#{rtype}#toString(s:zen_settings, snippet_node, type, inline, filters, group_itemno, indent) - else - if len(current.name) - let str .= current.name - endif - if len(current.value) - let text = current.value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - endif - let str .= text - endif - endif - let inner = '' - if len(current.child) - let render_type = zencoding#getFileType(1) - for n in current.child - let inner .= zencoding#toString(n, type, inline, filters, group_itemno) - endfor - endif - let spaces = matchstr(str, '\s*\ze\${child}') - let inner = substitute(inner, "\n", "\n" . spaces, 'g') - let str = substitute(str, '\${child}', inner, '') - endif - let itemno = itemno + 1 - endwhile - return str -endfunction - -function! zencoding#getSettings() - return s:zen_settings -endfunction - -function! zencoding#getResource(type, name, default) - if !has_key(s:zen_settings, a:type) - return a:default - endif - let ret = a:default - - if has_key(s:zen_settings[a:type], 'extends') - let extends = s:zen_settings[a:type].extends - if type(extends) == 1 - let tmp = split(extends, '\s*,\s*') - unlet! extends - let extends = tmp - endif - for ext in extends - if has_key(s:zen_settings, ext) && has_key(s:zen_settings[ext], a:name) - call s:mergeConfig(ret, s:zen_settings[ext][a:name]) - endif - endfor - endif - - if has_key(s:zen_settings[a:type], a:name) - let v = s:zen_settings[a:type][a:name] - if type(ret) == 3 || type(ret) == 4 - call s:mergeConfig(ret, s:zen_settings[a:type][a:name]) - else - let ret = s:zen_settings[a:type][a:name] - endif - endif - - return ret -endfunction - -function! zencoding#getFileType(...) - let flg = get(a:000, 0, 0) - let type = &ft - if zencoding#lang#exists(&ft) - let type = &ft - else - let base = zencoding#getBaseType(type) - if base != "" - if flg - let type = &ft - else - let type = base - endif - endif - endif - if type == 'html' - let type = synIDattr(synID(line("."), col("."), 1), "name") - if type =~ '^css\w' - let type = 'css' - endif - if type =~ '^html\w' - let type = 'html' - endif - if type =~ '^javaScript' - let type = 'javascript' - endif - if len(type) == 0 && type =~ '^xml' - let type = 'xml' - endif - endif - if len(type) == 0 | let type = 'html' | endif - return type -endfunction - -function! zencoding#expandAbbr(mode, abbr) range - let type = zencoding#getFileType() - let rtype = zencoding#getFileType(1) - let expand = '' - let filters = ['html'] - let line = '' - let part = '' - let rest = '' - - if has_key(s:zen_settings, type) && has_key(s:zen_settings[type], 'filters') - let filters = split(s:zen_settings[type].filters, '\s*,\s*') - endif - - if a:mode == 2 - let leader = substitute(input('Tag: ', ''), '^\s*\(.*\)\s*$', '\1', 'g') - if len(leader) == 0 - return - endif - let mx = '|\(\%(html\|haml\|slim\|e\|c\|fc\|xsl\|t\|\/[^ ]\+\)\s*,\{0,1}\s*\)*$' - if leader =~ mx - let filters = map(split(matchstr(leader, mx)[1:], '\s*[^\\]\zs,\s*'), 'substitute(v:val, "\\\\\\\\zs.\\\\ze", "&", "g")') - let leader = substitute(leader, mx, '', '') - endif - if leader =~ '\*' - let query = substitute(leader, '*', '*' . (a:lastline - a:firstline + 1), '') - if query !~ '}\s*$' - let query .= '>{$#}' - endif - if zencoding#useFilter(filters, '/') - let spl = zencoding#splitFilterArg(filters) - let fline = getline(a:firstline) - let query = substitute(query, '>\{0,1}{\$#}\s*$', '{\\$column\\$}*' . len(split(fline, spl)), '') - endif - let items = zencoding#parseIntoTree(query, type).child - for item in items - let expand .= zencoding#toString(item, type, 0, filters) - endfor - if zencoding#useFilter(filters, 'e') - let expand = substitute(expand, '&', '\&', 'g') - let expand = substitute(expand, '<', '\<', 'g') - let expand = substitute(expand, '>', '\>', 'g') - endif - let line = getline(a:firstline) - let part = substitute(line, '^\s*', '', '') - for n in range(a:firstline, a:lastline) - let lline = getline(n) - let lpart = substitute(lline, '^\s\+', '', '') - if zencoding#useFilter(filters, 't') - let lpart = substitute(lpart, '^[0-9.-]\+\s\+', '', '') - let lpart = substitute(lpart, '\s\+$', '', '') - endif - if zencoding#useFilter(filters, '/') - for column in split(lpart, spl) - let expand = substitute(expand, '\$column\$', '\=column', '') - endfor - else - let expand = substitute(expand, '\$line'.(n-a:firstline+1).'\$', '\=lpart', 'g') - endif - endfor - let expand = substitute(expand, '\$line\d*\$', '', 'g') - let expand = substitute(expand, '\$column\$', '', 'g') - let content = join(getline(a:firstline, a:lastline), "\n") - if stridx(expand, '$#') < len(expand)-2 - let expand = substitute(expand, '^\(.*\)\$#\s*$', '\1', '') - endif - let expand = substitute(expand, '\$#', '\=content', 'g') - else - let str = '' - if visualmode() ==# 'V' - let line = getline(a:firstline) - let part = substitute(line, '^\s*', '', '') - for n in range(a:firstline, a:lastline) - if len(leader) > 0 - let str .= getline(n) . "\n" - else - let lpart = substitute(getline(n), '^\s*', '', '') - let str .= lpart . "\n" - endif - endfor - let leader .= (str =~ "\n" ? ">{\n" : "{") . str . "}" - let items = zencoding#parseIntoTree(leader, type).child - else - let save_regcont = @" - let save_regtype = getregtype('"') - silent! normal! gvygv - let str = @" - call setreg('"', save_regcont, save_regtype) - let items = zencoding#parseIntoTree(leader . "{".str."}", type).child - endif - for item in items - let expand .= zencoding#toString(item, type, 0, filters) - endfor - if zencoding#useFilter(filters, 'e') - let expand = substitute(expand, '&', '\&', 'g') - let expand = substitute(expand, '<', '\<', 'g') - let expand = substitute(expand, '>', '\>', 'g') - endif - endif - elseif a:mode == 4 - let line = getline('.') - let spaces = matchstr(line, '^\s*') - if line !~ '^\s*$' - put =spaces.a:abbr - else - call setline('.', spaces.a:abbr) - endif - normal! $ - call zencoding#expandAbbr(0, "") - return - else - let line = getline('.') - if col('.') < len(line) - let line = matchstr(line, '^\(.*\%'.col('.').'c.\)') - endif - if a:mode == 1 - let part = matchstr(line, '\([a-zA-Z0-9:_\-\@|]\+\)$') - else - let part = matchstr(line, '\(\S.*\)$') - let ftype = zencoding#lang#exists(type) ? type : 'html' - let part = zencoding#lang#{ftype}#findTokens(part) - endif - let rest = getline('.')[len(line):] - let str = part - let mx = '|\(\%(html\|haml\|slim\|e\|c\|fc\|xsl\|t\|\/[^ ]\+\)\s*,\{0,1}\s*\)*$' - if str =~ mx - let filters = split(matchstr(str, mx)[1:], '\s*,\s*') - let str = substitute(str, mx, '', '') - endif - let items = zencoding#parseIntoTree(str, rtype).child - for item in items - let expand .= zencoding#toString(item, rtype, 0, filters) - endfor - if zencoding#useFilter(filters, 'e') - let expand = substitute(expand, '&', '\&', 'g') - let expand = substitute(expand, '<', '\<', 'g') - let expand = substitute(expand, '>', '\>', 'g') - endif - let expand = substitute(expand, '\$line\([0-9]\+\)\$', '\=submatch(1)', 'g') - endif - if len(expand) - if expand !~ '\${cursor}' - if a:mode == 2 | - let expand = '${cursor}' . expand - else - let expand .= '${cursor}' - endif - endif - let expand = substitute(expand, '${lang}', s:zen_settings.lang, 'g') - let expand = substitute(expand, '${charset}', s:zen_settings.charset, 'g') - if has_key(s:zen_settings, 'timezone') && len(s:zen_settings.timezone) - let expand = substitute(expand, '${datetime}', strftime("%Y-%m-%dT%H:%M:%S") . s:zen_settings.timezone, 'g') - else - " TODO: on windows, %z/%Z is 'Tokyo(Standard)' - let expand = substitute(expand, '${datetime}', strftime("%Y-%m-%dT%H:%M:%S %z"), 'g') - endif - if a:mode == 2 && visualmode() ==# 'v' - if a:firstline == a:lastline - let expand = substitute(expand, '\n\s*', '', 'g') - else - let expand = substitute(expand, '\n$', '', 'g') - endif - let expand = substitute(expand, '\${cursor}', '$cursor$', '') - let expand = substitute(expand, '\${cursor}', '', 'g') - silent! normal! gv - let col = col("'<") - silent! normal! c - let line = getline('.') - let lhs = matchstr(line, '.*\%<'.col.'c.') - let rhs = matchstr(line, '\%>'.(col-1).'c.*') - let expand = lhs.expand.rhs - let lines = split(expand, '\n') - call setline(line('.'), lines[0]) - if len(lines) > 1 - call append(line('.'), lines[1:]) - endif - else - let expand = substitute(expand, '\${cursor}', '$cursor$', '') - let expand = substitute(expand, '\${cursor}', '', 'g') - if line[:-len(part)-1] =~ '^\s\+$' - let indent = line[:-len(part)-1] - else - let indent = '' - endif - let expand = substitute(expand, '\n\s*$', '', 'g') - let expand = line[:-len(part)-1] . substitute(expand, "\n", "\n" . indent, 'g') . rest - let lines = split(expand, '\n') - if a:mode == 2 - silent! exe "normal! gvc" - endif - call setline(line('.'), lines[0]) - if len(lines) > 1 - call append(line('.'), lines[1:]) - endif - endif - endif - if search('\$cursor\$', 'e') - let oldselection = &selection - let &selection = 'inclusive' - silent! foldopen - silent! exe "normal! v7h\"_s" - let &selection = oldselection - endif - if g:zencoding_debug > 1 - call getchar() - endif -endfunction - -function! zencoding#moveNextPrev(flag) - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#moveNextPrev(a:flag) -endfunction - -function! zencoding#imageSize() - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#imageSize() -endfunction - -function! zencoding#encodeImage() - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#encodeImage() -endfunction - -function! zencoding#toggleComment() - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#toggleComment() -endfunction - -function! zencoding#balanceTag(flag) range - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#balanceTag(a:flag) -endfunction - -function! zencoding#splitJoinTag() - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#splitJoinTag() -endfunction - -function! zencoding#mergeLines() range - let lines = join(map(getline(a:firstline, a:lastline), 'matchstr(v:val, "^\\s*\\zs.*\\ze\\s*$")'), '') - let indent = substitute(getline('.'), '^\(\s*\).*', '\1', '') - silent! exe "normal! gvc" - call setline('.', indent . lines) -endfunction - -function! zencoding#removeTag() - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - return zencoding#lang#{rtype}#removeTag() -endfunction - -function! zencoding#anchorizeURL(flag) - let mx = 'https\=:\/\/[-!#$%&*+,./:;=?@0-9a-zA-Z_~]\+' - let pos1 = searchpos(mx, 'bcnW') - let url = matchstr(getline(pos1[0])[pos1[1]-1:], mx) - let block = [pos1, [pos1[0], pos1[1] + len(url) - 1]] - if !zencoding#util#cursorInRegion(block) - return - endif - - let mx = '.*<title[^>]*>\s*\zs\([^<]\+\)\ze\s*<\/title[^>]*>.*' - let content = zencoding#util#getContentFromURL(url) - let content = substitute(content, '\r', '', 'g') - let content = substitute(content, '[ \n]\+', ' ', 'g') - let content = substitute(content, '<!--.\{-}-->', '', 'g') - let title = matchstr(content, mx) - - let type = zencoding#getFileType() - let rtype = zencoding#lang#exists(type) ? type : 'html' - if a:flag == 0 - let a = zencoding#lang#html#parseTag('<a>') - let a.attr.href = url - let a.value = '{' . title . '}' - let expand = zencoding#toString(a, rtype, 0, []) - let expand = substitute(expand, '\${cursor}', '', 'g') - else - let body = zencoding#util#getTextFromHTML(content) - let body = '{' . substitute(body, '^\(.\{0,100}\).*', '\1', '') . '...}' - - let blockquote = zencoding#lang#html#parseTag('<blockquote class="quote">') - let a = zencoding#lang#html#parseTag('<a>') - let a.attr.href = url - let a.value = '{' . title . '}' - call add(blockquote.child, a) - call add(blockquote.child, zencoding#lang#html#parseTag('<br/>')) - let p = zencoding#lang#html#parseTag('<p>') - let p.value = body - call add(blockquote.child, p) - let cite = zencoding#lang#html#parseTag('<cite>') - let cite.value = '{' . url . '}' - call add(blockquote.child, cite) - let expand = zencoding#toString(blockquote, rtype, 0, []) - let expand = substitute(expand, '\${cursor}', '', 'g') - endif - let indent = substitute(getline('.'), '^\(\s*\).*', '\1', '') - let expand = substitute(expand, "\n", "\n" . indent, 'g') - call zencoding#util#setContent(block, expand) -endfunction - -function! zencoding#codePretty() range - let type = input('FileType: ', &ft, 'filetype') - if len(type) == 0 - return - endif - let block = zencoding#util#getVisualBlock() - let content = zencoding#util#getContent(block) - silent! 1new - let &l:filetype = type - call setline(1, split(content, "\n")) - let old_lazyredraw = &lazyredraw - set lazyredraw - silent! TOhtml - let &lazyredraw = old_lazyredraw - let content = join(getline(1, '$'), "\n") - silent! bw! - silent! bw! - let content = matchstr(content, '<body[^>]*>[\s\n]*\zs.*\ze</body>') - call zencoding#util#setContent(block, content) -endfunction - -function! zencoding#ExpandWord(abbr, type, orig) - let mx = '|\(\%(html\|haml\|slim\|e\|c\|fc\|xsl\|t\|\/[^ ]\+\)\s*,\{0,1}\s*\)*$' - let str = a:abbr - let type = a:type - - if len(type) == 0 | let type = 'html' | endif - if str =~ mx - let filters = split(matchstr(str, mx)[1:], '\s*,\s*') - let str = substitute(str, mx, '', '') - elseif has_key(s:zen_settings[a:type], 'filters') - let filters = split(s:zen_settings[a:type].filters, '\s*,\s*') - else - let filters = ['html'] - endif - let items = zencoding#parseIntoTree(str, a:type).child - let expand = '' - for item in items - let expand .= zencoding#toString(item, a:type, 0, filters) - endfor - if zencoding#useFilter(filters, 'e') - let expand = substitute(expand, '&', '\&', 'g') - let expand = substitute(expand, '<', '\<', 'g') - let expand = substitute(expand, '>', '\>', 'g') - endif - if a:orig == 0 - let expand = substitute(expand, '\${lang}', s:zen_settings.lang, 'g') - let expand = substitute(expand, '\${charset}', s:zen_settings.charset, 'g') - let expand = substitute(expand, '\${cursor}', '', 'g') - endif - return expand -endfunction - -function! zencoding#getSnippets(type) - let type = a:type - if len(type) == 0 || !has_key(s:zen_settings, type) - let type = 'html' - endif - return zencoding#getResource(type, 'snippets', {}) -endfunction - -function! zencoding#CompleteTag(findstart, base) - if a:findstart - let line = getline('.') - let start = col('.') - 1 - while start > 0 && line[start - 1] =~ '[a-zA-Z0-9:_\@\-]' - let start -= 1 - endwhile - return start - else - let type = zencoding#getFileType() - let res = [] - - let snippets = zencoding#getResource(type, 'snippets', {}) - for item in keys(snippets) - if stridx(item, a:base) != -1 - call add(res, substitute(item, '\${cursor}\||', '', 'g')) - endif - endfor - let aliases = zencoding#getResource(type, 'aliases', {}) - for item in values(aliases) - if stridx(item, a:base) != -1 - call add(res, substitute(item, '\${cursor}\||', '', 'g')) - endif - endfor - return res - endif -endfunction - -unlet! s:zen_settings -let s:zen_settings = { -\ 'lang': "en", -\ 'charset': "UTF-8", -\ 'css': { -\ 'snippets': { -\ '@i': '@import url(|);', -\ '@m': "@media print {\n\t|\n}", -\ '@f': "@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}", -\ '!': '!important', -\ 'pos': 'position:|;', -\ 'pos:s': 'position:static;', -\ 'pos:a': 'position:absolute;', -\ 'pos:r': 'position:relative;', -\ 'pos:f': 'position:fixed;', -\ 't': 'top:|;', -\ 't:a': 'top:auto;', -\ 'r': 'right:|;', -\ 'r:a': 'right:auto;', -\ 'b': 'bottom:|;', -\ 'b:a': 'bottom:auto;', -\ 'l': 'left:|;', -\ 'l:a': 'left:auto;', -\ 'z': 'z-index:|;', -\ 'z:a': 'z-index:auto;', -\ 'fl': 'float:|;', -\ 'fl:n': 'float:none;', -\ 'fl:l': 'float:left;', -\ 'fl:r': 'float:right;', -\ 'cl': 'clear:|;', -\ 'cl:n': 'clear:none;', -\ 'cl:l': 'clear:left;', -\ 'cl:r': 'clear:right;', -\ 'cl:b': 'clear:both;', -\ 'd': 'display:|;', -\ 'd:n': 'display:none;', -\ 'd:b': 'display:block;', -\ 'd:i': 'display:inline;', -\ 'd:ib': 'display:inline-block;', -\ 'd:li': 'display:list-item;', -\ 'd:ri': 'display:run-in;', -\ 'd:cp': 'display:compact;', -\ 'd:tb': 'display:table;', -\ 'd:itb': 'display:inline-table;', -\ 'd:tbcp': 'display:table-caption;', -\ 'd:tbcl': 'display:table-column;', -\ 'd:tbclg': 'display:table-column-group;', -\ 'd:tbhg': 'display:table-header-group;', -\ 'd:tbfg': 'display:table-footer-group;', -\ 'd:tbr': 'display:table-row;', -\ 'd:tbrg': 'display:table-row-group;', -\ 'd:tbc': 'display:table-cell;', -\ 'd:rb': 'display:ruby;', -\ 'd:rbb': 'display:ruby-base;', -\ 'd:rbbg': 'display:ruby-base-group;', -\ 'd:rbt': 'display:ruby-text;', -\ 'd:rbtg': 'display:ruby-text-group;', -\ 'v': 'visibility:|;', -\ 'v:v': 'visibility:visible;', -\ 'v:h': 'visibility:hidden;', -\ 'v:c': 'visibility:collapse;', -\ 'ov': 'overflow:|;', -\ 'ov:v': 'overflow:visible;', -\ 'ov:h': 'overflow:hidden;', -\ 'ov:s': 'overflow:scroll;', -\ 'ov:a': 'overflow:auto;', -\ 'ovx': 'overflow-x:|;', -\ 'ovx:v': 'overflow-x:visible;', -\ 'ovx:h': 'overflow-x:hidden;', -\ 'ovx:s': 'overflow-x:scroll;', -\ 'ovx:a': 'overflow-x:auto;', -\ 'ovy': 'overflow-y:|;', -\ 'ovy:v': 'overflow-y:visible;', -\ 'ovy:h': 'overflow-y:hidden;', -\ 'ovy:s': 'overflow-y:scroll;', -\ 'ovy:a': 'overflow-y:auto;', -\ 'ovs': 'overflow-style:|;', -\ 'ovs:a': 'overflow-style:auto;', -\ 'ovs:s': 'overflow-style:scrollbar;', -\ 'ovs:p': 'overflow-style:panner;', -\ 'ovs:m': 'overflow-style:move;', -\ 'ovs:mq': 'overflow-style:marquee;', -\ 'zoo': 'zoom:1;', -\ 'cp': 'clip:|;', -\ 'cp:a': 'clip:auto;', -\ 'cp:r': 'clip:rect(|);', -\ 'bxz': 'box-sizing:|;', -\ 'bxz:cb': 'box-sizing:content-box;', -\ 'bxz:bb': 'box-sizing:border-box;', -\ 'bxsh': 'box-shadow:|;', -\ 'bxsh:n': 'box-shadow:none;', -\ 'bxsh:w': '-webkit-box-shadow:0 0 0 #000;', -\ 'bxsh:m': '-moz-box-shadow:0 0 0 0 #000;', -\ 'm': 'margin:|;', -\ 'm:a': 'margin:auto;', -\ 'm:0': 'margin:0;', -\ 'm:2': 'margin:0 0;', -\ 'm:3': 'margin:0 0 0;', -\ 'm:4': 'margin:0 0 0 0;', -\ 'mt': 'margin-top:|;', -\ 'mt:a': 'margin-top:auto;', -\ 'mr': 'margin-right:|;', -\ 'mr:a': 'margin-right:auto;', -\ 'mb': 'margin-bottom:|;', -\ 'mb:a': 'margin-bottom:auto;', -\ 'ml': 'margin-left:|;', -\ 'ml:a': 'margin-left:auto;', -\ 'p': 'padding:|;', -\ 'p:0': 'padding:0;', -\ 'p:2': 'padding:0 0;', -\ 'p:3': 'padding:0 0 0;', -\ 'p:4': 'padding:0 0 0 0;', -\ 'pt': 'padding-top:|;', -\ 'pr': 'padding-right:|;', -\ 'pb': 'padding-bottom:|;', -\ 'pl': 'padding-left:|;', -\ 'w': 'width:|;', -\ 'w:a': 'width:auto;', -\ 'h': 'height:|;', -\ 'h:a': 'height:auto;', -\ 'maw': 'max-width:|;', -\ 'maw:n': 'max-width:none;', -\ 'mah': 'max-height:|;', -\ 'mah:n': 'max-height:none;', -\ 'miw': 'min-width:|;', -\ 'mih': 'min-height:|;', -\ 'o': 'outline:|;', -\ 'o:n': 'outline:none;', -\ 'oo': 'outline-offset:|;', -\ 'ow': 'outline-width:|;', -\ 'os': 'outline-style:|;', -\ 'oc': 'outline-color:#000;', -\ 'oc:i': 'outline-color:invert;', -\ 'bd': 'border:|;', -\ 'bd+': 'border:1px solid #000;', -\ 'bd:n': 'border:none;', -\ 'bdbk': 'border-break:|;', -\ 'bdbk:c': 'border-break:close;', -\ 'bdcl': 'border-collapse:|;', -\ 'bdcl:c': 'border-collapse:collapse;', -\ 'bdcl:s': 'border-collapse:separate;', -\ 'bdc': 'border-color:#000;', -\ 'bdi': 'border-image:url(|);', -\ 'bdi:n': 'border-image:none;', -\ 'bdi:w': '-webkit-border-image:url(|) 0 0 0 0 stretch stretch;', -\ 'bdi:m': '-moz-border-image:url(|) 0 0 0 0 stretch stretch;', -\ 'bdti': 'border-top-image:url(|);', -\ 'bdti:n': 'border-top-image:none;', -\ 'bdri': 'border-right-image:url(|);', -\ 'bdri:n': 'border-right-image:none;', -\ 'bdbi': 'border-bottom-image:url(|);', -\ 'bdbi:n': 'border-bottom-image:none;', -\ 'bdli': 'border-left-image:url(|);', -\ 'bdli:n': 'border-left-image:none;', -\ 'bdci': 'border-corner-image:url(|);', -\ 'bdci:n': 'border-corner-image:none;', -\ 'bdci:c': 'border-corner-image:continue;', -\ 'bdtli': 'border-top-left-image:url(|);', -\ 'bdtli:n': 'border-top-left-image:none;', -\ 'bdtli:c': 'border-top-left-image:continue;', -\ 'bdtri': 'border-top-right-image:url(|);', -\ 'bdtri:n': 'border-top-right-image:none;', -\ 'bdtri:c': 'border-top-right-image:continue;', -\ 'bdbri': 'border-bottom-right-image:url(|);', -\ 'bdbri:n': 'border-bottom-right-image:none;', -\ 'bdbri:c': 'border-bottom-right-image:continue;', -\ 'bdbli': 'border-bottom-left-image:url(|);', -\ 'bdbli:n': 'border-bottom-left-image:none;', -\ 'bdbli:c': 'border-bottom-left-image:continue;', -\ 'bdf': 'border-fit:|;', -\ 'bdf:c': 'border-fit:clip;', -\ 'bdf:r': 'border-fit:repeat;', -\ 'bdf:sc': 'border-fit:scale;', -\ 'bdf:st': 'border-fit:stretch;', -\ 'bdf:ow': 'border-fit:overwrite;', -\ 'bdf:of': 'border-fit:overflow;', -\ 'bdf:sp': 'border-fit:space;', -\ 'bdl': 'border-left:|;', -\ 'bdl:a': 'border-length:auto;', -\ 'bdsp': 'border-spacing:|;', -\ 'bds': 'border-style:|;', -\ 'bds:n': 'border-style:none;', -\ 'bds:h': 'border-style:hidden;', -\ 'bds:dt': 'border-style:dotted;', -\ 'bds:ds': 'border-style:dashed;', -\ 'bds:s': 'border-style:solid;', -\ 'bds:db': 'border-style:double;', -\ 'bds:dtds': 'border-style:dot-dash;', -\ 'bds:dtdtds': 'border-style:dot-dot-dash;', -\ 'bds:w': 'border-style:wave;', -\ 'bds:g': 'border-style:groove;', -\ 'bds:r': 'border-style:ridge;', -\ 'bds:i': 'border-style:inset;', -\ 'bds:o': 'border-style:outset;', -\ 'bdw': 'border-width:|;', -\ 'bdt': 'border-top:|;', -\ 'bdt+': 'border-top:1px solid #000;', -\ 'bdt:n': 'border-top:none;', -\ 'bdtw': 'border-top-width:|;', -\ 'bdts': 'border-top-style:|;', -\ 'bdts:n': 'border-top-style:none;', -\ 'bdtc': 'border-top-color:#000;', -\ 'bdr': 'border-right:|;', -\ 'bdr+': 'border-right:1px solid #000;', -\ 'bdr:n': 'border-right:none;', -\ 'bdrw': 'border-right-width:|;', -\ 'bdrt': 'border-right-style:|;', -\ 'bdrs:n': 'border-right-style:none;', -\ 'bdrc': 'border-right-color:#000;', -\ 'bdb': 'border-bottom:|;', -\ 'bdb+': 'border-bottom:1px solid #000;', -\ 'bdb:n': 'border-bottom:none;', -\ 'bdbw': 'border-bottom-width:|;', -\ 'bdbs': 'border-bottom-style:|;', -\ 'bdbs:n': 'border-bottom-style:none;', -\ 'bdbc': 'border-bottom-color:#000;', -\ 'bdln': 'border-length:|;', -\ 'bdl+': 'border-left:1px solid #000;', -\ 'bdl:n': 'border-left:none;', -\ 'bdlw': 'border-left-width:|;', -\ 'bdls': 'border-left-style:|;', -\ 'bdls:n': 'border-left-style:none;', -\ 'bdlc': 'border-left-color:#000;', -\ 'bdrs': 'border-radius:|;', -\ 'bdtrrz': 'border-top-right-radius:|;', -\ 'bdtlrz': 'border-top-left-radius:|;', -\ 'bdbrrz': 'border-bottom-right-radius:|;', -\ 'bdblrz': 'border-bottom-left-radius:|;', -\ 'bdrz:w': '-webkit-border-radius:|;', -\ 'bdrz:m': '-moz-border-radius:|;', -\ 'bg': 'background:|;', -\ 'bg+': 'background:#FFF url(|) 0 0 no-repeat;', -\ 'bg:n': 'background:none;', -\ 'bg:ie': 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=''|x.png'');', -\ 'bgc': 'background-color:#FFF;', -\ 'bgi': 'background-image:url(|);', -\ 'bgi:n': 'background-image:none;', -\ 'bgr': 'background-repeat:|;', -\ 'bgr:n': 'background-repeat:no-repeat;', -\ 'bgr:x': 'background-repeat:repeat-x;', -\ 'bgr:y': 'background-repeat:repeat-y;', -\ 'bga': 'background-attachment:|;', -\ 'bga:f': 'background-attachment:fixed;', -\ 'bga:s': 'background-attachment:scroll;', -\ 'bgp': 'background-position:0 0;', -\ 'bgpx': 'background-position-x:|;', -\ 'bgpy': 'background-position-y:|;', -\ 'bgbk': 'background-break:|;', -\ 'bgbk:bb': 'background-break:bounding-box;', -\ 'bgbk:eb': 'background-break:each-box;', -\ 'bgbk:c': 'background-break:continuous;', -\ 'bgcp': 'background-clip:|;', -\ 'bgcp:bb': 'background-clip:border-box;', -\ 'bgcp:pb': 'background-clip:padding-box;', -\ 'bgcp:cb': 'background-clip:content-box;', -\ 'bgcp:nc': 'background-clip:no-clip;', -\ 'bgo': 'background-origin:|;', -\ 'bgo:pb': 'background-origin:padding-box;', -\ 'bgo:bb': 'background-origin:border-box;', -\ 'bgo:cb': 'background-origin:content-box;', -\ 'bgz': 'background-size:|;', -\ 'bgz:a': 'background-size:auto;', -\ 'bgz:ct': 'background-size:contain;', -\ 'bgz:cv': 'background-size:cover;', -\ 'c': 'color:#000;', -\ 'tbl': 'table-layout:|;', -\ 'tbl:a': 'table-layout:auto;', -\ 'tbl:f': 'table-layout:fixed;', -\ 'cps': 'caption-side:|;', -\ 'cps:t': 'caption-side:top;', -\ 'cps:b': 'caption-side:bottom;', -\ 'ec': 'empty-cells:|;', -\ 'ec:s': 'empty-cells:show;', -\ 'ec:h': 'empty-cells:hide;', -\ 'lis': 'list-style:|;', -\ 'lis:n': 'list-style:none;', -\ 'lisp': 'list-style-position:|;', -\ 'lisp:i': 'list-style-position:inside;', -\ 'lisp:o': 'list-style-position:outside;', -\ 'list': 'list-style-type:|;', -\ 'list:n': 'list-style-type:none;', -\ 'list:d': 'list-style-type:disc;', -\ 'list:c': 'list-style-type:circle;', -\ 'list:s': 'list-style-type:square;', -\ 'list:dc': 'list-style-type:decimal;', -\ 'list:dclz': 'list-style-type:decimal-leading-zero;', -\ 'list:lr': 'list-style-type:lower-roman;', -\ 'list:ur': 'list-style-type:upper-roman;', -\ 'lisi': 'list-style-image:|;', -\ 'lisi:n': 'list-style-image:none;', -\ 'q': 'quotes:|;', -\ 'q:n': 'quotes:none;', -\ 'q:ru': 'quotes:''\00AB'' ''\00BB'' ''\201E'' ''\201C'';', -\ 'q:en': 'quotes:''\201C'' ''\201D'' ''\2018'' ''\2019'';', -\ 'ct': 'content:|;', -\ 'ct:n': 'content:normal;', -\ 'ct:oq': 'content:open-quote;', -\ 'ct:noq': 'content:no-open-quote;', -\ 'ct:cq': 'content:close-quote;', -\ 'ct:ncq': 'content:no-close-quote;', -\ 'ct:a': 'content:attr(|);', -\ 'ct:c': 'content:counter(|);', -\ 'ct:cs': 'content:counters(|);', -\ 'coi': 'counter-increment:|;', -\ 'cor': 'counter-reset:|;', -\ 'va': 'vertical-align:|;', -\ 'va:sup': 'vertical-align:super;', -\ 'va:t': 'vertical-align:top;', -\ 'va:tt': 'vertical-align:text-top;', -\ 'va:m': 'vertical-align:middle;', -\ 'va:bl': 'vertical-align:baseline;', -\ 'va:b': 'vertical-align:bottom;', -\ 'va:tb': 'vertical-align:text-bottom;', -\ 'va:sub': 'vertical-align:sub;', -\ 'ta': 'text-align:|;', -\ 'ta:l': 'text-align:left;', -\ 'ta:c': 'text-align:center;', -\ 'ta:r': 'text-align:right;', -\ 'tal': 'text-align-last:|;', -\ 'tal:a': 'text-align-last:auto;', -\ 'tal:l': 'text-align-last:left;', -\ 'tal:c': 'text-align-last:center;', -\ 'tal:r': 'text-align-last:right;', -\ 'td': 'text-decoration:|;', -\ 'td:n': 'text-decoration:none;', -\ 'td:u': 'text-decoration:underline;', -\ 'td:o': 'text-decoration:overline;', -\ 'td:l': 'text-decoration:line-through;', -\ 'te': 'text-emphasis:|;', -\ 'te:n': 'text-emphasis:none;', -\ 'te:ac': 'text-emphasis:accent;', -\ 'te:dt': 'text-emphasis:dot;', -\ 'te:c': 'text-emphasis:circle;', -\ 'te:ds': 'text-emphasis:disc;', -\ 'te:b': 'text-emphasis:before;', -\ 'te:a': 'text-emphasis:after;', -\ 'th': 'text-height:|;', -\ 'th:a': 'text-height:auto;', -\ 'th:f': 'text-height:font-size;', -\ 'th:t': 'text-height:text-size;', -\ 'th:m': 'text-height:max-size;', -\ 'ti': 'text-indent:|;', -\ 'ti:-': 'text-indent:-9999px;', -\ 'tj': 'text-justify:|;', -\ 'tj:a': 'text-justify:auto;', -\ 'tj:iw': 'text-justify:inter-word;', -\ 'tj:ii': 'text-justify:inter-ideograph;', -\ 'tj:ic': 'text-justify:inter-cluster;', -\ 'tj:d': 'text-justify:distribute;', -\ 'tj:k': 'text-justify:kashida;', -\ 'tj:t': 'text-justify:tibetan;', -\ 'to': 'text-outline:|;', -\ 'to+': 'text-outline:0 0 #000;', -\ 'to:n': 'text-outline:none;', -\ 'tr': 'text-replace:|;', -\ 'tr:n': 'text-replace:none;', -\ 'tt': 'text-transform:|;', -\ 'tt:n': 'text-transform:none;', -\ 'tt:c': 'text-transform:capitalize;', -\ 'tt:u': 'text-transform:uppercase;', -\ 'tt:l': 'text-transform:lowercase;', -\ 'tw': 'text-wrap:|;', -\ 'tw:n': 'text-wrap:normal;', -\ 'tw:no': 'text-wrap:none;', -\ 'tw:u': 'text-wrap:unrestricted;', -\ 'tw:s': 'text-wrap:suppress;', -\ 'tsh': 'text-shadow:|;', -\ 'tsh+': 'text-shadow:0 0 0 #000;', -\ 'tsh:n': 'text-shadow:none;', -\ 'lh': 'line-height:|;', -\ 'whs': 'white-space:|;', -\ 'whs:n': 'white-space:normal;', -\ 'whs:p': 'white-space:pre;', -\ 'whs:nw': 'white-space:nowrap;', -\ 'whs:pw': 'white-space:pre-wrap;', -\ 'whs:pl': 'white-space:pre-line;', -\ 'whsc': 'white-space-collapse:|;', -\ 'whsc:n': 'white-space-collapse:normal;', -\ 'whsc:k': 'white-space-collapse:keep-all;', -\ 'whsc:l': 'white-space-collapse:loose;', -\ 'whsc:bs': 'white-space-collapse:break-strict;', -\ 'whsc:ba': 'white-space-collapse:break-all;', -\ 'wob': 'word-break:|;', -\ 'wob:n': 'word-break:normal;', -\ 'wob:k': 'word-break:keep-all;', -\ 'wob:l': 'word-break:loose;', -\ 'wob:bs': 'word-break:break-strict;', -\ 'wob:ba': 'word-break:break-all;', -\ 'wos': 'word-spacing:|;', -\ 'wow': 'word-wrap:|;', -\ 'wow:nm': 'word-wrap:normal;', -\ 'wow:n': 'word-wrap:none;', -\ 'wow:u': 'word-wrap:unrestricted;', -\ 'wow:s': 'word-wrap:suppress;', -\ 'lts': 'letter-spacing:|;', -\ 'f': 'font:|;', -\ 'f+': 'font:1em Arial,sans-serif;', -\ 'fw': 'font-weight:|;', -\ 'fw:n': 'font-weight:normal;', -\ 'fw:b': 'font-weight:bold;', -\ 'fw:br': 'font-weight:bolder;', -\ 'fw:lr': 'font-weight:lighter;', -\ 'fs': 'font-style:|;', -\ 'fs:n': 'font-style:normal;', -\ 'fs:i': 'font-style:italic;', -\ 'fs:o': 'font-style:oblique;', -\ 'fv': 'font-variant:|;', -\ 'fv:n': 'font-variant:normal;', -\ 'fv:sc': 'font-variant:small-caps;', -\ 'fz': 'font-size:|;', -\ 'fza': 'font-size-adjust:|;', -\ 'fza:n': 'font-size-adjust:none;', -\ 'ff': 'font-family:|;', -\ 'ff:s': 'font-family:serif;', -\ 'ff:ss': 'font-family:sans-serif;', -\ 'ff:c': 'font-family:cursive;', -\ 'ff:f': 'font-family:fantasy;', -\ 'ff:m': 'font-family:monospace;', -\ 'fef': 'font-effect:|;', -\ 'fef:n': 'font-effect:none;', -\ 'fef:eg': 'font-effect:engrave;', -\ 'fef:eb': 'font-effect:emboss;', -\ 'fef:o': 'font-effect:outline;', -\ 'fem': 'font-emphasize:|;', -\ 'femp': 'font-emphasize-position:|;', -\ 'femp:b': 'font-emphasize-position:before;', -\ 'femp:a': 'font-emphasize-position:after;', -\ 'fems': 'font-emphasize-style:|;', -\ 'fems:n': 'font-emphasize-style:none;', -\ 'fems:ac': 'font-emphasize-style:accent;', -\ 'fems:dt': 'font-emphasize-style:dot;', -\ 'fems:c': 'font-emphasize-style:circle;', -\ 'fems:ds': 'font-emphasize-style:disc;', -\ 'fsm': 'font-smooth:|;', -\ 'fsm:a': 'font-smooth:auto;', -\ 'fsm:n': 'font-smooth:never;', -\ 'fsm:aw': 'font-smooth:always;', -\ 'fst': 'font-stretch:|;', -\ 'fst:n': 'font-stretch:normal;', -\ 'fst:uc': 'font-stretch:ultra-condensed;', -\ 'fst:ec': 'font-stretch:extra-condensed;', -\ 'fst:c': 'font-stretch:condensed;', -\ 'fst:sc': 'font-stretch:semi-condensed;', -\ 'fst:se': 'font-stretch:semi-expanded;', -\ 'fst:e': 'font-stretch:expanded;', -\ 'fst:ee': 'font-stretch:extra-expanded;', -\ 'fst:ue': 'font-stretch:ultra-expanded;', -\ 'op': 'opacity:|;', -\ 'op:ie': 'filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);', -\ 'op:ms': '-ms-filter:''progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'';', -\ 'rz': 'resize:|;', -\ 'rz:n': 'resize:none;', -\ 'rz:b': 'resize:both;', -\ 'rz:h': 'resize:horizontal;', -\ 'rz:v': 'resize:vertical;', -\ 'cur': 'cursor:|;', -\ 'cur:a': 'cursor:auto;', -\ 'cur:d': 'cursor:default;', -\ 'cur:c': 'cursor:crosshair;', -\ 'cur:ha': 'cursor:hand;', -\ 'cur:he': 'cursor:help;', -\ 'cur:m': 'cursor:move;', -\ 'cur:p': 'cursor:pointer;', -\ 'cur:t': 'cursor:text;', -\ 'pgbb': 'page-break-before:|;', -\ 'pgbb:au': 'page-break-before:auto;', -\ 'pgbb:al': 'page-break-before:always;', -\ 'pgbb:l': 'page-break-before:left;', -\ 'pgbb:r': 'page-break-before:right;', -\ 'pgbi': 'page-break-inside:|;', -\ 'pgbi:au': 'page-break-inside:auto;', -\ 'pgbi:av': 'page-break-inside:avoid;', -\ 'pgba': 'page-break-after:|;', -\ 'pgba:au': 'page-break-after:auto;', -\ 'pgba:al': 'page-break-after:always;', -\ 'pgba:l': 'page-break-after:left;', -\ 'pgba:r': 'page-break-after:right;', -\ 'orp': 'orphans:|;', -\ 'wid': 'widows:|;' -\ }, -\ 'filters': 'fc' -\ }, -\ 'sass': { -\ 'extends': 'css', -\ 'snippets': { -\ '@if': "@if {\n\t|\n}", -\ '@e': "@else {\n\t|\n}", -\ '@in': "@include |", -\ '@ex': "@extend |", -\ '@mx': "@mixin {\n\t|\n}", -\ '@fn': "@function {\n\t|\n}", -\ '@r': "@return |", -\ }, -\ }, -\ 'scss': { -\ 'extends': 'css', -\ }, -\ 'less': { -\ 'extends': 'css', -\ }, -\ 'css.drupal': { -\ 'extends': 'css', -\ }, -\ 'html': { -\ 'snippets': { -\ 'cc:ie6': "<!--[if lte IE 6]>\n\t${child}|\n<![endif]-->", -\ 'cc:ie': "<!--[if IE]>\n\t${child}|\n<![endif]-->", -\ 'cc:noie': "<!--[if !IE]><!-->\n\t${child}|\n<!--<![endif]-->", -\ 'html:4t': "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n" -\ ."<html lang=\"${lang}\">\n" -\ ."<head>\n" -\ ."\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=${charset}\">\n" -\ ."\t<title></title>\n" -\ ."</head>\n" -\ ."<body>\n\t${child}|\n</body>\n" -\ ."</html>", -\ 'html:4s': "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" -\ ."<html lang=\"${lang}\">\n" -\ ."<head>\n" -\ ."\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=${charset}\">\n" -\ ."\t<title></title>\n" -\ ."</head>\n" -\ ."<body>\n\t${child}|\n</body>\n" -\ ."</html>", -\ 'html:xt': "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" -\ ."<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"${lang}\">\n" -\ ."<head>\n" -\ ."\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=${charset}\" />\n" -\ ."\t<title></title>\n" -\ ."</head>\n" -\ ."<body>\n\t${child}|\n</body>\n" -\ ."</html>", -\ 'html:xs': "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" -\ ."<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"${lang}\">\n" -\ ."<head>\n" -\ ."\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=${charset}\" />\n" -\ ."\t<title></title>\n" -\ ."</head>\n" -\ ."<body>\n\t${child}|\n</body>\n" -\ ."</html>", -\ 'html:xxs': "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n" -\ ."<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"${lang}\">\n" -\ ."<head>\n" -\ ."\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=${charset}\" />\n" -\ ."\t<title></title>\n" -\ ."</head>\n" -\ ."<body>\n\t${child}|\n</body>\n" -\ ."</html>", -\ 'html:5': "<!DOCTYPE html>\n" -\ ."<html lang=\"${lang}\">\n" -\ ."<head>\n" -\ ."\t<meta charset=\"${charset}\">\n" -\ ."\t<title></title>\n" -\ ."</head>\n" -\ ."<body>\n\t${child}|\n</body>\n" -\ ."</html>" -\ }, -\ 'default_attributes': { -\ 'a': {'href': ''}, -\ 'a:link': {'href': 'http://|'}, -\ 'a:mail': {'href': 'mailto:|'}, -\ 'abbr': {'title': ''}, -\ 'acronym': {'title': ''}, -\ 'base': {'href': ''}, -\ 'bdo': {'dir': ''}, -\ 'bdo:r': {'dir': 'rtl'}, -\ 'bdo:l': {'dir': 'ltr'}, -\ 'del': {'datetime': '${datetime}'}, -\ 'ins': {'datetime': '${datetime}'}, -\ 'link:css': [{'rel': 'stylesheet'}, {'type': 'text/css'}, {'href': '|style.css'}, {'media': 'all'}], -\ 'link:print': [{'rel': 'stylesheet'}, {'type': 'text/css'}, {'href': '|print.css'}, {'media': 'print'}], -\ 'link:favicon': [{'rel': 'shortcut icon'}, {'type': 'image/x-icon'}, {'href': '|favicon.ico'}], -\ 'link:touch': [{'rel': 'apple-touch-icon'}, {'href': '|favicon.png'}], -\ 'link:rss': [{'rel': 'alternate'}, {'type': 'application/rss+xml'}, {'title': 'RSS'}, {'href': '|rss.xml'}], -\ 'link:atom': [{'rel': 'alternate'}, {'type': 'application/atom+xml'}, {'title': 'Atom'}, {'href': 'atom.xml'}], -\ 'meta:utf': [{'http-equiv': 'Content-Type'}, {'content': 'text/html;charset=UTF-8'}], -\ 'meta:win': [{'http-equiv': 'Content-Type'}, {'content': 'text/html;charset=Win-1251'}], -\ 'meta:compat': [{'http-equiv': 'X-UA-Compatible'}, {'content': 'IE=7'}], -\ 'style': {'type': 'text/css'}, -\ 'script': {'type': 'text/javascript'}, -\ 'script:src': [{'type': 'text/javascript'}, {'src': ''}], -\ 'img': [{'src': ''}, {'alt': ''}], -\ 'iframe': [{'src': ''}, {'frameborder': '0'}], -\ 'embed': [{'src': ''}, {'type': ''}], -\ 'object': [{'data': ''}, {'type': ''}], -\ 'param': [{'name': ''}, {'value': ''}], -\ 'map': {'name': ''}, -\ 'area': [{'shape': ''}, {'coords': ''}, {'href': ''}, {'alt': ''}], -\ 'area:d': [{'shape': 'default'}, {'href': ''}, {'alt': ''}], -\ 'area:c': [{'shape': 'circle'}, {'coords': ''}, {'href': ''}, {'alt': ''}], -\ 'area:r': [{'shape': 'rect'}, {'coords': ''}, {'href': ''}, {'alt': ''}], -\ 'area:p': [{'shape': 'poly'}, {'coords': ''}, {'href': ''}, {'alt': ''}], -\ 'link': [{'rel': 'stylesheet'}, {'href': ''}], -\ 'form': {'action': ''}, -\ 'form:get': {'action': '', 'method': 'get'}, -\ 'form:post': {'action': '', 'method': 'post'}, -\ 'form:upload': {'action': '', 'method': 'post', 'enctype': 'multipart/form-data'}, -\ 'label': {'for': ''}, -\ 'input': {'type': ''}, -\ 'input:hidden': [{'type': 'hidden'}, {'name': ''}], -\ 'input:h': [{'type': 'hidden'}, {'name': ''}], -\ 'input:text': [{'type': 'text'}, {'name': ''}, {'id': ''}], -\ 'input:t': [{'type': 'text'}, {'name': ''}, {'id': ''}], -\ 'input:search': [{'type': 'search'}, {'name': ''}, {'id': ''}], -\ 'input:email': [{'type': 'email'}, {'name': ''}, {'id': ''}], -\ 'input:url': [{'type': 'url'}, {'name': ''}, {'id': ''}], -\ 'input:password': [{'type': 'password'}, {'name': ''}, {'id': ''}], -\ 'input:p': [{'type': 'password'}, {'name': ''}, {'id': ''}], -\ 'input:datetime': [{'type': 'datetime'}, {'name': ''}, {'id': ''}], -\ 'input:date': [{'type': 'date'}, {'name': ''}, {'id': ''}], -\ 'input:datetime-local': [{'type': 'datetime-local'}, {'name': ''}, {'id': ''}], -\ 'input:month': [{'type': 'month'}, {'name': ''}, {'id': ''}], -\ 'input:week': [{'type': 'week'}, {'name': ''}, {'id': ''}], -\ 'input:time': [{'type': 'time'}, {'name': ''}, {'id': ''}], -\ 'input:number': [{'type': 'number'}, {'name': ''}, {'id': ''}], -\ 'input:color': [{'type': 'color'}, {'name': ''}, {'id': ''}], -\ 'input:checkbox': [{'type': 'checkbox'}, {'name': ''}, {'id': ''}], -\ 'input:c': [{'type': 'checkbox'}, {'name': ''}, {'id': ''}], -\ 'input:radio': [{'type': 'radio'}, {'name': ''}, {'id': ''}], -\ 'input:r': [{'type': 'radio'}, {'name': ''}, {'id': ''}], -\ 'input:range': [{'type': 'range'}, {'name': ''}, {'id': ''}], -\ 'input:file': [{'type': 'file'}, {'name': ''}, {'id': ''}], -\ 'input:f': [{'type': 'file'}, {'name': ''}, {'id': ''}], -\ 'input:submit': [{'type': 'submit'}, {'value': ''}], -\ 'input:s': [{'type': 'submit'}, {'value': ''}], -\ 'input:image': [{'type': 'image'}, {'src': ''}, {'alt': ''}], -\ 'input:i': [{'type': 'image'}, {'src': ''}, {'alt': ''}], -\ 'input:reset': [{'type': 'reset'}, {'value': ''}], -\ 'input:button': [{'type': 'button'}, {'value': ''}], -\ 'input:b': [{'type': 'button'}, {'value': ''}], -\ 'select': [{'name': ''}, {'id': ''}], -\ 'option': {'value': ''}, -\ 'textarea': [{'name': ''}, {'id': ''}, {'cols': '30'}, {'rows': '10'}], -\ 'menu:context': {'type': 'context'}, -\ 'menu:c': {'type': 'context'}, -\ 'menu:toolbar': {'type': 'toolbar'}, -\ 'menu:t': {'type': 'toolbar'}, -\ 'video': {'src': ''}, -\ 'audio': {'src': ''}, -\ 'html:xml': [{'xmlns': 'http://www.w3.org/1999/xhtml'}, {'xml:lang': '${lang}'}] -\ }, -\ 'aliases': { -\ 'link:*': 'link', -\ 'meta:*': 'meta', -\ 'area:*': 'area', -\ 'bdo:*': 'bdo', -\ 'form:*': 'form', -\ 'input:*': 'input', -\ 'script:*': 'script', -\ 'html:*': 'html', -\ 'a:*': 'a', -\ 'menu:*': 'menu', -\ 'bq': 'blockquote', -\ 'acr': 'acronym', -\ 'fig': 'figure', -\ 'ifr': 'iframe', -\ 'emb': 'embed', -\ 'obj': 'object', -\ 'src': 'source', -\ 'cap': 'caption', -\ 'colg': 'colgroup', -\ 'fst': 'fieldset', -\ 'btn': 'button', -\ 'optg': 'optgroup', -\ 'opt': 'option', -\ 'tarea': 'textarea', -\ 'leg': 'legend', -\ 'sect': 'section', -\ 'art': 'article', -\ 'hdr': 'header', -\ 'ftr': 'footer', -\ 'adr': 'address', -\ 'dlg': 'dialog', -\ 'str': 'strong', -\ 'sty': 'style', -\ 'prog': 'progress', -\ 'fset': 'fieldset', -\ 'datag': 'datagrid', -\ 'datal': 'datalist', -\ 'kg': 'keygen', -\ 'out': 'output', -\ 'det': 'details', -\ 'cmd': 'command' -\ }, -\ 'expandos': { -\ 'ol': 'ol>li', -\ 'ul': 'ul>li', -\ 'dl': 'dl>dt+dd', -\ 'map': 'map>area', -\ 'table': 'table>tr>td', -\ 'colgroup': 'colgroup>col', -\ 'colg': 'colgroup>col', -\ 'tr': 'tr>td', -\ 'select': 'select>option', -\ 'optgroup': 'optgroup>option', -\ 'optg': 'optgroup>option' -\ }, -\ 'empty_elements': 'area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,keygen,command', -\ 'block_elements': 'address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,link,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul,h1,h2,h3,h4,h5,h6', -\ 'inline_elements': 'a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var', -\ 'empty_element_suffix': ' />' -\ }, -\ 'htmldjango': { -\ 'extends': 'html', -\ }, -\ 'html.django_template': { -\ 'extends': 'html', -\ }, -\ 'xsl': { -\ 'extends': 'html', -\ 'default_attributes': { -\ 'tmatch': [{'match': ''}, {'mode': ''}], -\ 'tname': [{'name': ''}], -\ 'xsl:when': {'test': ''}, -\ 'var': [{'name': ''}, {'select': ''}], -\ 'vari': {'name': ''}, -\ 'if': {'test': ''}, -\ 'call': {'name': ''}, -\ 'attr': {'name': ''}, -\ 'wp': [{'name': ''}, {'select': ''}], -\ 'par': [{'name': ''}, {'select': ''}], -\ 'val': {'select': ''}, -\ 'co': {'select': ''}, -\ 'each': {'select': ''}, -\ 'ap': [{'select': ''}, {'mode': ''}] -\ }, -\ 'aliases': { -\ 'tmatch': 'xsl:template', -\ 'tname': 'xsl:template', -\ 'var': 'xsl:variable', -\ 'vari': 'xsl:variable', -\ 'if': 'xsl:if', -\ 'choose': 'xsl:choose', -\ 'call': 'xsl:call-template', -\ 'wp': 'xsl:with-param', -\ 'par': 'xsl:param', -\ 'val': 'xsl:value-of', -\ 'attr': 'xsl:attribute', -\ 'co' : 'xsl:copy-of', -\ 'each' : 'xsl:for-each', -\ 'ap' : 'xsl:apply-templates' -\ }, -\ 'expandos': { -\ 'choose': 'xsl:choose>xsl:when+xsl:otherwise' -\ } -\ }, -\ 'xslt': { -\ 'extends': 'xsl', -\ }, -\ 'haml': { -\ 'indentation': ' ', -\ 'extends': 'html', -\ 'snippets': { -\ 'html:5': "!!! 5\n" -\ ."%html{:lang => \"${lang}\"}\n" -\ ."\t%head\n" -\ ."\t\t%meta{:charset => \"${charset}\"}\n" -\ ."\t\t%title\n" -\ ."\t%body\n" -\ ."\t\t${child}|\n" -\ }, -\ }, -\ 'slim': { -\ 'indentation': ' ', -\ 'extends': 'html', -\ 'snippets': { -\ 'html:5': "doctype 5\n" -\ ."html lang=\"${lang}\"\n" -\ ."\thead\n" -\ ."\t\tmeta charset=\"${charset}\"\n" -\ ."\t\ttitle\n" -\ ."\tbody\n" -\ ."\t\t${child}|\n" -\ }, -\ }, -\ 'xhtml': { -\ 'extends': 'html' -\ }, -\ 'mustache': { -\ 'extends': 'html' -\ }, -\ 'xsd': { -\ 'extends': 'html', -\ 'snippets': { -\ 'xsd:w3c': "<?xml version=\"1.0\"?>\n" -\ ."<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" -\ ."\t<xsd:element name=\"\" type=\"\"/>\n" -\ ."</xsd:schema>\n" -\ } -\ } -\} - -if exists('g:user_zen_settings') - call s:mergeConfig(s:zen_settings, g:user_zen_settings) -endif - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim:set et: diff --git a/sources_forked/zencoding/autoload/zencoding/lang.vim b/sources_forked/zencoding/autoload/zencoding/lang.vim deleted file mode 100755 index a9735991..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang.vim +++ /dev/null @@ -1,11 +0,0 @@ -let s:exists = {} -function zencoding#lang#exists(type) - if len(a:type) == 0 - return 0 - elseif has_key(s:exists, a:type) - return s:exists[a:type] - endif - let s:exists[a:type] = len(globpath(&rtp, 'autoload/zencoding/lang/'.a:type.'.vim')) > 0 - return s:exists[a:type] -endfunction - diff --git a/sources_forked/zencoding/autoload/zencoding/lang/css.vim b/sources_forked/zencoding/autoload/zencoding/lang/css.vim deleted file mode 100755 index 5b1c1182..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang/css.vim +++ /dev/null @@ -1,228 +0,0 @@ -function! zencoding#lang#css#findTokens(str) - return substitute(a:str, '^.*[;{]\s*', '', '') -endfunction - -function! zencoding#lang#css#parseIntoTree(abbr, type) - let abbr = a:abbr - let type = a:type - let prefix = 0 - let value = '' - - let settings = zencoding#getSettings() - let indent = zencoding#getIndentation(type) - - let root = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': 0 } - - " emmet - let tokens = split(abbr, '+\ze[^)!]') - for n in range(len(tokens)) - let token = tokens[n] - let prop = matchlist(token, '^\(-\{0,1}[a-zA-Z]\+\|[a-zA-Z0-9]\++\{0,1}\|([a-zA-Z0-9]\++\{0,1})\)\(\%([0-9.-]\+[pe]\{0,1}-\{0,1}\|-auto\)*\)$') - if len(prop) - let token = substitute(prop[1], '^(\(.*\))', '\1', '') - if token =~ '^-' - let prefix = 1 - let token = token[1:] - endif - let value = '' - for v in split(prop[2], '\d\zs-') - if len(value) > 0 - let value .= ' ' - endif - if token =~ '^[z]' - " TODO - let value .= substitute(v, '[^0-9.]*$', '', '') - elseif v =~ 'p$' - let value .= substitute(v, 'p$', '%', '') - elseif v =~ 'e$' - let value .= substitute(v, 'e$', 'em', '') - elseif v =~ '\.' - let value .= v . 'em' - elseif v == 'auto' - let value .= v - else - let value .= v . 'px' - endif - endfor - endif - - let tag_name = token - if tag_name =~ '.!$' - let tag_name = tag_name[:-2] - let important = 1 - else - let important = 0 - endif - " make default node - let current = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': important } - let current.name = tag_name - - " aliases - let aliases = zencoding#getResource(type, 'aliases', {}) - if has_key(aliases, tag_name) - let current.name = aliases[tag_name] - endif - let use_pipe_for_cursor = zencoding#getResource(type, 'use_pipe_for_cursor', 1) - - " snippets - let snippets = zencoding#getResource(type, 'snippets', {}) - if !empty(snippets) && has_key(snippets, tag_name) - let snippet = snippets[tag_name] - if use_pipe_for_cursor - let snippet = substitute(snippet, '|', '${cursor}', 'g') - endif - let lines = split(snippet, "\n") - call map(lines, 'substitute(v:val, "\\( \\|\\t\\)", escape(indent, "\\\\"), "g")') - let current.snippet = join(lines, "\n") - let current.name = '' - let current.snippet = substitute(current.snippet, ';', value . ';', '') - if use_pipe_for_cursor && len(value) > 0 && stridx(value, '${cursor}') == -1 - let current.snippet = substitute(current.snippet, '${cursor}', '', 'g') . '${cursor}' - endif - if n < len(tokens) - 1 - let current.snippet .= "\n" - endif - endif - - let current.pos = 0 - let lg = matchlist(token, '^\%(linear-gradient\|lg\)(\s*\(\w\+\)\s*,\s*\([^,]\+\)\s*,\s*\([^)]\+\)\s*)$') - if len(lg) - let current.name = '' - let current.snippet = printf("background-image: -webkit-gradient(%s, 0 0, 0 100%, from(%s), to(%s));\n", lg[1], lg[2], lg[3]) - call add(root.child, deepcopy(current)) - let current.snippet = printf("background-image: -webkit-linear-gradient(%s, %s);\n", lg[2], lg[3]) - call add(root.child, deepcopy(current)) - let current.snippet = printf("background-image: -moz-linear-gradient(%s, %s);\n", lg[2], lg[3]) - call add(root.child, deepcopy(current)) - let current.snippet = printf("background-image: -o-linear-gradient(%s, %s);\n", lg[2], lg[3]) - call add(root.child, deepcopy(current)) - let current.snippet = printf("background-image: linear-gradient(%s, %s);\n", lg[2], lg[3]) - call add(root.child, deepcopy(current)) - elseif prefix - let snippet = current.snippet - let current.snippet = '-webkit-' . snippet . "\n" - call add(root.child, deepcopy(current)) - let current.snippet = '-moz-' . snippet . "\n" - call add(root.child, deepcopy(current)) - let current.snippet = snippet - call add(root.child, current) - else - call add(root.child, current) - endif - endfor - return root -endfunction - -function! zencoding#lang#css#toString(settings, current, type, inline, filters, itemno, indent) - let current = a:current - let value = current.value[1:-2] - if zencoding#useFilter(a:filters, 'fc') - let value = substitute(value, '\([^:]\+\):\([^;]*;\)', '\1: \2', 'g') - else - let value = substitute(value, '\([^:]\+\):\([^;]*;\)', '\1:\2', 'g') - endif - if current.important - let value = substitute(value, ';', ' !important;', '') - endif - return value -endfunction - -function! zencoding#lang#css#imageSize() -endfunction - -function! zencoding#lang#css#encodeImage() -endfunction - -function! zencoding#lang#css#parseTag(tag) - return {} -endfunction - -function! zencoding#lang#css#toggleComment() - let line = getline('.') - let mx = '^\(\s*\)/\*\s*\(.*\)\s*\*/\s*$' - if line =~ '{\s*$' - let block = zencoding#util#searchRegion('/\*', '\*/\zs') - if zencoding#util#regionIsValid(block) - let content = zencoding#util#getContent(block) - let content = substitute(content, '/\*\s\(.*\)\s\*/', '\1', '') - call zencoding#util#setContent(block, content) - else - let node = expand('<cword>') - if len(node) - exe "normal ciw\<c-r>='/* '.node.' */'\<cr>" - endif - endif - else - if line =~ mx - let space = substitute(matchstr(line, mx), mx, '\1', '') - let line = substitute(matchstr(line, mx), mx, '\2', '') - let line = space . substitute(line, '^\s*\|\s*$', '\1', 'g') - else - let mx = '^\(\s*\)\(.*\)\s*$' - let line = substitute(line, mx, '\1/* \2 */', '') - endif - call setline('.', line) - endif -endfunction - -function! zencoding#lang#css#balanceTag(flag) range - if a:flag == -2 || a:flag == 2 - let curpos = [0, line("'<"), col("'<"), 0] - else - let curpos = getpos('.') - endif - let block = zencoding#util#getVisualBlock() - if !zencoding#util#regionIsValid(block) - if a:flag > 0 - let block = zencoding#util#searchRegion('^', ';') - if zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endif - else - if a:flag > 0 - let content = zencoding#util#getContent(block) - if content !~ '^{.*}$' - let block = zencoding#util#searchRegion('{', '}') - if zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endif - else - let pos = searchpos('.*;', 'nW') - if pos[0] != 0 - call setpos('.', [0, pos[0], pos[1], 0]) - let block = zencoding#util#searchRegion('^', ';') - if zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endif - endif - endif - if a:flag == -2 || a:flag == 2 - silent! exe "normal! gv" - else - call setpos('.', curpos) - endif -endfunction - -function! zencoding#lang#css#moveNextPrev(flag) - let pos = search('""\|()\|\(:\s*\zs$\)', a:flag ? 'Wbp' : 'Wp') - if pos == 2 - startinsert! - else - silent! normal! l - startinsert - endif -endfunction - -function! zencoding#lang#css#splitJoinTag() - " nothing to do -endfunction - -function! zencoding#lang#css#removeTag() - " nothing to do -endfunction diff --git a/sources_forked/zencoding/autoload/zencoding/lang/haml.vim b/sources_forked/zencoding/autoload/zencoding/lang/haml.vim deleted file mode 100755 index be421c1c..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang/haml.vim +++ /dev/null @@ -1,310 +0,0 @@ -function! zencoding#lang#haml#findTokens(str) - return zencoding#lang#html#findTokens(a:str) -endfunction - -function! zencoding#lang#haml#parseIntoTree(abbr, type) - return zencoding#lang#html#parseIntoTree(a:abbr, a:type) -endfunction - -function! zencoding#lang#haml#toString(settings, current, type, inline, filters, itemno, indent) - let settings = a:settings - let current = a:current - let type = a:type - let inline = a:inline - let filters = a:filters - let itemno = a:itemno - let indent = a:indent - let dollar_expr = zencoding#getResource(type, 'dollar_expr', 1) - let str = "" - - let comment_indent = '' - let comment = '' - let current_name = current.name - if dollar_expr - let current_name = substitute(current.name, '\$$', itemno+1, '') - endif - if len(current.name) > 0 - let str .= '%' . current_name - let tmp = '' - for attr in current.attrs_order - if !has_key(current.attr, attr) - continue - endif - let val = current.attr[attr] - if dollar_expr - while val =~ '\$\([^#{]\|$\)' - let val = substitute(val, '\(\$\+\)\([^{]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - endwhile - let attr = substitute(attr, '\$$', itemno+1, '') - endif - let valtmp = substitute(val, '\${cursor}', '', '') - if attr == 'id' && len(valtmp) > 0 - let str .= '#' . val - elseif attr == 'class' && len(valtmp) > 0 - let str .= '.' . substitute(val, ' ', '.', 'g') - else - if len(tmp) > 0 | let tmp .= ',' | endif - let val = substitute(val, '\${cursor}', '', '') - let tmp .= ' :' . attr . ' => "' . val . '"' - endif - endfor - if len(tmp) - let str .= '{' . tmp . ' }' - endif - if stridx(','.settings.html.empty_elements.',', ','.current_name.',') != -1 && len(current.value) == 0 - let str .= "/" - endif - - let inner = '' - if len(current.value) > 0 - let text = current.value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - let str = substitute(str, '\$#', text, 'g') - endif - let lines = split(text, "\n") - if len(lines) == 1 - let str .= " " . text - else - for line in lines - let str .= "\n" . indent . line . " |" - endfor - endif - elseif len(current.child) == 0 - let str .= '${cursor}' - endif - if len(current.child) == 1 && len(current.child[0].name) == 0 - let text = current.child[0].value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - endif - let lines = split(text, "\n") - if len(lines) == 1 - let str .= " " . text - else - for line in lines - let str .= "\n" . indent . line . " |" - endfor - endif - elseif len(current.child) > 0 - for child in current.child - let inner .= zencoding#toString(child, type, inline, filters, itemno) - endfor - let inner = substitute(inner, "\n", "\n" . escape(indent, '\'), 'g') - let inner = substitute(inner, "\n" . escape(indent, '\') . "$", "", 'g') - let str .= "\n" . indent . inner - endif - else - let str = current.value[1:-2] - if dollar_expr - let str = substitute(str, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let str = substitute(str, '\${nr}', "\n", 'g') - let str = substitute(str, '\\\$', '$', 'g') - endif - endif - let str .= "\n" - return str -endfunction - -function! zencoding#lang#haml#imageSize() - let line = getline('.') - let current = zencoding#lang#haml#parseTag(line) - if empty(current) || !has_key(current.attr, 'src') - return - endif - let fn = current.attr.src - if fn =~ '^\s*$' - return - elseif fn !~ '^\(/\|http\)' - let fn = simplify(expand('%:h') . '/' . fn) - endif - - let [width, height] = zencoding#util#getImageSize(fn) - if width == -1 && height == -1 - return - endif - let current.attr.width = width - let current.attr.height = height - let current.attrs_order += ['width', 'height'] - let haml = zencoding#toString(current, 'haml', 1) - let haml = substitute(haml, '\${cursor}', '', '') - call setline('.', substitute(matchstr(line, '^\s*') . haml, "\n", "", "g")) -endfunction - -function! zencoding#lang#haml#encodeImage() -endfunction - -function! zencoding#lang#haml#parseTag(tag) - let current = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'attrs_order': [] } - let mx = '%\([a-zA-Z][a-zA-Z0-9]*\)\s*\%({\(.*\)}\)' - let match = matchstr(a:tag, mx) - let current.name = substitute(match, mx, '\1', 'i') - let attrs = substitute(match, mx, '\2', 'i') - let mx = '\([a-zA-Z0-9]\+\)\s*=>\s*\%(\([^"'' \t]\+\)\|"\([^"]\{-}\)"\|''\([^'']\{-}\)''\)' - while len(attrs) > 0 - let match = matchstr(attrs, mx) - if len(match) == 0 - break - endif - let attr_match = matchlist(match, mx) - let name = attr_match[1] - let value = len(attr_match[2]) ? attr_match[2] : attr_match[3] - let current.attr[name] = value - let current.attrs_order += [name] - let attrs = attrs[stridx(attrs, match) + len(match):] - endwhile - return current -endfunction - -function! zencoding#lang#haml#toggleComment() - let line = getline('.') - let space = matchstr(line, '^\s*') - if line =~ '^\s*-#' - call setline('.', space . matchstr(line[len(space)+2:], '^\s*\zs.*')) - elseif line =~ '^\s*%[a-z]' - call setline('.', space . '-# ' . line[len(space):]) - endif -endfunction - -function! zencoding#lang#haml#balanceTag(flag) range - let block = zencoding#util#getVisualBlock() - if a:flag == -2 || a:flag == 2 - let curpos = [0, line("'<"), col("'<"), 0] - else - let curpos = getpos('.') - endif - let n = curpos[1] - let ml = len(matchstr(getline(n), '^\s*')) - - if a:flag > 0 - if a:flag == 1 || !zencoding#util#regionIsValid(block) - let n = line('.') - else - while n > 0 - let l = len(matchstr(getline(n), '^\s*\ze%[a-z]')) - if l > 0 && l < ml - let ml = l - break - endif - let n -= 1 - endwhile - endif - let sn = n - if n == 0 - let ml = 0 - endif - while n < line('$') - let l = len(matchstr(getline(n), '^\s*%[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - call setpos('.', [0, n, 1, 0]) - normal! V - call setpos('.', [0, sn, 1, 0]) - else - while n > 0 - let l = len(matchstr(getline(n), '^\s*\ze[a-z]')) - if l > 0 && l > ml - let ml = l - break - endif - let n += 1 - endwhile - let sn = n - if n == 0 - let ml = 0 - endif - while n < line('$') - let l = len(matchstr(getline(n), '^\s*%[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - call setpos('.', [0, n, 1, 0]) - normal! V - call setpos('.', [0, sn, 1, 0]) - endif -endfunction - -function! zencoding#lang#haml#moveNextPrev(flag) - let pos = search('""', a:flag ? 'Wb' : 'W') - if pos != 0 - silent! normal! l - startinsert - endif -endfunction - -function! zencoding#lang#haml#splitJoinTag() - let n = line('.') - let sml = len(matchstr(getline(n), '^\s*%[a-z]')) - while n > 0 - if getline(n) =~ '^\s*\ze%[a-z]' - if len(matchstr(getline(n), '^\s*%[a-z]')) < sml - break - endif - let line = getline(n) - call setline(n, substitute(line, '^\s*%\w\+\%(\s*{[^}]*}\|\s\)\zs.*', '', '')) - let sn = n - let n += 1 - let ml = len(matchstr(getline(n), '^\s*%[a-z]')) - if len(matchstr(getline(n), '^\s*')) > ml - while n <= line('$') - let l = len(matchstr(getline(n), '^\s*')) - if l <= ml - break - endif - exe n "delete" - endwhile - call setpos('.', [0, sn, 1, 0]) - else - let tag = matchstr(getline(sn), '^\s*%\zs\(\w\+\)') - let spaces = matchstr(getline(sn), '^\s*') - let settings = zencoding#getSettings() - if stridx(','.settings.html.inline_elements.',', ','.tag.',') == -1 - call append(sn, spaces . ' ') - call setpos('.', [0, sn+1, 1, 0]) - else - call setpos('.', [0, sn, 1, 0]) - endif - startinsert! - endif - break - endif - let n -= 1 - endwhile -endfunction - -function! zencoding#lang#haml#removeTag() - let n = line('.') - let ml = 0 - while n > 0 - if getline(n) =~ '^\s*\ze[a-z]' - let ml = len(matchstr(getline(n), '^\s*%[a-z]')) - break - endif - let n -= 1 - endwhile - let sn = n - while n < line('$') - let l = len(matchstr(getline(n), '^\s*%[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - if sn == n - exe "delete" - else - exe sn "," (n-1) "delete" - endif -endfunction diff --git a/sources_forked/zencoding/autoload/zencoding/lang/html.vim b/sources_forked/zencoding/autoload/zencoding/lang/html.vim deleted file mode 100755 index d7a1e634..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang/html.vim +++ /dev/null @@ -1,692 +0,0 @@ -let s:mx = '\([+>]\|[<^]\+\)\{-}\s*' -\ .'\((*\)\{-}\s*' -\ .'\([@#.]\{-}[a-zA-Z\!][a-zA-Z0-9:_\!\-$]*\|{\%([^$}]\+\|\$#\|\${\w\+}\|\$\+\)*}[ \t\r\n}]*\)' -\ .'\(' -\ .'\%(' -\ .'\%(#{[{}a-zA-Z0-9_\-\$]\+\|#[a-zA-Z0-9_\-\$]\+\)' -\ .'\|\%(\[[^\]]\+\]\)' -\ .'\|\%(\.{[{}a-zA-Z0-9_\-\$]\+\|\.[a-zA-Z0-9_\-\$]\+\)' -\ .'\)*' -\ .'\)' -\ .'\%(\({\%([^$}]\+\|\$#\|\${\w\+}\|\$\+\)*}\)\)\{0,1}' -\ .'\%(\*\([0-9]\+\)\)\{0,1}' -\ .'\(\%()\%(\*[0-9]\+\)\{0,1}\)*\)' - -function! zencoding#lang#html#findTokens(str) - let str = a:str - let [pos, last_pos] = [0, 0] - while 1 - let tag = matchstr(str, '<[a-zA-Z].\{-}>', pos) - if len(tag) == 0 - break - endif - let pos = stridx(str, tag, pos) + len(tag) - endwhile - let last_pos = pos - while len(str) > 0 - let token = matchstr(str, s:mx, pos) - if token == '' - break - endif - if token =~ '^\s' - let token = matchstr(token, '^\s*\zs.*') - let last_pos = stridx(str, token, pos) - endif - let pos = stridx(str, token, pos) + len(token) - endwhile - return a:str[last_pos :-1] -endfunction - -function! zencoding#lang#html#parseIntoTree(abbr, type) - let abbr = a:abbr - let type = a:type - - let settings = zencoding#getSettings() - if !has_key(settings, type) - let type = 'html' - endif - if len(type) == 0 | let type = 'html' | endif - - let settings = zencoding#getSettings() - let indent = zencoding#getIndentation(type) - - " try 'foo' to (foo-x) - let rabbr = zencoding#getExpandos(type, abbr) - if rabbr == abbr - " try 'foo+(' to (foo-x) - let rabbr = substitute(abbr, '\%(+\|^\)\([a-zA-Z][a-zA-Z0-9+]\+\)+\([(){}>]\|$\)', '\="(".zencoding#getExpandos(type, submatch(1)).")".submatch(2)', 'i') - endif - let abbr = rabbr - - let root = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': 0, 'attrs_order': ['id', 'class'] } - let parent = root - let last = root - let pos = [] - while len(abbr) - " parse line - let match = matchstr(abbr, s:mx) - let str = substitute(match, s:mx, '\0', 'ig') - let operator = substitute(match, s:mx, '\1', 'ig') - let block_start = substitute(match, s:mx, '\2', 'ig') - let tag_name = substitute(match, s:mx, '\3', 'ig') - let attributes = substitute(match, s:mx, '\4', 'ig') - let value = substitute(match, s:mx, '\5', 'ig') - let multiplier = 0 + substitute(match, s:mx, '\6', 'ig') - let block_end = substitute(match, s:mx, '\7', 'ig') - let important = 0 - if len(str) == 0 - break - endif - if tag_name =~ '^#' - let attributes = tag_name . attributes - let tag_name = 'div' - endif - if tag_name =~ '.!$' - let tag_name = tag_name[:-2] - let important = 1 - endif - if tag_name =~ '^\.' - let attributes = tag_name . attributes - let tag_name = 'div' - endif - if multiplier <= 0 | let multiplier = 1 | endif - - " make default node - let current = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': 0, 'attrs_order': ['id', 'class'] } - let current.name = tag_name - - let current.important = important - - " aliases - let aliases = zencoding#getResource(type, 'aliases', {}) - if has_key(aliases, tag_name) - let current.name = aliases[tag_name] - endif - - let use_pipe_for_cursor = zencoding#getResource(type, 'use_pipe_for_cursor', 1) - - " snippets - let snippets = zencoding#getResource(type, 'snippets', {}) - if !empty(snippets) && has_key(snippets, tag_name) - let snippet = snippets[tag_name] - if use_pipe_for_cursor - let snippet = substitute(snippet, '|', '${cursor}', 'g') - endif - let lines = split(snippet, "\n") - call map(lines, 'substitute(v:val, "\\( \\|\\t\\)", escape(indent, "\\\\"), "g")') - let current.snippet = join(lines, "\n") - let current.name = '' - endif - - " default_attributes - let default_attributes = zencoding#getResource(type, 'default_attributes', {}) - if !empty(default_attributes) - for pat in [current.name, tag_name] - if has_key(default_attributes, pat) - if type(default_attributes[pat]) == 4 - let a = default_attributes[pat] - let current.attrs_order += keys(a) - if use_pipe_for_cursor - for k in keys(a) - let current.attr[k] = len(a[k]) ? substitute(a[k], '|', '${cursor}', 'g') : '${cursor}' - endfor - else - for k in keys(a) - let current.attr[k] = a[k] - endfor - endif - else - for a in default_attributes[pat] - let current.attrs_order += keys(a) - if use_pipe_for_cursor - for k in keys(a) - let current.attr[k] = len(a[k]) ? substitute(a[k], '|', '${cursor}', 'g') : '${cursor}' - endfor - else - for k in keys(a) - let current.attr[k] = a[k] - endfor - endif - endfor - endif - if has_key(settings.html.default_attributes, current.name) - let current.name = substitute(current.name, ':.*$', '', '') - endif - break - endif - endfor - endif - - " parse attributes - if len(attributes) - let attr = attributes - while len(attr) - let item = matchstr(attr, '\(\%(\%(#[{}a-zA-Z0-9_\-\$]\+\)\|\%(\[[^\]]\+\]\)\|\%(\.[{}a-zA-Z0-9_\-\$]\+\)*\)\)') - if len(item) == 0 - break - endif - if item[0] == '#' - let current.attr.id = item[1:] - endif - if item[0] == '.' - let current.attr.class = substitute(item[1:], '\.', ' ', 'g') - endif - if item[0] == '[' - let atts = item[1:-2] - while len(atts) - let amat = matchstr(atts, '\(\w\+\%(="[^"]*"\|=''[^'']*''\|[^ ''"\]]*\)\{0,1}\)') - if len(amat) == 0 - break - endif - let key = split(amat, '=')[0] - let val = amat[len(key)+1:] - if val =~ '^["'']' - let val = val[1:-2] - endif - let current.attr[key] = val - if index(current.attrs_order, key) == -1 - let current.attrs_order += [key] - endif - let atts = atts[stridx(atts, amat) + len(amat):] - endwhile - endif - let attr = substitute(strpart(attr, len(item)), '^\s*', '', '') - endwhile - endif - - " parse text - if tag_name =~ '^{.*}$' - let current.name = '' - let current.value = tag_name - else - let current.value = value - endif - let current.multiplier = multiplier - - " parse step inside/outside - if !empty(last) - if operator =~ '>' - unlet! parent - let parent = last - let current.parent = last - let current.pos = last.pos + 1 - else - let current.parent = parent - let current.pos = last.pos - endif - else - let current.parent = parent - let current.pos = 1 - endif - if operator =~ '[<^]' - for c in range(len(operator)) - let tmp = parent.parent - if empty(tmp) - break - endif - let parent = tmp - let current.parent = tmp - endfor - endif - - call add(parent.child, current) - let last = current - - " parse block - if block_start =~ '(' - if operator =~ '>' - let last.pos += 1 - endif - for n in range(len(block_start)) - let pos += [last.pos] - endfor - endif - if block_end =~ ')' - for n in split(substitute(substitute(block_end, ' ', '', 'g'), ')', ',),', 'g'), ',') - if n == ')' - if len(pos) > 0 && last.pos >= pos[-1] - for c in range(last.pos - pos[-1]) - let tmp = parent.parent - if !has_key(tmp, 'parent') - break - endif - let parent = tmp - endfor - if len(pos) > 0 - call remove(pos, -1) - endif - let last = parent - let last.pos += 1 - endif - elseif len(n) - let cl = last.child - let cls = [] - for c in range(n[1:]) - let cls += cl - endfor - let last.child = cls - endif - endfor - endif - let abbr = abbr[stridx(abbr, match) + len(match):] - - if g:zencoding_debug > 1 - echomsg "str=".str - echomsg "block_start=".block_start - echomsg "tag_name=".tag_name - echomsg "operator=".operator - echomsg "attributes=".attributes - echomsg "value=".value - echomsg "multiplier=".multiplier - echomsg "block_end=".block_end - echomsg "abbr=".abbr - echomsg "pos=".string(pos) - echomsg "---" - endif - endwhile - return root -endfunction - -function! zencoding#lang#html#toString(settings, current, type, inline, filters, itemno, indent) - let settings = a:settings - let current = a:current - let type = a:type - let inline = a:inline - let filters = a:filters - let itemno = a:itemno - let indent = a:indent - let dollar_expr = zencoding#getResource(type, 'dollar_expr', 1) - - if zencoding#useFilter(filters, 'haml') - return zencoding#lang#haml#toString(settings, current, type, inline, filters, itemno, indent) - endif - if zencoding#useFilter(filters, 'slim') - return zencoding#lang#slim#toString(settings, current, type, inline, filters, itemno, indent) - endif - - let comment = '' - let current_name = current.name - if dollar_expr - let current_name = substitute(current_name, '\$$', itemno+1, '') - endif - - let str = '' - if len(current_name) == 0 - let text = current.value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - endif - return text - endif - if len(current_name) > 0 - let str .= '<' . current_name - for attr in current.attrs_order - if !has_key(current.attr, attr) - continue - endif - let val = current.attr[attr] - if dollar_expr - while val =~ '\$\([^#{]\|$\)' - let val = substitute(val, '\(\$\+\)\([^{]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - endwhile - let attr = substitute(attr, '\$$', itemno+1, '') - endif - let str .= ' ' . attr . '="' . val . '"' - if zencoding#useFilter(filters, 'c') - if attr == 'id' | let comment .= '#' . val | endif - if attr == 'class' | let comment .= '.' . val | endif - endif - endfor - if len(comment) > 0 - let str = "<!-- " . comment . " -->\n" . str - endif - if stridx(','.settings.html.empty_elements.',', ','.current_name.',') != -1 - let str .= settings.html.empty_element_suffix - else - let str .= ">" - let text = current.value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - let str = substitute(str, '\("\zs$#\ze"\|\s\zs\$#"\|"\$#\ze\s\)', text, 'g') - endif - let str .= text - let nc = len(current.child) - let dr = 0 - if nc > 0 - for n in range(nc) - let child = current.child[n] - if child.multiplier > 1 - let str .= "\n" . indent - let dr = 1 - elseif len(current_name) > 0 && stridx(','.settings.html.inline_elements.',', ','.current_name.',') == -1 - if nc > 1 || (len(child.name) > 0 && stridx(','.settings.html.inline_elements.',', ','.child.name.',') == -1) - let str .= "\n" . indent - let dr = 1 - elseif current.multiplier == 1 && nc == 1 && len(child.name) == 0 - let str .= "\n" . indent - let dr = 1 - endif - endif - let inner = zencoding#toString(child, type, 0, filters, itemno) - let inner = substitute(inner, "^\n", "", 'g') - let inner = substitute(inner, "\n", "\n" . escape(indent, '\'), 'g') - let inner = substitute(inner, "\n" . escape(indent, '\') . '$', '', 'g') - let str .= inner - endfor - else - let str .= '${cursor}' - endif - if dr - let str .= "\n" - endif - let str .= "</" . current_name . ">" - endif - if len(comment) > 0 - let str .= "\n<!-- /" . comment . " -->" - endif - if len(current_name) > 0 && current.multiplier > 0 || stridx(','.settings.html.block_elements.',', ','.current_name.',') != -1 - let str .= "\n" - endif - return str -endfunction - -function! zencoding#lang#html#imageSize() - let img_region = zencoding#util#searchRegion('<img\s', '>') - if !zencoding#util#regionIsValid(img_region) || !zencoding#util#cursorInRegion(img_region) - return - endif - let content = zencoding#util#getContent(img_region) - if content !~ '^<img[^><]\+>$' - return - endif - let current = zencoding#lang#html#parseTag(content) - if empty(current) || !has_key(current.attr, 'src') - return - endif - let fn = current.attr.src - if fn =~ '^\s*$' - return - elseif fn !~ '^\(/\|http\)' - let fn = simplify(expand('%:h') . '/' . fn) - endif - - let [width, height] = zencoding#util#getImageSize(fn) - if width == -1 && height == -1 - return - endif - let current.attr.width = width - let current.attr.height = height - let current.attrs_order += ['width', 'height'] - let html = substitute(zencoding#toString(current, 'html', 1), '\n', '', '') - let html = substitute(html, '\${cursor}', '', '') - call zencoding#util#setContent(img_region, html) -endfunction - -function! zencoding#lang#html#encodeImage() - let img_region = zencoding#util#searchRegion('<img\s', '>') - if !zencoding#util#regionIsValid(img_region) || !zencoding#util#cursorInRegion(img_region) - return - endif - let content = zencoding#util#getContent(img_region) - if content !~ '^<img[^><]\+>$' - return - endif - let current = zencoding#lang#html#parseTag(content) - if empty(current) || !has_key(current.attr, 'src') - return - endif - let fn = current.attr.src - if fn !~ '^\(/\|http\)' - let fn = simplify(expand('%:h') . '/' . fn) - endif - - let [width, height] = zencoding#util#getImageSize(fn) - if width == -1 && height == -1 - return - endif - let current.attr.width = width - let current.attr.height = height - let html = zencoding#toString(current, 'html', 1) - call zencoding#util#setContent(img_region, html) -endfunction - -function! zencoding#lang#html#parseTag(tag) - let current = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'attrs_order': [] } - let mx = '<\([a-zA-Z][a-zA-Z0-9]*\)\(\%(\s[a-zA-Z][a-zA-Z0-9]\+=\%([^"'' \t]\+\|"[^"]\{-}"\|''[^'']\{-}''\)\s*\)*\)\(/\{0,1}\)>' - let match = matchstr(a:tag, mx) - let current.name = substitute(match, mx, '\1', 'i') - let attrs = substitute(match, mx, '\2', 'i') - let mx = '\([a-zA-Z0-9]\+\)=\%(\([^"'' \t]\+\)\|"\([^"]\{-}\)"\|''\([^'']\{-}\)''\)' - while len(attrs) > 0 - let match = matchstr(attrs, mx) - if len(match) == 0 - break - endif - let attr_match = matchlist(match, mx) - let name = attr_match[1] - let value = len(attr_match[2]) ? attr_match[2] : attr_match[3] - let current.attr[name] = value - let current.attrs_order += [name] - let attrs = attrs[stridx(attrs, match) + len(match):] - endwhile - return current -endfunction - -function! zencoding#lang#html#toggleComment() - let orgpos = getpos('.') - let curpos = getpos('.') - let mx = '<\%#[^>]*>' - while 1 - let block = zencoding#util#searchRegion('<!--', '-->') - if zencoding#util#regionIsValid(block) - let block[1][1] += 2 - let content = zencoding#util#getContent(block) - let content = substitute(content, '^<!--\s\(.*\)\s-->$', '\1', '') - call zencoding#util#setContent(block, content) - silent! call setpos('.', orgpos) - return - endif - let block = zencoding#util#searchRegion('<[^>]', '>') - if !zencoding#util#regionIsValid(block) - let pos1 = searchpos('<', 'bcW') - if pos1[0] == 0 && pos1[1] == 0 - return - endif - let curpos = getpos('.') - continue - endif - let pos1 = block[0] - let pos2 = block[1] - let content = zencoding#util#getContent(block) - let tag_name = matchstr(content, '^<\zs/\{0,1}[^ \r\n>]\+') - if tag_name[0] == '/' - call setpos('.', [0, pos1[0], pos1[1], 0]) - let pos2 = searchpairpos('<'. tag_name[1:] . '>', '', '</' . tag_name[1:] . '>', 'bnW') - let pos1 = searchpos('>', 'cneW') - let block = [pos2, pos1] - elseif tag_name =~ '/$' - if !zencoding#util#pointInRegion(orgpos[1:2], block) - " it's broken tree - call setpos('.', orgpos) - let block = zencoding#util#searchRegion('>', '<') - let content = '><!-- ' . zencoding#util#getContent(block)[1:-2] . ' --><' - call zencoding#util#setContent(block, content) - silent! call setpos('.', orgpos) - return - endif - else - call setpos('.', [0, pos2[0], pos2[1], 0]) - let pos2 = searchpairpos('<'. tag_name . '>', '', '</' . tag_name . '>', 'nW') - call setpos('.', [0, pos2[0], pos2[1], 0]) - let pos2 = searchpos('>', 'neW') - let block = [pos1, pos2] - endif - if !zencoding#util#regionIsValid(block) - silent! call setpos('.', orgpos) - return - endif - if zencoding#util#pointInRegion(curpos[1:2], block) - let content = '<!-- ' . zencoding#util#getContent(block) . ' -->' - call zencoding#util#setContent(block, content) - silent! call setpos('.', orgpos) - return - endif - endwhile -endfunction - -function! zencoding#lang#html#balanceTag(flag) range - let vblock = zencoding#util#getVisualBlock() - if a:flag == -2 || a:flag == 2 - let curpos = [0, line("'<"), col("'<"), 0] - else - let curpos = getpos('.') - endif - let settings = zencoding#getSettings() - - if a:flag > 0 - let mx = '<\([a-zA-Z][a-zA-Z0-9:_\-]*\)[^>]*>' - while 1 - let pos1 = searchpos(mx, 'bW') - let content = matchstr(getline(pos1[0])[pos1[1]-1:], mx) - let tag_name = matchstr(content, '^<\zs[a-zA-Z0-9:_\-]*\ze') - if stridx(','.settings.html.empty_elements.',', ','.tag_name.',') != -1 - let pos2 = searchpos('>', 'nW') - else - let pos2 = searchpairpos('<' . tag_name . '[^>]*>', '', '</'. tag_name . '>\zs', 'nW') - endif - let block = [pos1, pos2] - if pos1[0] == 0 && pos1[1] == 0 - break - endif - if zencoding#util#pointInRegion(curpos[1:2], block) && zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endwhile - else - let mx = '<\([a-zA-Z][a-zA-Z0-9:_\-]*\)[^>]*>' - while 1 - let pos1 = searchpos(mx, 'W') - if pos1 == curpos[1:2] - let pos1 = searchpos(mx . '\zs', 'W') - let pos2 = searchpos('.\ze<', 'W') - let block = [pos1, pos2] - if zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endif - let content = matchstr(getline(pos1[0])[pos1[1]-1:], mx) - let tag_name = matchstr(content, '^<\zs[a-zA-Z0-9:_\-]*\ze') - if stridx(','.settings.html.empty_elements.',', ','.tag_name.',') != -1 - let pos2 = searchpos('>', 'nW') - else - let pos2 = searchpairpos('<' . tag_name . '[^>]*>', '', '</'. tag_name . '>\zs', 'nW') - endif - let block = [pos1, pos2] - if pos1[0] == 0 && pos1[1] == 0 - break - endif - if zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endwhile - endif - call setpos('.', curpos) - if a:flag == -2 || a:flag == 2 - silent! exe "normal! gv" - endif -endfunction - -function! zencoding#lang#html#moveNextPrev(flag) - let pos = search('\%(</\w\+\)\@<!\zs><\/\|\(""\)\|^\(\s*\)$', a:flag ? 'Wpb' : 'Wp') - if pos == 3 - startinsert! - elseif pos != 0 - silent! normal! l - startinsert - endif -endfunction - -function! zencoding#lang#html#splitJoinTag() - let curpos = getpos('.') - while 1 - let mx = '<\(/\{0,1}[a-zA-Z][a-zA-Z0-9:_\-]*\)[^>]*>' - let pos1 = searchpos(mx, 'bcnW') - let content = matchstr(getline(pos1[0])[pos1[1]-1:], mx) - let tag_name = substitute(content, '^<\(/\{0,1}[a-zA-Z][a-zA-Z0-9:_\-]*\).*$', '\1', '') - let block = [pos1, [pos1[0], pos1[1] + len(content) - 1]] - if content[-2:] == '/>' && zencoding#util#cursorInRegion(block) - let content = content[:-3] . "></" . tag_name . '>' - call zencoding#util#setContent(block, content) - call setpos('.', [0, block[0][0], block[0][1], 0]) - return - else - if tag_name[0] == '/' - let pos1 = searchpos('<' . tag_name[1:] . '[^a-zA-Z0-9]', 'bcnW') - call setpos('.', [0, pos1[0], pos1[1], 0]) - let pos2 = searchpos('</' . tag_name[1:] . '>', 'cneW') - else - let pos2 = searchpos('</' . tag_name . '>', 'cneW') - endif - let block = [pos1, pos2] - let content = zencoding#util#getContent(block) - if zencoding#util#pointInRegion(curpos[1:2], block) && content[1:] !~ '<' . tag_name . '[^a-zA-Z0-9]*[^>]*>' - let content = matchstr(content, mx)[:-2] . '/>' - call zencoding#util#setContent(block, content) - call setpos('.', [0, block[0][0], block[0][1], 0]) - return - else - if block[0][0] > 0 - call setpos('.', [0, block[0][0]-1, block[0][1], 0]) - else - call setpos('.', curpos) - return - endif - endif - endif - endwhile -endfunction - -function! zencoding#lang#html#removeTag() - let curpos = getpos('.') - while 1 - let mx = '<\(/\{0,1}[a-zA-Z][a-zA-Z0-9:_\-]*\)[^>]*>' - let pos1 = searchpos(mx, 'bcnW') - let content = matchstr(getline(pos1[0])[pos1[1]-1:], mx) - let tag_name = substitute(content, '^<\(/\{0,1}[a-zA-Z0-9:_\-]*\).*$', '\1', '') - let block = [pos1, [pos1[0], pos1[1] + len(content) - 1]] - if content[-2:] == '/>' && zencoding#util#cursorInRegion(block) - call zencoding#util#setContent(block, '') - call setpos('.', [0, block[0][0], block[0][1], 0]) - return - else - if tag_name[0] == '/' - let pos1 = searchpos('<' . tag_name[1:] . '[^a-zA-Z0-9]', 'bcnW') - call setpos('.', [0, pos1[0], pos1[1], 0]) - let pos2 = searchpos('</' . tag_name[1:] . '>', 'cneW') - else - let pos2 = searchpos('</' . tag_name . '>', 'cneW') - endif - let block = [pos1, pos2] - let content = zencoding#util#getContent(block) - if zencoding#util#pointInRegion(curpos[1:2], block) && content[1:] !~ '<' . tag_name . '[^a-zA-Z0-9]*[^>]*>' - call zencoding#util#setContent(block, '') - call setpos('.', [0, block[0][0], block[0][1], 0]) - return - else - if block[0][0] > 0 - call setpos('.', [0, block[0][0]-1, block[0][1], 0]) - else - call setpos('.', curpos) - return - endif - endif - endif - endwhile -endfunction diff --git a/sources_forked/zencoding/autoload/zencoding/lang/sass.vim b/sources_forked/zencoding/autoload/zencoding/lang/sass.vim deleted file mode 100755 index 6b89b893..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang/sass.vim +++ /dev/null @@ -1,158 +0,0 @@ -function! zencoding#lang#sass#findTokens(str) - return zencoding#lang#html#findTokens(a:str) -endfunction - -function! zencoding#lang#sass#parseIntoTree(abbr, type) - if a:abbr =~ '>' - return zencoding#lang#html#parseIntoTree(a:abbr, a:type) - else - return zencoding#lang#css#parseIntoTree(a:abbr, a:type) - endif -endfunction - -function! zencoding#lang#sass#toString(settings, current, type, inline, filters, itemno, indent) - let settings = a:settings - let current = a:current - let type = a:type - let inline = a:inline - let filters = a:filters - let itemno = a:itemno - let indent = a:indent - let str = "" - - let current_name = current.name - let current_name = substitute(current.name, '\$$', itemno+1, '') - if len(current.name) > 0 - let str .= current_name - let tmp = '' - for attr in keys(current.attr) - let val = current.attr[attr] - while val =~ '\$\([^#{]\|$\)' - let val = substitute(val, '\(\$\+\)\([^{]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - endwhile - let attr = substitute(attr, '\$$', itemno+1, '') - if attr == 'id' - let str .= '#' . val - elseif attr == 'class' - let str .= '.' . val - else - let tmp .= attr . ': ' . val - endif - endfor - if len(tmp) > 0 - let str .= "\n" - for line in split(tmp, "\n") - let str .= indent . line . "\n" - endfor - else - let str .= "\n" - endif - - let inner = '' - for child in current.child - let inner .= zencoding#toString(child, type, inline, filters, itemno) - endfor - let inner = substitute(inner, "\n", "\n" . indent, 'g') - let inner = substitute(inner, "\n" . indent . "$", "", 'g') - let str .= indent . inner - else - let text = zencoding#lang#css#toString(settings, current, type, inline, filters, itemno, indent) - let text = substitute(text, '\${cursor}', '', 'g') - let text = substitute(text, '\s*;$', '', '') - return text - endif - return str -endfunction - -function! zencoding#lang#sass#imageSize() -endfunction - -function! zencoding#lang#sass#encodeImage() -endfunction - -function! zencoding#lang#sass#parseTag(tag) -endfunction - -function! zencoding#lang#sass#toggleComment() -endfunction - -function! zencoding#lang#sass#balanceTag(flag) range - let block = zencoding#util#getVisualBlock() - if a:flag == -2 || a:flag == 2 - let curpos = [0, line("'<"), col("'<"), 0] - else - let curpos = getpos('.') - endif - let n = curpos[1] - let ml = len(matchstr(getline(n), '^\s*')) - - if a:flag > 0 - if a:flag == 1 || !zencoding#util#regionIsValid(block) - let n = line('.') - else - while n > 0 - let l = len(matchstr(getline(n), '^\s*\ze[a-z]')) - if l > 0 && l < ml - let ml = l - break - endif - let n -= 1 - endwhile - endif - let sn = n - if n == 0 - let ml = 0 - endif - while n < line('$') - let l = len(matchstr(getline(n), '^\s*[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - call setpos('.', [0, n, 1, 0]) - normal! V - call setpos('.', [0, sn, 1, 0]) - else - while n > 0 - let l = len(matchstr(getline(n), '^\s*\ze[a-z]')) - if l > 0 && l > ml - let ml = l - break - endif - let n += 1 - endwhile - let sn = n - if n == 0 - let ml = 0 - endif - while n < line('$') - let l = len(matchstr(getline(n), '^\s*[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - call setpos('.', [0, n, 1, 0]) - normal! V - call setpos('.', [0, sn, 1, 0]) - endif -endfunction - -function! zencoding#lang#sass#moveNextPrev(flag) - let pos = search('""\|\(^\s*|\s*\zs\)', a:flag ? 'Wpb' : 'Wp') - if pos == 2 - startinsert! - elseif pos != 0 - silent! normal! l - startinsert - endif -endfunction - -function! zencoding#lang#sass#splitJoinTag() -endfunction - -function! zencoding#lang#sass#removeTag() -endfunction diff --git a/sources_forked/zencoding/autoload/zencoding/lang/scss.vim b/sources_forked/zencoding/autoload/zencoding/lang/scss.vim deleted file mode 100755 index 39890af2..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang/scss.vim +++ /dev/null @@ -1,121 +0,0 @@ -function! zencoding#lang#scss#findTokens(str) - return zencoding#lang#html#findTokens(a:str) -endfunction - -function! zencoding#lang#scss#parseIntoTree(abbr, type) - if a:abbr =~ '>' - return zencoding#lang#html#parseIntoTree(a:abbr, a:type) - else - return zencoding#lang#css#parseIntoTree(a:abbr, a:type) - endif -endfunction - -function! zencoding#lang#scss#toString(settings, current, type, inline, filters, itemno, indent) - let settings = a:settings - let current = a:current - let type = a:type - let inline = a:inline - let filters = a:filters - let itemno = a:itemno - let indent = a:indent - let str = "" - - let current_name = substitute(current.name, '\$$', itemno+1, '') - if len(current.name) > 0 - let str .= current_name - let tmp = '' - for attr in keys(current.attr) - let val = current.attr[attr] - while val =~ '\$\([^#{]\|$\)' - let val = substitute(val, '\(\$\+\)\([^{]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - endwhile - let attr = substitute(attr, '\$$', itemno+1, '') - if attr == 'id' - let str .= '#' . val - elseif attr == 'class' - let str .= '.' . val - else - let tmp .= attr . ': ' . val . ';' - endif - endfor - if len(tmp) > 0 - let str .= " {\n" - for line in split(tmp, "\n") - let str .= indent . line . "\n" - endfor - else - let str .= " {\n" - endif - - let inner = '' - for child in current.child - let inner .= zencoding#toString(child, type, inline, filters, itemno) - endfor - let inner = substitute(inner, "\n", "\n" . escape(indent, '\'), 'g') - let inner = substitute(inner, "\n" . escape(indent, '\') . "$", "", 'g') - let str .= indent . inner . "\n}\n" - else - return zencoding#lang#css#toString(settings, current, type, inline, filters, itemno, indent) - endif - return str -endfunction - -function! zencoding#lang#scss#imageSize() - call zencoding#lang#css#imageSize() -endfunction - -function! zencoding#lang#scss#encodeImage() - return zencoding#lang#css#encodeImage() -endfunction - -function! zencoding#lang#scss#parseTag(tag) - return zencoding#lang#css#parseTag(a:tag) -endfunction - -function! zencoding#lang#scss#toggleComment() - call zencoding#lang#css#toggleComment() -endfunction - -function! zencoding#lang#scss#balanceTag(flag) range - if a:flag == -2 || a:flag == 2 - let curpos = [0, line("'<"), col("'<"), 0] - call setpos('.', curpos) - else - let curpos = getpos('.') - endif - if a:flag < 0 - let ret = searchpair('}', '', '.\zs{') - else - let ret = searchpair('{', '', '}', 'bW') - endif - if ret > 0 - let pos1 = getpos('.')[1:2] - if a:flag < 0 - let pos2 = searchpairpos('{', '', '}') - else - let pos2 = searchpairpos('{', '', '}') - endif - let block = [pos1, pos2] - if zencoding#util#regionIsValid(block) - call zencoding#util#selectRegion(block) - return - endif - endif - if a:flag == -2 || a:flag == 2 - silent! exe "normal! gv" - else - call setpos('.', curpos) - endif -endfunction - -function! zencoding#lang#scss#moveNextPrev(flag) - call zencoding#lang#css#moveNextPrev(a:flag) -endfunction - -function! zencoding#lang#scss#splitJoinTag() - call zencoding#lang#css#splitJoinTag() -endfunction - -function! zencoding#lang#scss#removeTag() - call zencoding#lang#ss#removeTag() -endfunction diff --git a/sources_forked/zencoding/autoload/zencoding/lang/slim.vim b/sources_forked/zencoding/autoload/zencoding/lang/slim.vim deleted file mode 100755 index 15bc968c..00000000 --- a/sources_forked/zencoding/autoload/zencoding/lang/slim.vim +++ /dev/null @@ -1,276 +0,0 @@ -function! zencoding#lang#slim#findTokens(str) - return zencoding#lang#html#findTokens(a:str) -endfunction - -function! zencoding#lang#slim#parseIntoTree(abbr, type) - return zencoding#lang#html#parseIntoTree(a:abbr, a:type) -endfunction - -function! zencoding#lang#slim#toString(settings, current, type, inline, filters, itemno, indent) - let settings = a:settings - let current = a:current - let type = a:type - let inline = a:inline - let filters = a:filters - let itemno = a:itemno - let indent = a:indent - let dollar_expr = zencoding#getResource(type, 'dollar_expr', 1) - let str = "" - - let comment_indent = '' - let comment = '' - let current_name = current.name - if dollar_expr - let current_name = substitute(current.name, '\$$', itemno+1, '') - endif - if len(current.name) > 0 - let str .= current_name - for attr in current.attrs_order - if !has_key(current.attr, attr) - continue - endif - let val = current.attr[attr] - if dollar_expr - while val =~ '\$\([^#{]\|$\)' - let val = substitute(val, '\(\$\+\)\([^{]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - endwhile - endif - let attr = substitute(attr, '\$$', itemno+1, '') - let str .= ' ' . attr . '="' . val . '"' - endfor - - let inner = '' - if len(current.value) > 0 - let str .= "\n" - let text = current.value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - let str = substitute(str, '\$#', text, 'g') - endif - for line in split(text, "\n") - let str .= indent . "| " . line . "\n" - endfor - elseif len(current.child) == 0 - let str .= '${cursor}' - endif - if len(current.child) == 1 && len(current.child[0].name) == 0 - let str .= "\n" - let text = current.child[0].value[1:-2] - if dollar_expr - let text = substitute(text, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let text = substitute(text, '\${nr}', "\n", 'g') - let text = substitute(text, '\\\$', '$', 'g') - endif - for line in split(text, "\n") - let str .= indent . "| " . line . "\n" - endfor - elseif len(current.child) > 0 - for child in current.child - let inner .= zencoding#toString(child, type, inline, filters, itemno) - endfor - let inner = substitute(inner, "\n", "\n" . escape(indent, '\'), 'g') - let inner = substitute(inner, "\n" . escape(indent, '\') . "$", "", 'g') - let str .= "\n" . indent . inner - endif - else - let str = current.value[1:-2] - if dollar_expr - let str = substitute(str, '\%(\\\)\@\<!\(\$\+\)\([^{#]\|$\)', '\=printf("%0".len(submatch(1))."d", itemno+1).submatch(2)', 'g') - let str = substitute(str, '\${nr}', "\n", 'g') - let str = substitute(str, '\\\$', '$', 'g') - endif - endif - if str !~ "\n$" - let str .= "\n" - endif - return str -endfunction - -function! zencoding#lang#slim#imageSize() - let line = getline('.') - let current = zencoding#lang#slim#parseTag(line) - if empty(current) || !has_key(current.attr, 'src') - return - endif - let fn = current.attr.src - if fn =~ '^\s*$' - return - elseif fn !~ '^\(/\|http\)' - let fn = simplify(expand('%:h') . '/' . fn) - endif - - let [width, height] = zencoding#util#getImageSize(fn) - if width == -1 && height == -1 - return - endif - let current.attr.width = width - let current.attr.height = height - let current.attrs_order += ['width', 'height'] - let slim = zencoding#toString(current, 'slim', 1) - let slim = substitute(slim, '\${cursor}', '', '') - call setline('.', substitute(matchstr(line, '^\s*') . slim, "\n", "", "g")) -endfunction - -function! zencoding#lang#slim#encodeImage() -endfunction - -function! zencoding#lang#slim#parseTag(tag) - let current = { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'attrs_order': [] } - let mx = '\([a-zA-Z][a-zA-Z0-9]*\)\s\+\(.*\)' - let match = matchstr(a:tag, mx) - let current.name = substitute(match, mx, '\1', 'i') - let attrs = substitute(match, mx, '\2', 'i') - let mx = '\([a-zA-Z0-9]\+\)=\%(\([^"'' \t]\+\)\|"\([^"]\{-}\)"\|''\([^'']\{-}\)''\)' - while len(attrs) > 0 - let match = matchstr(attrs, mx) - if len(match) == 0 - break - endif - let attr_match = matchlist(match, mx) - let name = attr_match[1] - let value = len(attr_match[2]) ? attr_match[2] : attr_match[3] - let current.attr[name] = value - let current.attrs_order += [name] - let attrs = attrs[stridx(attrs, match) + len(match):] - endwhile - return current -endfunction - -function! zencoding#lang#slim#toggleComment() - let line = getline('.') - let space = matchstr(line, '^\s*') - if line =~ '^\s*/' - call setline('.', space . line[len(space)+1:]) - elseif line =~ '^\s*[a-z]' - call setline('.', space . '/' . line[len(space):]) - endif -endfunction - -function! zencoding#lang#slim#balanceTag(flag) range - let block = zencoding#util#getVisualBlock() - if a:flag == -2 || a:flag == 2 - let curpos = [0, line("'<"), col("'<"), 0] - else - let curpos = getpos('.') - endif - let n = curpos[1] - let ml = len(matchstr(getline(n), '^\s*')) - - if a:flag > 0 - if a:flag == 1 || !zencoding#util#regionIsValid(block) - let n = line('.') - else - while n > 0 - let l = len(matchstr(getline(n), '^\s*\ze[a-z]')) - if l > 0 && l < ml - let ml = l - break - endif - let n -= 1 - endwhile - endif - let sn = n - if n == 0 - let ml = 0 - endif - while n < line('$') - let l = len(matchstr(getline(n), '^\s*[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - call setpos('.', [0, n, 1, 0]) - normal! V - call setpos('.', [0, sn, 1, 0]) - else - while n > 0 - let l = len(matchstr(getline(n), '^\s*\ze[a-z]')) - if l > 0 && l > ml - let ml = l - break - endif - let n += 1 - endwhile - let sn = n - if n == 0 - let ml = 0 - endif - while n < line('$') - let l = len(matchstr(getline(n), '^\s*[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - call setpos('.', [0, n, 1, 0]) - normal! V - call setpos('.', [0, sn, 1, 0]) - endif -endfunction - -function! zencoding#lang#slim#moveNextPrev(flag) - let pos = search('""\|\(^\s*|\s*\zs\)', a:flag ? 'Wpb' : 'Wp') - if pos == 2 - startinsert! - elseif pos != 0 - silent! normal! l - startinsert - endif -endfunction - -function! zencoding#lang#slim#splitJoinTag() - let n = line('.') - while n > 0 - if getline(n) =~ '^\s*\ze[a-z]' - let sn = n - let n += 1 - if getline(n) =~ '^\s*|' - while n <= line('$') - if getline(n) !~ '^\s*|' - break - endif - exe n "delete" - endwhile - call setpos('.', [0, sn, 1, 0]) - else - let spaces = matchstr(getline(sn), '^\s*') - call append(sn, spaces . ' | ') - call setpos('.', [0, sn+1, 1, 0]) - startinsert! - endif - break - endif - let n -= 1 - endwhile -endfunction - -function! zencoding#lang#slim#removeTag() - let n = line('.') - let ml = 0 - while n > 0 - if getline(n) =~ '^\s*\ze[a-z]' - let ml = len(matchstr(getline(n), '^\s*[a-z]')) - break - endif - let n -= 1 - endwhile - let sn = n - while n < line('$') - let l = len(matchstr(getline(n), '^\s*[a-z]')) - if l > 0 && l <= ml - let n -= 1 - break - endif - let n += 1 - endwhile - if sn == n - exe "delete" - else - exe sn "," (n-1) "delete" - endif -endfunction diff --git a/sources_forked/zencoding/autoload/zencoding/util.vim b/sources_forked/zencoding/autoload/zencoding/util.vim deleted file mode 100755 index 5a028c97..00000000 --- a/sources_forked/zencoding/autoload/zencoding/util.vim +++ /dev/null @@ -1,249 +0,0 @@ -"============================================================================== -" region utils -"============================================================================== -" deleteContent : delete content in region -" if region make from between '<foo>' and '</foo>' -" -------------------- -" begin:<foo> -" </foo>:end -" -------------------- -" this function make the content as following -" -------------------- -" begin::end -" -------------------- -function! zencoding#util#deleteContent(region) - let lines = getline(a:region[0][0], a:region[1][0]) - call setpos('.', [0, a:region[0][0], a:region[0][1], 0]) - silent! exe "delete ".(a:region[1][0] - a:region[0][0]) - call setline(line('.'), lines[0][:a:region[0][1]-2] . lines[-1][a:region[1][1]]) -endfunction - -" change_content : change content in region -" if region make from between '<foo>' and '</foo>' -" -------------------- -" begin:<foo> -" </foo>:end -" -------------------- -" and content is -" -------------------- -" foo -" bar -" baz -" -------------------- -" this function make the content as following -" -------------------- -" begin:foo -" bar -" baz:end -" -------------------- -function! zencoding#util#setContent(region, content) - let newlines = split(a:content, '\n', 1) - let oldlines = getline(a:region[0][0], a:region[1][0]) - call setpos('.', [0, a:region[0][0], a:region[0][1], 0]) - silent! exe "delete ".(a:region[1][0] - a:region[0][0]) - if len(newlines) == 0 - let tmp = '' - if a:region[0][1] > 1 - let tmp = oldlines[0][:a:region[0][1]-2] - endif - if a:region[1][1] >= 1 - let tmp .= oldlines[-1][a:region[1][1]:] - endif - call setline(line('.'), tmp) - elseif len(newlines) == 1 - if a:region[0][1] > 1 - let newlines[0] = oldlines[0][:a:region[0][1]-2] . newlines[0] - endif - if a:region[1][1] >= 1 - let newlines[0] .= oldlines[-1][a:region[1][1]:] - endif - call setline(line('.'), newlines[0]) - else - if a:region[0][1] > 1 - let newlines[0] = oldlines[0][:a:region[0][1]-2] . newlines[0] - endif - if a:region[1][1] >= 1 - let newlines[-1] .= oldlines[-1][a:region[1][1]:] - endif - call setline(line('.'), newlines[0]) - call append(line('.'), newlines[1:]) - endif -endfunction - -" select_region : select region -" this function make a selection of region -function! zencoding#util#selectRegion(region) - call setpos('.', [0, a:region[1][0], a:region[1][1], 0]) - normal! v - call setpos('.', [0, a:region[0][0], a:region[0][1], 0]) -endfunction - -" point_in_region : check point is in the region -" this function return 0 or 1 -function! zencoding#util#pointInRegion(point, region) - if !zencoding#util#regionIsValid(a:region) | return 0 | endif - if a:region[0][0] > a:point[0] | return 0 | endif - if a:region[1][0] < a:point[0] | return 0 | endif - if a:region[0][0] == a:point[0] && a:region[0][1] > a:point[1] | return 0 | endif - if a:region[1][0] == a:point[0] && a:region[1][1] < a:point[1] | return 0 | endif - return 1 -endfunction - -" cursor_in_region : check cursor is in the region -" this function return 0 or 1 -function! zencoding#util#cursorInRegion(region) - if !zencoding#util#regionIsValid(a:region) | return 0 | endif - let cur = getpos('.')[1:2] - return zencoding#util#pointInRegion(cur, a:region) -endfunction - -" region_is_valid : check region is valid -" this function return 0 or 1 -function! zencoding#util#regionIsValid(region) - if a:region[0][0] == 0 || a:region[1][0] == 0 | return 0 | endif - return 1 -endfunction - -" search_region : make region from pattern which is composing start/end -" this function return array of position -function! zencoding#util#searchRegion(start, end) - return [searchpairpos(a:start, '', a:end, 'bcnW'), searchpairpos(a:start, '\%#', a:end, 'nW')] -endfunction - -" get_content : get content in region -" this function return string in region -function! zencoding#util#getContent(region) - if !zencoding#util#regionIsValid(a:region) - return '' - endif - let lines = getline(a:region[0][0], a:region[1][0]) - if a:region[0][0] == a:region[1][0] - let lines[0] = lines[0][a:region[0][1]-1:a:region[1][1]-1] - else - let lines[0] = lines[0][a:region[0][1]-1:] - let lines[-1] = lines[-1][:a:region[1][1]-1] - endif - return join(lines, "\n") -endfunction - -" region_in_region : check region is in the region -" this function return 0 or 1 -function! zencoding#util#regionInRegion(outer, inner) - if !zencoding#util#regionIsValid(a:inner) || !zencoding#util#regionIsValid(a:outer) - return 0 - endif - return zencoding#util#pointInRegion(a:inner[0], a:outer) && zencoding#util#pointInRegion(a:inner[1], a:outer) -endfunction - -" get_visualblock : get region of visual block -" this function return region of visual block -function! zencoding#util#getVisualBlock() - return [[line("'<"), col("'<")], [line("'>"), col("'>")]] -endfunction - -"============================================================================== -" html utils -"============================================================================== -function! zencoding#util#getContentFromURL(url) - let res = system(printf("%s %s", g:zencoding_curl_command, shellescape(substitute(a:url, '#.*', '', '')))) - let s1 = len(split(res, '?')) - let utf8 = iconv(res, 'utf-8', &encoding) - let s2 = len(split(utf8, '?')) - return (s2 == s1 || s2 >= s1 * 2) ? utf8 : res -endfunction - -function! zencoding#util#getTextFromHTML(buf) - let threshold_len = 100 - let threshold_per = 0.1 - let buf = a:buf - - let buf = strpart(buf, stridx(buf, '</head>')) - let buf = substitute(buf, '<style[^>]*>.\{-}</style>', '', 'g') - let buf = substitute(buf, '<script[^>]*>.\{-}</script>', '', 'g') - let res = '' - let max = 0 - let mx = '\(<td[^>]\{-}>\)\|\(<\/td>\)\|\(<div[^>]\{-}>\)\|\(<\/div>\)' - let m = split(buf, mx) - for str in m - let c = split(str, '<[^>]*?>') - let str = substitute(str, '<[^>]\{-}>', ' ', 'g') - let str = substitute(str, '>', '>', 'g') - let str = substitute(str, '<', '<', 'g') - let str = substitute(str, '"', '"', 'g') - let str = substitute(str, ''', "'", 'g') - let str = substitute(str, ' ', ' ', 'g') - let str = substitute(str, '¥', '\¥', 'g') - let str = substitute(str, '&', '\&', 'g') - let str = substitute(str, '^\s*\(.*\)\s*$', '\1', '') - let str = substitute(str, '\s\+', ' ', 'g') - let l = len(str) - if l > threshold_len - let per = (l+0.0) / len(c) - if max < l && per > threshold_per - let max = l - let res = str - endif - endif - endfor - let res = substitute(res, '^\s*\(.*\)\s*$', '\1', 'g') - return res -endfunction - -function! zencoding#util#getImageSize(fn) - let fn = a:fn - - if zencoding#util#isImageMagickInstalled() - return zencoding#util#imageSizeWithImageMagick(fn) - endif - - if filereadable(fn) - let hex = substitute(system('xxd -p "'.fn.'"'), '\n', '', 'g') - else - let hex = substitute(system(g:zencoding_curl_command.' "'.fn.'" | xxd -p'), '\n', '', 'g') - endif - - let [width, height] = [-1, -1] - if hex =~ '^89504e470d0a1a0a' - let width = eval('0x'.hex[32:39]) - let height = eval('0x'.hex[40:47]) - endif - if hex =~ '^ffd8' - let pos = 4 - while pos < len(hex) - let bs = hex[pos+0:pos+3] - let pos += 4 - if bs == 'ffc0' || bs == 'ffc2' - let pos += 6 - let height = eval('0x'.hex[pos+0:pos+1])*256 + eval('0x'.hex[pos+2:pos+3]) - let pos += 4 - let width = eval('0x'.hex[pos+0:pos+1])*256 + eval('0x'.hex[pos+2:pos+3]) - break - elseif bs =~ 'ffd[9a]' - break - elseif bs =~ 'ff\(e[0-9a-e]\|fe\|db\|dd\|c4\)' - let pos += (eval('0x'.hex[pos+0:pos+1])*256 + eval('0x'.hex[pos+2:pos+3])) * 2 - endif - endwhile - endif - if hex =~ '^47494638' - let width = eval('0x'.hex[14:15].hex[12:13]) - let height = eval('0x'.hex[18:19].hex[16:17]) - endif - - return [width, height] -endfunction - -function! zencoding#util#imageSizeWithImageMagick(fn) - let img_info = system('identify -format "%wx%h" "'.a:fn.'"') - let img_size = split(substitute(img_info, '\n', '', ''), 'x') - let width = img_size[0] - let height = img_size[1] - return [width, height] -endfunction - -function! zencoding#util#isImageMagickInstalled() - if !get(s:, 'zencoding_use_identify', 1) - return 0 - endif - return executable('identify') -endfunction diff --git a/sources_forked/zencoding/doc/zencoding.txt b/sources_forked/zencoding/doc/zencoding.txt deleted file mode 100755 index ee453283..00000000 --- a/sources_forked/zencoding/doc/zencoding.txt +++ /dev/null @@ -1,438 +0,0 @@ -*zencoding.txt* ZenCoding for Vim - - ------------------------------------------------------- - ZenCoding: vim plugins for HTML and CSS hi-speed coding - ------------------------------------------------------- - -Author: Yasuhiro Matsumoto <mattn.jp@gmail.com> -WebSite: http://mattn.kaoriya.net/ -Repository: http://github.com/mattn/zencoding-vim -Site: http://mattn.github.com/zencoding-vim -License: BSD style license - -============================================================================== -CONTENTS *zencoding-contents* - -Introduction |zencoding-introduction| -Install |zencoding-install| -Tutorial |zencoding-tutorial| - 1. Expand Abbreviation |zencoding-expandabbr| - 2. Wrap with Abbreviation |zencoding-wrap-wtih-abbreviation| - 3. Balance Tag Inward |zencoding-balance-tag-inward| - 4. Balance Tag Outward |zencoding-balance-tag-outward| - 5. Go to Next Edit Point |zencoding-goto-next-point| |<C-Y>n| - 6. Go to Previous Edit Point |zencoding-goto-previous-point| - 7. Update <img> Size |zencoding-update-image-size| - 8. Merge Lines |zencoding-merge-lines| - 9. Remove Tag |zencoding-remove-tag| - 10. Split/Join Tag |zencoding-split-join-tag| - 11. Toggle Comment |zencoding-toggle-comment| - 12. Make anchor from URL |zencoding-make-anchor-url| - 13. Make quoted text from URL |zencoding-quoted-text-url| - 14. Code Pretty |zencoding-code-pretty| -Customize |zencoding-customize| - 1. Key Mappings |zencoding-customize-keymappings| - 2. Indent Size |zencoding-indent-size| - 3. Define Tag's Behavior |zencoding-define-tags-behavior| - 4. Complete Tag |zencoding-complete-tag| -Links |zencoding-links| -ToDo |zencoding-todo| - -============================================================================== -INTRODUCTION *zencoding-introduction* *zencoding* - -|ZenCoding| is an editor plugin for high-speed HTML, XML, XSL (or any other -structured code format) coding and editing. The core of this plugin is a -powerful abbreviation engine which allows you to expand expressions?similar to -CSS selectors?into HTML code: -> - div#page>div.logo+ul#navigation>li*5>a -< -...can be expanded into: -> - <div id="page"> - <div class="logo"></div> - <ul id="navigation"> - <li><a href=""></a></li> - <li><a href=""></a></li> - <li><a href=""></a></li> - <li><a href=""></a></li> - <li><a href=""></a></li> - </ul> - </div> -< -Read more about current Zen Coding syntax - http://code.google.com/p/zen-coding/wiki/ZenHTMLSelectorsEn - -Abbreviation engine has a modular structure which allows you to expand -abbreviations into different languages. Zen Coding currently supports CSS, -HTML, XML/XSL and HAML, Slim languages via filters. - -============================================================================== -INSTALL *zencoding-install* - -Install the distributed files into Vim runtime directory which is usually -~/.vim/, or $HOME/vimfiles on Windows. - -If you install pathogen that provided from Tim Pope, you should extract the -file into 'bundle' directory. - -============================================================================== -TUTORIAL *zencoding-tutorial* - -If you are seeing this file as :help, then you can't edit this file. -You should copy this section and create new buffer, paste and write as -'zencoding-tutor.txt'. Formally, open the file to start tutorial. - -1. Expand Abbreviation *zencoding-expandabbr* *<C-Y>,* - - Type abbreviation as 'div>p#foo$*3>a' and type |<C-Y>,|. -> - <div> - <p id="foo1"> - <a href=""></a> - </p> - <p id="foo2"> - <a href=""></a> - </p> - <p id="foo3"> - <a href=""></a> - </p> - </div> -< -2. Wrap with Abbreviation *zencoding-wrap-wtih-abbreviation* *v_<C-Y>,* - - Write as below. -> - test1 - test2 - test3 -< - Then do visual select(line wize) and type |<C-Y>,|. - If you request 'Tag:', then type 'ul>li*'. -> - <ul> - <li>test1</li> - <li>test2</li> - <li>test3</li> - </ul> -< - If you type tag as 'blockquote', then you'll see as following. -> - <blockquote> - test1 - test2 - test3 - </blockquote> -< -3. Balance Tag Inward *zencoding-balance-tag-inward* *<C-Y>d* - - To select inward of ul tag, type |<C-Y>d| in insert mode. -> - <ul> - * <li class="list1"></li> - <li class="list2"></li> - <li class="list3"></li> - </ul> -< - If cursor is at '*', |<C-Y>d| select from begin of <ul> to end of </ul>. - If cursor is at first of <li>, it select <li class="list1"></li>. - -4. Balance Tag Outward *zencoding-balance-tag-outward* *<C-Y>D* - - To select outward of ul tag, insert mode, type <C-Y>D in insert mode. -> - <ul> - * <li class="list1"></li> - <li class="list2"></li> - <li class="list3"></li> - </ul> -< - If cursor is at '*', |<C-Y>D| select from next letter of <ul> to previous - letter of </ul>. - If cursor is at first of <li>, it select <li class="list1"></li>. - -5. Go to Next Edit Point *zencoding-goto-next-point* *<C-Y>n* - - To jump next point that need to edit, type |<C-Y>n| in insert mode. -> - * <div id="foo" class="">foo</div> - <div id="bar" class="bar"></li> -< - If cursor is at '*', |<C-Y>n| move a cursor into attribute value of div - specified id as 'foo'. And type again |<C-Y>n| move a cursor into inner of - div specified id as 'bar'. - -6. Go to Previous Edit Point *zencoding-goto-previous-point* *<C-Y>N* - - To jump previous point that need to edit, type |<C-Y>N| in insert mode. -> - <div id="foo" class="">foo</div> - <div id="bar" class="bar"></li> * -< - If cursor is at '*', |<C-Y>N| move a cursor into div specified id as 'bar'. - And type again |<C-Y>N| move a cursor into attribute value of 'foo'. - -7. Update <img> Size *zencoding-update-image-size* *<C-Y>i* - - To expand or update size of image, type |<C-Y>i| on img tag -> - <img src="foo.png" /> -< - Type '<c-y>i' on img tag -> - <img src="foo.png" width="32" height="32" /> -< - If you change image, then type it again. it will be following. -> - <img src="foo-48.png" width="32" height="48" /> -< -8. Merge Lines *zencoding-merge-lines* - - To join multi line text like following, type |J|. -> - <ul> - <li class="list1"></li> - <li class="list2"></li> - <li class="list3"></li> - </ul> -< - If you select part of line include <li> and type |<C-Y>m|, it will be - following. -> - <ul> - <li class="list1"></li><li class="list2"></li><li class="list3"></li> - </ul> -< -9. Remove Tag *zencoding-remove-tag* *<C-Y>k* - - To remove tag in the block, type |<C-Y>k|. -> - <div class="foo"> - <a>cursor is here</a> - </div> -< - Type |<C-Y>k| in insert mode, then -> - <div class="foo"> - - </div> -< - And type |<C-Y>k| in there again, then div will be removed. - -10. Split/Join Tag *zencoding-split-join-tag* *<C-Y>j* - - To join block, type |<C-Y>j|. -> - <div class="foo"> - cursor is here - </div> -< - Type |<C-Y>j| in insert mode. then, -> - <div class="foo"/> -< - And type |<C-Y>j| in there again. -> - <div class="foo"> - </div> -< -11. Toggle Comment *zencoding-toggle-comment* *<C-Y>/* - - Move cursor to block -> - <div> - hello world - </div> -< - Type '<c-y>/' in insert mode. -> - <!-- <div> - hello world - </div> --> -< - Type '<c-y>/' in there again. -> - <div> - hello world - </div> -< -12. Make anchor from URL *zencoding-make-anchor-url* *<C-Y>a* - - Move cursor to URL -> - http://www.google.com/ -< - Type |<C-Y>a| -> - <a href="http://www.google.com/">Google</a> -< -13. Make quoted text from URL *zencoding-quoted-text-url* *<C-Y>A* - - Move cursor to URL -> - http://github.com/ -< - Type |<C-Y>A| -> - <blockquote class="quote"> - <a href="http://github.com/">Secure source code hosting and collaborative development - GitHub</a><br /> - <p>How does it work? Get up and running in seconds by forking a project, pushing an existing repository...</p> - <cite>http://github.com/</cite> - </blockquote> -< -14. Code Pretty *zencoding-code-pretty* *<C-Y>c* - - Select code block, for example select following code from "int main()". -> - <p>Writing in C language</p> - - int main() { - puts("hello world"); - } -< - Type |<C-Y>c| -> - <p>Writing in C language</p> - - <span class="Type">int</span> main() {<br /> - puts(<span class="Constant">"hello world"</span>);<br /> - }<br /> -< -============================================================================== -CUSTOMIZE *zencoding-customize* - -1. Key Mapping *zencoding-customize-keymappings* - - To specify leading key for expanding or balance tag, or for all, - Add this line in your vimrc: > -> - let g:user_zen_leader_key = '<c-y>' -< - Or if you prefer to map for each actions, then you set each variables. - - 'user_zen_expandabbr_key' - 'user_zen_expandword_key' - 'user_zen_balancetaginward_key' - 'user_zen_balancetagoutward_key' - 'user_zen_next_key' - 'user_zen_prev_key' - 'user_zen_imagesize_key' - 'user_zen_togglecomment_key' - 'user_zen_splitjointag_key' - 'user_zen_removetag_key' - 'user_zen_anchorizeurl_key' - 'user_zen_anchorizesummary_key' - -2. Indent Size *zencoding-indent-size* - - To change indent size of html, add this code in your vimrc. -> - let g:user_zen_settings = { - \ 'html' : { - \ 'indentation' : ' ' - \ }, - \} -< - If you prefer to change global indent size then add this. -> - let g:user_zen_settings = { - \ 'indentation' : ' ' - \} -< -3. Define Tag's Behavior *zencoding-define-tags-behavior* - - zencoding.vim can change behavior of expanding abbreviation for each - filetypes as |Dictionary|. for details, see official site of zencoding. - for example, vimmer can add following. -> - let g:user_zen_settings = { - \ 'lang' : 'ja', - \ 'html' : { - \ 'filters' : 'html', - \ 'indentation' : ' ' - \ }, - \ 'perl' : { - \ 'indentation' : ' ', - \ 'aliases' : { - \ 'req' : "require '|'" - \ }, - \ 'snippets' : { - \ 'use' : "use strict\nuse warnings\n\n", - \ 'w' : "warn \"${cursor}\";", - \ }, - \ }, - \ 'php' : { - \ 'extends' : 'html', - \ 'filters' : 'html,c', - \ }, - \ 'css' : { - \ 'filters' : 'fc', - \ }, - \ 'javascript' : { - \ 'snippets' : { - \ 'jq' : "$(function() {\n\t${cursor}${child}\n});", - \ 'jq:each' : "$.each(arr, function(index, item)\n\t${child}\n});", - \ 'fn' : "(function() {\n\t${cursor}\n})();", - \ 'tm' : "setTimeout(function() {\n\t${cursor}\n}, 100);", - \ }, - \ }, - \ 'java' : { - \ 'indentation' : ' ', - \ 'snippets' : { - \ 'main': "public static void main(String[] args) {\n\t|\n}", - \ 'println': "System.out.println(\"|\");", - \ 'class': "public class | {\n}\n", - \ }, - \ }, - \} -< -4. Complete Tag *zencoding-complete-tag* - - If you want to complete tags using |omnifunc| then add this. -> - let g:use_zen_complete_tag = 1 -< - -5. Enable functions in different mode - - If you want to use zencoding only in some modes, set an mode option: - - let g:user_zen_mode='n' "only enable normal mode functions, or - let g:user_zen_mode='inv' "enable all functions, which is equal to - let g:user_zen_mode='a' "enable all function in all mode. - -============================================================================== -LINKS *zencoding-links* - -zen-coding official site: - http://code.google.com/p/zen-coding/ - -zencoding.vim: - http://mattn.github.com/zencoding-vim - -development repository: - https://github.com/mattn/zencoding-vim - -my blog posts about zencoding-vim: - http://mattn.kaoriya.net/software/vim/20100222103327.htm - http://mattn.kaoriya.net/software/vim/20100306021632.htm - -japanese blog posts about zencoding-vim: - http://d.hatena.ne.jp/idesaku/20100424/1272092255 - http://d.hatena.ne.jp/griefworker/20110118/vim_zen_coding - http://d.hatena.ne.jp/sakurako_s/20110126/1295988873 - http://looxu.blogspot.jp/2010/02/zencodingvimhtml.html - -tutorial traslated in chinese: - http://www.zfanw.com/blog/zencoding-vim-tutorial-chinese.html - -============================================================================== -TODO *zencoding-todo* - * wrapping inline selected. - * more documents. - * more contributor. - * more time to improve zencodig.vim. - -============================================================================== -vim:tw=78:ts=8:ft=help:norl:noet:fen:fdl=0: diff --git a/sources_forked/zencoding/plugin/zencoding.vim b/sources_forked/zencoding/plugin/zencoding.vim deleted file mode 100755 index e627653d..00000000 --- a/sources_forked/zencoding/plugin/zencoding.vim +++ /dev/null @@ -1,215 +0,0 @@ -"============================================================================= -" File: zencoding.vim -" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com> -" Last Change: 13-Feb-2013. -" Version: 0.75 -" WebPage: http://github.com/mattn/zencoding-vim -" Description: vim plugins for HTML and CSS hi-speed coding. -" SeeAlso: http://code.google.com/p/zen-coding/ -" Usage: -" -" This is vim script support expanding abbreviation like zen-coding. -" ref: http://code.google.com/p/zen-coding/ -" -" Type abbreviation -" +------------------------------------- -" | html:5_ -" +------------------------------------- -" "_" is a cursor position. and type "<c-y>," (Ctrl+y and Comma) -" NOTE: Don't worry about key map. you can change it easily. -" +------------------------------------- -" | <!DOCTYPE HTML> -" | <html lang="en"> -" | <head> -" | <title></title> -" | <meta charset="UTF-8"> -" | </head> -" | <body> -" | _ -" | </body> -" | </html> -" +------------------------------------- -" Type following -" +------------------------------------- -" | div#foo$*2>div.bar -" +------------------------------------- -" And type "<c-y>," -" +------------------------------------- -" |<div id="foo1"> -" | <div class="bar">_</div> -" |</div> -" |<div id="foo2"> -" | <div class="bar"></div> -" |</div> -" +------------------------------------- -" -" Tips: -" -" You can customize behavior of expanding with overriding config. -" This configuration will be marged at loading plugin. -" -" let g:user_zen_settings = { -" \ 'indentation' : ' ', -" \ 'perl' : { -" \ 'aliases' : { -" \ 'req' : 'require ' -" \ }, -" \ 'snippets' : { -" \ 'use' : "use strict\nuse warnings\n\n", -" \ 'warn' : "warn \"|\";", -" \ } -" \ } -" \} -" -" You can set language attribute in html using 'zen_settings.lang'. -" -" GetLatestVimScripts: 2981 1 :AutoInstall: zencoding.vim -" script type: plugin - -if &cp || (exists('g:loaded_zencoding_vim') && g:loaded_zencoding_vim) - finish -endif -let g:loaded_zencoding_vim = 1 - -let s:save_cpo = &cpo -set cpo&vim - -if !exists('g:zencoding_debug') - let g:zencoding_debug = 0 -endif - -if !exists('g:zencoding_curl_command') - let g:zencoding_curl_command = 'curl -s -L -A Mozilla/5.0' -endif - -if exists('g:use_zen_complete_tag') && g:use_zen_complete_tag - setlocal omnifunc=zencoding#CompleteTag -endif - -if !exists('g:user_zen_leader_key') - let g:user_zen_leader_key = '<c-y>' -endif - -function! s:install_plugin_i() - for item in [ - \ {'mode': 'i', 'var': 'user_zen_expandabbr_key', 'key': ',', 'plug': 'ZenCodingExpandAbbr', 'func': '<c-g>u<esc>:call zencoding#expandAbbr(0,"")<cr>a'}, - \ {'mode': 'i', 'var': 'user_zen_expandword_key', 'key': ';', 'plug': 'ZenCodingExpandWord', 'func': '<c-g>u<esc>:call zencoding#expandAbbr(1,"")<cr>a'}, - \ {'mode': 'i', 'var': 'user_zen_balancetaginward_key', 'key': 'd', 'plug': 'ZenCodingBalanceTagInwardInsert', 'func': '<esc>:call zencoding#balanceTag(1)<cr>'}, - \ {'mode': 'i', 'var': 'user_zen_balancetagoutward_key', 'key': 'D', 'plug': 'ZenCodingBalanceTagOutwardInsert', 'func': '<esc>:call zencoding#balanceTag(-1)<cr>'}, - \ {'mode': 'i', 'var': 'user_zen_next_key', 'key': 'n', 'plug': 'ZenCodingNext', 'func': '<esc>:call zencoding#moveNextPrev(0)<cr>'}, - \ {'mode': 'i', 'var': 'user_zen_prev_key', 'key': 'N', 'plug': 'ZenCodingPrev', 'func': '<esc>:call zencoding#moveNextPrev(1)<cr>'}, - \ {'mode': 'i', 'var': 'user_zen_imagesize_key', 'key': 'i', 'plug': 'ZenCodingImageSize', 'func': '<esc>:call zencoding#imageSize()<cr>a'}, - \ {'mode': 'i', 'var': 'user_zen_togglecomment_key', 'key': '/', 'plug': 'ZenCodingToggleComment', 'func': '<esc>:call zencoding#toggleComment()<cr>a'}, - \ {'mode': 'i', 'var': 'user_zen_splitjointag_key', 'key': 'j', 'plug': 'ZenCodingSplitJoinTagInsert', 'func': '<esc>:call zencoding#splitJoinTag()<cr>'}, - \ {'mode': 'i', 'var': 'user_zen_removetag_key', 'key': 'k', 'plug': 'ZenCodingRemoveTag', 'func': '<esc>:call zencoding#removeTag()<cr>a'}, - \ {'mode': 'i', 'var': 'user_zen_anchorizeurl_key', 'key': 'a', 'plug': 'ZenCodingAnchorizeURL', 'func': '<esc>:call zencoding#anchorizeURL(0)<cr>a'}, - \ {'mode': 'i', 'var': 'user_zen_anchorizesummary_key', 'key': 'A', 'plug': 'ZenCodingAnchorizeSummary', 'func': '<esc>:call zencoding#anchorizeURL(1)<cr>a'}, - \] - - if !hasmapto('<plug>'.item.plug, item.mode) - exe item.mode . 'noremap <plug>' . item.plug . ' ' . item.func - endif - if !exists('g:' . item.var) - endif - if exists('g:' . item.var) - let key = eval('g:' . item.var) - else - let key = g:user_zen_leader_key . item.key - endif - if len(maparg(key, item.mode)) == 0 - exe item.mode . 'map <unique> ' . key . ' <plug>' . item.plug - endif - endfor -endfunction - -function! s:install_plugin_n() - for item in [ - \ {'mode': 'n', 'var': 'user_zen_expandabbr_key', 'key': ',', 'plug': 'ZenCodingExpandNormal', 'func': ':call zencoding#expandAbbr(3,"")<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_expandword_key', 'key': ',', 'plug': 'ZenCodingExpandWord', 'func': ':call zencoding#expandAbbr(1,"")<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_balancetaginward_key', 'key': 'd', 'plug': 'ZenCodingBalanceTagInwardNormal', 'func': ':call zencoding#balanceTag(1)<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_balancetagoutward_key', 'key': 'D', 'plug': 'ZenCodingBalanceTagOutwardNormal', 'func': ':call zencoding#balanceTag(-1)<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_next_key', 'key': 'n', 'plug': 'ZenCodingNext', 'func': ':call zencoding#moveNextPrev(0)<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_prev_key', 'key': 'N', 'plug': 'ZenCodingPrev', 'func': ':call zencoding#moveNextPrev(1)<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_imagesize_key', 'key': 'i', 'plug': 'ZenCodingImageSize', 'func': ':call zencoding#imageSize()<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_togglecomment_key', 'key': '/', 'plug': 'ZenCodingToggleComment', 'func': ':call zencoding#toggleComment()<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_splitjointag_key', 'key': 'j', 'plug': 'ZenCodingSplitJoinTagNormal', 'func': ':call zencoding#splitJoinTag()<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_removetag_key', 'key': 'k', 'plug': 'ZenCodingRemoveTag', 'func': ':call zencoding#removeTag()<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_anchorizeurl_key', 'key': 'a', 'plug': 'ZenCodingAnchorizeURL', 'func': ':call zencoding#anchorizeURL(0)<cr>'}, - \ {'mode': 'n', 'var': 'user_zen_anchorizesummary_key', 'key': 'A', 'plug': 'ZenCodingAnchorizeSummary', 'func': ':call zencoding#anchorizeURL(1)<cr>'}, - \] - - if !hasmapto('<plug>'.item.plug, item.mode) - exe item.mode . 'noremap <plug>' . item.plug . ' ' . item.func - endif - if !exists('g:' . item.var) - endif - if exists('g:' . item.var) - let key = eval('g:' . item.var) - else - let key = g:user_zen_leader_key . item.key - endif - if len(maparg(key, item.mode)) == 0 - exe item.mode . 'map <unique> ' . key . ' <plug>' . item.plug - endif - endfor -endfunction - -function! s:install_plugin_v() - for item in [ - \ {'mode': 'v', 'var': 'user_zen_expandabbr_key', 'key': ',', 'plug': 'ZenCodingExpandVisual', 'func': ':call zencoding#expandAbbr(2,"")<cr>'}, - \ {'mode': 'v', 'var': 'user_zen_balancetaginward_key', 'key': 'd', 'plug': 'ZenCodingBalanceTagInwardVisual', 'func': ':call zencoding#balanceTag(2)<cr>'}, - \ {'mode': 'v', 'var': 'user_zen_balancetagoutward_key', 'key': 'D', 'plug': 'ZenCodingBalanceTagOutwardVisual', 'func': ':call zencoding#balanceTag(-2)<cr>'}, - \ {'mode': 'v', 'var': 'user_zen_mergelines_key', 'key': 'm', 'plug': 'ZenCodingMergeLines', 'func': ':call zencoding#mergeLines()<cr>'}, - \ {'mode': 'v', 'var': 'user_zen_codepretty_key', 'key': 'c', 'plug': 'ZenCodingCodePretty', 'func': ':call zencoding#codePretty()<cr>'}, - \] - - if !hasmapto('<plug>'.item.plug, item.mode) - exe item.mode . 'noremap <plug>' . item.plug . ' ' . item.func - endif - if !exists('g:' . item.var) - endif - if exists('g:' . item.var) - let key = eval('g:' . item.var) - else - let key = g:user_zen_leader_key . item.key - endif - if len(maparg(key, item.mode)) == 0 - exe item.mode . 'map <unique> ' . key . ' <plug>' . item.plug - endif - endfor -endfunction - - -if exists('g:user_zen_mode') - let imode = matchstr(g:user_zen_mode, '[ai]') - let nmode = matchstr(g:user_zen_mode, '[an]') - let vmode = matchstr(g:user_zen_mode, '[av]') - - if !empty(imode) - call s:install_plugin_i() - endif - - if !empty(nmode) - call s:install_plugin_n() - endif - - if !empty(vmode) - call s:install_plugin_v() - endif -else - call s:install_plugin_i() - call s:install_plugin_n() - call s:install_plugin_v() -endif - - -delfunction s:install_plugin_i -delfunction s:install_plugin_n -delfunction s:install_plugin_v - -command! -nargs=1 Zen call zencoding#expandAbbr(4, <q-args>) - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim:set et: diff --git a/sources_forked/zencoding/unittest.vim b/sources_forked/zencoding/unittest.vim deleted file mode 100755 index c4fcc3d2..00000000 --- a/sources_forked/zencoding/unittest.vim +++ /dev/null @@ -1,794 +0,0 @@ -let s:sfile = expand('<sfile>') - -function! s:reload(d) - exe "so" a:d."/plugin/zencoding.vim" - for f in split(globpath(a:d, 'autoload/**/*.vim'), "\n") - silent! exe "so" f - endfor -endfunction - -function! s:show_type(type) - echohl Search | echon "[" a:type "]\n" | echohl None - echo "\r" -endfunction - -function! s:show_category(category) - echohl MatchParen | echon "[" a:category "]\n" | echohl None - echo "\r" -endfunction - -function! s:show_pass(pass) - echohl Title | echo "pass".a:pass."\n" | echohl None -endfunction - -function! s:show_done() - echohl IncSearch | echo "done" | echohl None -endfunction - -function! s:escape(str) - let str = a:str - let str = substitute(str, "\n", '\\n', 'g') - let str = substitute(str, "\t", '\\t', 'g') - return str -endfunction - -function! s:show_title(no, title) - let title = s:escape(a:title) - let width = &columns - 23 - echohl MoreMsg | echon "\rtesting #".printf("%03d", a:no) - echohl None | echon ": " . (len(title) < width ? (title.repeat(' ', width-len(title))) : strpart(title, 0, width)) . ' ... ' -endfunction - -function! s:show_skip(no, title) - let title = s:escape(a:title) - let width = &columns - 23 - echohl WarningMsg | echon "\rskipped #".printf("%03d", a:no) - echohl None | echon ": " . (len(title) < width ? (title.repeat(' ', width-len(title))) : strpart(title, 0, width)) . ' ... ' - echo "" -endfunction - -function! s:show_ok() - echohl Title | echon "ok\n" | echohl None - echo "" -endfunction - -function! s:show_ng(no, expect, got) - echohl WarningMsg | echon "ng\n" | echohl None - echohl ErrorMsg | echo "failed test #".a:no | echohl None - set more - echohl WarningMsg | echo printf("expect(%d):", len(a:expect)) | echohl None - echo join(split(a:expect, "\n", 1), "|\n") - echohl WarningMsg | echo printf("got(%d):", len(a:got)) | echohl None - echo join(split(a:got, "\n", 1), "|\n") - let cs = split(a:expect, '\zs') - for c in range(len(cs)) - if c < len(a:got) - if a:expect[c] != a:got[c] - echohl WarningMsg | echo "differ at:" | echohl None - echo a:expect[c :-1] - break - endif - endif - endfor - echo "" - throw "stop" -endfunction - -function! s:test(...) - let type = get(a:000, 0, '') - let name = get(a:000, 1, '') - let index = get(a:000, 2, '') - - let testgroups = eval(join(filter(split(substitute(join(readfile(s:sfile), "\n"), '.*\nfinish\n', '', ''), '\n', 1), "v:val !~ '^\"'"))) - for testgroup in testgroups - if len(type) > 0 && testgroup.type != type | continue | endif - call s:show_type(testgroup.type) - for category in testgroup.categories - if len(name) > 0 && substitute(category.name,' ','_','g') != name | continue | endif - call s:show_category(category.name) - let tests = category.tests - let start = reltime() - for n in range(len(tests)) - if len(index) > 0 && n != index | continue | endif - let query = tests[n].query - let result = tests[n].result - if has_key(tests[n], 'skip') && tests[n].skip != 0 - call s:show_skip(n+1, query) - continue - endif - if stridx(query, '$$$$') != -1 - silent! 1new - silent! exe "setlocal ft=".testgroup.type - silent! let key = matchstr(query, '.*\$\$\$\$\zs.*\ze\$\$\$\$') - if len(key) > 0 - exe printf('let key = "%s"', key) - else - let key = "\<c-y>," - endif - silent! let query = substitute(query, '\$\$\$\$.*\$\$\$\$', '$$$$', '') - silent! call setline(1, split(query, "\n")) - let cmd = "normal gg0/\\$\\$\\$\\$\ri\<del>\<del>\<del>\<del>".key - if stridx(result, '$$$$') != -1 - let cmd .= '$$$$' - endif - silent! exe cmd - unlet! res | let res = join(getline(1, line('$')), "\n") - silent! bw! - call s:show_title(n+1, query) - else - call s:show_title(n+1, query) - unlet! res | let res = zencoding#ExpandWord(query, testgroup.type, 0) - endif - if stridx(result, '$$$$') != -1 - if res ==# result - call s:show_ok() - else - call s:show_ng(n+1, result, res) - endif - else - if res ==# result - call s:show_ok() - else - call s:show_ng(n+1, result, res) - endif - endif - endfor - call s:show_pass(reltimestr(reltime(start))) - endfor - endfor -endfunction - -function! s:do_tests(...) - try - if exists('g:user_zen_settings') - let s:old_user_zen_settings = g:user_zen_settings - let g:user_zen_settings = { 'indentation': "\t" } - endif - let oldmore = &more - call s:reload(fnamemodify(s:sfile, ':h')) - let &more = 0 - call call('s:test', a:000) - call s:show_done() - catch - echohl ErrorMsg | echomsg v:exception | echohl None - finally - let &more=oldmore - if exists('g:user_zen_settings') - let g:user_zen_settings = s:old_user_zen_settings - endif - endtry -endfunction - -function! g:zencoding_unittest_complete(arglead, cmdline, cmdpos) - let args = split(a:cmdline, '\s\+', 1) - let testgroups = eval(join(filter(split(substitute(join(readfile(s:sfile), "\n"), '.*\nfinish\n', '', ''), '\n', 1), "v:val !~ '^\"'"))) - try - if len(args) == 2 - return filter(map(testgroups, 'v:val.type'), 'stridx(v:val,args[1])!=-1') - elseif len(args) == 3 - return map(filter(testgroups, 'v:val.type==args[1]')[0].categories, 'substitute(v:val.name," ","_","g")') - endif - catch - endtry - return [] -endfunction - -command! -nargs=* -complete=customlist,g:zencoding_unittest_complete ZenCodingUnitTest call s:do_tests(<f-args>) -if s:sfile == expand('%:p') - ZenCodingUnitTest -endif - -finish -[ -{ - 'type': "html", - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "div", - 'result': "<div></div>\n", - }, - { - 'query': "div#wrapper", - 'result': "<div id=\"wrapper\"></div>\n", - }, - { - 'query': "div.box", - 'result': "<div class=\"box\"></div>\n", - }, - { - 'query': "a[title=TITLE]", - 'result': "<a href=\"\" title=\"TITLE\"></a>\n", - }, - { - 'query': "div#wrapper.box", - 'result': "<div id=\"wrapper\" class=\"box\"></div>\n", - }, - { - 'query': "div#wrapper.box.current", - 'result': "<div id=\"wrapper\" class=\"box current\"></div>\n", - }, - { - 'query': "div#wrapper.box.current[title=TITLE rel]", - 'result': "<div id=\"wrapper\" class=\"box current\" title=\"TITLE\" rel=\"\"></div>\n", - }, - { - 'query': "div#main+div#sub", - 'result': "<div id=\"main\"></div>\n<div id=\"sub\"></div>\n", - }, - { - 'query': "div#main>div#sub", - 'result': "<div id=\"main\">\n\t<div id=\"sub\"></div>\n</div>\n", - }, - { - 'query': "html:xt>div#header>div#logo+ul#nav>li.item-$*5>a", - 'result': "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\" />\n\t<title></title>\n</head>\n<body>\n\t<div id=\"header\">\n\t\t<div id=\"logo\"></div>\n\t\t<ul id=\"nav\">\n\t\t\t<li class=\"item-1\"><a href=\"\"></a></li>\n\t\t\t<li class=\"item-2\"><a href=\"\"></a></li>\n\t\t\t<li class=\"item-3\"><a href=\"\"></a></li>\n\t\t\t<li class=\"item-4\"><a href=\"\"></a></li>\n\t\t\t<li class=\"item-5\"><a href=\"\"></a></li>\n\t\t</ul>\n\t</div>\n\t\n</body>\n</html>", - }, - { - 'query': "ol>li*2", - 'result': "<ol>\n\t<li></li>\n\t<li></li>\n</ol>\n", - }, - { - 'query': "a", - 'result': "<a href=\"\"></a>\n", - }, - { - 'query': "obj", - 'result': "<object data=\"\" type=\"\"></object>\n", - }, - { - 'query': "cc:ie6>p+blockquote#sample$.so.many.classes*2", - 'result': "<!--[if lte IE 6]>\n\t<p></p>\n\t<blockquote id=\"sample1\" class=\"so many classes\"></blockquote>\n\t<blockquote id=\"sample2\" class=\"so many classes\"></blockquote>\n\t\n<![endif]-->", - }, - { - 'query': "html:4t>div#wrapper>div#header+div#contents+div#footer", - 'result': "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\n\t<title></title>\n</head>\n<body>\n\t<div id=\"wrapper\">\n\t\t<div id=\"header\"></div>\n\t\t<div id=\"contents\"></div>\n\t\t<div id=\"footer\"></div>\n\t</div>\n\t\n</body>\n</html>", - }, - { - 'query': "a[href=http://www.google.com/].foo#hoge", - 'result': "<a id=\"hoge\" class=\"foo\" href=\"http://www.google.com/\"></a>\n", - }, - { - 'query': "a[href=http://www.google.com/]{Google}", - 'result': "<a href=\"http://www.google.com/\">Google</a>\n", - }, - { - 'query': "{ZenCoding}", - 'result': "ZenCoding", - }, - { - 'query': "a+b", - 'result': "<a href=\"\"></a>\n<b></b>\n", - }, - { - 'query': "a>b>i<b", - 'result': "<a href=\"\"><b><i></i></b><b></b></a>\n", - }, - { - 'query': "a>b>i^b", - 'result': "<a href=\"\"><b><i></i></b><b></b></a>\n", - }, - { - 'query': "a>b>i<<b", - 'result': "<a href=\"\"><b><i></i></b></a>\n<b></b>\n", - }, - { - 'query': "a>b>i^^b", - 'result': "<a href=\"\"><b><i></i></b></a>\n<b></b>\n", - }, - { - 'query': "blockquote>b>i<<b", - 'result': "<blockquote><b><i></i></b></blockquote>\n<b></b>\n", - }, - { - 'query': "blockquote>b>i^^b", - 'result': "<blockquote><b><i></i></b></blockquote>\n<b></b>\n", - }, - { - 'query': "a[href=foo][class=bar]", - 'result': "<a class=\"bar\" href=\"foo\"></a>\n", - }, - { - 'query': "a[a=b][b=c=d][e]{foo}*2", - 'result': "<a href=\"\" a=\"b\" b=\"c=d\" e=\"\">foo</a>\n<a href=\"\" a=\"b\" b=\"c=d\" e=\"\">foo</a>\n", - }, - { - 'query': "a[a=b][b=c=d][e]*2{foo}", - 'result': "<a href=\"\" a=\"b\" b=\"c=d\" e=\"\"></a>\n<a href=\"\" a=\"b\" b=\"c=d\" e=\"\"></a>\nfoo", - }, - { - 'query': "a*2{foo}a", - 'result': "<a href=\"\"></a>\n<a href=\"\"></a>\nfoo<a href=\"\"></a>\n", - }, - { - 'query': "a{foo}*2>b", - 'result': "<a href=\"\">foo<b></b></a>\n<a href=\"\">foo<b></b></a>\n", - }, - { - 'query': "a*2{foo}>b", - 'result': "<a href=\"\"></a>\n<a href=\"\"></a>\nfoo", - }, - { - 'query': "table>tr>td.name#foo+td*3", - 'result': "<table>\n\t<tr>\n\t\t<td id=\"foo\" class=\"name\"></td>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t</tr>\n</table>\n", - }, - { - 'query': "div#header + div#footer", - 'result': "<div id=\"header\"></div>\n<div id=\"footer\"></div>\n", - }, - { - 'query': "#header + div#footer", - 'result': "<div id=\"header\"></div>\n<div id=\"footer\"></div>\n", - }, - { - 'query': "#header > ul > li < p{Footer}", - 'result': "<div id=\"header\">\n\t<ul>\n\t\t<li></li>\n\t</ul>\n\t<p>Footer</p>\n</div>\n", - }, - { - 'query': "#header > ul > li ^ p{Footer}", - 'result': "<div id=\"header\">\n\t<ul>\n\t\t<li></li>\n\t</ul>\n\t<p>Footer</p>\n</div>\n", - }, - { - 'query': "a#foo$$$*3", - 'result': "<a id=\"foo001\" href=\"\"></a>\n<a id=\"foo002\" href=\"\"></a>\n<a id=\"foo003\" href=\"\"></a>\n", - }, - { - 'query': "ul+", - 'result': "<ul>\n\t<li></li>\n</ul>\n", - }, - { - 'query': "table+", - 'result': "<table>\n\t<tr>\n\t\t<td></td>\n\t</tr>\n</table>\n", - }, - { - 'query': "#header>li<#content", - 'result': "<div id=\"header\">\n\t<li></li>\n</div>\n<div id=\"content\"></div>\n", - }, - { - 'query': "#header>li^#content", - 'result': "<div id=\"header\">\n\t<li></li>\n</div>\n<div id=\"content\"></div>\n", - }, - { - 'query': "(#header>li)<#content", - 'result': "<div id=\"header\">\n\t<li></li>\n</div>\n<div id=\"content\"></div>\n", - }, - { - 'query': "(#header>li)^#content", - 'result': "<div id=\"header\">\n\t<li></li>\n</div>\n<div id=\"content\"></div>\n", - }, - { - 'query': "a>b>i<<div", - 'result': "<a href=\"\"><b><i></i></b></a>\n<div></div>\n", - }, - { - 'query': "a>b>i^^div", - 'result': "<a href=\"\"><b><i></i></b></a>\n<div></div>\n", - }, - { - 'query': "(#header>h1)+#content+#footer", - 'result': "<div id=\"header\">\n\t<h1></h1>\n</div>\n<div id=\"content\"></div>\n<div id=\"footer\"></div>\n", - }, - { - 'query': "(#header>h1)+(#content>(#main>h2+div#entry$.section*5>(h3>a)+div>p*3+ul+)+(#utilities))+(#footer>address)", - 'result': "<div id=\"header\">\n\t<h1></h1>\n</div>\n<div id=\"content\">\n\t<div id=\"main\">\n\t\t<h2></h2>\n\t\t<div id=\"entry1\" class=\"section\">\n\t\t\t<h3><a href=\"\"></a></h3>\n\t\t\t<div>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"entry2\" class=\"section\">\n\t\t\t<h3><a href=\"\"></a></h3>\n\t\t\t<div>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"entry3\" class=\"section\">\n\t\t\t<h3><a href=\"\"></a></h3>\n\t\t\t<div>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"entry4\" class=\"section\">\n\t\t\t<h3><a href=\"\"></a></h3>\n\t\t\t<div>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"entry5\" class=\"section\">\n\t\t\t<h3><a href=\"\"></a></h3>\n\t\t\t<div>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<p></p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"utilities\"></div>\n</div>\n<div id=\"footer\">\n\t<address></address>\n</div>\n", - }, - { - 'query': "(div>(ul*2)*2)+(#utilities)", - 'result': "<div>\n\t<ul></ul>\n\t<ul></ul>\n\t<ul></ul>\n\t<ul></ul>\n</div>\n<div id=\"utilities\"></div>\n", - }, - { - 'query': "table>(tr>td*3)*4", - 'result': "<table>\n\t<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t</tr>\n\t<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t</tr>\n\t<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t</tr>\n\t<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t</tr>\n</table>\n", - }, - { - 'query': "(((a#foo+a#bar)*2)*3)", - 'result': "<a id=\"foo\" href=\"\"></a>\n<a id=\"bar\" href=\"\"></a>\n<a id=\"foo\" href=\"\"></a>\n<a id=\"bar\" href=\"\"></a>\n<a id=\"foo\" href=\"\"></a>\n<a id=\"bar\" href=\"\"></a>\n<a id=\"foo\" href=\"\"></a>\n<a id=\"bar\" href=\"\"></a>\n<a id=\"foo\" href=\"\"></a>\n<a id=\"bar\" href=\"\"></a>\n<a id=\"foo\" href=\"\"></a>\n<a id=\"bar\" href=\"\"></a>\n", - }, - { - 'query': "div#box$*3>h3+p*2", - 'result': "<div id=\"box1\">\n\t<h3></h3>\n\t<p></p>\n\t<p></p>\n</div>\n<div id=\"box2\">\n\t<h3></h3>\n\t<p></p>\n\t<p></p>\n</div>\n<div id=\"box3\">\n\t<h3></h3>\n\t<p></p>\n\t<p></p>\n</div>\n" - }, - { - 'query': "div#box.foo$$$.bar$$$*3", - 'result': "<div id=\"box\" class=\"foo001 bar001\"></div>\n<div id=\"box\" class=\"foo002 bar002\"></div>\n<div id=\"box\" class=\"foo003 bar003\"></div>\n", - }, - { - 'query': "div#box$*3>h3+p.bar*2|e", - 'result': "<div id=\"box1\">\n\t<h3></h3>\n\t<p class=\"bar\"></p>\n\t<p class=\"bar\"></p>\n</div>\n<div id=\"box2\">\n\t<h3></h3>\n\t<p class=\"bar\"></p>\n\t<p class=\"bar\"></p>\n</div>\n<div id=\"box3\">\n\t<h3></h3>\n\t<p class=\"bar\"></p>\n\t<p class=\"bar\"></p>\n</div>\n", - }, - { - 'query': "div>div#page>p.title+p|c", - 'result': "<div>\n\t<!-- #page -->\n\t<div id=\"page\">\n\t\t<!-- .title -->\n\t\t<p class=\"title\"></p>\n\t\t<!-- /.title -->\n\t\t<p></p>\n\t</div>\n\t<!-- /#page -->\n</div>\n", - }, - { - 'query': "link:css", - 'result': "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" media=\"all\" />\n", - }, - { - 'query': "a[title=\"Hello', world\" rel]", - 'result': "<a href=\"\" title=\"Hello', world\" rel=\"\"></a>\n", - }, - { - 'query': "div>a#foo{bar}", - 'result': "<div><a id=\"foo\" href=\"\">bar</a></div>\n", - }, - { - 'query': ".content{Hello!}", - 'result': "<div class=\"content\">Hello!</div>\n", - }, - { - 'query': "div.logo+(div#navigation)+(div#links)", - 'result': "<div class=\"logo\"></div>\n<div id=\"navigation\"></div>\n<div id=\"links\"></div>\n", - }, - { - 'query': "h1{header}+{Text}+a[href=http://link.org]{linktext}+{again some text}+a[href=http://anoterlink.org]{click me!}+{some final text}", - 'result': "<h1>header</h1>\nText<a href=\"http://link.org\">linktext</a>\nagain some text<a href=\"http://anoterlink.org\">click me!</a>\nsome final text", - }, - { - 'query': "a{&}+div{&&}", - 'result': "<a href=\"\">&</a>\n<div>&&</div>\n", - }, - { - 'query': "<foo/>span$$$$\\<c-y>,$$$$", - 'result': "<foo/><span></span>", - }, - { - 'query': "foo span$$$$\\<c-y>,$$$$", - 'result': "foo <span></span>", - }, - { - 'query': "foo span$$$$\\<c-y>,$$$$ bar", - 'result': "foo <span></span> bar", - }, - { - 'query': "foo $$$$\\<c-o>ve\\<c-y>,p\\<cr>$$$$bar baz", - 'result': "foo <p>bar</p> baz", - }, - { - 'query': "foo $$$$\\<c-o>vee\\<c-y>,p\\<cr>$$$$bar baz", - 'result': "foo <p>bar baz</p>", - }, - { - 'query': "f div.boxes>article.box2>header>(hgroup>h2{aaa}+h3{bbb})+p{ccc}$$$$", - 'result': "f <div class=\"boxes\">\n\t<article class=\"box2\">\n\t\t<header>\n\t\t\t<hgroup>\n\t\t\t\t<h2>aaa</h2>\n\t\t\t\t<h3>bbb</h3>\n\t\t\t</hgroup>\n\t\t\t<p>ccc</p>\n\t\t</header>\n\t</article>\n</div>", - }, - { - 'query': "div.boxes>(div.box2>section>h2{a}+p{b})+(div.box1>section>h2{c}+p{d}+p{e}+(bq>h2{f}+h3{g})+p{h})", - 'result': "<div class=\"boxes\">\n\t<div class=\"box2\">\n\t\t<section>\n\t\t\t<h2>a</h2>\n\t\t\t<p>b</p>\n\t\t</section>\n\t</div>\n\t<div class=\"box1\">\n\t\t<section>\n\t\t\t<h2>c</h2>\n\t\t\t<p>d</p>\n\t\t\t<p>e</p>\n\t\t\t<blockquote>\n\t\t\t\t<h2>f</h2>\n\t\t\t\t<h3>g</h3>\n\t\t\t</blockquote>\n\t\t\t<p>h</p>\n\t\t</section>\n\t</div>\n</div>\n", - }, - { - 'query': "(div>(label+input))+div", - 'result': "<div>\n\t<label for=\"\"></label>\n\t<input type=\"\" />\n</div>\n<div></div>\n", - }, - { - 'query': "test1\ntest2\ntest3$$$$\\<esc>ggVG\\<c-y>,ul>li>span*>a\\<cr>$$$$", - 'result': "<ul>\n\t<li>\n\t\t<span><a href=\"\">test1</a></span>\n\t\t<span><a href=\"\">test2</a></span>\n\t\t<span><a href=\"\">test3</a></span>\n\t</li>\n</ul>", - }, - { - 'query': "test1\ntest2\ntest3$$$$\\<esc>ggVG\\<c-y>,input[type=input value=$#]*\\<cr>$$$$", - 'result': "<input type=\"input\" value=\"test1\" />\n<input type=\"input\" value=\"test2\" />\n<input type=\"input\" value=\"test3\" />", - }, - { - 'query': "div#id-$*5>div#id2-$", - 'result': "<div id=\"id-1\">\n\t<div id=\"id2-1\"></div>\n</div>\n<div id=\"id-2\">\n\t<div id=\"id2-2\"></div>\n</div>\n<div id=\"id-3\">\n\t<div id=\"id2-3\"></div>\n</div>\n<div id=\"id-4\">\n\t<div id=\"id2-4\"></div>\n</div>\n<div id=\"id-5\">\n\t<div id=\"id2-5\"></div>\n</div>\n", - }, - { - 'query': "{test case $ }*3", - 'result': "test case 1 test case 2 test case 3 ", - }, - { - 'query': "{test case $${nr}}*3", - 'result': "test case 1\ntest case 2\ntest case 3\n", - }, - { - 'query': "{test case \\$ }*3", - 'result': "test case $ test case $ test case $ ", - }, - { - 'query': "{test case $$$ }*3", - 'result': "test case 001 test case 002 test case 003 ", - }, - { - 'query': "a[title=$#]{foo}", - 'result': "<a href=\"\" title=\"foo\">foo</a>\n", - }, - ], - }, - { - 'name': 'split join tag', - 'tests': [ - { - 'query': "<div>\n\t<span>$$$$\\<c-y>j$$$$</span>\n</div>", - 'result': "<div>\n\t<span/>\n</div>", - }, - { - 'query': "<div>\n\t<span$$$$\\<c-y>j$$$$/>\n</div>", - 'result': "<div>\n\t<span></span>\n</div>", - }, - ], - }, - { - 'name': 'toggle comment', - 'tests': [ - { - 'query': "<div>\n\t<span>$$$$\\<c-y>/$$$$</span>\n</div>", - 'result': "<div>\n\t<!-- <span></span> -->\n</div>", - }, - { - 'query': "<div>\n\t<!-- <span>$$$$\\<c-y>/$$$$</span> -->\n</div>", - 'result': "<div>\n\t<span></span>\n</div>", - }, - ], - }, - { - 'name': 'image size', - 'tests': [ - { - 'query': "img[src=http://mattn.kaoriya.net/images/logo.png]$$$$\\<c-y>,\\<c-y>i$$$$", - 'result': "<img src=\"http://mattn.kaoriya.net/images/logo.png\" alt=\"\" width=\"96\" height=\"96\" />", - }, - { - 'query': "img[src=/logo.png]$$$$\\<c-y>,\\<c-y>i$$$$", - 'result': "<img src=\"/logo.png\" alt=\"\" />", - }, - ], - }, - { - 'name': 'move next prev', - 'tests': [ - { - 'query': "foo+bar+baz[dankogai=\"\"]$$$$\\<c-y>,\\<esc>gg0\\<c-y>n\\<c-y>n\\<c-y>n\\<esc>Byw:%d _\\<cr>p$$$$", - 'result': "dankogai", - }, - ], - }, - ], -}, -{ - 'type': 'css', - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "@i", - 'result': "@import url();", - }, - { - 'query': "fs:n", - 'result': "font-style: normal;", - }, - { - 'query': "fl:l|fc", - 'result': "float: left;", - }, - { - 'query': "bg+$$$$", - 'result': "background: #FFF url($$$$) 0 0 no-repeat;", - }, - { - 'query': "bg+!$$$$", - 'result': "background: #FFF url($$$$) 0 0 no-repeat !important;", - }, - { - 'query': "m$$$$", - 'result': "margin: $$$$;", - }, - { - 'query': "m0.1p$$$$", - 'result': "margin: 0.1%;", - }, - { - 'query': "m1.0$$$$", - 'result': "margin: 1.0em;", - }, - { - 'query': "m2$$$$", - 'result': "margin: 2px;", - }, - { - 'query': "bdrs10$$$$", - 'result': "border-radius: 10px;", - }, - { - 'query': "-bdrs20$$$$", - 'result': "-webkit-border-radius: 20px;\n-moz-border-radius: 20px;\nborder-radius: 20px;", - }, - { - 'query': "lg(top,#fff,#000)$$$$", - 'result': "background-image: -webkit-gradient(top, 0 0, 0 100, from(#fff), to(#000));\nbackground-image: -webkit-linear-gradient(#fff, #000);\nbackground-image: -moz-linear-gradient(#fff, #000);\nbackground-image: -o-linear-gradient(#fff, #000);\nbackground-image: linear-gradient(#fff, #000);\n", - }, - { - 'query': "m10-5-0$$$$", - 'result': "margin: 10px 5px 0px;", - }, - { - 'query': "m-10--5$$$$", - 'result': "margin: -10px -5px;", - }, - { - 'query': "m10-auto$$$$", - 'result': "margin: 10px auto;", - }, - { - 'query': "w100p$$$$", - 'result': "width: 100%;", - }, - { - 'query': "h50e$$$$", - 'result': "height: 50em;", - }, - { - 'query': "(bg+)+c$$$$", - 'result': "background: #FFF url($$$$) 0 0 no-repeat;\ncolor: #000;", - }, - ], - }, - ], -}, -{ - 'type': 'haml', - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}", - 'result': "%div\n %p\n %ul#foo\n %li.bar1{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar2{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar3{ :foo => \"bar\", :bar => \"baz\" } baz\n", - }, - { - 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}|haml", - 'result': "%div\n %p\n %ul#foo\n %li.bar1{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar2{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar3{ :foo => \"bar\", :bar => \"baz\" } baz\n", - }, - { - 'query': "a*3|haml", - 'result': "%a{ :href => \"\" }\n%a{ :href => \"\" }\n%a{ :href => \"\" }\n", - }, - { - 'query': ".content{Hello!}|haml", - 'result': "%div.content Hello!\n", - }, - { - 'query': "a[title=$#]{foo}", - 'result': "%a{ :href => \"\", :title => \"foo\" } foo\n", - }, - ], - }, - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "%a foo\n bar$$$$\\<c-y>j$$$$", - 'result': "%a ", - }, - { - 'query': "$$$$\\<c-y>j$$$$%a ", - 'result': "%a $$$$", - }, - ], - }, - { - 'name': 'toggle comment', - 'tests': [ - { - 'query': "%a{ :href => \"http://www.google.com\"$$$$\\<c-y>/$$$$ } hello", - 'result': "-# %a{ :href => \"http://www.google.com\" } hello", - }, - { - 'query': "-# %a{ :href => \"http://www.google.com\"$$$$\\<c-y>/$$$$ } hello", - 'result': "%a{ :href => \"http://www.google.com\" } hello", - }, - ], - }, - ], -}, -{ - 'type': 'slim', - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}", - 'result': "div\n p\n ul id=\"foo\"\n li class=\"bar1\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar2\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar3\" foo=\"bar\" bar=\"baz\"\n | baz\n", - }, - { - 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}|slim", - 'result': "div\n p\n ul id=\"foo\"\n li class=\"bar1\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar2\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar3\" foo=\"bar\" bar=\"baz\"\n | baz\n", - }, - { - 'query': "a*3|slim", - 'result': "a href=\"\"\na href=\"\"\na href=\"\"\n", - }, - { - 'query': ".content{Hello!}|slim", - 'result': "div class=\"content\"\n | Hello!\n", - }, - { - 'query': "a[title=$#]{foo}", - 'result': "a href=\"\" title=\"foo\"\n | foo\n", - }, - ], - }, - { - 'name': 'split join tag', - 'tests': [ - { - 'query': "a\n | foo$$$$\\<c-y>j$$$$", - 'result': "a", - }, - { - 'query': "a$$$$\\<c-y>j$$$$", - 'result': "a\n | $$$$", - }, - ], - }, - { - 'name': 'toggle comment', - 'tests': [ - { - 'query': "a href=\"http://www.google.com\"$$$$\\<c-y>/$$$$\n | hello", - 'result': "/a href=\"http://www.google.com\"\n | hello", - }, - { - 'query': "/a href=\"http://www.google.com\"$$$$\\<c-y>/$$$$\n | hello", - 'result': "a href=\"http://www.google.com\"\n | hello", - }, - ], - }, - ], -}, -{ - 'type': 'xsl', - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "vari", - 'result': "<xsl:variable name=\"\"></xsl:variable>\n", - }, - { - 'query': "ap>wp", - 'result': "<xsl:apply-templates select=\"\" mode=\"\">\n\t<xsl:with-param name=\"\" select=\"\"></xsl:with-param>\n</xsl:apply-templates>\n", - }, - ], - }, - ], -}, -{ - 'type': 'xsd', - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "xsd:w3c", - 'result': "<?xml version=\"1.0\"?>\n<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n\t<xsd:element name=\"\" type=\"\"/>\n</xsd:schema>", - }, - ], - }, - ], -}, -{ - 'type': 'mustache', - 'categories': [ - { - 'name': 'expand abbreviation', - 'tests': [ - { - 'query': "div#{{foo}}", - 'result': "<div id=\"{{foo}}\"></div>\n", - }, - { - 'query': "div.{{foo}}", - 'result': "<div class=\"{{foo}}\"></div>\n", - }, - ], - }, - ], -}, -] -" vim:set et: diff --git a/sources_forked/zencoding/zencoding.vim.vimup b/sources_forked/zencoding/zencoding.vim.vimup deleted file mode 100755 index 72608e48..00000000 --- a/sources_forked/zencoding/zencoding.vim.vimup +++ /dev/null @@ -1,265 +0,0 @@ -script_name: ZenCoding.vim -script_id: '2981' -script_type: utility -script_package: zencoding-vim.zip -script_version: '0.80' -required_vim_version: '7.0' -summary: vim plugins for HTML and CSS hi-speed coding. - -detailed_description: | - - This is vim script support expanding abbreviation like zen-coding. - ref: http://code.google.com/p/zen-coding/ - - There is a movie using zencoding.vim - ref: http://mattn.github.com/zencoding-vim - - Source Repository. - ref: http://github.com/mattn/zencoding-vim - - Type abbreviation - +------------------------------------- - | html:5_ - +------------------------------------- - "_" is a cursor position. and type "<c-y>," (Ctrl + y and Comma) - NOTE: Don't worry about key map. you can change it easily. - +------------------------------------- - | <!DOCTYPE HTML> - | <html lang="en"> - | <head> - | <title></title> - | <meta charset="UTF-8"> - | </head> - | <body> - | _ - | </body> - | </html> - +------------------------------------- - Type following - +------------------------------------- - | div#foo$*2>div.bar - +------------------------------------- - And type "<c-y>," - +------------------------------------- - |<div id="foo1"> - | <div class="bar">_</div> - |</div> - |<div id="foo2"> - | <div class="bar"></div> - |</div> - | _ - +------------------------------------- - - Tutorial: - - http://github.com/mattn/zencoding-vim/raw/master/TUTORIAL - - How work this: - - http://mattn.github.com/zencoding-vim - - Tips: - - You can customize behavior of expanding with overriding config. - This configuration will be marged at loading plugin. - - let g:user_zen_settings = { - \ 'indentation' : ' ', - \ 'perl' : { - \ 'aliases' : { - \ 'req' : 'require ' - \ }, - \ 'snippets' : { - \ 'use' : "use strict\nuse warnings\n\n", - \ 'warn' : "warn \"|\";", - \ } - \ } - \} - - let g:user_zen_expandabbr_key = '<c-e>' - - let g:use_zen_complete_tag = 1 - - You can set language attribute in html using zen_settings['lang']. - -install_details: | - - # cd ~/.vim - # unzip zencoding-vim.zip - - or if you install pathogen.vim: - - # cd ~/.vim/bundle # or make directory - # unzip /path/to/zencoding-vim.zip - - if you get sources from repository: - - # cd ~/.vim/bundle # or make directory - # git clone http://github.com/mattn/zencoding-vim.git - -versions: -- '0.80': | - This is an upgrade for ZenCoding.vim: add emmet features. -- '0.74': | - This is an upgrade for ZenCoding.vim: many bug fixes. -- '0.73': | - This is an upgrade for ZenCoding.vim: many bug fixes. and support slim format (experimental). -- '0.72': | - This is an upgrade for ZenCoding.vim: - [fix] fix finding tokens. -- '0.71': | - This is an upgrade for ZenCoding.vim: - [fix] fix finding begin of tokens. -- '0.70': | - This is an upgrade for ZenCoding.vim: - [mod] Changed behavior of expanding. "div div>a|" should keep first div element. - [add] Supported slim formatter. -- '0.60': | - This is an upgrade for ZenCoding.vim: - [fix] fixed expanding {{}}. -- '0.59': | - This is an upgrade for ZenCoding.vim: - [fix] fixed toggleComment and mny bugs. -- '0.58': | - This is an upgrade for ZenCoding.vim: - [fix] fixed 'foo+' style expandos. -- '0.57': | - This is an upgrade for ZenCoding.vim: - [fix] fixed expandos that don't work 'choose' in xsl. -- '0.56': | - This is an upgrade for ZenCoding.vim: - [fix] fixed contents parser. -- '0.55': | - uploaded again: sorry, files was old. -- '0.54': | - [add] support sass, xsd. - [fix] expanding with html tag. - uploaded again: sorry, fileformat was DOS. -- '0.53': | - [fix] gif width/height was swapped. -- '0.52': | - [fix] broken wrap expanding. -- '0.51': | - This is an upgrade for ZenCoding.vim: - [fix] wrap expanding with '&'. - [fix] expand .content to class="content". - [fix] haml expanding. - [fix] bg+ snippet -- '0.50': | - This is an upgrade for ZenCoding.vim: - [fix] fixed parsing '#{{foo}}' and '.{{bar}}'. -- '0.49': | - This is an upgrade for ZenCoding.vim: - [doc] add help manual. -- '0.48': | - This is an upgrade for ZenCoding.vim: - [fix] install mappings to global. -- '0.47': | - This is an upgrade for ZenCoding.vim: - [drastic changes] enable autoload. you should whole replace older files. - package was empty. upload again. -- '0.46': | - This is an upgrade for ZenCoding.vim: - [drastic changes] enable autoload. you should whole replace older files. -- '0.45': | - This is an upgrade for ZenCoding.vim: - fixed attribute parsing like: a[href="hello', world" rel]. -- '0.44': | - This is an upgrade for ZenCoding.vim: - fixed checking whether have mapping using maparg() / hasmapto(). -- '0.43': | - This is an upgrade for ZenCoding.vim: - fixed behavior for nested block. like "html:5>#page>(header#globalHeader>(hgroup>h1+h2)+(nav>ul>li*3>a)+(form>p.siteSearch>input+input[type=button]))+(#contents>(#main>(section>h2+p*5)+p.pagetop>a[href=#page])+(#sub>p+(nav>ul>li>a)))+(footer#globalFoooter>(ul>li>a)+(p.copyright>small))" -- '0.42': | - This is an upgrade for ZenCoding.vim: - fixed select/option indent. -- '0.41': | - This is an upgrade for ZenCoding.vim: - fixed default filter. when using 'e' filter, output become empty. -- '0.40': | - This is an upgrade for ZenCoding.vim: - add the pure vimscript code for 'get image size'. you can use it without perl interface just now. - change key assign of ZenCodingExpandWord from ',' to ';'. it don't effect to most users. -- '0.39': | - This is an upgrade for ZenCoding.vim: fixed problem about 'selection'. see http://github.com/mattn/zencoding-vim/issues/#issue/2 -- '0.38': | - This is an upgrade for ZenCoding.vim: use v7h"_s instead of v7hs for backspace. -- '0.37': | - This is an upgrade for ZenCoding.vim: fixed problem that won't working with some 'backspace' options. -- '0.36': | - This is an upgrade for ZenCoding.vim: fixed problem that filter does not work. -- '0.35': | - This is an upgrade for ZenCoding.vim: enable zencoding for other languages. (meaning php also) -- '0.34': | - This is an upgrade for ZenCoding.vim: enable zencoding for xsl. (you should add ~/.vim/ftplugin/xslt/zencoding.vim) -- '0.33': | - This is an upgrade for ZenCoding.vim: fixed problem breaking multibyte when cursor is in a part of line. enabled zencoding for javascript in html. -- '0.32': | - This is an upgrade for ZenCoding.vim: fixed indentation. supported extends so that you can enable zencoding for php/xhtml/haml other's section 14 in http://github.com/mattn/zencoding-vim/raw/master/TUTORIAL -- '0.31': | - This is an upgrade for ZenCoding.vim: fixed indentation and $$$ problem. fixed about missing support multiple classes. -- '0.30': | - This is an upgrade for ZenCoding.vim: Fixed key assign. -- '0.29': | - This is an upgrade for ZenCoding.vim: Changed leading key to '<c-y>' from '<c-z>'. -- '0.28': | - This is an upgrade for ZenCoding.vim: supported 'Balance Tag Inward/Outward', 'Go to Next/Previous Edit Point', 'Update <img> Size', 'Remove Tag', 'Split/Join Tag', 'Toggle Comment' -- '0.27': | - This is an upgrade for ZenCoding.vim: fixed problem that can't work on the part of multibyte characters. fixed inline elements behavior. -- '0.26': | - This is an upgrade for ZenCoding.vim: The count of '(((a#foo + a#bar)*2)*3)' should be 12. -- '0.25': | - This is an upgrade for ZenCoding.vim: store undo before working. good luck about 'table>(tr>td*3)*4'. -- '0.24': | - This is an upgrade for ZenCoding.vim: fixed behavior of parsing area of visual selection. -- '0.23': | - This is an upgrade for ZenCoding.vim: pre-expand '#header>li<#content' to 'div#header>li<div#content'. support () expression. -- '0.22': | - This is an upgrade for ZenCoding.vim: expand 'ul+' to 'ul>li'. fix undo ring. support visual selection. when type trigger key on visual select, it request you leader like 'ul>li'. if you give 'ul>li*' as leader, you'll get each separate 'ul>li' tags. and when you give 'blockquote' as leader, you'll get blocked text. -- '0.21': | - This is an upgrade for ZenCoding.vim: treat xhtml as html. -- '0.20': | - This is an upgrade for ZenCoding.vim: add option use_zen_complete_tag for complete abbr. -- '0.19': | - This is an upgrade for ZenCoding.vim: fixed problem that couldn't expand 'link:css' correctly. -- '0.18': | - This is an upgrade for ZenCoding.vim: ignore duplicate key map. -- '0.17': | - This is an upgrade for ZenCoding.vim: fixed key map. -- '0.16': | - This is an upgrade for ZenCoding.vim: fixed problem 'endless loop'. -- '0.15': | - This is an upgrade for ZenCoding.vim: set default filetype to 'html'. -- '0.14': | - This is an upgrade for ZenCoding.vim: fixed tag name like 'fs:n' in 'css'. -- '0.14': | - This is an upgrade for ZenCoding.vim: indentation for each languages. -- '0.13': | - This is an upgrade for ZenCoding.vim: user key map. -- '0.12': | - This is an upgrade for ZenCoding.vim: few extensive notation. -- '0.11': | - This is an upgrade for ZenCoding.vim: fixed indent. -- '0.10': | - This is an upgrade for ZenCoding.vim: fixed behavior of '+' operator -- '0.9': | - This is an upgrade for ZenCoding.vim: fixed single line behavior -- '0.8': | - This is an upgrade for ZenCoding.vim: support 'a[href=http://www.google.com]{Google}' -- '0.7': | - This is an upgrade for ZenCoding.vim: fixed behavior in 'a+b'. -- '0.6': | - This is an upgrade for ZenCoding.vim: fixed strange behavior about '<a href="">b_</a>'. -- '0.5': | - This is an upgrade for ZenCoding.vim: recover rest part in line. -- '0.4': | - This is an upgrade for ZenCoding.vim: fixed cursor position. fixed ${lang} replacement. -- '0.3': | - This is an upgrade for ZenCoding.vim: fixed line expanding. -- '0.2': | - This is an upgrade for ZenCoding.vim: fixed problem that moving cursor with expanding. -- '0.1': | - Initial upload - -# __END__ -# vim: filetype=yaml diff --git a/sources_non_forked/syntastic/doc/syntastic.txt b/sources_non_forked/syntastic/doc/syntastic.txt index 70f2ca48..310c1348 100644 --- a/sources_non_forked/syntastic/doc/syntastic.txt +++ b/sources_non_forked/syntastic/doc/syntastic.txt @@ -36,7 +36,9 @@ CONTENTS *syntastic-contents* 5.2.Choosing the executable................|syntastic-config-exec| 5.3.Configuring specific checkers..........|syntastic-config-makeprg| 5.4.Sorting errors.........................|syntastic-config-sort| - 5.5.Debugging..............................|syntastic-config-debug| + 5.5.Filtering errors.......................|syntastic-config-filtering| + 5.6.Debugging..............................|syntastic-config-debug| + 5.7.Profiling..............................|syntastic-profiling| 6.Notes........................................|syntastic-notes| 6.1.Handling of composite filetypes........|syntastic-composite| 6.2.Editing files over network.............|syntastic-netrw| @@ -91,21 +93,21 @@ Syntastic comes preconfigured with a default list of enabled checkers per trying to use conflicting checkers. You can see the list of checkers available for the current filetype with the -|:SyntasticInfo| command. +`:SyntasticInfo` command. You probably want to override the configured list of checkers for the filetypes you use, and also change the arguments passed to specific checkers to suit your needs. See |syntastic-checker-options| below for details. -Use |:SyntasticCheck| to manually check right now. Use |:Errors| to open the -|location-list| window, and |:lclose| to close it. You can clear the error -list with |:SyntasticReset|, and you can use |:SyntasticToggleMode| to switch +Use `:SyntasticCheck` to manually check right now. Use `:Errors` to open the +|location-list| window, and `:lclose` to close it. You can clear the error +list with `:SyntasticReset`, and you can use `:SyntasticToggleMode` to switch between active (checking on writing the buffer) and passive (manual) checking. You don't have to switch focus to the |location-list| window to jump to the different errors. Vim provides several built-in commands for this, for -example |:lnext| and |:lprevious|. You may want to add shortcut mappings for -these commands, or perhaps install a plugin such as Tim Pope's 'unimpaired' +example `:lnext` and `:lprevious`. You may want to add shortcut mappings for +these commands, or perhaps install a plugin such as Tim Pope's "unimpaired" (see https://github.com/tpope/vim-unimpaired) that provides such mappings. ------------------------------------------------------------------------------ @@ -128,7 +130,7 @@ needed: > 2. Functionality provided *syntastic-functionality* Syntax checking can be done automatically or on demand (see -|'syntastic_mode_map'| and |:SyntasticToggleMode| for configuring this). +|'syntastic_mode_map'| and `:SyntasticToggleMode` for configuring this). When syntax checking is done, the features below can be used to notify the user of errors. See |syntastic-global-options| for how to configure and @@ -167,19 +169,19 @@ possible solutions. See also |syntastic-powerline| below if you're using the ------------------------------------------------------------------------------ 2.2. Error signs *syntastic-error-signs* -Syntastic uses the |:sign| commands (provided that the |+signs| feature is +Syntastic uses the `:sign` commands (provided that the |+signs| feature is compiled in) to mark lines with errors and warnings in the sign column. To enable this feature, use the |'syntastic_enable_signs'| option. Signs are colored using the Error and Todo syntax highlight groups by default (see |group-name|). If you wish to customize the colors for the signs, you can use the following groups: - SyntasticErrorSign - For syntax errors, links to 'error' by default - SyntasticWarningSign - For syntax warnings, links to 'todo' by default - SyntasticStyleErrorSign - For style errors, links to 'SyntasticErrorSign' + SyntasticErrorSign - For syntax errors, links to "error" by default + SyntasticWarningSign - For syntax warnings, links to "todo" by default + SyntasticStyleErrorSign - For style errors, links to "SyntasticErrorSign" by default SyntasticStyleWarningSign - For style warnings, links to - 'SyntasticWarningSign' by default + "SyntasticWarningSign" by default Example: > highlight SyntasticErrorSign guifg=white guibg=red @@ -188,8 +190,8 @@ To set up highlighting for the line where a sign resides, you can use the following highlight groups: SyntasticErrorLine SyntasticWarningLine - SyntasticStyleErrorLine - Links to 'SyntasticErrorLine' by default - SyntasticStyleWarningLine - Links to 'SyntasticWarningLine' by default + SyntasticStyleErrorLine - Links to "SyntasticErrorLine" by default + SyntasticStyleWarningLine - Links to "SyntasticWarningLine" by default Example: > highlight SyntasticErrorLine guibg=#2f0000 @@ -197,15 +199,15 @@ Example: > ------------------------------------------------------------------------------ 2.3. The error window *syntastic-error-window* -You can use the |:Errors| command to display the errors for the current buffer +You can use the `:Errors` command to display the errors for the current buffer in the |location-list|. By default syntastic doesn't fill the |location-list| with the errors found by the checkers, in order to reduce clashes with other plugins. Consequently, if -you run |:lopen| or |:lwindow| rather than |:Errors| to open the error window -you wouldn't see syntastic's list of errors. If you insist on using |:lopen| -or |:lwindow| you should either run |:SyntasticSetLoclist| after running the -checks, or set |syntastic_always_populate_loc_list| which tells syntastic to +you run `:lopen` or `:lwindow` rather than `:Errors` to open the error window +you wouldn't see syntastic's list of errors. If you insist on using `:lopen` +or `:lwindow` you should either run `:SyntasticSetLoclist` after running the +checks, or set |'syntastic_always_populate_loc_list'| which tells syntastic to update the |location-list| automatically. ------------------------------------------------------------------------------ @@ -215,10 +217,10 @@ Some checkers provide enough information for syntastic to be able to highlight errors. By default the SpellBad syntax highlight group is used to color errors, and the SpellCap group is used for warnings. If you wish to customize the colors for highlighting you can use the following groups: - SyntasticError - Links to 'SpellBad' by default - SyntasticWarning - Links to 'SpellCap' by default - SyntasticStyleError - Links to SyntasticError by default - SyntasticStyleWarning - Links to SyntasticWarning by default + SyntasticError - Links to "SpellBad" by default (see |hl-SpellBad|) + SyntasticWarning - Links to "SpellCap" by default (see |hl-SpellCap|) + SyntasticStyleError - Links to "SyntasticError" by default + SyntasticStyleWarning - Links to "SyntasticWarning" by default Example: > highlight SyntasticError guibg=#2f0000 @@ -238,7 +240,7 @@ If |'syntastic_aggregate_errors'| is set, syntastic runs all checkers that apply (still cf. |syntastic-filetype-checkers|), then aggregates errors found by all checkers in a single list, and notifies you. In this mode each error message is labeled with the name of the checker that generated it, but you can -disable generation of these labels by turning off '|syntastic_id_checkers|'. +disable generation of these labels by turning off |'syntastic_id_checkers'|. If |'syntastic_sort_aggregated_errors'| is set (which is the default), messages in the aggregated list are grouped by file, then sorted by line number, then @@ -264,7 +266,7 @@ See also: |'syntastic_<filetype>_<checker>_quiet_messages'| and When errors have been detected, use this command to pop up the |location-list| and display the error messages. -Please note that the |:Errors| command overwrites the current location list with +Please note that the `:Errors` command overwrites the current location list with syntastic's own location list. :SyntasticToggleMode *:SyntasticToggleMode* @@ -304,26 +306,29 @@ Resets the list of errors and turns off all error notifiers. If |'syntastic_always_populate_loc_list'| is not set, the |location-list| is not filled in automatically with the list of errors detected by the checkers. This is useful if you run syntastic along with other plugins that use location -lists. The |:SyntasticSetLoclist| command allows you to stick the errors into +lists. The `:SyntasticSetLoclist` command allows you to stick the errors into the location list explicitly. ============================================================================== 4. Global Options *syntastic-global-options* *'syntastic_check_on_open'* +Type: boolean Default: 0 If this variable is enabled, syntastic in active mode will run syntax checks when buffers are first loaded, as well as on saving: > let g:syntastic_check_on_open = 1 < *'syntastic_check_on_wq'* +Type: boolean Default: 1 In active mode syntax checks are normally run whenever buffers are written to disk, even when the writes happen just before quitting Vim. If you want to -skip checks when you issue |:wq|, |:x|, and |:ZZ|, set this variable to 0: > +skip checks when you issue `:wq`, `:x`, and `:ZZ`, set this variable to 0: > let g:syntastic_check_on_wq = 0 < *'syntastic_aggregate_errors'* +Type: boolean Default: 0 When enabled, syntastic runs all checkers that apply to the current filetype, then aggregates errors found by all checkers and displays them. When disabled, @@ -332,26 +337,30 @@ time a checker finds any errors. > let g:syntastic_aggregate_errors = 1 < *'syntastic_id_checkers'* +Type: boolean Default: 1 When results from multiple checkers are aggregated in a single error list (that is either when |'syntastic_aggregate_errors'| is enabled, or when -checking a file with a composite filetype), it might not be immediately -obvious which checker has produced a given error message. This variable -instructs syntastic to label error messages with the names of the checkers -that created them. > +checking a file with a composite filetype, cf. |syntastic-composite|), it +might not be immediately obvious which checker has produced a given error +message. This variable instructs syntastic to label error messages with the +names of the checkers that created them. > let g:syntastic_id_checkers = 0 < *'syntastic_sort_aggregated_errors'* +Type: boolean Default: 1 By default, when results from multiple checkers are aggregated in a single -error list (that is either when |'syntastic_aggregate_errors'| is enabled, -or when checking a file with a composite filetype), errors are grouped by -file, then sorted by line number, then grouped by type (namely errors take -precedence over warnings), then they are sorted by column number. If you want -to leave messages grouped by checker output, set this variable to 0: > +error list (that is either when |'syntastic_aggregate_errors'| is enabled, or +when checking a file with a composite filetype, cf. |syntastic-composite|), +errors are grouped by file, then sorted by line number, then grouped by type +(namely errors take precedence over warnings), then they are sorted by column +number. If you want to leave messages grouped by checker output, set this +variable to 0: > let g:syntastic_sort_aggregated_errors = 0 < *'syntastic_echo_current_error'* +Type: boolean Default: 1 If enabled, syntastic will echo current error to the command window. If multiple errors are found on the same line, |'syntastic_cursor_columns'| is @@ -359,6 +368,7 @@ used to decide which one is shown. > let g:syntastic_echo_current_error = 1 < *'syntastic_cursor_columns'* +Type: boolean Default: 1 This option controls which errors are echoed to the command window if |'syntastic_echo_current_error'| is set and multiple errors are found on the @@ -371,25 +381,28 @@ up navigation significantly: > let g:syntastic_cursor_column = 0 < *'syntastic_enable_signs'* +Type: boolean Default: 1 -Use this option to tell syntastic whether to use the |:sign| interface to mark +Use this option to tell syntastic whether to use the `:sign` interface to mark syntax errors: > let g:syntastic_enable_signs = 1 < *'syntastic_error_symbol'* *'syntastic_style_error_symbol'* *'syntastic_warning_symbol'* *'syntastic_style_warning_symbol'* -Use this option to control what the syntastic |:sign| text contains. Several +Type: string +Use these options to control what the syntastic `:sign` text contains. Several error symbols can be customized: - syntastic_error_symbol - For syntax errors, defaults to '>>' - syntastic_style_error_symbol - For style errors, defaults to 'S>' - syntastic_warning_symbol - For syntax warnings, defaults to '>>' - syntastic_style_warning_symbol - For style warnings, defaults to 'S>' + syntastic_error_symbol - For syntax errors, defaults to ">>" + syntastic_style_error_symbol - For style errors, defaults to "S>" + syntastic_warning_symbol - For syntax warnings, defaults to ">>" + syntastic_style_warning_symbol - For style warnings, defaults to "S>" Example: > - let g:syntastic_error_symbol = "✗" - let g:syntastic_warning_symbol = "⚠" + let g:syntastic_error_symbol = "\u2717" + let g:syntastic_warning_symbol = "\u26A0" < *'syntastic_enable_balloons'* +Type: boolean Default: 1 Use this option to tell syntastic whether to display error messages in balloons when the mouse is hovered over erroneous lines: > @@ -398,12 +411,14 @@ when the mouse is hovered over erroneous lines: > Note that Vim must be compiled with |+balloon_eval|. *'syntastic_enable_highlighting'* +Type: boolean Default: 1 Use this option to tell syntastic whether to use syntax highlighting to mark errors (where possible). Highlighting can be turned off with the following > let g:syntastic_enable_highlighting = 0 < *'syntastic_always_populate_loc_list'* +Type: boolean Default: 0 By default syntastic doesn't fill the |location-list| with the errors found by the checkers, in order to reduce clashes with other plugins. Enable this @@ -414,9 +429,10 @@ option to tell syntastic to always stick any detected errors into the Please note that if |'syntastic_auto_jump'| is set to a non-zero value the location list is overwritten with Syntastic's own list when taking a jump, regardless of the value of |'syntastic_always_populate_loc_list'|. The -location list is also overwritten when running the |:Errors| command. +location list is also overwritten when running the `:Errors` command. *'syntastic_auto_jump'* +Type: integer Default: 0 Enable this option if you want the cursor to jump to the first detected issue when saving or opening a file. @@ -441,6 +457,7 @@ of the location list being overwritten with Syntastic's own location list, regardless of the value of |'syntastic_always_populate_loc_list'|. *'syntastic_auto_loc_list'* +Type: integer Default: 2 Use this option to tell syntastic to automatically open and/or close the |location-list| (see |syntastic-error-window|). @@ -462,12 +479,14 @@ detected, but not closed automatically. > let g:syntastic_auto_loc_list = 3 < *'syntastic_loc_list_height'* +Type: integer Default: 10 Use this option to specify the height of the location lists that syntastic opens. > let g:syntastic_loc_list_height = 5 < *'syntastic_ignore_files'* +Type: list of strings Default: [] Use this option to specify files that syntastic should never check. It's a list of |regular-expression| patterns. The full paths of files (see |::p|) are @@ -476,6 +495,7 @@ to specify case-insensitive patterns. Example: > let g:syntastic_ignore_files = ['\m^/usr/include/', '\m\c\.h$'] < *'syntastic_filetype_map'* +Type: dictionary Default: {} Use this option to map non-standard filetypes to standard ones. Corresponding checkers are mapped accordingly, which allows syntastic to check files with @@ -484,11 +504,13 @@ non-standard filetypes: > \ "plaintex": "tex", \ "gentoo-metadata": "xml" } < -Composite filetypes can also be mapped to simple types, which disables the -default behaviour of running both checkers against the input file: > +Composite filetypes (cf. |syntastic-composite|) can also be mapped to simple +types, which disables the default behaviour of running both checkers against +the input file: > let g:syntastic_filetype_map = { "handlebars.html": "handlebars" } < *'syntastic_mode_map'* +Type: dictionary Default: { "mode": "active", "active_filetypes": [], "passive_filetypes": [] } @@ -496,7 +518,6 @@ Use this option to fine tune when automatic syntax checking is done (or not done). The option should be set to something like: > - let g:syntastic_mode_map = { \ "mode": "active", \ "active_filetypes": ["ruby", "php"], @@ -505,7 +526,7 @@ The option should be set to something like: > "mode" can be mapped to one of two values - "active" or "passive". When set to "active", syntastic does automatic checking whenever a buffer is saved or initially opened. When set to "passive" syntastic only checks when the user -calls |:SyntasticCheck|. +calls `:SyntasticCheck`. The exceptions to these rules are defined with "active_filetypes" and "passive_filetypes". In passive mode, automatic checks are still done for @@ -520,16 +541,18 @@ If local variable |'b:syntastic_mode'| is defined its value takes precedence over all calculations involving |'syntastic_mode_map'| for the corresponding buffer. -At runtime, the |:SyntasticToggleMode| command can be used to switch between +At runtime, the `:SyntasticToggleMode` command can be used to switch between active and passive modes. *'b:syntastic_mode'* +Type: string Default: unset Only the local form |'b:syntastic_mode'| is used. When set to either "active" or "passive", it takes precedence over |'syntastic_mode_map'| when deciding whether the corresponding buffer should be checked automatically. *'syntastic_quiet_messages'* +Type: dictionary Default: {} Use this option to filter out some of the messages produced by checkers. The option should be set to something like: > @@ -542,7 +565,7 @@ option should be set to something like: > Each element turns off messages matching the patterns specified by the corresponding value. Values are lists, but if a list consist of a single element you may omit the brackets (e.g. you may write "style" instead of -["style"]). Elements with values [] or '' are ignored (this is useful for +["style"]). Elements with values [] or "" are ignored (this is useful for overriding filters, cf. |filter-overrides|). "level" - takes one of two values, "warnings" or "errors" @@ -572,16 +595,17 @@ errors produced by the said checker). In case of conflicting values for the same keys, the values of the checker-specific filters take precedence. *filter-overrides* -Since filter elements with values [] or '' are ignored, you can disable global +Since filter elements with values [] or "" are ignored, you can disable global filters for particular checkers, by setting the values of the corresponding -elements in |'syntastic_<filetype>_<checker>_quiet_messages'| to [] or ''. For +elements in |'syntastic_<filetype>_<checker>_quiet_messages'| to [] or "". For example, the following setting will silence all warnings, except for the ones produced by "pylint": > let g:syntastic_quiet_messages = { "level": "warnings" } let g:syntastic_python_pylint_quiet_messages = { "level" : [] } < *'syntastic_stl_format'* -Default: [Syntax: line:%F (%t)] +Type: string +Default: "[Syntax: line:%F (%t)]" Use this option to control what the syntastic statusline text contains. Several magic flags are available to insert information: %e - number of errors @@ -612,7 +636,7 @@ Several additional flags are available to hide text under certain conditions: These flags can't be nested. Example: > - let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]' + let g:syntastic_stl_format = "[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]" < If this format is used and the current buffer has 5 errors and 1 warning starting on lines 20 and 10 respectively then this would appear on the @@ -623,19 +647,22 @@ If the buffer had 2 warnings, starting on line 5 then this would appear: > [Warn: 5 #2] < *'b:syntastic_skip_checks'* +Type: boolean Default: unset Only the local form |'b:syntastic_skip_checks'| is used. When set to a true value, no checks are run against the corresponding buffer. Example: > let b:syntastic_skip_checks = 1 < *'syntastic_full_redraws'* +Type: boolean Default: 0 in GUI Vim and MacVim, 1 otherwise -Controls whether syntastic calls |:redraw| or |:redraw!| for screen redraws. +Controls whether syntastic calls `:redraw` or `:redraw!` for screen redraws. Changing it can in principle make screen redraws smoother, but it can also cause screen to flicker, or cause ghost characters. Leaving it to the default should be safe. *'syntastic_exit_checks'* +Type: boolean Default: 0 when running under "cmd.exe" on Windows, 1 otherwise Syntastic attempts to catch abnormal termination conditions from checkers by looking at their exit codes. The "cmd.exe" shell on Windows make these checks @@ -643,6 +670,7 @@ meaningless, by returning 1 to Vim when the checkers exit with non-zero codes. The above variable can be used to disable exit code checks in syntastic. *'syntastic_shell'* +Type: string Default: Vim's 'shell' This is the (full path to) the shell syntastic will use to run the checkers. On UNIX and Mac OS-X this shell must accept Bourne-compatible syntax for @@ -656,6 +684,7 @@ by the checkers you're using. Example: > let g:syntastic_shell = "/bin/sh" < *'syntastic_nested_autocommands'* +Type: boolean Default: 0 Controls whether syntastic's autocommands |BufReadPost| and |BufWritePost| are called from other |BufReadPost| and |BufWritePost| autocommands (see @@ -663,6 +692,7 @@ are called from other |BufReadPost| and |BufWritePost| autocommands (see other plugins, so only enable it if you actually need that functionality. *'syntastic_debug'* +Type: integer Default: 0 Set this to the sum of one or more of the following flags to enable debugging: @@ -678,15 +708,17 @@ Example: > let g:syntastic_debug = 1 < Syntastic will then add debugging messages to Vim's |message-history|. You can -examine these messages with |:mes|. +examine these messages with `:mes`. *'syntastic_debug_file'* +Type: string Default: unset When set, debugging messages are written to the file named by its value, in addition to being added to Vim's |message-history|: > - let g:syntastic_debug_file = '~/syntastic.log' + let g:syntastic_debug_file = "~/syntastic.log" < *'syntastic_extra_filetypes'* +Type: list of strings Default: [] List of filetypes handled by checkers external to syntastic. If you have a Vim plugin that adds a checker for syntastic, and if the said checker deals with a @@ -694,7 +726,7 @@ filetype that is unknown to syntastic, you might consider adding that filetype to this list: > let g:syntastic_extra_filetypes = [ "make", "gitcommit" ] < -This will allow |:SyntasticInfo| to do proper tab completion for the new +This will allow `:SyntasticInfo` to do proper tab completion for the new filetypes. ============================================================================== @@ -709,7 +741,7 @@ variable 'g:syntastic_<filetype>_checkers' to a list of checkers, e.g. > let g:syntastic_php_checkers = ["php", "phpcs", "phpmd"] < *'b:syntastic_checkers'* -There is also a per-buffer version of this setting, 'b:syntastic_checkers'. +There is also a per-buffer version of this setting, |'b:syntastic_checkers'|. When set, it takes precedence over |'g:syntastic_<filetype>_checkers'|. You can use this in an autocmd to configure specific checkers for particular paths: > autocmd FileType python if stridx(expand("%:p"), "/some/path/") == 0 | @@ -724,7 +756,7 @@ by syntastic: https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers -Use |:SyntasticInfo| to see which checkers are available for a given filetype. +Use `:SyntasticInfo` to see which checkers are available for a given filetype. ------------------------------------------------------------------------------ 5.2 Choosing the executable *syntastic-config-exec* @@ -733,74 +765,75 @@ Use |:SyntasticInfo| to see which checkers are available for a given filetype. The executable run by a checker is normally defined automatically, when the checker is registered. You can however override it, by setting the variable 'g:syntastic_<filetype>_<checker>_exec': > - let g:syntastic_ruby_mri_exec = '~/bin/ruby2' + let g:syntastic_ruby_mri_exec = "~/bin/ruby2" < This variable has a local version, 'b:syntastic_<filetype>_<checker>_exec', which takes precedence over the global one in the corresponding buffer. *'b:syntastic_<checker>_exec'* -And there is also a local variable named 'b:syntastic_<checker>_exec', which +There is also a local variable named 'b:syntastic_<checker>_exec', which takes precedence over both 'b:syntastic_<filetype>_<checker>_exec' and 'g:syntastic_<filetype>_<checker>_exec' in the buffers where it is defined. ------------------------------------------------------------------------------ 5.3 Configuring specific checkers *syntastic-config-makeprg* -Checkers are run by constructing a command line and passing it to a shell. -In most cases this command line is built using an internal function named -'makeprgBuild()', which provides a number of options that allows you to -customise every part of the command that gets called. +Checkers are run by constructing a command line and by passing it to a shell +(see |'shell'| and |'syntastic_shell'|). In most cases this command line is +built using an internal function named "makeprgBuild()", which provides a +number of options that allow you to customise every part of the command that +gets called. *'syntastic_<filetype>_<checker>_<option>'* -Checkers that use 'makeprgBuild()' construct a command line like this: > +Checkers that use "makeprgBuild()" construct the corresponding command line +like this: > let makeprg = self.makeprgBuild({ \ "exe": self.getExec(), \ "args": "-a -b -c", - \ "fname: shellescape(expand('%', 1)), + \ "fname": shellescape(expand("%", 1)), \ "post_args": "--more --args", \ "tail": "2>/dev/null" }) < The result is a command line of the form: > <exe> <args> <fname> <post_args> <tail> < -All arguments above are optional, and can be overridden by setting global +All fields above are optional, and can be overridden by setting global variables 'g:syntastic_<filetype>_<checker-name>_<option-name>' - even -parameters not specified in the call to 'makeprgBuild()'. For example to -override the args and the tail: > +parameters not specified in the call to "makeprgBuild()". For example to +override the argguments and the tail: > let g:syntastic_c_pc_lint_args = "-w5 -Iz:/usr/include/linux" let g:syntastic_c_pc_lint_tail = "2>/dev/null" < -These variables also have local versions named +These variables also have buffer-local versions named 'b:syntastic_<filetype>_<checker-name>_<option-name>', which takes precedence over the global ones in the corresponding buffers. -If any of the characters in the values of these variables have a special -meaning for the shell in use (see |'shell'| and |'syntastic_shell'|) you need -to escape them so that they can survive shell expansions. Vim function -|shellescape()| can help you with that: > - let g:syntastic_c_cppcheck_args = - \ '-DBUILD_BASENAME=my-module ' . shellescape('-DBUILD_STR(s)=#s') -< -Alternatively, you can tell syntastic to escape special characters by turning -the value into a list: > - let g:syntastic_c_cppcheck_args = - \ ['-DBUILD_BASENAME=my-module', '-DBUILD_STR(s)=#s'] -< -Each element of the list will then be escaped as needed and turned into a -separate shell argument. - -If one of the above variables has a non-empty default and you want it to be -empty, you can set it to an empty string, e.g.: > - let g:syntastic_javascript_jslint_args = "" - You can see the final outcome of setting these variables in the debug logs (cf. |syntastic-config-debug|). +Special characters need to be escaped, so that they can survive shell +expansions. Vim function |shellescape()| can help you with escaping: > + let g:syntastic_c_cppcheck_args = + \ "-DBUILD_BASENAME=my-module " . shellescape("-DBUILD_STR(s)=#s") +< +Alternatively, you can tell syntastic to escape special characters by turning +the value into a list: > + let g:syntastic_c_cppcheck_args = + \ ["-DBUILD_BASENAME=my-module", "-DBUILD_STR(s)=#s"] +< +Each element of this list is then escaped as needed, and turned into a +separate argument for the shell. + + *syntastic-config-empty* +If one of the above variables has a non-empty default and you want it to be +empty, you can set it to an empty string, e.g.: > + let g:syntastic_javascript_jslint_args = "" +< *'syntastic_<filetype>_<checker>_exe'* The 'exe' option is special. Normally it is the same as the 'exec' attribute described above, but you can use it to add environment variables to the command line, or to change the way the checker is run. For example this setup -allows you to run PC-Lint under Wine emulation on Linux: > +allows you to run PC-Lint on Linux, under Wine emulation: > let g:syntastic_c_pc_lint_exec = "wine" let g:syntastic_c_pc_lint_exe = "wine c:/path/to/lint-nt.exe" < @@ -813,22 +846,12 @@ omitting the filename from the command line: > let g:syntastic_sml_smlnj_fname = "" < *syntastic-config-no-makeprgbuild* -For checkers that do not use the 'makeprgBuild()' function you will have to +For checkers that do not use the "makeprgBuild()" function you will have to look at the source code of the checker in question. If there are specific options that can be set, they are normally documented in the wiki: https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers - *'syntastic_<filetype>_<checker>_quiet_messages'* -Last but not least, 'g:syntastic_<filetype>_<checker-name>_quiet_messages' can -be used to restrict message filters to messages produced by specific checkers. -Example: > - let g:syntastic_python_pylama_quiet_messages = { - \ "type": "style", - \ "regex": '\m\[C03\d\d\]' } -< -See |syntastic_quiet_messages| for the syntax. - ------------------------------------------------------------------------------ 5.4 Sorting errors *syntastic-config-sort* @@ -849,11 +872,25 @@ For aggregated lists (see |syntastic-aggregating-errors|) these variables are ignored if |'syntastic_sort_aggregated_errors'| is set (which is the default). ------------------------------------------------------------------------------ -5.5 Debugging *syntastic-config-debug* +5.5 Filtering errors *syntastic-config-filtering* + + *'syntastic_<filetype>_<checker>_quiet_messages'* +Finally, variables 'g:syntastic_<filetype>_<checker-name>_quiet_messages' can +be used to filter out some of the messages produced by specific checkers. The +effect is identical to that of |syntastic_quiet_messages|, except only messages +from the corresponding checkers are filtered. Example: > + let g:syntastic_python_pylama_quiet_messages = { + \ "type": "style", + \ "regex": '\m\[C03\d\d\]' } +< +The syntax is of course identical to that of |syntastic_quiet_messages|. + +------------------------------------------------------------------------------ +5.6 Debugging *syntastic-config-debug* Syntastic can log a trace of its working to Vim's |message-history|. To verify the command line constructed by syntastic to run a checker, set the variable -|'syntastic_debug'| to a non-zero value, run the checker, then run |:mes| to +|'syntastic_debug'| to a non-zero value, run the checker, then run `:mes` to display the messages, and look for "makeprg" in the output. From a user's perspective, the useful values for |'syntastic_debug'| are 1, 3, @@ -867,6 +904,23 @@ Debug logs can be saved to a file; see |'syntastic_debug_file'| for details. Setting |'syntastic_debug'| to 0 turns off logging. +------------------------------------------------------------------------------ +5.7 Profiling *syntastic-profiling* + +A very useful tool for debugging performance problems is Vim's built-in +|profiler|. In order to enable profiling for syntastic you need to add two lines +to your vimrc (not to gvimrc): > + profile start syntastic.log + profile! file */syntastic/* +< +(assuming your copy of syntastic lives in a directory creatively named +"syntastic"). These lines must be executed before syntastic is loaded, so you +need to put them before package managers such as "pathogen" or "Vundle", and +(in newer Vim versions) before any commands related to |packages|. + +A log file is created in the current directory, and is updated when you quit +Vim. + ============================================================================== 6. Notes *syntastic-notes* @@ -874,7 +928,7 @@ Setting |'syntastic_debug'| to 0 turns off logging. 6.1. Handling of composite filetypes *syntastic-composite* Some Vim plugins use composite filetypes, such as "django.python" or -"handlebars.html". Normally, syntastic deals with this situation by splitting +"handlebars.html". Normally syntastic deals with this situation by splitting the filetype in its simple components, and calling all checkers that apply. If this behaviour is not desirable, you can disable it by mapping the composite filetypes to simple ones using |'syntastic_filetype_map'|, e.g.: > @@ -902,11 +956,11 @@ value. ------------------------------------------------------------------------------ 6.4 Saving Vim sessions *syntastic-sessions* -If you use |:mksession| to save Vim sessions you should probably make sure to +If you use `:mksession` to save Vim sessions you should probably make sure to remove option "blank" from 'sessionoptions': > set sessionoptions-=blank < -This will prevent |:mksession| from saving |syntastic-error-window| as empty +This will prevent `:mksession` from saving |syntastic-error-window| as empty quickfix windows. ============================================================================== @@ -972,7 +1026,7 @@ described in the |syntastic-statusline-flag| section above: > The "powerline" Vim plugin (https://github.com/powerline/powerline) comes packaged with a syntastic segment. To customize this segment create a file -~/.config/powerline/themes/vim/default.json, with a content like this: > +"~/.config/powerline/themes/vim/default.json", with a content like this: > { "segment_data" : { "powerline.segments.vim.plugin.syntastic.syntastic" : { diff --git a/sources_non_forked/syntastic/plugin/syntastic.vim b/sources_non_forked/syntastic/plugin/syntastic.vim index 375ff9a6..8f295609 100644 --- a/sources_non_forked/syntastic/plugin/syntastic.vim +++ b/sources_non_forked/syntastic/plugin/syntastic.vim @@ -19,25 +19,7 @@ if has('reltime') lockvar! g:_SYNTASTIC_START endif -<<<<<<< 3fec0d7fbf0366a3d113517a0554b10b1ac9ad41 -<<<<<<< 5c5e54b851197c997fb676fca541cb5e8b61ee4a -<<<<<<< 913d549a8f5b39fd3a4a3e5bc8a176b1f32e51ee -let g:_SYNTASTIC_VERSION = '3.7.0-86' -||||||| merged common ancestors -let g:_SYNTASTIC_VERSION = '3.7.0-69' -======= -let g:_SYNTASTIC_VERSION = '3.7.0-88' ->>>>>>> Updated plugins -||||||| merged common ancestors -let g:_SYNTASTIC_VERSION = '3.7.0-88' -======= -let g:_SYNTASTIC_VERSION = '3.7.0-99' ->>>>>>> Updated plugins -||||||| merged common ancestors -let g:_SYNTASTIC_VERSION = '3.7.0-99' -======= -let g:_SYNTASTIC_VERSION = '3.7.0-101' ->>>>>>> Updated vim plugins +let g:_SYNTASTIC_VERSION = '3.7.0-106' lockvar g:_SYNTASTIC_VERSION " Sanity checks {{{1 diff --git a/sources_non_forked/syntastic/syntax_checkers/html/textlint.vim b/sources_non_forked/syntastic/syntax_checkers/html/textlint.vim new file mode 100644 index 00000000..b95d8be9 --- /dev/null +++ b/sources_non_forked/syntastic/syntax_checkers/html/textlint.vim @@ -0,0 +1,23 @@ +"============================================================================ +"File: textlint.vim +"Description: Syntax checking plugin for syntastic +"Maintainer: LCD 47 <lcd047 at gmail dot com> +"License: This program is free software. It comes without any warranty, +" to the extent permitted by applicable law. You can redistribute +" it and/or modify it under the terms of the Do What The Fuck You +" Want To Public License, Version 2, as published by Sam Hocevar. +" See http://sam.zoy.org/wtfpl/COPYING for more details. +" +"============================================================================ + +if exists('g:loaded_syntastic_html_textlint_checker') + finish +endif +let g:loaded_syntastic_html_textlint_checker = 1 + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'html', + \ 'name': 'textlint', + \ 'redirect': 'text/textlint'}) + +" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/syntastic/syntax_checkers/markdown/textlint.vim b/sources_non_forked/syntastic/syntax_checkers/markdown/textlint.vim new file mode 100644 index 00000000..3419d4dc --- /dev/null +++ b/sources_non_forked/syntastic/syntax_checkers/markdown/textlint.vim @@ -0,0 +1,23 @@ +"============================================================================ +"File: textlint.vim +"Description: Syntax checking plugin for syntastic +"Maintainer: LCD 47 <lcd047 at gmail dot com> +"License: This program is free software. It comes without any warranty, +" to the extent permitted by applicable law. You can redistribute +" it and/or modify it under the terms of the Do What The Fuck You +" Want To Public License, Version 2, as published by Sam Hocevar. +" See http://sam.zoy.org/wtfpl/COPYING for more details. +" +"============================================================================ + +if exists('g:loaded_syntastic_markdown_textlint_checker') + finish +endif +let g:loaded_syntastic_markdown_textlint_checker = 1 + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'markdown', + \ 'name': 'textlint', + \ 'redirect': 'text/textlint'}) + +" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim b/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim index 12c3ed1c..d4aab0a1 100644 --- a/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim +++ b/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim @@ -49,7 +49,7 @@ function! SyntaxCheckers_python_pylama_GetLocList() dict " adjust for weirdness in each checker for e in loclist let e['type'] = e['text'] =~? '\m^[RCW]' ? 'W' : 'E' - if e['text'] =~# '\v\[%(mccabe|pep257|pylint)\]$' + if e['text'] =~# '\v\[%(isort|mccabe|pep257|pylint)\]$' if has_key(e, 'col') let e['col'] += 1 endif @@ -59,7 +59,7 @@ function! SyntaxCheckers_python_pylama_GetLocList() dict let e['vcol'] = 0 endif endif - if e['text'] =~# '\v\[%(mccabe|pep257|pep8)\]$' + if e['text'] =~# '\v\[%(isort|mccabe|pep257|pep8)\]$' let e['subtype'] = 'Style' endif endfor diff --git a/sources_non_forked/syntastic/syntax_checkers/text/textlint.vim b/sources_non_forked/syntastic/syntax_checkers/text/textlint.vim new file mode 100644 index 00000000..3b51ae7a --- /dev/null +++ b/sources_non_forked/syntastic/syntax_checkers/text/textlint.vim @@ -0,0 +1,42 @@ +"============================================================================ +"File: textlint.vim +"Description: Syntax checking plugin for syntastic +"Maintainer: LCD 47 <lcd047 at gmail dot com> +"License: This program is free software. It comes without any warranty, +" to the extent permitted by applicable law. You can redistribute +" it and/or modify it under the terms of the Do What The Fuck You +" Want To Public License, Version 2, as published by Sam Hocevar. +" See http://sam.zoy.org/wtfpl/COPYING for more details. +" +"============================================================================ + +if exists('g:loaded_syntastic_text_textlint_checker') + finish +endif +let g:loaded_syntastic_text_textlint_checker = 1 + +let s:save_cpo = &cpo +set cpo&vim + +function! SyntaxCheckers_text_textlint_GetLocList() dict + let makeprg = self.makeprgBuild({ 'args_after': '-f compact' }) + + let errorformat = + \ '%f: line %l\, col %c\, %tarning - %m,' . + \ '%f: line %l\, col %c\, %trror - %m' + + return SyntasticMake({ + \ 'makeprg': makeprg, + \ 'errorformat': errorformat, + \ 'subtype': 'Style', + \ 'returns': [0, 1] }) +endfunction + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'text', + \ 'name': 'textlint'}) + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: set sw=4 sts=4 et fdm=marker: diff --git a/sources_non_forked/vim-airline/autoload/airline.vim b/sources_non_forked/vim-airline/autoload/airline.vim index f19d2fbe..bd14a97f 100644 --- a/sources_non_forked/vim-airline/autoload/airline.vim +++ b/sources_non_forked/vim-airline/autoload/airline.vim @@ -175,6 +175,10 @@ function! airline#check_mode(winnr) call add(l:mode, 'crypt') endif + if g:airline_detect_spell && &spell + call add(l:mode, 'spell') + endif + if &readonly || ! &modifiable call add(l:mode, 'readonly') endif diff --git a/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim b/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim index 05053a5b..af03c62b 100644 --- a/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim +++ b/sources_non_forked/vim-airline/autoload/airline/extensions/tabline.vim @@ -131,6 +131,10 @@ function! airline#extensions#tabline#title(n) let title = TabooTabTitle(a:n) endif + if empty(title) && exists('*gettabvar') + let title = gettabvar(a:n, 'title') + endif + if empty(title) let buflist = tabpagebuflist(a:n) let winnr = tabpagewinnr(a:n) diff --git a/sources_non_forked/vim-airline/autoload/airline/extensions/tabline/ctrlspace.vim b/sources_non_forked/vim-airline/autoload/airline/extensions/tabline/ctrlspace.vim index 5b0ff59b..99f4a212 100644 --- a/sources_non_forked/vim-airline/autoload/airline/extensions/tabline/ctrlspace.vim +++ b/sources_non_forked/vim-airline/autoload/airline/extensions/tabline/ctrlspace.vim @@ -57,6 +57,11 @@ function! airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_t endif let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)' + + if has("tablineat") + let buf_name = '%'.buffer.index.'@airline#extensions#tabline#buffers#switchbuf@'.buf_name.'%X' + endif + call a:builder.add_section_spaced(group, buf_name) endfor endfunction @@ -83,7 +88,7 @@ function! airline#extensions#tabline#ctrlspace#add_tab_section(builder, pos) endif endif - call a:builder.add_section_spaced(group, tab.title.ctrlspace#api#TabBuffersNumber(tab.index)) + call a:builder.add_section_spaced(group, '%'.tab.index.'T'.tab.title.ctrlspace#api#TabBuffersNumber(tab.index).'%T') endfor endfunction diff --git a/sources_non_forked/vim-airline/autoload/airline/extensions/whitespace.vim b/sources_non_forked/vim-airline/autoload/airline/extensions/whitespace.vim index 546bfc77..afa1082c 100644 --- a/sources_non_forked/vim-airline/autoload/airline/extensions/whitespace.vim +++ b/sources_non_forked/vim-airline/autoload/airline/extensions/whitespace.vim @@ -18,6 +18,8 @@ let s:max_lines = get(g:, 'airline#extensions#whitespace#max_lines', 20000) let s:enabled = get(g:, 'airline#extensions#whitespace#enabled', 1) +let s:c_like_langs = ['c', 'cpp', 'javascript', 'ld'] + function! s:check_mixed_indent() if s:indent_algo == 1 " [<tab>]<space><tab> @@ -35,8 +37,8 @@ function! s:check_mixed_indent() endfunction function! s:check_mixed_indent_file() - if stridx(&ft, 'c') == 0 || stridx(&ft, 'cpp') == 0 || stridx(&ft, 'javascript') == 0 - " for C/CPP only allow /** */ comment style with one space before the '*' + if index(s:c_like_langs, &ft) > -1 + " for C-like languages: allow /** */ comment style with one space before the '*' let head_spc = '\v(^ +\*@!)' else let head_spc = '\v(^ +)' diff --git a/sources_non_forked/vim-airline/autoload/airline/extensions/windowswap.vim b/sources_non_forked/vim-airline/autoload/airline/extensions/windowswap.vim index 2beb91c8..7f260571 100644 --- a/sources_non_forked/vim-airline/autoload/airline/extensions/windowswap.vim +++ b/sources_non_forked/vim-airline/autoload/airline/extensions/windowswap.vim @@ -15,7 +15,11 @@ function! airline#extensions#windowswap#init(ext) endfunction function! airline#extensions#windowswap#get_status() - if WindowSwap#HasMarkedWindow() && WindowSwap#GetMarkedWindowNum() == winnr() + " use new tab-aware api if WS is up to date + let s:mark = exists('*WindowSwap#IsCurrentWindowMarked') ? + \WindowSwap#IsCurrentWindowMarked() : + \(WindowSwap#HasMarkedWindow() && WindowSwap#GetMarkedWindowNum() == winnr()) + if s:mark return g:airline#extensions#windowswap#indicator_text.s:spc endif return '' diff --git a/sources_non_forked/vim-airline/autoload/airline/init.vim b/sources_non_forked/vim-airline/autoload/airline/init.vim index 2a30f31a..dc7270b5 100644 --- a/sources_non_forked/vim-airline/autoload/airline/init.vim +++ b/sources_non_forked/vim-airline/autoload/airline/init.vim @@ -22,6 +22,7 @@ function! airline#init#bootstrap() call s:check_defined('g:airline_detect_modified', 1) call s:check_defined('g:airline_detect_paste', 1) call s:check_defined('g:airline_detect_crypt', 1) + call s:check_defined('g:airline_detect_spell', 1) call s:check_defined('g:airline_detect_iminsert', 0) call s:check_defined('g:airline_inactive_collapse', 1) call s:check_defined('g:airline_exclude_filenames', ['DebuggerWatch','DebuggerStack','DebuggerStatus']) @@ -58,6 +59,7 @@ function! airline#init#bootstrap() call s:check_defined('g:airline_symbols', {}) call extend(g:airline_symbols, { \ 'paste': 'PASTE', + \ 'spell': 'SPELL', \ 'readonly': get(g:, 'airline_powerline_fonts', 0) ? "\ue0a2" : 'RO', \ 'whitespace': get(g:, 'airline_powerline_fonts', 0) ? "\u2739" : '!', \ 'linenr': get(g:, 'airline_powerline_fonts', 0) ? "\ue0a1" : ':', @@ -75,6 +77,7 @@ function! airline#init#bootstrap() call airline#parts#define_function('iminsert', 'airline#parts#iminsert') call airline#parts#define_function('paste', 'airline#parts#paste') call airline#parts#define_function('crypt', 'airline#parts#crypt') + call airline#parts#define_function('spell', 'airline#parts#spell') call airline#parts#define_function('filetype', 'airline#parts#filetype') call airline#parts#define('readonly', { \ 'function': 'airline#parts#readonly', @@ -102,7 +105,7 @@ endfunction function! airline#init#sections() let spc = g:airline_symbols.space if !exists('g:airline_section_a') - let g:airline_section_a = airline#section#create_left(['mode', 'crypt', 'paste', 'capslock', 'iminsert']) + let g:airline_section_a = airline#section#create_left(['mode', 'crypt', 'paste', 'spell', 'capslock', 'iminsert']) endif if !exists('g:airline_section_b') let g:airline_section_b = airline#section#create(['hunks', 'branch']) diff --git a/sources_non_forked/vim-airline/autoload/airline/parts.vim b/sources_non_forked/vim-airline/autoload/airline/parts.vim index eab96242..0c1fd668 100644 --- a/sources_non_forked/vim-airline/autoload/airline/parts.vim +++ b/sources_non_forked/vim-airline/autoload/airline/parts.vim @@ -62,6 +62,10 @@ function! airline#parts#paste() return g:airline_detect_paste && &paste ? g:airline_symbols.paste : '' endfunction +function! airline#parts#spell() + return g:airline_detect_spell && &spell ? g:airline_symbols.spell : '' +endfunction + function! airline#parts#iminsert() if g:airline_detect_iminsert && &iminsert && exists('b:keymap_name') return toupper(b:keymap_name) diff --git a/sources_non_forked/vim-airline/doc/airline.txt b/sources_non_forked/vim-airline/doc/airline.txt index 82956bbb..34478d7c 100644 --- a/sources_non_forked/vim-airline/doc/airline.txt +++ b/sources_non_forked/vim-airline/doc/airline.txt @@ -72,6 +72,9 @@ values): < * enable crypt detection > let g:airline_detect_crypt=1 + +* enable spell detection > + let g:airline_detect_spell=1 < * enable iminsert detection > let g:airline_detect_iminsert=0 @@ -191,6 +194,7 @@ its contents. > let g:airline_symbols.paste = 'ρ' let g:airline_symbols.paste = 'Þ' let g:airline_symbols.paste = '∥' + let g:airline_symbols.spell = 'Ꞩ' let g:airline_symbols.notexists = '∄' let g:airline_symbols.whitespace = 'Ξ' @@ -223,7 +227,7 @@ section. > variable names default contents ---------------------------------------------------------------------------- - let g:airline_section_a (mode, crypt, paste, iminsert) + let g:airline_section_a (mode, crypt, paste, spell, iminsert) let g:airline_section_b (hunks, branch) let g:airline_section_c (bufferline or filename) let g:airline_section_gutter (readonly, csv) @@ -771,6 +775,7 @@ Before is a list of parts that are predefined by vim-airline. * `iminsert` displays the current insert method * `paste` displays the paste indicator * `crypt` displays the crypted indicator +* `spell` displays the spell indicator * `filetype` displays the file type * `readonly` displays the read only indicator * `file` displays the filename and modified indicator diff --git a/sources_non_forked/vim-airline/t/init.vim b/sources_non_forked/vim-airline/t/init.vim index d1a2abb8..acb9f194 100644 --- a/sources_non_forked/vim-airline/t/init.vim +++ b/sources_non_forked/vim-airline/t/init.vim @@ -18,9 +18,10 @@ describe 'init sections' call s:clear() end - it 'section a should have mode, paste, iminsert' + it 'section a should have mode, paste, spell, iminsert' Expect g:airline_section_a =~ 'mode' Expect g:airline_section_a =~ 'paste' + Expect g:airline_section_a =~ 'spell' Expect g:airline_section_a =~ 'iminsert' end diff --git a/sources_non_forked/vim-fugitive/plugin/fugitive.vim b/sources_non_forked/vim-fugitive/plugin/fugitive.vim index 44b249a0..b2f77853 100644 --- a/sources_non_forked/vim-fugitive/plugin/fugitive.vim +++ b/sources_non_forked/vim-fugitive/plugin/fugitive.vim @@ -1568,6 +1568,7 @@ function! s:Write(force,...) abort unlet! restorewinnr let zero = s:repo().translate(':0:'.path) + silent execute 'doautocmd BufWritePost' s:fnameescape(zero) for tab in range(1,tabpagenr('$')) for winnr in range(1,tabpagewinnr(tab,'$')) let bufnr = tabpagebuflist(tab)[winnr-1] diff --git a/sources_non_forked/vim-go/.github/ISSUE_TEMPLATE.md b/sources_non_forked/vim-go/.github/ISSUE_TEMPLATE.md index 7d48151d..0adaff3c 100644 --- a/sources_non_forked/vim-go/.github/ISSUE_TEMPLATE.md +++ b/sources_non_forked/vim-go/.github/ISSUE_TEMPLATE.md @@ -1,11 +1,11 @@ +### Actual behavior + +Write here what's happening ... + ### Expected behavior Write here what you're expecting ... -### Actual behavior - -Write here what happens instead ... - ### Steps to reproduce: Please create a reproducible case of your problem. Re produce it @@ -18,13 +18,11 @@ enabled: ### Configuration -#### `vimrc` you used to reproduce: - -#### vim version: - -#### vim-go version: - -#### go version: - +Add here your current configuration and additional information that might be +useful, such as: +* `vimrc` you used to reproduce +* vim version: +* vim-go version +* go version diff --git a/sources_non_forked/vim-go/syntax/gotexttmpl.vim b/sources_non_forked/vim-go/syntax/gotexttmpl.vim index 37c62a90..f8f4e682 100644 --- a/sources_non_forked/vim-go/syntax/gotexttmpl.vim +++ b/sources_non_forked/vim-go/syntax/gotexttmpl.vim @@ -66,7 +66,7 @@ syn cluster gotplLiteral contains=goString,goRawString,goCharacter,@goIn syn keyword gotplControl contained if else end range with template syn keyword gotplFunctions contained and html index js len not or print printf println urlquery eq ne lt le gt ge syn match gotplVariable contained /\$[a-zA-Z0-9_]*\>/ -syn match goTplIdentifier contained /\.[^\s}]*\>/ +syn match goTplIdentifier contained /\.[^\s}]+\>/ hi def link gotplControl Keyword hi def link gotplFunctions Function diff --git a/sources_non_forked/vim-snippets/UltiSnips/sh.snippets b/sources_non_forked/vim-snippets/UltiSnips/sh.snippets index 9cc45779..70181845 100644 --- a/sources_non_forked/vim-snippets/UltiSnips/sh.snippets +++ b/sources_non_forked/vim-snippets/UltiSnips/sh.snippets @@ -33,6 +33,13 @@ snippet !env "#!/usr/bin/env (!env)" `!p snip.rv = '#!/usr/bin/env ' + getShell() + "\n\n" ` endsnippet +snippet sbash "safe bash options" +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' +`!p snip.rv ='\n\n' ` +endsnippet + snippet temp "Tempfile" ${1:TMPFILE}="$(mktemp -t ${2:`!p snip.rv = re.sub(r'[^a-zA-Z]', '_', snip.fn) or "untitled" diff --git a/sources_non_forked/vim-snippets/snippets/sh.snippets b/sources_non_forked/vim-snippets/snippets/sh.snippets index 4d2c62b8..e470a2ab 100644 --- a/sources_non_forked/vim-snippets/snippets/sh.snippets +++ b/sources_non_forked/vim-snippets/snippets/sh.snippets @@ -5,6 +5,11 @@ snippet #! snippet bash #!/usr/bin/env bash +snippet sbash + #!/usr/bin/env bash + set -euo pipefail + IFS=$'\n\t' + snippet if if [[ ${1:condition} ]]; then ${0:#statements} diff --git a/vimrcs/basic.vim b/vimrcs/basic.vim index 8bdc61c4..8c579772 100644 --- a/vimrcs/basic.vim +++ b/vimrcs/basic.vim @@ -429,6 +429,6 @@ function! <SID>BufcloseCloseIt() endfunction " Make VIM remember position in file after reopen -if has("autocmd") - au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif -endif +" if has("autocmd") +" au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif +"endif