@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) { @if (!string.IsNullOrEmpty(parsedSchemaVersion)) { }
Object Type@parsedObject.TypeIdentifier
Schema Version@parsedSchemaVersion
Name@parsedObject.Metadata.Name
Version@parsedObject.Metadata.Version
ID@parsedObject.Metadata.Guid
Author@parsedObject.Metadata.Author
Description@parsedObject.Metadata.Description
@* Display Dataset specific data *@ @if (parsedObject is Dataset dataset) { @if (dataset.Metadata.Any()) // Display Dataset's specific metadata {

Dataset Specific Metadata

@foreach (var meta in dataset.Metadata) { }
Key Value
@meta.Key @meta.Value
} @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) } } } @* Display Character specific data *@ @if (parsedObject is Character character) { @if (character.CharacterSections.Any()) {

Character Sections

@foreach (var section in character.CharacterSections) { @RenderCharacterSection(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? parsedSchemaVersion; // To store the schema version from parsing 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 { var parseResult = SzfParser.ParseSzfStructure(szfCode.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).ToList()); // Create the SzfObject instance from the parseResult parsedObject = SzfParser.CreateInstanceFromTypeIdentifier(parseResult.ObjectTypeIdentifier); SzfParser.PopulateSzfObject(parsedObject, parseResult); parsedSchemaVersion = parseResult.SchemaVersion; // Store the parsed schema version Log("SZF content parsed successfully."); Log($"Object Type: {parsedObject.TypeIdentifier}"); Log($"Schema Version: {parsedSchemaVersion}"); } 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 SzfGenerator to generate the string generatedSzfOutput = SzfGenerator.Generate(parsedObject); 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; parsedSchemaVersion = null; // Clear parsed schema version 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) }
; // 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) }
; // New helper for rendering Character sections private RenderFragment RenderCharacterSection(CharacterSection characterSection) =>@

@characterSection.Name

@if (characterSection.Fields.Any()) { @foreach (var field in characterSection.Fields) { }
@field.Name @field.Value
} @foreach (var subSection in characterSection.Subsections) { @RenderCharacterSection(subSection) }
; }