/* | |
Language: AutoHotkey | |
Author: Seongwon Lee <[email protected]> | |
Description: AutoHotkey language definition | |
Category: scripting | |
*/ | |
/** @type LanguageFn */ | |
function autohotkey(hljs) { | |
const BACKTICK_ESCAPE = { begin: '`[\\s\\S]' }; | |
return { | |
name: 'AutoHotkey', | |
case_insensitive: true, | |
aliases: [ 'ahk' ], | |
keywords: { | |
keyword: 'Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group', | |
literal: 'true false NOT AND OR', | |
built_in: 'ComSpec Clipboard ClipboardAll ErrorLevel' | |
}, | |
contains: [ | |
BACKTICK_ESCAPE, | |
hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ BACKTICK_ESCAPE ] }), | |
hljs.COMMENT(';', '$', { relevance: 0 }), | |
hljs.C_BLOCK_COMMENT_MODE, | |
{ | |
className: 'number', | |
begin: hljs.NUMBER_RE, | |
relevance: 0 | |
}, | |
{ | |
// subst would be the most accurate however fails the point of | |
// highlighting. variable is comparably the most accurate that actually | |
// has some effect | |
className: 'variable', | |
begin: '%[a-zA-Z0-9#_$@]+%' | |
}, | |
{ | |
className: 'built_in', | |
begin: '^\\s*\\w+\\s*(,|%)' | |
// I don't really know if this is totally relevant | |
}, | |
{ | |
// symbol would be most accurate however is highlighted just like | |
// built_in and that makes up a lot of AutoHotkey code meaning that it | |
// would fail to highlight anything | |
className: 'title', | |
variants: [ | |
{ begin: '^[^\\n";]+::(?!=)' }, | |
{ | |
begin: '^[^\\n";]+:(?!=)', | |
// zero relevance as it catches a lot of things | |
// followed by a single ':' in many languages | |
relevance: 0 | |
} | |
] | |
}, | |
{ | |
className: 'meta', | |
begin: '^\\s*#\\w+', | |
end: '$', | |
relevance: 0 | |
}, | |
{ | |
className: 'built_in', | |
begin: 'A_[a-zA-Z0-9]+' | |
}, | |
{ | |
// consecutive commas, not for highlighting but just for relevance | |
begin: ',\\s*,' } | |
] | |
}; | |
} | |
module.exports = autohotkey; | |