2025-02-28 19:43:11 +08:00

69 lines
2.0 KiB
JavaScript

/*
Language: Haskell
Author: Jeremy Hull <sourdrums@gmail.com>
*/
module.exports = function(hljs){
hljs.LANGUAGES.haskell = function(){
var LABEL = {
className: 'label',
begin: '\\b[A-Z][\\w\\\']*',
relevance: 0
};
var CONTAINER = {
className: 'container',
begin: '\\(', end: '\\)',
contains: [
{className: 'label', begin: '\\b[A-Z][\\w\\(\\)\\.\\\']*'},
{className: 'title', begin: '[_a-z][\\w\\\']*'}
]
};
return {
defaultMode: {
keywords: {
'keyword': {'let': 1,'in': 1,'if': 1,'then': 1,'else': 1,'case': 1,'of': 1,'where': 1,'do': 1,'module': 1,'import': 1, 'hiding': 1,'qualified': 1,'type': 1,'data': 1,'newtype': 1,'deriving': 1,'class': 1,'instance': 1,'null': 1,'not': 1,'as': 1},
'built_in': {'Bool': 1,'True': 1,'False': 1,'Int': 1,'Char': 1,'Maybe': 1,'Nothing': 1,'String': 1}
},
contains: [
{
className: 'comment',
begin: '--', end: '$'
},
{
className: 'comment',
begin: '{-', end: '-}'
},
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE,
{
className: 'import',
begin: '\\bimport', end: '$',
keywords: {'import': 1, 'qualified': 1, 'as': 1, 'hiding': 1},
contains: [CONTAINER]
},
{
className: 'module',
begin: '\\bmodule', end: 'where',
keywords: {'module': 1, 'where': 1},
contains: [CONTAINER]
},
{
className: 'class',
begin: '\\b(class|instance|data|(new)?type)', end: '(where|$)',
keywords: {'class': 1, 'where': 1, 'instance': 1,'data': 1,'type': 1,'newtype': 1, 'deriving': 1},
contains: [LABEL]
},
hljs.C_NUMBER_MODE,
{
className: 'shebang',
begin: '#!\\/usr\\/bin\\/env\ runhaskell', end: '$'
},
LABEL,
{
className: 'title', begin: '^[_a-z][\\w\\\']*'
}
]
}
};
}();
};