chromium/ios/tools/xcode/gn_syntax_highlight/gn.xclangspec

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(
    /**************************************************************************/
    // MARK: GN keywords
    /**************************************************************************/
    {
        Identifier = "xcode.lang.gn.identifier";
        Syntax = {
            Words = (
                "else",
                "false",
                "if",
                "true",
                "assert",
                "config",
                "declare_args",
                "defined",
                "exec_script",
                "foreach",
                "forward_variables_from",
                "get_label_info",
                "get_path_info",
                "get_target_outputs",
                "getenv",
                "import",
                "not_needed",
                "print",
                "process_file_template",
                "read_file",
                "rebase_path",
                "set_default_toolchain",
                "set_defaults",
                "split_list",
                "string_join",
                "string_split",
                "template",
                "tool",
                "toolchain",
                "propagates_configs",
                "write_file",
                "current_cpu",
                "current_os",
                "current_toolchain",
                "default_toolchain",
                "host_cpu",
                "host_os",
                "invoker",
                "python_path",
                "root_build_dir",
                "root_gen_dir",
                "root_out_dir",
                "target_cpu",
                "target_gen_dir",
                "target_name",
                "target_os",
                "target_out_dir",
                "all_dependent_configs",
                "allow_circular_includes_from",
                "arflags",
                "args",
                "asmflags",
                "assert_no_deps",
                "bundle_deps_filter",
                "bundle_executable_dir",
                "bundle_resources_dir",
                "bundle_root_dir",
                "cflags",
                "cflags_c",
                "cflags_cc",
                "cflags_objc",
                "cflags_objcc",
                "check_includes",
                "post_processing_args",
                "post_processing_outputs",
                "post_processing_script",
                "post_processing_sources",
                "complete_static_lib",
                "configs",
                "data",
                "data_deps",
                "defines",
                "depfile",
                "deps",
                "framework_dir",
                "frameworks",
                "include_dirs",
                "inputs",
                "ldflags",
                "lib_dirs",
                "libs",
                "output_dir",
                "output_extension",
                "output_name",
                "output_prefix_override",
                "outputs",
                "pool",
                "precompiled_header",
                "precompiled_header_type",
                "precompiled_source",
                "product_type",
                "public",
                "public_configs",
                "public_deps",
                "response_file_contents",
                "script",
                "sources",
                "testonly",
                "visibility",
                "write_runtime_deps",
                "bundle_contents_dir",
                "contents",
                "output_conversion",
                "rebase",
                "data_keys",
                "walk_keys",
            );
            Type = "xcode.syntax.keyword";
            AltType = "xcode.syntax.identifier";
        };
    },

     {
        Identifier = "xcode.lang.gn.gnspecial";
        Syntax = {
            Words = (
                "is_android",
            );
            Type = "xcode.syntax.preprocessor.define";
            AltType = "xcode.syntax.preprocessor.identifier";
        };
    },
    /**************************************************************************/
    // MARK: GN Syntax Coloring
    /**************************************************************************/

    {
        Identifier = "xcode.lang.gn";
        Description = "GN Coloring";
        BasedOn = "xcode.lang.simpleColoring";
        IncludeInMenu = YES;
        Name = "GN";
        Syntax = {
            Tokenizer = "xcode.lang.gn.lexer";
            IncludeRules = (
                "xcode.lang.gn.block",
                "xcode.lang.gn.bracketexpr",
                "xcode.lang.gn.parenexpr",
            );
            Type = "xcode.syntax.plain";
        };
    },

    // The following rule returns tokens to the other rules
    {
        Identifier = "xcode.lang.gn.lexer";
        Syntax = {
            IncludeRules = (
                "xcode.lang.comment.singleline.pound",
                "xcode.lang.string",
                "xcode.lang.character",
                "xcode.lang.gn.identifier",
                "xcode.lang.gn.gnspecial",
                "xcode.lang.number",
            );
        };
    },
    /**************************************************************************/
    // MARK: GN blocks
    /**************************************************************************/
    {
        Identifier = "xcode.lang.gn.block";
        Syntax = {
            Tokenizer = "xcode.lang.gn.lexer";
            Start = "{";
            End = "}";
            Foldable = YES;
            Recursive = YES;
            IncludeRules = (
                "xcode.lang.gn.bracketexpr",
                "xcode.lang.gn.parenexpr",
            );
        };
    },
    {
        Identifier = "xcode.lang.gn.parenexpr";
        Syntax = {
            Tokenizer = "xcode.lang.gn.lexer";
            Start = "(";
            End = ")";
            Foldable = YES;
            Recursive = YES;
            IncludeRules = (
                "xcode.lang.gn.bracketexpr",
            );
        };
    },

    {
        Identifier = "xcode.lang.gn.bracketexpr";
        Syntax = {
            Tokenizer = "xcode.lang.gn.lexer";
            Start = "[";
            End = "]";
            Foldable = YES;
            Recursive = YES;
            IncludeRules = (
                "xcode.lang.gn.parenexpr",
            );
        };
    },
)