diff --git a/CHANGES.md b/CHANGES.md
index 7ceeff534a..270fede40f 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -14,6 +14,7 @@ Core Changes:
Language Improvements:
+- (ini) support arrays, clean up grammar (#2335) [Josh Goebel][]
- (vbnet) add nameof operator to the keywords (#2329) [Youssef Victor][]
- (stan) updated with improved coverage of language keywords and patterns. (#1829) [Jeffrey Arnold][]
diff --git a/src/languages/ini.js b/src/languages/ini.js
index e4042ebef4..48ac5e4865 100644
--- a/src/languages/ini.js
+++ b/src/languages/ini.js
@@ -7,68 +7,77 @@ Website: https://github.com/toml-lang/toml
*/
function(hljs) {
- var STRING = {
+ var NUMBERS = {
+ className: 'number',
+ relevance: 0,
+ variants: [
+ { begin: /([\+\-]+)?[\d]+_[\d_]+/ },
+ { begin: hljs.NUMBER_RE }
+ ]
+ };
+ var COMMENTS = hljs.COMMENT();
+ COMMENTS.variants = [
+ {begin: /;/, end: /$/},
+ {begin: /#/, end: /$/},
+ ];
+ var VARIABLES = {
+ className: 'variable',
+ variants: [
+ { begin: /\$[\w\d"][\w\d_]*/ },
+ { begin: /\$\{(.*?)}/ }
+ ]
+ };
+ var LITERALS = {
+ className: 'literal',
+ begin: /\bon|off|true|false|yes|no\b/
+ };
+ var STRINGS = {
className: "string",
contains: [hljs.BACKSLASH_ESCAPE],
variants: [
- {
- begin: "'''", end: "'''",
- relevance: 10
- }, {
- begin: '"""', end: '"""',
- relevance: 10
- }, {
- begin: '"', end: '"'
- }, {
- begin: "'", end: "'"
- }
+ { begin: "'''", end: "'''", relevance: 10 },
+ { begin: '"""', end: '"""', relevance: 10 },
+ { begin: '"', end: '"' },
+ { begin: "'", end: "'" }
]
};
+ var ARRAY = {
+ begin: /\[/, end: /\]/,
+ contains: [
+ COMMENTS,
+ LITERALS,
+ VARIABLES,
+ STRINGS,
+ NUMBERS,
+ 'self'
+ ],
+ relevance:0
+ };
+
return {
aliases: ['toml'],
case_insensitive: true,
illegal: /\S/,
contains: [
- hljs.COMMENT(';', '$'),
- hljs.HASH_COMMENT_MODE,
+ COMMENTS,
{
className: 'section',
- begin: /^\s*\[+/, end: /\]+/
+ begin: /\[+/, end: /\]+/
},
{
- begin: /^[a-z0-9\[\]_\.-]+\s*=\s*/, end: '$',
- returnBegin: true,
- contains: [
- {
- className: 'attr',
- begin: /[a-z0-9\[\]_\.-]+/
- },
- {
- begin: /=/, endsWithParent: true,
- relevance: 0,
- contains: [
- hljs.COMMENT(';', '$'),
- hljs.HASH_COMMENT_MODE,
- {
- className: 'literal',
- begin: /\bon|off|true|false|yes|no\b/
- },
- {
- className: 'variable',
- variants: [
- {begin: /\$[\w\d"][\w\d_]*/},
- {begin: /\$\{(.*?)}/}
- ]
- },
- STRING,
- {
- className: 'number',
- begin: /([\+\-]+)?[\d]+_[\d_]+/
- },
- hljs.NUMBER_MODE
- ]
- }
- ]
+ begin: /^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,
+ className: 'attr',
+ starts: {
+ end: /$/,
+ contains: [
+ COMMENTS,
+ ARRAY,
+ LITERALS,
+ VARIABLES,
+ STRINGS,
+ NUMBERS
+ ]
+ }
}
]
};
diff --git a/test/markup/ini/array.expect.txt b/test/markup/ini/array.expect.txt
new file mode 100644
index 0000000000..31bc35db02
--- /dev/null
+++ b/test/markup/ini/array.expect.txt
@@ -0,0 +1,9 @@
+moo=["foo"]
+
+KNOWN_PEERS = [
+ "finland.some-host.com:11625",
+ "germany.some-host.com:11625",
+ "hongkong.some-host.com:11625",
+ 32,
+ true
+]
diff --git a/test/markup/ini/array.txt b/test/markup/ini/array.txt
new file mode 100644
index 0000000000..9d7f488af9
--- /dev/null
+++ b/test/markup/ini/array.txt
@@ -0,0 +1,10 @@
+
+moo=["foo"]
+
+KNOWN_PEERS = [
+ "finland.some-host.com:11625",
+ "germany.some-host.com:11625",
+ "hongkong.some-host.com:11625",
+ 32,
+ true
+]