blob: 848029a48073d9d3d9f543cc63bade96510b669d [file] [log] [blame]
Maxim Kim1ce65e32024-06-18 19:43:00 +02001vim9script
2
3# Maintainer: Maxim Kim <habamax@gmail.com>
4# Last Update: 2024-06-18
5
6if exists("b:current_syntax")
7 finish
8endif
9
10var delimiter = get(b:, "csv_delimiter", ",")
11
12# generate bunch of following syntaxes:
13# syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
14# syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
15for col in range(8, 0, -1)
16 var ncol = (col == 8 ? 0 : col + 1)
17 exe $'syntax match csvCol{col}' .. ' /.\{-}\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
18 exe $'syntax region escCsvCol{col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
19endfor
20
21hi def link csvCol1 Statement
22hi def link csvCol2 Constant
23hi def link csvCol3 Type
24hi def link csvCol4 PreProc
25hi def link csvCol5 Identifier
26hi def link csvCol6 Special
27hi def link csvCol7 String
28hi def link csvCol8 Comment
29
30hi def link escCsvCol1 csvCol1
31hi def link escCsvCol2 csvCol2
32hi def link escCsvCol3 csvCol3
33hi def link escCsvCol4 csvCol4
34hi def link escCsvCol5 csvCol5
35hi def link escCsvCol6 csvCol6
36hi def link escCsvCol7 csvCol7
37hi def link escCsvCol8 csvCol8
38
39b:current_syntax = "csv"