Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. if exists('b:dsc_plugin')
  2. finish
  3. endif
  4. let b:dsc_plugin = 1
  5. syntax on
  6. syntax enable
  7. color dsc
  8.  
  9. set incsearch
  10. set completeopt=menuone,preview
  11.  
  12.  
  13. " ============
  14. " = KEYBINDS =
  15. " ============
  16. inoremap < <><esc>i
  17. inoremap [ []<esc>i
  18. inoremap { {}<esc>i
  19. inoremap ( ()<esc>i
  20. inoremap ' ''<esc>i
  21. inoremap " ""<esc>i
  22. inoremap :<cr> :<cr><tab>
  23. inoremap . .<c-x><c-u><c-p>
  24. inoremap <expr> <tab> pumvisible() ? '<down>' : '<tab>'
  25.  
  26.  
  27.  
  28.  
  29.  
  30. " ===========
  31. " = Updates =
  32. " ===========
  33.  
  34. fun! DisplaySyntax()
  35. let &statusline = synIDattr(synID(line('.'), col('.'), 1), 'name')
  36. call timer_start(5000, { -> execute("call DisplaySyntax()")})
  37. endfun
  38. call DisplaySyntax()
  39.  
  40.  
  41.  
  42.  
  43. " ===========
  44. " = Strings =
  45. " ===========
  46.  
  47. fun! StringLength(src)
  48. return strlen(a:src)
  49. endfun
  50.  
  51.  
  52. fun! StringFind(src, str)
  53. return stridx(a:src, a:str)
  54. endfun
  55.  
  56.  
  57. fun! StringFindLast(src, str)
  58. return strridx(a:src, a:str)
  59. endfun
  60.  
  61.  
  62. fun! StringContains(src, str)
  63. return StringFindLast(a:src, a:str) != -1
  64. endfun
  65.  
  66.  
  67. fun! StringContainsMatch(src, start, end)
  68.  
  69. endfun
  70.  
  71.  
  72. fun! StringEmpty(src)
  73. return empty(a:src)
  74. endfun
  75.  
  76.  
  77. fun! StringSubstr(src, pos, count = 999999)
  78. return strpart(a:src, a:pos, a:count)
  79. endfun
  80.  
  81.  
  82. fun! StringAfter(src, str)
  83. if StringContains(a:src, a:str)
  84. return StringSubstr(a:src, StringFind(a:src, a:str) + StringLength(a:str))
  85. endif
  86. return a:src
  87. endfun
  88.  
  89.  
  90. fun! StringAfterLast(src, str)
  91. if StringContains(a:src, a:str)
  92. return StringSubstr(a:src, StringFindLast(a:src, a:str) + StringLength(a:str))
  93. endif
  94. return a:src
  95. endfun
  96.  
  97.  
  98. fun! StringBetween(src, first, second)
  99. if StringContains(a:src, a:first) && StringContains(a:src, a:second)
  100. return StringSubstr(a:src, StringFind(a:src, a:first) + StringLength(a:first), StringFindLast(a:src, a:second))
  101. endif
  102. return a:src
  103. endfun
  104.  
  105.  
  106. fun! StringReverse()
  107.  
  108. endfun
  109.  
  110.  
  111. fun! StringReplace()
  112.  
  113. endfun
  114.  
  115.  
  116. fun! StringSplit()
  117.  
  118. endfun
  119.  
  120.  
  121.  
  122.  
  123. " =========
  124. " = Lists =
  125. " =========
  126.  
  127. fun! ListContains(src, ele)
  128.  
  129. endfun
  130.  
  131.  
  132.  
  133.  
  134. " ==========
  135. " = Syntax =
  136. " ==========
  137.  
  138. fun! SyntaxId(row, col)
  139. return synID(a:row, a:col, 1)
  140. endfun
  141.  
  142.  
  143. fun! SyntaxGroup(row, col)
  144. return synIDattr(SyntaxId(a:row, a:col), 'name')
  145. endfun
  146.  
  147.  
  148.  
  149.  
  150. " ========
  151. " = Tags =
  152. " ========
  153.  
  154. fun! TagStripArgs(src)
  155. let str = ''
  156. let skip = 0
  157. let pos = -1
  158.  
  159. while pos < StringLength(a:src)
  160. let pos += 1
  161. let char = a:src[pos]
  162. if !skip
  163. if char == '['
  164. let skip += 1
  165. continue
  166.  
  167. endif
  168. let str .= char
  169.  
  170. else
  171. if char == '['
  172. let skip += 1
  173.  
  174. elseif char == ']'
  175. let skip -= 1
  176.  
  177. endif
  178. endif
  179. endwhile
  180.  
  181. return str
  182. endfun
  183.  
  184.  
  185. fun! TagStripBrackets(src)
  186. return StringSubstr(a:src, 1, StringLength(a:src) - 2)
  187. endfun
  188.  
  189.  
  190. fun! TagStrip(src)
  191. return TagStripBrackets(TagStripArgs(a:src))
  192. endfun
  193.  
  194.  
  195. fun! TagBase(src)
  196. let raw = TagStrip(a:src)
  197.  
  198. endfun
  199.  
  200.  
  201. fun! ElementTag()
  202. return {
  203. \ '+[]': 'element',
  204. \ '-[]': 'element',
  205. \ '*[]': 'elememt',
  206. \ '/[]': 'element',
  207. \ }
  208. endfun
  209.  
  210.  
  211. fun! ListTag()
  212. return {
  213. \ 'get[]': 'element',
  214. \ 'get[].to[]': 'list',
  215. \ 'first': 'element',
  216. \ 'last': 'element',
  217. \ }
  218. endfun
  219.  
  220.  
  221. fun! PlayerTag()
  222. return {
  223. \ 'uuid': 'element',
  224. \ 'name': 'element',
  225. \ 'display_name': 'element',
  226. \ }
  227. endfun
  228.  
  229.  
  230.  
  231.  
  232. " ===============
  233. " = Definitions =
  234. " ===============
  235.  
  236. fun! DefinitionsExists()
  237.  
  238. endfun
  239.  
  240.  
  241. fun! DefinitionType()
  242.  
  243. endfun
  244.  
  245.  
  246. fun! DefinitionCreate(id, type)
  247.  
  248. endfun
  249.  
  250.  
  251.  
  252.  
  253. " ==========
  254. " = Cursor =
  255. " ==========
  256.  
  257. fun! CursorRow()
  258. return line('.')
  259. endfun
  260.  
  261.  
  262. fun! CursorCol()
  263. return col('.')
  264. endfun
  265.  
  266.  
  267. fun! CursorLine()
  268. return getline(line('.'))
  269. endfun
  270.  
  271.  
  272. fun! CursorSyntaxGroup()
  273. return SyntaxGroup(line('.'), col('.'))
  274. endfun
  275.  
  276.  
  277. fun! CursorTag()
  278. let l:start = searchpairpos('<', '', '>', 'cbnW')[1]
  279. let l:end = searchpairpos('<', '', '>', 'cnW')[1]
  280. return StringSubstr(CursorLine(), l:start - 1, l:end - l:start + 1)
  281. endfun
  282.  
  283.  
  284.  
  285.  
  286. " ================
  287. " = Autocomplete =
  288. " ================
  289.  
  290. fun! TagCompletion(findstart, base)
  291. if a:findstart
  292. let line = CursorLine()
  293. let start = CursorCol() - 1
  294. while start > 0 && line[start - 1] =~ '\a'
  295. let start -= 1
  296. endwhile
  297. return start
  298. else
  299. let res = []
  300. let completions = ElementTag()
  301. for [key, val] in items(completions)
  302. if key =~ '^' . a:base
  303. call add(res, key)
  304. endif
  305. endfor
  306. return res
  307. endif
  308. endfun
  309. set completefunc=TagCompletion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement