add: 语法编辑器界面
语法热重载功能
This commit is contained in:
parent
d8edc6c28b
commit
8dfbdb02b6
|
@ -1,19 +1,93 @@
|
||||||
@page "/editor"
|
@page "/editor"
|
||||||
|
@using Katheryne.Services
|
||||||
|
@using Katheryne.Exceptions
|
||||||
|
@inject NavigationManager Navigation
|
||||||
|
@inject KatheryneChatRobotFactory RobotFactory
|
||||||
|
|
||||||
<Layout>
|
<Layout>
|
||||||
<Content>
|
<Content>
|
||||||
<div class="editor-zone">
|
<div class="editor-zone">
|
||||||
<StandaloneCodeEditor ConstructionOptions="GetEditorConstructionOptions" Id="my-editor-instance"/>
|
<div class="control-zone">
|
||||||
|
<Space Size="@("0")">
|
||||||
|
<SpaceItem>
|
||||||
|
<Button Type="@ButtonType.Text">
|
||||||
|
退出
|
||||||
|
</Button>
|
||||||
|
</SpaceItem>
|
||||||
|
|
||||||
|
<SpaceItem>
|
||||||
|
<Button Type="@ButtonType.Text" @onclick="@CompileGrammarClicked">
|
||||||
|
编译
|
||||||
|
</Button>
|
||||||
|
</SpaceItem>
|
||||||
|
</Space>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<StandaloneCodeEditor Id="code-editor" @ref="@_editor"
|
||||||
|
ConstructionOptions="GetEditorConstructionOptions"/>
|
||||||
|
|
||||||
|
<div class="logging-zone">
|
||||||
|
<AntList TItem="@string" DataSource="@_logs" Split="@false" @ref="@_logList">
|
||||||
|
<p style="margin-bottom: 0">@context</p>
|
||||||
|
</AntList>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Content>
|
</Content>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
private StandaloneCodeEditor _editor = null!;
|
||||||
|
private AntList<string> _logList = null!;
|
||||||
|
|
||||||
|
private readonly List<string> _logs = new();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
Log("编辑器加载完成");
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
private StandaloneEditorConstructionOptions GetEditorConstructionOptions(StandaloneCodeEditor editor)
|
private StandaloneEditorConstructionOptions GetEditorConstructionOptions(StandaloneCodeEditor editor)
|
||||||
{
|
{
|
||||||
|
string grammarText;
|
||||||
|
if (!string.IsNullOrEmpty(RobotFactory.GrammarText))
|
||||||
|
{
|
||||||
|
Log("加载文法...");
|
||||||
|
grammarText = RobotFactory.GrammarText;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log("未设置文法");
|
||||||
|
grammarText = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
return new StandaloneEditorConstructionOptions
|
return new StandaloneEditorConstructionOptions
|
||||||
{
|
{
|
||||||
Language = "yaml"
|
Language = "yaml",
|
||||||
|
Value = grammarText
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task CompileGrammarClicked()
|
||||||
|
{
|
||||||
|
string grammarText = await _editor.GetValue();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Log("编译文法...");
|
||||||
|
RobotFactory.SetGrammar(grammarText);
|
||||||
|
Log("编译成功!");
|
||||||
|
}
|
||||||
|
catch (GrammarException e)
|
||||||
|
{
|
||||||
|
Log($"编译文法遇到错误:{e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Log(string message)
|
||||||
|
{
|
||||||
|
_logs.Add($"{DateTime.Now:HH:mm:ss} {message}");
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,3 +1,13 @@
|
||||||
.editor-zone {
|
.editor-zone {
|
||||||
min-height: calc(100vh - 64px);
|
height: calc(100vh - 64px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-zone {
|
||||||
|
height: 5%;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logging-zone {
|
||||||
|
height: 15%;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
|
@ -51,23 +51,6 @@
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
ChatRobotFactory.SetGrammar(@"
|
|
||||||
robotName: 凯瑟琳
|
|
||||||
stages:
|
|
||||||
- name: start
|
|
||||||
answer: 向着星辰和深渊!欢迎来到冒险家协会。
|
|
||||||
transformers:
|
|
||||||
- pattern: .*?
|
|
||||||
nextStageName: running
|
|
||||||
|
|
||||||
- name: running
|
|
||||||
answer: 对不起,做不到。
|
|
||||||
transformers:
|
|
||||||
- pattern: .*?
|
|
||||||
nextStageName: running
|
|
||||||
beginStageName: start
|
|
||||||
");
|
|
||||||
|
|
||||||
Chat chat = GetInitChat();
|
Chat chat = GetInitChat();
|
||||||
_chatDictionary.Add(chat.Guid, chat);
|
_chatDictionary.Add(chat.Guid, chat);
|
||||||
_currentGuid = chat.Guid;
|
_currentGuid = chat.Guid;
|
||||||
|
|
|
@ -15,6 +15,12 @@
|
||||||
a.k.a 凯瑟琳
|
a.k.a 凯瑟琳
|
||||||
</p>
|
</p>
|
||||||
</SpaceItem>
|
</SpaceItem>
|
||||||
|
|
||||||
|
<SpaceItem>
|
||||||
|
<div>
|
||||||
|
<a href="editor/">维护界面</a>
|
||||||
|
</div>
|
||||||
|
</SpaceItem>
|
||||||
</Space>
|
</Space>
|
||||||
</Header>
|
</Header>
|
||||||
|
|
||||||
|
|
|
@ -32,5 +32,6 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-editor-container {
|
.monaco-editor-container {
|
||||||
min-height: 100%;
|
min-height: 80%;
|
||||||
|
margin: 5px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,6 @@ public static class ServiceCollectionExtensions
|
||||||
{
|
{
|
||||||
collection.AddSingleton<YamlDeserializerFactory>();
|
collection.AddSingleton<YamlDeserializerFactory>();
|
||||||
collection.AddSingleton<DefaultChatRobot>();
|
collection.AddSingleton<DefaultChatRobot>();
|
||||||
collection.AddScoped<KatheryneChatRobotFactory>();
|
collection.AddSingleton<KatheryneChatRobotFactory>();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -14,6 +14,8 @@ public class KatheryneChatRobotFactory
|
||||||
|
|
||||||
private Grammar? _grammar;
|
private Grammar? _grammar;
|
||||||
|
|
||||||
|
public string GrammarText { get; private set; } = string.Empty;
|
||||||
|
|
||||||
public KatheryneChatRobotFactory(YamlDeserializerFactory deserializerFactory,
|
public KatheryneChatRobotFactory(YamlDeserializerFactory deserializerFactory,
|
||||||
ILogger<KatheryneChatRobotFactory> factoryLogger,
|
ILogger<KatheryneChatRobotFactory> factoryLogger,
|
||||||
ILogger<KatheryneChatRobot> robotLogger,
|
ILogger<KatheryneChatRobot> robotLogger,
|
||||||
|
@ -28,6 +30,7 @@ public class KatheryneChatRobotFactory
|
||||||
public void SetGrammar(string grammarText)
|
public void SetGrammar(string grammarText)
|
||||||
{
|
{
|
||||||
_factoryLogger.LogInformation("Receive new grammar: {}.", grammarText);
|
_factoryLogger.LogInformation("Receive new grammar: {}.", grammarText);
|
||||||
|
GrammarText = grammarText;
|
||||||
IDeserializer deserializer = _deserializerFactory.GetDeserializer();
|
IDeserializer deserializer = _deserializerFactory.GetDeserializer();
|
||||||
|
|
||||||
LexicalModel model = deserializer.Deserialize<LexicalModel>(grammarText);
|
LexicalModel model = deserializer.Deserialize<LexicalModel>(grammarText);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user