Refined output

This commit is contained in:
Aoran Zeng 2025-07-14 01:42:13 +08:00
parent bd45eff13c
commit e3dd337b28
No known key found for this signature in database
GPG Key ID: 8F8BA8488E10ED98
3 changed files with 21 additions and 19 deletions

View File

@ -130,13 +130,13 @@ my class CVariableGenerator {
given $var<type> { given $var<type> {
when 'global-variable' { when 'global-variable' {
if $output-mode eq 'global-variable-only-header' { if $output-mode eq 'global-variable-only-header' {
$header ~= "char {$var<name>}[] = \"{$var<content>}\";\n"; $header ~= "char {$var<name>}[] = \"{$var<content>}\";\n\n";
} else { } else {
$header ~= "extern char {$var<name>}[];\n"; $header ~= "extern char {$var<name>}[];\n";
} }
} }
when 'macro' { when 'macro' {
$header ~= "#define {$var<name>.uc} \"{$var<content>}\"\n"; $header ~= "#define {$var<name>.uc} \"{$var<content>}\"\n\n";
} }
} }
} }
@ -187,12 +187,14 @@ my class CVariableGenerator {
class Generator { class Generator {
has $.parser;
has $.cstring-converter; has $.cstring-converter;
has $.varname-generator; has $.varname-generator;
has $.variable-generator; has $.variable-generator;
method new() { method new($parser) {
self.bless( self.bless(
:$parser,
:cstring-converter(CStringConverter.new), :cstring-converter(CStringConverter.new),
:varname-generator(CVariableNameGenerator.new), :varname-generator(CVariableNameGenerator.new),
:variable-generator(CVariableGenerator.new) :variable-generator(CVariableGenerator.new)
@ -214,8 +216,6 @@ class Generator {
return unless $code; return unless $code;
say "=== Section: $title ===";
my $translate-mode = self.get-config-value( my $translate-mode = self.get-config-value(
$global-config, $section-config, 'translate', ':escape' $global-config, $section-config, 'translate', ':escape'
).as-mode(); ).as-mode();
@ -225,12 +225,13 @@ class Generator {
my $output-mode = $global-config.get('output', ':terminal').as-mode(); my $output-mode = $global-config.get('output', ':terminal').as-mode();
if $debug-parser { if $debug-parser {
say "Variable name: $var-name"; say "--- Section: $title ---";
say "Translation mode: $translate-mode"; say "Variable name = $var-name";
say "Output mode: $output-mode"; say "Translation mode = $translate-mode";
say "Output mode = $output-mode";
my $language = $section-config.get('language', 'None').as-string(); my $language = $section-config.get('language', 'None').as-string();
say "Language: $language"; say "Language = $language";
say ''; say '';
} }
@ -239,6 +240,7 @@ class Generator {
given $output-mode { given $output-mode {
when 'terminal' { when 'terminal' {
say 'char ' ~ $var-name ~ '[] = "' ~ $c-string ~ '";'; say 'char ' ~ $var-name ~ '[] = "' ~ $c-string ~ '";';
say "";
} }
when 'global-variable' | 'global-variable-only-header' { when 'global-variable' | 'global-variable-only-header' {
$.variable-generator.add-variable($var-name, $c-string, 'global-variable'); $.variable-generator.add-variable($var-name, $c-string, 'global-variable');
@ -250,15 +252,15 @@ class Generator {
die "Illegal output mode: $output-mode"; die "Illegal output mode: $output-mode";
} }
} }
say "\n";
} }
method generate($parser) { method generate() {
my $global-config = $parser.global-config;
my $global-config = $.parser.global-config;
# 这个 generate-for-section() 要么把变量输出到终端,要么累计到 @variabels 中 # 这个 generate-for-section() 要么把变量输出到终端,要么累计到 @variabels 中
for $parser.sections -> $section { for $.parser.sections -> $section {
self.generate-for-section($global-config, $section); self.generate-for-section($global-config, $section);
} }
@ -266,7 +268,7 @@ class Generator {
# 最后把累计到 @variables 的内容输出到文件 # 最后把累计到 @variables 的内容输出到文件
if $output-mode ne 'terminal' { if $output-mode ne 'terminal' {
my $dest-dir = $parser.input-file.dirname.Str; my $dest-dir = $.parser.input-file.dirname.Str;
$.variable-generator.save-files($output-mode, $dest-dir); $.variable-generator.save-files($output-mode, $dest-dir);
} }
} }

View File

@ -122,7 +122,7 @@ class Parser {
has $.global-config; has $.global-config;
has @.sections; has @.sections;
method new(:$input-file) { method new($input-file) {
self.bless( self.bless(
:$input-file, :$input-file,
global-config => Config.new(), global-config => Config.new(),
@ -231,7 +231,7 @@ class Parser {
# 输出 config, 包含 global config 以及 section config # 输出 config, 包含 global config 以及 section config
method debug() { method debug() {
say "Global config:"; say "--- Global config ---";
for $.global-config.keys.sort -> $item { for $.global-config.keys.sort -> $item {
my $value = $.global-config.get($item); my $value = $.global-config.get($item);
say "$item = {$value.as-string} (type: {$value.type})"; say "$item = {$value.as-string} (type: {$value.type})";

View File

@ -41,9 +41,9 @@ sub MAIN(
die "Error: '$input-path' is neither a file nor a directory\n"; die "Error: '$input-path' is neither a file nor a directory\n";
} }
my $parser = Parser::Parser.new(input-file=>$markdown-file); my $parser = Parser::Parser.new($markdown-file);
$parser.parse; $parser.parse;
$parser.debug if $debug; $parser.debug if $debug;
Generator::Generator.new.generate($parser); Generator::Generator.new($parser).generate;
} }