mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 00:36:07 +03:00

Only lines which contain (optional) whitespace followed by a # character are comments. We should not treat lines like "foreground = #aaa" as containing a comment.
52 lines
1.3 KiB
Zig
52 lines
1.3 KiB
Zig
const std = @import("std");
|
|
const Config = @import("Config.zig");
|
|
|
|
const Template = struct {
|
|
const header =
|
|
\\%YAML 1.2
|
|
\\---
|
|
\\# See http://www.sublimetext.com/docs/syntax.html
|
|
\\name: Ghostty Config
|
|
\\file_extensions:
|
|
\\ - ghostty
|
|
\\scope: source.ghostty
|
|
\\
|
|
\\contexts:
|
|
\\ main:
|
|
\\ # Comments
|
|
\\ - match: '^\s*#.*$'
|
|
\\ scope: comment.line.number-sign.ghostty
|
|
\\
|
|
\\ # Keywords
|
|
\\ - match: '\b(
|
|
;
|
|
const footer =
|
|
\\)\b'
|
|
\\ scope: keyword.other.ghostty
|
|
\\
|
|
;
|
|
};
|
|
|
|
/// Check if a field is internal (starts with underscore)
|
|
fn isInternal(name: []const u8) bool {
|
|
return name.len > 0 and name[0] == '_';
|
|
}
|
|
|
|
/// Generate keywords from Config fields
|
|
fn generateKeywords() []const u8 {
|
|
@setEvalBranchQuota(5000);
|
|
var keywords: []const u8 = "";
|
|
const config_fields = @typeInfo(Config).Struct.fields;
|
|
|
|
for (config_fields) |field| {
|
|
if (isInternal(field.name)) continue;
|
|
if (keywords.len > 0) keywords = keywords ++ "|";
|
|
keywords = keywords ++ field.name;
|
|
}
|
|
|
|
return keywords;
|
|
}
|
|
|
|
/// Complete Sublime syntax file content
|
|
pub const syntax = Template.header ++ generateKeywords() ++ Template.footer;
|