2025-05-29 13:25:21 +03:00
|
|
|
import type { HLJSApi, Language } from "highlight.js";
|
2025-05-18 22:13:58 +03:00
|
|
|
|
|
|
|
/*
|
|
|
|
* highlight.js Dylan syntax highlighting definition
|
|
|
|
*
|
|
|
|
* Source: https://github.com/highlightjs/highlightjs-dylan/blob/master/src/dylan.js
|
|
|
|
*
|
|
|
|
* @see https://github.com/highlightjs/highlight.js
|
|
|
|
* @see https://opendylan.org/
|
|
|
|
*
|
|
|
|
* :TODO:
|
|
|
|
*
|
|
|
|
* @package: highlightjs-dylan
|
|
|
|
* @author: Peter Hull <peterhull90@gmail.com>
|
|
|
|
* @since: 2019-04-08
|
|
|
|
*
|
|
|
|
* Description: Dylan language definition
|
|
|
|
* Category: functional
|
|
|
|
*/
|
|
|
|
|
|
|
|
export default function(hljs: HLJSApi): Language {
|
|
|
|
const DYLAN_CORE_WORDS = ["define", "end", "handler", "let", "local", "macro", "otherwise"];
|
|
|
|
const DYLAN_BEGIN_WORDS = ["begin", "block", "case", "for", "if", "method",
|
|
|
|
"select", "unless", "until", "while"
|
|
|
|
];
|
|
|
|
const DYLAN_FUNCTION_WORDS: string[] = [];
|
|
|
|
const DYLAN_DEFINE_BODY_WORDS = ["class", "library", "method", "module"];
|
|
|
|
const DYLAN_DEFINE_LIST_WORDS = ["constant", "variable", "domain"];
|
|
|
|
const DYLAN_RESERVED_WORDS = ([] as string[]).concat(DYLAN_CORE_WORDS,
|
|
|
|
DYLAN_BEGIN_WORDS,
|
|
|
|
DYLAN_FUNCTION_WORDS,
|
|
|
|
DYLAN_DEFINE_BODY_WORDS.map(function(word) {
|
|
|
|
return word + '|2';
|
|
|
|
}),
|
|
|
|
DYLAN_DEFINE_LIST_WORDS
|
|
|
|
);
|
|
|
|
const DYLAN_HASH_WORDS = ["#t", "#f", "#next", "#rest", "#key", "#all-keys", "#include"];
|
|
|
|
const DYLAN_WORD = '[a-z\-+\*/^=#!%$_><@\?~][a-z0-9\-+\*/^=#!%$_><@\?~]*';
|
|
|
|
const KEYWORDS = {
|
|
|
|
$pattern: DYLAN_WORD,
|
|
|
|
literal: DYLAN_HASH_WORDS.join(" "),
|
|
|
|
keyword: DYLAN_RESERVED_WORDS.join(" ")
|
|
|
|
};
|
|
|
|
const DYLAN_CODE = {
|
|
|
|
case_insensitive: true,
|
|
|
|
className: 'dylan',
|
|
|
|
keywords: KEYWORDS,
|
|
|
|
contains: [{
|
|
|
|
className: 'class',
|
|
|
|
begin: '<' + DYLAN_WORD + '>',
|
|
|
|
relevance: 0
|
|
|
|
},
|
|
|
|
{
|
|
|
|
className: 'symbol',
|
|
|
|
begin: '#' + DYLAN_WORD
|
|
|
|
},
|
|
|
|
{
|
|
|
|
className: 'symbol',
|
|
|
|
begin: DYLAN_WORD + ':',
|
|
|
|
relevance: 0
|
|
|
|
},
|
|
|
|
{
|
|
|
|
className: 'string',
|
|
|
|
begin: '\'\\\\?.',
|
|
|
|
end: '\'',
|
|
|
|
illegal: '.'
|
|
|
|
},
|
|
|
|
hljs.C_NUMBER_MODE,
|
|
|
|
hljs.QUOTE_STRING_MODE,
|
|
|
|
hljs.C_LINE_COMMENT_MODE,
|
|
|
|
hljs.C_BLOCK_COMMENT_MODE
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
return DYLAN_CODE;
|
|
|
|
};
|