aboutsummaryrefslogtreecommitdiff
path: root/node_modules/highlight.js/lib/languages/ada.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/highlight.js/lib/languages/ada.js')
-rw-r--r--node_modules/highlight.js/lib/languages/ada.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/node_modules/highlight.js/lib/languages/ada.js b/node_modules/highlight.js/lib/languages/ada.js
new file mode 100644
index 000000000..4e96c860c
--- /dev/null
+++ b/node_modules/highlight.js/lib/languages/ada.js
@@ -0,0 +1,172 @@
+module.exports = // We try to support full Ada2012
+//
+// We highlight all appearances of types, keywords, literals (string, char, number, bool)
+// and titles (user defined function/procedure/package)
+// CSS classes are set accordingly
+//
+// Languages causing problems for language detection:
+// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword)
+// sql (ada default.txt has a lot of sql keywords)
+
+function(hljs) {
+ // Regular expression for Ada numeric literals.
+ // stolen form the VHDL highlighter
+
+ // Decimal literal:
+ var INTEGER_RE = '\\d(_|\\d)*';
+ var EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;
+ var DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';
+
+ // Based literal:
+ var BASED_INTEGER_RE = '\\w+';
+ var BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';
+
+ var NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';
+
+ // Identifier regex
+ var ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*';
+
+ // bad chars, only allowed in literals
+ var BAD_CHARS = '[]{}%#\'\"'
+
+ // Ada doesn't have block comments, only line comments
+ var COMMENTS = hljs.COMMENT('--', '$');
+
+ // variable declarations of the form
+ // Foo : Bar := Baz;
+ // where only Bar will be highlighted
+ var VAR_DECLS = {
+ // TODO: These spaces are not required by the Ada syntax
+ // however, I have yet to see handwritten Ada code where
+ // someone does not put spaces around :
+ begin: '\\s+:\\s+', end: '\\s*(:=|;|\\)|=>|$)',
+ // endsWithParent: true,
+ // returnBegin: true,
+ illegal: BAD_CHARS,
+ contains: [
+ {
+ // workaround to avoid highlighting
+ // named loops and declare blocks
+ beginKeywords: 'loop for declare others',
+ endsParent: true,
+ },
+ {
+ // properly highlight all modifiers
+ className: 'keyword',
+ beginKeywords: 'not null constant access function procedure in out aliased exception'
+ },
+ {
+ className: 'type',
+ begin: ID_REGEX,
+ endsParent: true,
+ relevance: 0,
+ }
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'abort else new return abs elsif not reverse abstract end ' +
+ 'accept entry select access exception of separate aliased exit or some ' +
+ 'all others subtype and for out synchronized array function overriding ' +
+ 'at tagged generic package task begin goto pragma terminate ' +
+ 'body private then if procedure type case in protected constant interface ' +
+ 'is raise use declare range delay limited record when delta loop rem while ' +
+ 'digits renames with do mod requeue xor',
+ literal:
+ 'True False',
+ },
+ contains: [
+ COMMENTS,
+ // strings "foobar"
+ {
+ className: 'string',
+ begin: /"/, end: /"/,
+ contains: [{begin: /""/, relevance: 0}]
+ },
+ // characters ''
+ {
+ // character literals always contain one char
+ className: 'string',
+ begin: /'.'/
+ },
+ {
+ // number literals
+ className: 'number',
+ begin: NUMBER_RE,
+ relevance: 0
+ },
+ {
+ // Attributes
+ className: 'symbol',
+ begin: "'" + ID_REGEX,
+ },
+ {
+ // package definition, maybe inside generic
+ className: 'title',
+ begin: '(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?', end: '(is|$)',
+ keywords: 'package body',
+ excludeBegin: true,
+ excludeEnd: true,
+ illegal: BAD_CHARS
+ },
+ {
+ // function/procedure declaration/definition
+ // maybe inside generic
+ begin: '(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+', end: '(\\bis|\\bwith|\\brenames|\\)\\s*;)',
+ keywords: 'overriding function procedure with is renames return',
+ // we need to re-match the 'function' keyword, so that
+ // the title mode below matches only exactly once
+ returnBegin: true,
+ contains:
+ [
+ COMMENTS,
+ {
+ // name of the function/procedure
+ className: 'title',
+ begin: '(\\bwith\\s+)?\\b(function|procedure)\\s+',
+ end: '(\\(|\\s+|$)',
+ excludeBegin: true,
+ excludeEnd: true,
+ illegal: BAD_CHARS
+ },
+ // 'self'
+ // // parameter types
+ VAR_DECLS,
+ {
+ // return type
+ className: 'type',
+ begin: '\\breturn\\s+', end: '(\\s+|;|$)',
+ keywords: 'return',
+ excludeBegin: true,
+ excludeEnd: true,
+ // we are done with functions
+ endsParent: true,
+ illegal: BAD_CHARS
+
+ },
+ ]
+ },
+ {
+ // new type declarations
+ // maybe inside generic
+ className: 'type',
+ begin: '\\b(sub)?type\\s+', end: '\\s+',
+ keywords: 'type',
+ excludeBegin: true,
+ illegal: BAD_CHARS
+ },
+
+ // see comment above the definition
+ VAR_DECLS,
+
+ // no markup
+ // relevance boosters for small snippets
+ // {begin: '\\s*=>\\s*'},
+ // {begin: '\\s*:=\\s*'},
+ // {begin: '\\s+:=\\s+'},
+ ]
+ };
+}; \ No newline at end of file