Files
xiaozhi-esp32/scripts/gen_lang.py
2025-02-18 19:33:07 +08:00

61 lines
1.7 KiB
Python

#!/usr/bin/env python3
import argparse
import json
import os
HEADER_TEMPLATE = """// Auto-generated language config
#pragma once
#include <string>
#include <string_view>
namespace Lang {{
// 语言元数据
constexpr std::string_view CODE_VIEW = "{lang_code}";
const std::string CODE = std::string(CODE_VIEW);
// 字符串资源
namespace Strings {{
{strings_view}
{strings_string}
}}
}}
"""
def generate_header(input_path, output_path):
with open(input_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# 验证数据结构
if 'language' not in data or 'strings' not in data:
raise ValueError("Invalid JSON structure")
lang_code = data['language']['type']
# 生成字符串常量
strings_view = []
strings_string = []
for key, value in data['strings'].items():
value = value.replace('"', '\\"')
strings_view.append(f' constexpr std::string_view {key.upper()}_VIEW = "{value}";')
strings_string.append(f' const std::string {key.upper()} = std::string({key.upper()}_VIEW);')
# 填充模板
content = HEADER_TEMPLATE.format(
lang_code=lang_code,
strings_view="\n".join(sorted(strings_view)),
strings_string="\n".join(sorted(strings_string))
)
# 写入文件
os.makedirs(os.path.dirname(output_path), exist_ok=True)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(content)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--input", required=True, help="输入JSON文件路径")
parser.add_argument("--output", required=True, help="输出头文件路径")
args = parser.parse_args()
generate_header(args.input, args.output)