什么是 PureParser
PureParser 是一个工具,旨在简化如果许多条件可能导致这些字符串以不同方式显示时,采用本地化字符串的过程。
PureParser 允许将基本逻辑放入字符串本身,以控制输出,同时保持其可读性。
安装
C++ 静态库
git clone https://github.com/JivoSite/pure-parser.git
cd pure-parser
make cpp_lib
之后,请检查 build
文件夹中的 libPureParser.a
、PureParser.hpp
和 PureElement.hpp
文件。
C 静态库
git clone https://github.com/JivoSite/pure-parser.git
cd pure-parser
make c_lib
之后,请检查 build
文件夹中的 libpureparser.a
和 pure_parser.h
文件。
Swift Package Manager
https://github.com/JivoSite/pure-parser.git
Cocoapods
pod 'PureParser'
用法
C++ 示例
PureParser parser;
const std::string formula = "$[$name has ## You have] $[$number coupon(s) ## no coupons] expiring on $date";
parser.assignVariable("number", "7");
parser.assignVariable("date", "11/11/19");
const std::string result = parser.execute(formula, true, true);
std::cout << result << std::endl;
您有7张于2019年11月11日到期的优惠券
您可以在 ./cpp_src/PureParserExamples.cpp
找到更多示例
并通过 make cpp_run
运行它们
C 示例
pure_config_t config;
pure_config_set_default(&config);
pure_parser_t parser;
pure_parser_init(&parser, &config);
const char *formula = "$[$name has ## You have] $[$number coupon(s) ## no coupons] expiring on $date";
pure_parser_assign_var(&parser, "number", "7");
pure_parser_assign_var(&parser, "date", "11/11/19");
char *result_buff = NULL;
size_t result_len = 0;
pure_parser_execute(&parser, formula, true, true, &result_buff, &result_len);
if (result_buff) {
printf("%s\n", result_buff);
free(result_buff);
}
您有7张于2019年11月11日到期的优惠券
您可以在 ./c_wrapper/pure_parser_examples.c
找到更多示例
并通过 make c_run
运行它们
Swift 示例
let parser = PureParser()
let formula = "$[$name has ## You have] $[$number coupon(s) ## no coupons] expiring on $date"
parser.assign(variable: "number", value: "7")
parser.assign(variable: "date", value: "11/11/19")
let result = parser.execute(formula, collapseSpaces: true, resetOnFinish: true)
print(result)
您有7张于2019年11月11日到期的优惠券
您可以在 ./swift_wrapper/PureParserExamples.swift
找到更多示例
并通过 make swift_run
运行它们
包含内容
主要有五个术语:frame(框架)、variable(变量)、block(块)、alias(别名)和 formula(公式)。
让我们仔细看看。
框架
帧是待解析文本的一部分,可以包含任何逻辑元素,如果有需要的话。
PureParser parser;
const char *formula = "Hello world";
parser.execute(formula, true, true);
// "Hello world"
变量
变量是可以分配给文本值的命名逻辑元素,或者全部不设置。
默认情况下,变量以美元符号开头,例如:
$变量名
。
PureParser parser;
const char *formula = "You saved the photo into folder '$folder'.";
parser.assignVariable("folder", "Family");
parser.execute(formula, true, true);
// "You saved the photo into folder 'Family'."
区块
区块是一个逻辑元素,包含一个或多个由特殊标记分隔的 帧。区块的作用是解析其 帧 的顺序,并获取第一个成功解析的 帧。
如果其帧都不能成功解析,则区块本身变为非法,并且会被其父元素跳过。区块可以是嵌套的。
默认情况下,区块以美元符号开头,并用方括号包围其帧之间的分隔符,例如:
$[第一帧 ## 第二帧 ## 第三帧]
。
PureParser parser;
const char *formula = "You saved the photo into $[folder '$folder' ## default folder].";
parser.execute(formula, true, true);
// "You saved the photo into default folder."
parser.assignVariable("folder", "Family");
parser.execute(formula, true, true);
// "You saved the photo into folder 'Family'."
PureParser parser;
const char *formula = "You saved the photo $[into folder '$folder'].";
parser.execute(formula, true, true);
// "You saved the photo."
parser.assignVariable("folder", "Family");
parser.execute(formula, true, true);
// "You saved the photo into folder 'Family'."
别名
别名是任何帧的虚拟名称。如果您为帧分配别名,它将默认变为非活动状态。这意味着,在执行区块时,解析过程不会将那个帧视为有效结果是 gelir。
如果您需要在区块内选择框架,但您的框架不包含任何能够控制解析流的 变量 时,这非常有用。
默认情况下,别名 用冒号包围,并置于框架的第一元素中,如
你没有钱但没有足够的 $$[:no-money:] money
。别名不会解析到输出中。
PureParser parser;
const char *formula = "You have $[:none: no coupons ## :one: one coupon ## $number coupons]";
parser.execute(formula, true, true);
// "" // no alias activated, no variables set
parser.enableAlias("none");
parser.execute(formula, true, true);
// "You have no coupons"
parser.enableAlias("one");
parser.execute(formula, true, true);
// "You have one coupon"
parser.assignVariable("number", "12");
parser.execute(formula, true, true);
// "You have 12 coupons"
公式
最后,公式 是您传递给解析器的根框架。
作者和许可
JivoSite Inc. [email protected], 2019.
纯解释器(PureParser)遵循MIT许可协议提供。
有关更多信息,请参阅LICENSE文件。