on master help sign in
Improvements to CSV highlighting
commit3559079de0081987741a1d6fb2ea9ee4b1a42e56 authorKeith Hall <kingkeith+github@gmail.com> dateSun 28 Mar 2021, 22:35 (6 years ago) parent0b44aa6
8 files changed+203−51
.gitmodules−3 CHANGELOG.md+2 assets/patches/Monokai-Extended.tmTheme.patch+1−1 assets/syntaxes/02_Extra/CSV−1 assets/syntaxes/02_Extra/CSV.sublime-syntax+77−39 assets/syntaxes/02_Extra/syntax_test_csv.csv+58 assets/syntaxes/02_Extra/syntax_test_tsv.tsv+58 tests/syntax-tests/highlighted/CSV/comma_in_quotes.csv+7−7
.gitmodules−3
@@ -61,9 +61,6 @@
6161[submodule "assets/syntaxes/Puppet"]
6262 path = assets/syntaxes/02_Extra/Puppet
6363 url = https://github.com/russCloak/SublimePuppet
64−[submodule "assets/syntaxes/CSV"]
65− path = assets/syntaxes/02_Extra/CSV
66− url = https://github.com/wadetb/Sublime-Text-Advanced-CSV
6764[submodule "assets/themes/onehalf"]
6865 path = assets/themes/onehalf
6966 url = https://github.com/sonph/onehalf
CHANGELOG.md+2
@@ -13,6 +13,8 @@
1313
1414## Syntaxes
1515
16+- Replaced "Advanced CSV" with a custom CSV syntax definition written especially for `bat`; see #1574 (@keith-hall)
17+
1618## New themes
1719
1820## `bat` as a library
assets/patches/Monokai-Extended.tmTheme.patch+1−1
@@ -7,7 +7,7 @@ index 9c2aa3e..180cbbf 100644
77 <string>JSON String</string>
88 <key>scope</key>
99- <string>meta.structure.dictionary.json string.quoted.double.json</string>
10−+ <string>meta.mapping.key.json string.quoted.double.json</string>
10++ <string>meta.mapping.key.json string.quoted.double.json, punctuation.separator.sequence.csv</string>
1111 <key>settings</key>
1212 <dict>
1313 <key>foreground</key>
assets/syntaxes/02_Extra/CSVdeleted−1

Submodule changed.

assets/syntaxes/02_Extra/CSV.sublime-syntax+77−39
@@ -1,46 +1,84 @@
11%YAML 1.2
22---
3−# http://www.sublimetext.com/docs/3/syntax.html
4−name: Advanced CSV
3+# See http://www.sublimetext.com/docs/3/syntax.html
4+name: Comma Separated Values
55file_extensions:
66 - csv
77 - tsv
8−scope: text.advanced_csv
8+scope: text.csv
9+variables:
10+ field_separator: (?:[,;\t])
11+ record_separator: (?:$\n?)
912contexts:
10− main:
11− - match: (\")
12− captures:
13− 1: string.quoted.double.advanced_csv
14− push:
15− - meta_scope: meta.quoted.advanced_csv
16− - match: (\")
17− captures:
18− 1: string.quoted.double.advanced_csv
19− pop: true
20− - include: main
21− - match: '(\[([+-]?\d*)(\:)?([+-]?\d*)(\,)?([+-]?\d*)(\:)?([+-]?\d*)\])?\s*([<>v^])?\s*(=)'
22− captures:
23− 1: keyword.operator.advanced_csv
24− 2: constant.numeric.formula.advanced_csv
25− 4: constant.numeric.formula.advanced_csv
26− 6: constant.numeric.formula.advanced_csv
27− 8: constant.numeric.formula.advanced_csv
28− 9: keyword.operator.advanced_csv
29− 10: keyword.operator.advanced_csv
13+ prototype:
14+ - match: (?={{record_separator}})
15+ pop: true
16+ fields:
17+ - match: ''
3018 push:
31− - meta_scope: meta.range.advanced_csv
32− - match: (?=(\")|$)
33− pop: true
34− - include: scope:source.python
35− - match: '(?<=^|,|\s|\")([0-9.eE+-]+)(?=$|,|\s|\")'
36− scope: meta.number.advanced_csv
37− captures:
38− 1: constant.numeric.advanced_csv
39− - match: '(?<=^|,|\s|\")([^, \t\"]+)(?=$|,|\s|\")'
40− scope: meta.nonnumber.advanced_csv
41− captures:
42− 1: storage.type.advanced_csv
43− - match: (\,)
44− scope: meta.delimiter.advanced_csv
45− captures:
46− 1: keyword.operator.advanced_csv
19+ - field_or_record_separator
20+ - field5
21+ - field_or_record_separator
22+ - field4
23+ - field_or_record_separator
24+ - field3
25+ - field_or_record_separator
26+ - field2
27+ - field_or_record_separator
28+ - field1
29+ main:
30+ - meta_include_prototype: false
31+ - match: '^'
32+ set: fields
33+
34+ field_or_record_separator:
35+ - meta_include_prototype: false
36+ - match: '{{record_separator}}'
37+ scope: punctuation.terminator.record.csv
38+ pop: true
39+ - match: '{{field_separator}}'
40+ scope: punctuation.separator.sequence.csv
41+ pop: true
42+
43+ field_contents:
44+ - match: '"'
45+ scope: punctuation.definition.string.begin.csv
46+ push: double_quoted_string
47+
48+ - match: (?={{field_separator}}|{{record_separator}})
49+ pop: true
50+
51+ double_quoted_string:
52+ - meta_include_prototype: false
53+ - meta_scope: string.quoted.double.csv
54+ - match: '""'
55+ scope: constant.character.escape.csv
56+ - match: '"'
57+ scope: punctuation.definition.string.end.csv
58+ pop: true
59+
60+ field1:
61+ - match: ''
62+ set:
63+ - meta_content_scope: meta.field-1.csv support.type
64+ - include: field_contents
65+ field2:
66+ - match: ''
67+ set:
68+ - meta_content_scope: meta.field-2.csv support.function
69+ - include: field_contents
70+ field3:
71+ - match: ''
72+ set:
73+ - meta_content_scope: meta.field-3.csv variable.other
74+ - include: field_contents
75+ field4:
76+ - match: ''
77+ set:
78+ - meta_content_scope: meta.field-4.csv constant.numeric
79+ - include: field_contents
80+ field5:
81+ - match: ''
82+ set:
83+ - meta_content_scope: meta.field-5.csv keyword.operator
84+ - include: field_contents
assets/syntaxes/02_Extra/syntax_test_csv.csvnew file+58
@@ -0,0 +1,58 @@
1+# SYNTAX TEST "CSV.sublime-syntax"
2+Forename,Surname,House No.,Street,City,Postcode
3+#^^^^^^^ meta.field-1
4+# ^ punctuation.separator.sequence
5+# ^^^^^^^ meta.field-2
6+# ^ punctuation.separator.sequence
7+# ^^^^^^^^^ meta.field-3
8+# ^ punctuation.separator.sequence
9+# ^^^^^^ meta.field-4
10+# ^ punctuation.separator.sequence
11+# ^^^^ meta.field-5
12+# ^ punctuation.separator.sequence
13+# ^^^^^^^^ meta.field-1
14+John,Doe,87,Citiville,TU43 6GH
15+#^^^ meta.field-1
16+# ^ punctuation.separator.sequence
17+# ^^^ meta.field-2
18+# ^ punctuation.separator.sequence
19+# ^^ meta.field-3
20+# ^ punctuation.separator.sequence
21+# ^^^^^^^^^ meta.field-4
22+# ^ punctuation.separator.sequence
23+# ^^^^^^^^ meta.field-5
24+Jane,Doe,22,"""Fun"" Street","The City, County",FA90 1XA
25+#^^^ meta.field-1
26+# ^ punctuation.separator.sequence
27+# ^^^ meta.field-2
28+# ^ punctuation.separator.sequence
29+# ^^ meta.field-3
30+# ^ punctuation.separator.sequence
31+# ^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
32+# ^^ constant.character.escape
33+# ^^ constant.character.escape
34+# ^ punctuation.separator.sequence
35+# ^ meta.field-5 string.quoted.double punctuation.definition.string.begin
36+# ^^^^^^^^^^^^^^^^^ meta.field-5 string.quoted.double
37+# ^ meta.field-5 string.quoted.double punctuation.definition.string.end
38+# ^ punctuation.separator.sequence
39+# ^^^^^^^^ meta.field-1
40+Fred,Bloggs,"19","Street
41+#^^^ meta.field-1
42+# ^ punctuation.separator.sequence
43+# ^^^^^^ meta.field-2
44+# ^ punctuation.separator.sequence
45+# ^^^ meta.field-3 string.quoted.double
46+# ^ punctuation.separator.sequence
47+# ^ meta.field-4 punctuation.definition.string.begin
48+# ^^^^^^^^ meta.field-4 string.quoted.double
49+Spanning Multiple ""
50+#^^^^^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
51+# ^^ constant.character.escape
52+Lines",Citee,P0stc0d3
53+#^^^^^ meta.field-4 string.quoted.double
54+# ^ meta.field-4 punctuation.definition.string.end
55+# ^ punctuation.separator.sequence
56+# ^^^^^ meta.field-5
57+# ^ punctuation.separator.sequence
58+# ^^^^^^^^ meta.field-1
assets/syntaxes/02_Extra/syntax_test_tsv.tsvnew file+58
@@ -0,0 +1,58 @@
1+# SYNTAX TEST "CSV.sublime-syntax"
2+Forename Surname House No. Street City Postcode
3+#^^^^^^^ meta.field-1
4+# ^ punctuation.separator.sequence
5+# ^^^^^^^ meta.field-2
6+# ^ punctuation.separator.sequence
7+# ^^^^^^^^^ meta.field-3
8+# ^ punctuation.separator.sequence
9+# ^^^^^^ meta.field-4
10+# ^ punctuation.separator.sequence
11+# ^^^^ meta.field-5
12+# ^ punctuation.separator.sequence
13+# ^^^^^^^^ meta.field-1
14+John Doe 87 Citiville TU43 6GH
15+#^^^ meta.field-1
16+# ^ punctuation.separator.sequence
17+# ^^^ meta.field-2
18+# ^ punctuation.separator.sequence
19+# ^^ meta.field-3
20+# ^ punctuation.separator.sequence
21+# ^^^^^^^^^ meta.field-4
22+# ^ punctuation.separator.sequence
23+# ^^^^^^^^ meta.field-5
24+Jane Doe 22 """Fun"" Street" "The City County" FA90 1XA
25+#^^^ meta.field-1
26+# ^ punctuation.separator.sequence
27+# ^^^ meta.field-2
28+# ^ punctuation.separator.sequence
29+# ^^ meta.field-3
30+# ^ punctuation.separator.sequence
31+# ^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
32+# ^^ constant.character.escape
33+# ^^ constant.character.escape
34+# ^ punctuation.separator.sequence
35+# ^ meta.field-5 string.quoted.double punctuation.definition.string.begin
36+# ^^^^^^^^^^^^^^^^^ meta.field-5 string.quoted.double
37+# ^ meta.field-5 string.quoted.double punctuation.definition.string.end
38+# ^ punctuation.separator.sequence
39+# ^^^^^^^^ meta.field-1
40+Fred Bloggs "19" "Street
41+#^^^ meta.field-1
42+# ^ punctuation.separator.sequence
43+# ^^^^^^ meta.field-2
44+# ^ punctuation.separator.sequence
45+# ^^^ meta.field-3 string.quoted.double
46+# ^ punctuation.separator.sequence
47+# ^ meta.field-4 punctuation.definition.string.begin
48+# ^^^^^^^^ meta.field-4 string.quoted.double
49+Spanning Multiple ""
50+#^^^^^^^^^^^^^^^^^^^^ meta.field-4 string.quoted.double
51+# ^^ constant.character.escape
52+Lines" Citee P0stc0d3
53+#^^^^^ meta.field-4 string.quoted.double
54+# ^ meta.field-4 punctuation.definition.string.end
55+# ^ punctuation.separator.sequence
56+# ^^^^^ meta.field-5
57+# ^ punctuation.separator.sequence
58+# ^^^^^^^^ meta.field-1
tests/syntax-tests/highlighted/CSV/comma_in_quotes.csv+7−7
@@ -1,7 +1,7 @@
1−first,last,address,city,zip
2−John,Doe,120 any st.,"Anytown, WW",08123
3−a,b
4−1,"ha 
5−""ha"" 
6−ha",120 any st.,"Anytown, WW",08123
7−3,4,120 any st.,"Anytown, WW",08123
1+first,last,address,city,zip
2+John,Doe,120 any st.,"Anytown, WW",08123
3+a,b
4+1,"ha 
5+""ha"" 
6+ha",120 any st.,"Anytown, WW",08123
7+3,4,120 any st.,"Anytown, WW",08123