lua_tinker 如何正确解析德语国际化的浮点数?
2019-12-4 17:13:14
收藏:0
阅读:100
评论:0
由于项目需要支持国际化,所以该项目采用了 lua_tinker 封装。然而,在德国系统中,由于德国使用","作为小数点分隔符,该项目无法正确解析 lua 文件。如何强制 lua_tinker 使用"."作为小数点分隔符?
例如:
llex.c
static int read_numeral (LexState *LS, int period, SemInfo *seminfo) {
//setlocale(LC_ALL,"C");
buffreplace(LS,LS->decpoint,'.')
int isReal = 0;
int startsWithZero = LS->current == '0';
size_t l = 0;
checkbuffer(LS, l);
if (period) {
save(LS, '.', l);
isReal = 1;
}
if (startsWithZero) {
next(LS);
if (LS->current == 'x') {
/* Process a hex number */
int ch = 0;
int c = 0;
int i = 0;
int numDigits = 8;
next(LS);
do {
ch = tolower(LS->current);
if (lex_isdigit(ch))
c = 16*c + (ch-'0');
else if (ch >= 'a' && ch <= 'f')
c = 16*c + (ch-'a') + 10;
next(LS);
ch = tolower(LS->current);
} while (++i<numDigits && (lex_isdigit(ch) || (ch >= 'a' && ch <= 'f')));
seminfo->r = c;
return TK_NUMBER;
} else {
checkbuffer(LS, 1);
save(LS, '0', l);
}
}
while (lex_isdigit(LS->current)) {
checkbuffer(LS, l);
save_and_next(LS, l);
}
if (LS->current == '.') {
isReal = 1;
save_and_next(LS, l);
if (LS->current == '.') {
save_and_next(LS, l);
save(LS, '\0', l);
luaX_lexerror(LS,
"ambiguous syntax (decimal point x string concatenation)",
TK_NUMBER);
}
}
while (lex_isdigit(LS->current)) {
checkbuffer(LS, l);
save_and_next(LS, l);
}
if (LS->current == 'e' || LS->current == 'E') {
isReal = 1;
save_and_next(LS, l); /* read `E' */
if (LS->current == '+' || LS->current == '-')
save_and_next(LS, l); /* optional exponent sign */
while (lex_isdigit(LS->current)) {
checkbuffer(LS, l);
save_and_next(LS, l);
}
}
save(LS, '\0', l);
if (isReal) {
if (!luaO_str2d(luaZ_buffer(LS->buff), &seminfo->r))
luaX_lexerror(LS, "malformed number", TK_NUMBER);
return TK_NUMBER;
} else {
if (!luaO_str2d(luaZ_buffer(LS->buff), &seminfo->r))
luaX_lexerror(LS, "malformed integer", TK_NUMBER);
return TK_NUMBER;
}
}
//lobject.c
int luaO_str2d (const char *s, lua_Number *result) {
//setlocale(LC_NUMERIC,"C");
char *endptr;
lua_Number res = lua_str2number(s, &endptr);
if (endptr == s)
return 0; /* no conversion */
while (isspace((unsigned char)(*endptr))) endptr++;
if (*endptr != '\0')
return 0; /* invalid trailing characters? */
*result = res;
return 1;
}
关于 lua local a = 3.3 is error
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
