@page "/szf-parser-test" @using SessionZero.Data @using Microsoft.Extensions.Logging @inject SzfParser SzfParser @inject ILogger Logger @inject SzfGenerator SzfGenerator

SZF Parser and Generator Test Page

SZF Input

@if (parsedObject != null) { }

Parsed Object Data

@if (parsedObject != null) {
Object Type@parsedObject.ObjectType
Schema Version@parsedObject.SchemaVersion
Name@parsedObject.Name
Version@parsedObject.Version
ID@parsedObject.Id
Author@parsedObject.Author
Description@parsedObject.Description
@if (parsedObject.ExtendedMetadata.Any()) {

Extended Metadata

@foreach (var meta in parsedObject.ExtendedMetadata) { }
Key Value
@meta.Key @meta.Value
} @* Display Dataset specific data *@ @if (parsedObject is Dataset dataset) { @if (dataset.Entries.Any()) {

Dataset Entries

@foreach (var entry in dataset.Entries) {

Entry: @entry.Name

@if (entry.Fields.Any()) { @foreach (var field in entry.Fields) { }
@field.Name @field.Value
} @foreach (var section in entry.Sections) { @RenderDatasetSection(section) }
} } } @* Display CharacterTemplate specific data *@ @if (parsedObject is CharacterTemplate characterTemplate) { @if (characterTemplate.RequiredDatasets.Any()) {

Required Datasets

@foreach (var reqDataset in characterTemplate.RequiredDatasets) { }
Alias Name GUID Version
@reqDataset.Alias @reqDataset.Reference?.Name @reqDataset.Reference?.Guid @reqDataset.Reference?.Version
} @if (characterTemplate.Sections.Any()) {

Template Sections

@foreach (var section in characterTemplate.Sections) { @RenderTemplateSection(section) } } } } @if (errorMessages.Any()) {

Errors

    @foreach (var error in errorMessages) {
  • @error
  • }
}

Generated SZF Output

@if (!string.IsNullOrEmpty(generatedSzfOutput)) { } else {

No SZF has been generated yet.

}

Logs

@string.Join("\n", logMessages)
@code { private string szfCode = string.Empty; private SzfObject? parsedObject; private string generatedSzfOutput = string.Empty; // New field for generated output private List logMessages = new List(); private List errorMessages = new List(); private void ParseSzf() { ClearState(); // Clear previous states Log("Starting SZF parsing..."); if (string.IsNullOrWhiteSpace(szfCode)) { const string message = "SZF code input is empty."; LogError(message); errorMessages.Add(message); return; } try { parsedObject = SzfParser.Parse(szfCode); Log("SZF content parsed successfully."); Log($"Object Type: {parsedObject.ObjectType}"); Log($"Schema Version: {parsedObject.SchemaVersion}"); } catch (Exception ex) { const string message = "An error occurred during parsing."; LogError(message, ex); errorMessages.Add($"{message} See logs for details."); } } private void GenerateSzf() { generatedSzfOutput = string.Empty; // Clear previous generated output if (parsedObject == null) { Log("No object to generate from. Please parse an SZF first."); return; } Log("Starting SZF generation..."); try { // Use the ToSzfString() method on the parsed object, which uses SzfGenerator internally generatedSzfOutput = parsedObject.ToSzfString(); Log("SZF content generated successfully."); } catch (Exception ex) { const string message = "An error occurred during generation."; LogError(message, ex); errorMessages.Add($"{message} See logs for details."); } } private void ClearState() { logMessages.Clear(); errorMessages.Clear(); parsedObject = null; generatedSzfOutput = string.Empty; } private void Log(string message) { Logger.LogInformation(message); logMessages.Add($"[INFO] {message}"); } private void LogError(string message, Exception? ex = null) { Logger.LogError(ex, message); logMessages.Add($"[ERROR] {message}{(ex is not null ? $": {ex.Message}" : "")}"); } // Helper for rendering Dataset sections (retained from original, adapted for basic HTML) private RenderFragment RenderDatasetSection(DatasetSection dataSection) =>@
@dataSection.Name @if (dataSection.Fields.Any()) { @foreach (var field in dataSection.Fields) { }
@field.Name @field.Value
} @foreach (var subSection in dataSection.Subsections) { @RenderDatasetSection(subSection) }
; // New helper for rendering CharacterTemplate sections private RenderFragment RenderTemplateSection(TemplateSection templateSection) =>@
@templateSection.Name @if (templateSection.Fields.Any()) { @foreach (var field in templateSection.Fields) { }
@field.Name @field.Value
} @foreach (var subSection in templateSection.Subsections) { @RenderTemplateSection(subSection) }
; }