[Feat] 实现 std.formater库,增加 std.io.printf函数

[Fix] 修复 evaluator中处理else if condVal类型错误的低级问题
[Feat] 为 String类型增加 insert, replace, erase函数
This commit is contained in:
2025-12-29 18:27:39 +08:00
parent cd106fc513
commit 2a455a0487
6 changed files with 335 additions and 14 deletions

View File

@@ -0,0 +1,178 @@
/*
Official Module `std.formater`
Library/std/formater/formater.fig
*/
import std.value; // `type` function and string_from
public func format(objects ...) -> Any
{
if objects.length() < 1
{
return null;
}
var fmt := objects[0];
if value.type(fmt) != "String"
{
return null;
}
var result := "";
var argIndex := 1;
var i := 0;
var length := fmt.length();
while (i < length)
{
var char := fmt[i];
if char == "{"
{
if (i + 1 >= length)
{
return null;
}
var nextChar = fmt[i + 1];
if nextChar == "{"
{
result += "{";
i += 2;
continue;
}
var endIndex := -1;
for var j = i + 1; j < length; j += 1
{
if fmt[j] == "}"
{
endIndex = j;
break;
}
}
if endIndex == -1
{
return null;
}
if argIndex >= objects.length()
{
return null;
}
result += value.string_from(objects[argIndex]);
argIndex += 1;
i = endIndex + 1;
}
else if char == "}"
{
if i + 1 < length && fmt[i + 1] == "}"
{
result += "}";
i += 2;
continue;
}
return null;
}
else
{
result += char;
i += 1;
}
}
return result;
}
public func formatByListArgs(objects) -> Any
{
if value.type(objects) != "List"
{
return null;
}
if objects.length() < 1
{
return null;
}
var fmt := objects[0];
if value.type(fmt) != "String"
{
return null;
}
var result := "";
var argIndex := 1;
var i := 0;
var length := fmt.length();
while (i < length)
{
var char := fmt[i];
if char == "{"
{
if (i + 1 >= length)
{
return null;
}
var nextChar = fmt[i + 1];
if nextChar == "{"
{
result += "{";
i += 2;
continue;
}
var endIndex := -1;
for var j = i + 1; j < length; j += 1
{
if fmt[j] == "}"
{
endIndex = j;
break;
}
}
if endIndex == -1
{
return null;
}
if argIndex >= objects.length()
{
return null;
}
result += value.string_from(objects[argIndex]);
argIndex += 1;
i = endIndex + 1;
}
else if char == "}"
{
if i + 1 < length && fmt[i + 1] == "}"
{
result += "}";
i += 2;
continue;
}
return null;
}
else
{
result += char;
i += 1;
}
}
return result;
}