blob: 406f57b669e09e536cd67fe9bdc275e2e04b06c0 [file] [log] [blame]
/*
* MIT License
*
* Copyright (c) 2019 Petr Hosek
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* highlight.js GN syntax highlighting definition
*
* @see https://github.com/highlightjs/highlight.js
*
* @package: highlightjs-GN
* @author: Petr Hosek <petrhosek@gmail.com>
* @since: 2019-05-28
*
* Description: GN is a meta-build system that generates build files for Ninja.
* Category: common
*/
/** @type LanguageFn */
export default function(hljs) {
var SUBST = {
className: 'subst', relevance: 2,
variants: [
{
begin: '\\$[A-Za-z0-9_]+'
},
{
begin: '\\${', end: '}',
contains: [{
className: 'variable',
begin: hljs.UNDERSCORE_IDENT_RE,
relevance: 0
}]
}
],
};
var LINK = {
className: 'link', relevance: 5,
begin: ':\\w+',
}
var NUMBER = {
className: 'number', relevance: 0,
begin: hljs.NUMBER_RE
};
var STRING = {
className: 'string', relevance: 0,
begin: '"',
end: '"',
illegal: '\\n',
contains: [hljs.BACKSLASH_ESCAPE, SUBST, LINK],
};
var KEYWORDS = {
keyword:
'if else',
literal:
'true false ' +
'current_cpu current_os current_toolchain ' +
'default_toolchain host_cpu host_os ' +
'root_build_dir root_gen_dir root_out_dir ' +
'target_cpu target_gen_dir target_out_dir ' +
'target_os target_name invoker',
type:
'action action_foreach copy executable group ' +
'shared_library source_set static_library ' +
'loadable_module generated_file',
built_in:
'assert config declare_args defined exec_script ' +
'foreach get_label_info get_path_info ' +
'get_target_outputs getenv import print ' +
'process_file_template read_file rebase_path ' +
'set_default_toolchain set_defaults ' +
'set_sources_assignment_filter template tool ' +
'toolchain toolchain_args propagates_configs ' +
'write_file forward_variables_from target ' +
'get_name_info not_needed',
symbol:
'all_dependent_configs allow_circular_includes_from ' +
'args asmflags cflags cflags_c cflags_cc cflags_objc ' +
'cflags_objcc check_includes complete_static_lib ' +
'configs data data_deps defines depfile deps ' +
'include_dirs inputs ldflags lib_dirs libs ' +
'output_extension output_name outputs public ' +
'public_configs public_deps script sources testonly ' +
'visibility contents output_conversion rebase ' +
'data_keys walk_keys',
};
return {
aliases: ['gn', 'gni'],
keywords: KEYWORDS,
contains: [
NUMBER,
STRING,
hljs.HASH_COMMENT_MODE,
]
};
}