Maxim Kim | 1ce65e3 | 2024-06-18 19:43:00 +0200 | [diff] [blame] | 1 | vim9script |
| 2 | |
| 3 | # Maintainer: Maxim Kim <habamax@gmail.com> |
| 4 | # Last Update: 2024-06-18 |
| 5 | |
| 6 | if exists("b:current_syntax") |
| 7 | finish |
| 8 | endif |
| 9 | |
| 10 | var 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 |
| 15 | for 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 |
| 19 | endfor |
| 20 | |
| 21 | hi def link csvCol1 Statement |
| 22 | hi def link csvCol2 Constant |
| 23 | hi def link csvCol3 Type |
| 24 | hi def link csvCol4 PreProc |
| 25 | hi def link csvCol5 Identifier |
| 26 | hi def link csvCol6 Special |
| 27 | hi def link csvCol7 String |
| 28 | hi def link csvCol8 Comment |
| 29 | |
| 30 | hi def link escCsvCol1 csvCol1 |
| 31 | hi def link escCsvCol2 csvCol2 |
| 32 | hi def link escCsvCol3 csvCol3 |
| 33 | hi def link escCsvCol4 csvCol4 |
| 34 | hi def link escCsvCol5 csvCol5 |
| 35 | hi def link escCsvCol6 csvCol6 |
| 36 | hi def link escCsvCol7 csvCol7 |
| 37 | hi def link escCsvCol8 csvCol8 |
| 38 | |
| 39 | b:current_syntax = "csv" |