[Feat] 实现 std.formater库,增加 std.io.printf函数
[Fix] 修复 evaluator中处理else if condVal类型错误的低级问题 [Feat] 为 String类型增加 insert, replace, erase函数
This commit is contained in:
178
src/Module/Library/std/formater/formater.fig
Normal file
178
src/Module/Library/std/formater/formater.fig
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user