Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if exists('b:dsc_plugin')
- finish
- endif
- let b:dsc_plugin = 1
- syntax on
- syntax enable
- color dsc
- set incsearch
- set completeopt=menuone,preview
- " ============
- " = KEYBINDS =
- " ============
- inoremap < <><esc>i
- inoremap [ []<esc>i
- inoremap { {}<esc>i
- inoremap ( ()<esc>i
- inoremap ' ''<esc>i
- inoremap " ""<esc>i
- inoremap :<cr> :<cr><tab>
- inoremap . .<c-x><c-u><c-p>
- inoremap <expr> <tab> pumvisible() ? '<down>' : '<tab>'
- " ===========
- " = Updates =
- " ===========
- fun! DisplaySyntax()
- let &statusline = synIDattr(synID(line('.'), col('.'), 1), 'name')
- call timer_start(5000, { -> execute("call DisplaySyntax()")})
- endfun
- call DisplaySyntax()
- " ===========
- " = Strings =
- " ===========
- fun! StringLength(src)
- return strlen(a:src)
- endfun
- fun! StringFind(src, str)
- return stridx(a:src, a:str)
- endfun
- fun! StringFindLast(src, str)
- return strridx(a:src, a:str)
- endfun
- fun! StringContains(src, str)
- return StringFindLast(a:src, a:str) != -1
- endfun
- fun! StringContainsMatch(src, start, end)
- endfun
- fun! StringEmpty(src)
- return empty(a:src)
- endfun
- fun! StringSubstr(src, pos, count = 999999)
- return strpart(a:src, a:pos, a:count)
- endfun
- fun! StringAfter(src, str)
- if StringContains(a:src, a:str)
- return StringSubstr(a:src, StringFind(a:src, a:str) + StringLength(a:str))
- endif
- return a:src
- endfun
- fun! StringAfterLast(src, str)
- if StringContains(a:src, a:str)
- return StringSubstr(a:src, StringFindLast(a:src, a:str) + StringLength(a:str))
- endif
- return a:src
- endfun
- fun! StringBetween(src, first, second)
- if StringContains(a:src, a:first) && StringContains(a:src, a:second)
- return StringSubstr(a:src, StringFind(a:src, a:first) + StringLength(a:first), StringFindLast(a:src, a:second))
- endif
- return a:src
- endfun
- fun! StringReverse()
- endfun
- fun! StringReplace()
- endfun
- fun! StringSplit()
- endfun
- " =========
- " = Lists =
- " =========
- fun! ListContains(src, ele)
- endfun
- " ==========
- " = Syntax =
- " ==========
- fun! SyntaxId(row, col)
- return synID(a:row, a:col, 1)
- endfun
- fun! SyntaxGroup(row, col)
- return synIDattr(SyntaxId(a:row, a:col), 'name')
- endfun
- " ========
- " = Tags =
- " ========
- fun! TagStripArgs(src)
- let str = ''
- let skip = 0
- let pos = -1
- while pos < StringLength(a:src)
- let pos += 1
- let char = a:src[pos]
- if !skip
- if char == '['
- let skip += 1
- continue
- endif
- let str .= char
- else
- if char == '['
- let skip += 1
- elseif char == ']'
- let skip -= 1
- endif
- endif
- endwhile
- return str
- endfun
- fun! TagStripBrackets(src)
- return StringSubstr(a:src, 1, StringLength(a:src) - 2)
- endfun
- fun! TagStrip(src)
- return TagStripBrackets(TagStripArgs(a:src))
- endfun
- fun! TagBase(src)
- let raw = TagStrip(a:src)
- endfun
- fun! ElementTag()
- return {
- \ '+[]': 'element',
- \ '-[]': 'element',
- \ '*[]': 'elememt',
- \ '/[]': 'element',
- \ }
- endfun
- fun! ListTag()
- return {
- \ 'get[]': 'element',
- \ 'get[].to[]': 'list',
- \ 'first': 'element',
- \ 'last': 'element',
- \ }
- endfun
- fun! PlayerTag()
- return {
- \ 'uuid': 'element',
- \ 'name': 'element',
- \ 'display_name': 'element',
- \ }
- endfun
- " ===============
- " = Definitions =
- " ===============
- fun! DefinitionsExists()
- endfun
- fun! DefinitionType()
- endfun
- fun! DefinitionCreate(id, type)
- endfun
- " ==========
- " = Cursor =
- " ==========
- fun! CursorRow()
- return line('.')
- endfun
- fun! CursorCol()
- return col('.')
- endfun
- fun! CursorLine()
- return getline(line('.'))
- endfun
- fun! CursorSyntaxGroup()
- return SyntaxGroup(line('.'), col('.'))
- endfun
- fun! CursorTag()
- let l:start = searchpairpos('<', '', '>', 'cbnW')[1]
- let l:end = searchpairpos('<', '', '>', 'cnW')[1]
- return StringSubstr(CursorLine(), l:start - 1, l:end - l:start + 1)
- endfun
- " ================
- " = Autocomplete =
- " ================
- fun! TagCompletion(findstart, base)
- if a:findstart
- let line = CursorLine()
- let start = CursorCol() - 1
- while start > 0 && line[start - 1] =~ '\a'
- let start -= 1
- endwhile
- return start
- else
- let res = []
- let completions = ElementTag()
- for [key, val] in items(completions)
- if key =~ '^' . a:base
- call add(res, key)
- endif
- endfor
- return res
- endif
- endfun
- set completefunc=TagCompletion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement