summaryrefslogtreecommitdiffstats
path: root/runtime/syntax
diff options
context:
space:
mode:
authorMaxim Kim <habamax@gmail.com>2024-06-18 19:43:00 +0200
committerChristian Brabandt <cb@256bit.org>2024-06-18 19:48:15 +0200
commit1ce65e35ac6555054db1276e30d9d63421e6b346 (patch)
treef89e5902d73b7f501113d788b8b0c01b15fe17d1 /runtime/syntax
parent26de90c6312cf16d7a4f2b6942befb4e1f14b960 (diff)
runtime(csv): include a simple csv filetype and syntax plugin
fixes: #15038 Signed-off-by: Maxim Kim <habamax@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'runtime/syntax')
-rw-r--r--runtime/syntax/csv.vim39
1 files changed, 39 insertions, 0 deletions
diff --git a/runtime/syntax/csv.vim b/runtime/syntax/csv.vim
new file mode 100644
index 0000000000..848029a480
--- /dev/null
+++ b/runtime/syntax/csv.vim
@@ -0,0 +1,39 @@
+vim9script
+
+# Maintainer: Maxim Kim <habamax@gmail.com>
+# Last Update: 2024-06-18
+
+if exists("b:current_syntax")
+ finish
+endif
+
+var delimiter = get(b:, "csv_delimiter", ",")
+
+# generate bunch of following syntaxes:
+# syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
+# syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
+for col in range(8, 0, -1)
+ var ncol = (col == 8 ? 0 : col + 1)
+ exe $'syntax match csvCol{col}' .. ' /.\{-}\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
+ exe $'syntax region escCsvCol{col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
+endfor
+
+hi def link csvCol1 Statement
+hi def link csvCol2 Constant
+hi def link csvCol3 Type
+hi def link csvCol4 PreProc
+hi def link csvCol5 Identifier
+hi def link csvCol6 Special
+hi def link csvCol7 String
+hi def link csvCol8 Comment
+
+hi def link escCsvCol1 csvCol1
+hi def link escCsvCol2 csvCol2
+hi def link escCsvCol3 csvCol3
+hi def link escCsvCol4 csvCol4
+hi def link escCsvCol5 csvCol5
+hi def link escCsvCol6 csvCol6
+hi def link escCsvCol7 csvCol7
+hi def link escCsvCol8 csvCol8
+
+b:current_syntax = "csv"