mirror of
https://github.com/RubyMetric/chsrc
synced 2025-07-19 14:19:36 +08:00
Refined output
This commit is contained in:
parent
bd45eff13c
commit
e3dd337b28
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,10 +231,10 @@ 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})";
|
||||||
}
|
}
|
||||||
say "";
|
say "";
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user