mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-03 00:00:49 +08:00
1. 移除了FlipflopContext,统一流程API
2. Script项目脚本修复了 RawString 原始字符串存在的问题 3. Script使用了ValueNode统一了值类型节点,为后续扩展更多的值类型做准备 4. TypeHelper.ToTypeOfString()方法中添加了部分值类型的"Type[]”与“List<Type>”的显式定义,用于脚本在类型中定义数组成员 5. Script项目脚本默认挂载的json方法拆分为jsonObj(String)与jsonStr(Object)以支持序列化与反序列化 6. 项目保存为dnf项目文件时,将不再保存名称为”Default"并且没有节点的画布,避免重复保存时默认画布增多。
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
namespace Serein.Script
|
||||
using System.Data.Common;
|
||||
using System.Numerics;
|
||||
|
||||
namespace Serein.Script
|
||||
{
|
||||
/// <summary>
|
||||
/// Serein脚本词法分析器的Token类型
|
||||
@@ -38,6 +41,10 @@
|
||||
/// </summary>
|
||||
String,
|
||||
/// <summary>
|
||||
/// 原始字符串(多行字符串)
|
||||
/// </summary>
|
||||
RawString,
|
||||
/// <summary>
|
||||
/// Char字符
|
||||
/// </summary>
|
||||
Char,
|
||||
@@ -217,7 +224,7 @@
|
||||
if (_input[_index + 1] == '"'
|
||||
&& _input[_index + 2] == '"')
|
||||
{
|
||||
var value = _input.Slice(_index, 4).ToString();
|
||||
//var value = _input.Slice(_index, 4).ToString();
|
||||
|
||||
// 原始字符串
|
||||
return ReadRawString();
|
||||
@@ -450,27 +457,38 @@
|
||||
|
||||
private Token ReadRawString()
|
||||
{
|
||||
// skip opening triple quotes
|
||||
_index += 3;
|
||||
|
||||
var start = _index;
|
||||
while (_index + 2 < _input.Length)
|
||||
int startLine = _row;
|
||||
_index += 3; // 跳过开头 """
|
||||
int index = _index;
|
||||
var contentStart = index;
|
||||
while (index + 2 < _input.Length)
|
||||
{
|
||||
if (_input[_index] == '"' && _input[_index + 1] == '"' && _input[_index + 2] == '"')
|
||||
char current = _input[index];
|
||||
|
||||
// 行号处理
|
||||
if (current == '\n')
|
||||
{
|
||||
var value = _input.Slice(start, _index - start).ToString();
|
||||
_index += 3; // skip closing """
|
||||
return CreateToken(TokenType.String, value);
|
||||
_row++;
|
||||
}
|
||||
|
||||
// 检查是否是结束符 """
|
||||
if (_input[index] != '"' || _input[index + 1] != '"' || _input[index + 2] != '"')
|
||||
{
|
||||
index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
var value = _input.Slice(contentStart, index - contentStart).ToString();
|
||||
_index += 3;
|
||||
// 构建带行号信息的 Token(假设 Token 有 StartLine 属性)
|
||||
return CreateToken(TokenType.RawString, value);
|
||||
}
|
||||
|
||||
_index++;
|
||||
}
|
||||
|
||||
throw new Exception("Unterminated raw string literal");
|
||||
|
||||
throw new Exception($"Unterminated raw string literal starting at line {startLine}");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 读取硬编码的文本
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user