From 65619f7ece96a8c516405ae1f3d54120824e7613 Mon Sep 17 00:00:00 2001 From: Golmote Date: Sun, 3 Jul 2016 03:20:53 +0200 Subject: [PATCH] Add support for Ada (generic). Closes #949 --- components.js | 4 + components/prism-ada.js | 19 +++ components/prism-ada.min.js | 1 + examples/prism-ada.html | 38 +++++ tests/languages/ada/attr-name_feature.test | 13 ++ tests/languages/ada/boolean_feature.test | 13 ++ tests/languages/ada/char_feature.test | 13 ++ tests/languages/ada/comment_feature.test | 13 ++ tests/languages/ada/keyword_feature.test | 153 +++++++++++++++++++++ tests/languages/ada/number_feature.test | 21 +++ tests/languages/ada/operator_feature.test | 23 ++++ tests/languages/ada/string_feature.test | 13 ++ tests/languages/ada/variable_feature.test | 13 ++ 13 files changed, 337 insertions(+) create mode 100644 components/prism-ada.js create mode 100644 components/prism-ada.min.js create mode 100644 examples/prism-ada.html create mode 100644 tests/languages/ada/attr-name_feature.test create mode 100644 tests/languages/ada/boolean_feature.test create mode 100644 tests/languages/ada/char_feature.test create mode 100644 tests/languages/ada/comment_feature.test create mode 100644 tests/languages/ada/keyword_feature.test create mode 100644 tests/languages/ada/number_feature.test create mode 100644 tests/languages/ada/operator_feature.test create mode 100644 tests/languages/ada/string_feature.test create mode 100644 tests/languages/ada/variable_feature.test diff --git a/components.js b/components.js index 5da15951a2..db90cc284f 100644 --- a/components.js +++ b/components.js @@ -69,6 +69,10 @@ var components = { "require": "javascript", "owner": "Golmote" }, + "ada": { + "title": "Ada", + "owner": "Lucretia" + }, "apacheconf": { "title": "Apache Configuration", "owner": "GuiTeK" diff --git a/components/prism-ada.js b/components/prism-ada.js new file mode 100644 index 0000000000..95ca462c5f --- /dev/null +++ b/components/prism-ada.js @@ -0,0 +1,19 @@ +Prism.languages.ada = { + 'comment': /--.*/, + 'string': /"(?:""|[^"\r\f\n])*"/i, + 'number': [ + { + pattern: /\b[0-9](?:_?[0-9])*#[0-9A-F](?:_?[0-9A-F])*(?:\.[0-9A-F](?:_?[0-9A-F])*)?#(?:E[+-]?[0-9](?:_?[0-9])*)?/i + }, + { + pattern: /\b[0-9](?:_?[0-9])*(?:\.[0-9](?:_?[0-9])*)?(?:E[+-]?[0-9](?:_?[0-9])*)?\b/i + } + ], + 'attr-name': /\b'\w+/i, + 'keyword': /\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|new|return|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i, + 'boolean': /\b(?:true|false)\b/i, + 'operator': /<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/, + 'punctuation': /\.\.?|[,;():]/, + 'char': /'.'/, + 'variable': /\b[a-z](?:[_a-z\d])*\b/i +}; \ No newline at end of file diff --git a/components/prism-ada.min.js b/components/prism-ada.min.js new file mode 100644 index 0000000000..f8c01331dd --- /dev/null +++ b/components/prism-ada.min.js @@ -0,0 +1 @@ +Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/i,number:[{pattern:/\b[0-9](?:_?[0-9])*#[0-9A-F](?:_?[0-9A-F])*(?:\.[0-9A-F](?:_?[0-9A-F])*)?#(?:E[+-]?[0-9](?:_?[0-9])*)?/i},{pattern:/\b[0-9](?:_?[0-9])*(?:\.[0-9](?:_?[0-9])*)?(?:E[+-]?[0-9](?:_?[0-9])*)?\b/i}],"attr-name":/\b'\w+/i,keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|new|return|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,"boolean":/\b(?:true|false)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,"char":/'.'/,variable:/\b[a-z](?:[_a-z\d])*\b/i}; \ No newline at end of file diff --git a/examples/prism-ada.html b/examples/prism-ada.html new file mode 100644 index 0000000000..7836a5a1fc --- /dev/null +++ b/examples/prism-ada.html @@ -0,0 +1,38 @@ +

Ada

+

To use this language, use the class "language-ada".

+ +

Strings

+
"foo ""bar"" baz"
+"Multi-line strings are appended with a " &
+"ampersand symbole."
+ +

Ada83 example

+
WITH ADA.TEXT_IO;
+
+--  Comments look like this.
+
+PROCEDURE TEST IS
+BEGIN
+   ADA.TEXT_IO.PUT_LINE ("Hello");   --  Comments look like this.
+END TEST;
+ +

Ada 2012 full example

+
with Ada.Text_IO; Use Ada.Text_IO;
+
+--  Comments look like this.
+procedure Test is
+   procedure Bah with
+    Import        => True,   --  Shows the new aspect feature of the language.
+    Convention    => C,
+    External_Name => "bah";
+
+   type Things is range 1 .. 10;
+begin
+   Put_Line ("Hello");   --  Comments look like this.
+
+   Bah;  -- Call C function.
+
+   for Index in Things'Range loop
+      null;
+   end loop;
+end Test;
\ No newline at end of file diff --git a/tests/languages/ada/attr-name_feature.test b/tests/languages/ada/attr-name_feature.test new file mode 100644 index 0000000000..c30a2f57d2 --- /dev/null +++ b/tests/languages/ada/attr-name_feature.test @@ -0,0 +1,13 @@ +Integer'Size +Character'Val + +---------------------------------------------------- + +[ + ["variable", "Integer"], ["attr-name", "'Size"], + ["variable", "Character"], ["attr-name", "'Val"] +] + +---------------------------------------------------- + +Checks for attributes. \ No newline at end of file diff --git a/tests/languages/ada/boolean_feature.test b/tests/languages/ada/boolean_feature.test new file mode 100644 index 0000000000..4019c444f8 --- /dev/null +++ b/tests/languages/ada/boolean_feature.test @@ -0,0 +1,13 @@ +true +false + +---------------------------------------------------- + +[ + ["boolean", "true"], + ["boolean", "false"] +] + +---------------------------------------------------- + +Checks for booleans. \ No newline at end of file diff --git a/tests/languages/ada/char_feature.test b/tests/languages/ada/char_feature.test new file mode 100644 index 0000000000..145f2cee8b --- /dev/null +++ b/tests/languages/ada/char_feature.test @@ -0,0 +1,13 @@ +'f' +'A' + +---------------------------------------------------- + +[ + ["char", "'f'"], + ["char", "'A'"] +] + +---------------------------------------------------- + +Checks for chars. \ No newline at end of file diff --git a/tests/languages/ada/comment_feature.test b/tests/languages/ada/comment_feature.test new file mode 100644 index 0000000000..adf3e0ce8c --- /dev/null +++ b/tests/languages/ada/comment_feature.test @@ -0,0 +1,13 @@ +-- +-- Foo bar + +---------------------------------------------------- + +[ + ["comment", "--"], + ["comment", "-- Foo bar"] +] + +---------------------------------------------------- + +Checks for comments. \ No newline at end of file diff --git a/tests/languages/ada/keyword_feature.test b/tests/languages/ada/keyword_feature.test new file mode 100644 index 0000000000..e5c815f22f --- /dev/null +++ b/tests/languages/ada/keyword_feature.test @@ -0,0 +1,153 @@ +abort +abs +abstract +accept +access +aliased +all +and +array +at +begin +body +case +constant +declare +delay +delta +digits +do +else +new +return +elsif +end +entry +exception +exit +for +function +generic +goto +if +in +interface +is +limited +loop +mod +not +null +of +others +out +overriding +package +pragma +private +procedure +protected +raise +range +record +rem +renames +requeue +reverse +select +separate +some +subtype +synchronized +tagged +task +terminate +then +type +until +use +when +while +with +xor + +---------------------------------------------------- + +[ + ["keyword", "abort"], + ["keyword", "abs"], + ["keyword", "abstract"], + ["keyword", "accept"], + ["keyword", "access"], + ["keyword", "aliased"], + ["keyword", "all"], + ["keyword", "and"], + ["keyword", "array"], + ["keyword", "at"], + ["keyword", "begin"], + ["keyword", "body"], + ["keyword", "case"], + ["keyword", "constant"], + ["keyword", "declare"], + ["keyword", "delay"], + ["keyword", "delta"], + ["keyword", "digits"], + ["keyword", "do"], + ["keyword", "else"], + ["keyword", "new"], + ["keyword", "return"], + ["keyword", "elsif"], + ["keyword", "end"], + ["keyword", "entry"], + ["keyword", "exception"], + ["keyword", "exit"], + ["keyword", "for"], + ["keyword", "function"], + ["keyword", "generic"], + ["keyword", "goto"], + ["keyword", "if"], + ["keyword", "in"], + ["keyword", "interface"], + ["keyword", "is"], + ["keyword", "limited"], + ["keyword", "loop"], + ["keyword", "mod"], + ["keyword", "not"], + ["keyword", "null"], + ["keyword", "of"], + ["keyword", "others"], + ["keyword", "out"], + ["keyword", "overriding"], + ["keyword", "package"], + ["keyword", "pragma"], + ["keyword", "private"], + ["keyword", "procedure"], + ["keyword", "protected"], + ["keyword", "raise"], + ["keyword", "range"], + ["keyword", "record"], + ["keyword", "rem"], + ["keyword", "renames"], + ["keyword", "requeue"], + ["keyword", "reverse"], + ["keyword", "select"], + ["keyword", "separate"], + ["keyword", "some"], + ["keyword", "subtype"], + ["keyword", "synchronized"], + ["keyword", "tagged"], + ["keyword", "task"], + ["keyword", "terminate"], + ["keyword", "then"], + ["keyword", "type"], + ["keyword", "until"], + ["keyword", "use"], + ["keyword", "when"], + ["keyword", "while"], + ["keyword", "with"], + ["keyword", "xor"] +] + +---------------------------------------------------- + +Checks for keywords. \ No newline at end of file diff --git a/tests/languages/ada/number_feature.test b/tests/languages/ada/number_feature.test new file mode 100644 index 0000000000..a27f1af82c --- /dev/null +++ b/tests/languages/ada/number_feature.test @@ -0,0 +1,21 @@ +42 +42_000 +3.14_15_9 +0.4E+123_456 +3.7e-7 +1_6#Bad_Face#E-32_1 + +---------------------------------------------------- + +[ + ["number", "42"], + ["number", "42_000"], + ["number", "3.14_15_9"], + ["number", "0.4E+123_456"], + ["number", "3.7e-7"], + ["number", "1_6#Bad_Face#E-32_1"] +] + +---------------------------------------------------- + +Checks for numbers. \ No newline at end of file diff --git a/tests/languages/ada/operator_feature.test b/tests/languages/ada/operator_feature.test new file mode 100644 index 0000000000..21a313746d --- /dev/null +++ b/tests/languages/ada/operator_feature.test @@ -0,0 +1,23 @@ +<> +=> := +< <= +> >= += /= +& + - +* ** / + +---------------------------------------------------- + +[ + ["operator", "<>"], + ["operator", "=>"], ["operator", ":="], + ["operator", "<"], ["operator", "<="], + ["operator", ">"], ["operator", ">="], + ["operator", "="], ["operator", "/="], + ["operator", "&"], ["operator", "+"], ["operator", "-"], + ["operator", "*"], ["operator", "**"], ["operator", "/"] +] + +---------------------------------------------------- + +Checks for operators. \ No newline at end of file diff --git a/tests/languages/ada/string_feature.test b/tests/languages/ada/string_feature.test new file mode 100644 index 0000000000..c44e9cd017 --- /dev/null +++ b/tests/languages/ada/string_feature.test @@ -0,0 +1,13 @@ +"" +"Foo""bar""" + +---------------------------------------------------- + +[ + ["string", "\"\""], + ["string", "\"Foo\"\"bar\"\"\""] +] + +---------------------------------------------------- + +Checks for strings. \ No newline at end of file diff --git a/tests/languages/ada/variable_feature.test b/tests/languages/ada/variable_feature.test new file mode 100644 index 0000000000..f47a4fc494 --- /dev/null +++ b/tests/languages/ada/variable_feature.test @@ -0,0 +1,13 @@ +Byte +foo_bar42 + +---------------------------------------------------- + +[ + ["variable", "Byte"], + ["variable", "foo_bar42"] +] + +---------------------------------------------------- + +Checks for variables. \ No newline at end of file