mirror of
https://github.com/RubyMetric/chsrc
synced 2025-07-20 23:26:47 +08:00
Add Config
This commit is contained in:
parent
bdba1fac31
commit
e0988351eb
118
tool/rawstr4c/lib/Config.rakumod
Normal file
118
tool/rawstr4c/lib/Config.rakumod
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
# ---------------------------------------------------------------
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# File Name : Config.rakumod
|
||||||
|
# File Authors : Aoran Zeng <ccmywish@qq.com>
|
||||||
|
# Contributors : Nul None <nul@none.org>
|
||||||
|
# Created On : <2025-07-16>
|
||||||
|
# Last Modified : <2025-07-16>
|
||||||
|
#
|
||||||
|
# Represent a section's working configuration
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
|
||||||
|
use Parser;
|
||||||
|
|
||||||
|
unit module Config;
|
||||||
|
|
||||||
|
#| 一个 section 的配置 (基于层次化结构而形成的最终真正生效的配置)
|
||||||
|
class SectionConfig {
|
||||||
|
|
||||||
|
has Parser::Section $.section;
|
||||||
|
|
||||||
|
method new($section) {
|
||||||
|
self.bless(:$section);
|
||||||
|
}
|
||||||
|
|
||||||
|
#| 从当前 section 开始,向上遍历父节点查找配置项
|
||||||
|
#|
|
||||||
|
#| @param $default 注意,这里要使用配置项值的语法!
|
||||||
|
#|
|
||||||
|
method get-inherited-config($key, Str $default?) {
|
||||||
|
my $current = $.section;
|
||||||
|
while $current {
|
||||||
|
if $current.configblock.exist($key) {
|
||||||
|
|
||||||
|
return $current.configblock.get($key);
|
||||||
|
}
|
||||||
|
$current = $current.parent;
|
||||||
|
}
|
||||||
|
# 如果都没找到,生成一个新值
|
||||||
|
# 当 $default 为空时,生成的是 RS4C-Nil
|
||||||
|
return Parser::ConfigItem's-Value.new($default);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#| 非层次化读取,仅读取当前 section 自己的配置项
|
||||||
|
#|
|
||||||
|
#| @param $default 注意,这里要使用配置项值的语法!
|
||||||
|
#|
|
||||||
|
method get-direct-config($key, Str $default?) {
|
||||||
|
|
||||||
|
if $.section.configblock.exist($key) {
|
||||||
|
return $.section.configblock.get($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! $default.defined {
|
||||||
|
# say "DEBUG: Key <$key> is undefined";
|
||||||
|
}
|
||||||
|
return Parser::ConfigItem's-Value.new($default);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 返回当前 section 的 各种配置
|
||||||
|
# 注意,这些函数仅仅忠实地要么返回层次化值,要么返回自己configblock的值,要么返回一个默认值
|
||||||
|
# 从不考虑 section 其他部分对配置的影响
|
||||||
|
# 对 section 其他部分的考虑是 Generator 的职责
|
||||||
|
|
||||||
|
#| RS4C-Mode
|
||||||
|
method translate-mode() {
|
||||||
|
return self.get-inherited-config('translate', ':escape');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-Mode
|
||||||
|
method output-mode() {
|
||||||
|
return self.get-inherited-config('output-mode', ':terminal');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-String
|
||||||
|
method prefix() {
|
||||||
|
return self.get-inherited-config('prefix', '_rawstr4c');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-Mode 或 RS4C-String
|
||||||
|
method postfix() {
|
||||||
|
return self.get-inherited-config('postfix', ':use-language');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-Bool
|
||||||
|
method keep-prefix() {
|
||||||
|
return self.get-inherited-config('keep-prefix', 'true');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-Bool
|
||||||
|
method keep-postfix() {
|
||||||
|
return self.get-inherited-config('keep-postfix', 'true');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-String 或 RS4C-Nil
|
||||||
|
method language() {
|
||||||
|
return self.get-direct-config('language');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-String 或 RS4C-Nil
|
||||||
|
method name() {
|
||||||
|
return self.get-direct-config('name');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-Bool
|
||||||
|
method name-literally() {
|
||||||
|
return self.get-direct-config('name-literally', 'false');
|
||||||
|
}
|
||||||
|
|
||||||
|
#| RS4C-Bool
|
||||||
|
method debug() {
|
||||||
|
return self.get-inherited-config('debug', 'false');
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user