From 3c827c5adc08a56d2ea731129ab44a3aea1b8e1a Mon Sep 17 00:00:00 2001 From: Michael Newton Date: Wed, 22 May 2019 11:49:07 -0600 Subject: [PATCH 1/2] add INI syntax highlighting and tests --- src/lang-ini.js | 95 ++++++++++++++++++++++++++++++++++++++++ tests/prettify_test.html | 26 ++++++++++- tests/prettify_test.js | 17 +++++++ 3 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 src/lang-ini.js diff --git a/src/lang-ini.js b/src/lang-ini.js new file mode 100644 index 00000000..afb8ab55 --- /dev/null +++ b/src/lang-ini.js @@ -0,0 +1,95 @@ +/** + * @license + * Copyright (C) 2019 Michael Newton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview + * Registers a language handler for Windows-style "ini" configuration files + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *
(my ini file)
+ * This file supports the following extensions: + * lang-ini - Standard INI file syntax + * lang-ast - Asterisk-style configuration files + * + * "Name" = 'INI' + * "Author" = 'Michael Newton' + * "Version" = '1.0' + * "About" = 'The INI file format is an informal standard for configuration' + * | 'files for some computing platforms or software. INI files are' + * | 'simple text files with a basic structure composed of sections,' + * | 'properties, and values.' + * + * @author https://github.com/miken32 + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + // Patterns that always start with a known character. Must have a shortcut string. + [ + [ + // A line comment that starts with ; + PR.PR_COMMENT, + /^;[^\r\n]*/, + null, + ';' + ], + [ + // key/value divider + PR.PR_PUNCTUATION, + /^=>?/, + null, + '=' + ], + [ + // Whitespace + PR.PR_PLAIN, + /^[\t\n\r \xA0]+/, + null, + '\t\n\r \xA0' + ], + [ + // A double quoted string + PR.PR_STRING, + /^"(?:[^\\"]|\\.)*(?:"|$)/, + null, + '"' + ], + [ + // A section in square brackets + PR.PR_TYPE, + /^\[[^\]]+\]/, + null, + '[' + ] + ], + + // Patterns that will be tried in order if the shortcut ones fail. May have shortcuts. + [ + [ + PR.PR_KEYWORD, + /^[^=>;\r\n]+\s*=>?/ + ], + [ + PR.PR_LITERAL, + /[!-~]+/ + ] + ] + ), + ['ini'] +); diff --git a/tests/prettify_test.html b/tests/prettify_test.html index 04f55f22..d10fbc5c 100644 --- a/tests/prettify_test.html +++ b/tests/prettify_test.html @@ -35,7 +35,8 @@ 'lang-vb.js', 'lang-vhdl.js', 'lang-wiki.js', - 'lang-yaml.js' + 'lang-yaml.js', + 'lang-ini.js' ]; var styles = [ 'prettify.css' @@ -1434,5 +1435,28 @@

Rust

} +

Ini

+
+bare-key = value
+
+[Section 1]
+key1=value
+key2=value
+;comment
+key3 = "another value"
+
+[Section 2]
+key1 = value
+key2 = another value; but different
+
+ +

Ini

+
+; asterisk-style configuration
+[sub-conf-test]
+exten => s,1,NoOp("testing syntax")
+exten => s,2,Return()
+
+
diff --git a/tests/prettify_test.js b/tests/prettify_test.js index 9d40aa7b..f7df0288 100644 --- a/tests/prettify_test.js +++ b/tests/prettify_test.js @@ -1778,5 +1778,22 @@ var goldens = { ' "break" it (or the line),\n' + ' and beat it"#`END`PUN;`END`PLN\n' + '`END`PUN}`END' + ), + ini: ( + '`KWDbare-key =`END`PLN `END`LITvalue`END`PLN\n\n`END' + + '`TYP[Section 1]`END`PLN\n`END' + + '`KWDkey1=`END`LITvalue`END`PLN\n`END' + + '`KWDkey2=`END`LITvalue`END`PLN\n`END' + + '`COM;comment`END`PLN\n`END' + + '`KWDkey3 =`END`PLN `END`STR"another value"`END`PLN\n\n`END' + + '`TYP[Section 2]`END`PLN\n`END' + + '`KWDkey1 =`END`PLN `END`LITvalue`END`PLN\n`END' + + '`KWDkey2 =`END`PLN `END`LITanother`END`PLN `END`LITvalue;`END`PLN `END`LITbut`END`PLN `END`LITdifferent`END' + ), + ini_ast: ( + '`COM; asterisk-style configuration`END`PLN\n`END' + + '`TYP[sub-conf-test]`END`PLN\n`END' + + '`KWDexten =>`END`PLN `END`LITs,1,NoOp("testing`END`PLN `END`LITsyntax")`END`PLN\n`END' + + '`KWDexten =>`END`PLN `END`LITs,2,Return()`END`PLN\n`END' ) }; From 4c67d11e23027cae349f4e7c28212adb9217be0a Mon Sep 17 00:00:00 2001 From: Michael Newton Date: Wed, 22 May 2019 11:54:45 -0600 Subject: [PATCH 2/2] Quick update --- src/lang-ini.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lang-ini.js b/src/lang-ini.js index afb8ab55..18660758 100644 --- a/src/lang-ini.js +++ b/src/lang-ini.js @@ -24,8 +24,7 @@ * Then put your code in an HTML tag like *
(my ini file)
* This file supports the following extensions: - * lang-ini - Standard INI file syntax - * lang-ast - Asterisk-style configuration files + * lang-ini - Standard INI file syntax and Asterisk-style configuration files * * "Name" = 'INI' * "Author" = 'Michael Newton'