AIGuiders.Platform.Modeling.Gdl.Authoring
0.1.0
dotnet add package AIGuiders.Platform.Modeling.Gdl.Authoring --version 0.1.0
NuGet\Install-Package AIGuiders.Platform.Modeling.Gdl.Authoring -Version 0.1.0
<PackageReference Include="AIGuiders.Platform.Modeling.Gdl.Authoring" Version="0.1.0" />
<PackageVersion Include="AIGuiders.Platform.Modeling.Gdl.Authoring" Version="0.1.0" />
<PackageReference Include="AIGuiders.Platform.Modeling.Gdl.Authoring" />
paket add AIGuiders.Platform.Modeling.Gdl.Authoring --version 0.1.0
#r "nuget: AIGuiders.Platform.Modeling.Gdl.Authoring, 0.1.0"
#:package AIGuiders.Platform.Modeling.Gdl.Authoring@0.1.0
#addin nuget:?package=AIGuiders.Platform.Modeling.Gdl.Authoring&version=0.1.0
#tool nuget:?package=AIGuiders.Platform.Modeling.Gdl.Authoring&version=0.1.0
AIGuiders.Platform.Modeling.Gdl.Authoring
Lexical kit for GDL-style config files — numbered comment-stripped lines, keyword-delimited blocks, a unified import directive, and the host-agnostic authoring project model.
What you get
AuthoringLine+AuthoringSource— raw text to numbered lines: 1-basedLineNumber,#comment stripping (stripComment,fromRawLines,fromTextwith CRLF normalization)AuthoringSurfaceKind—KeyValue|Table|IndentedTree;BlockReader.tryParseOpenerrecognizes section openers:IndentedTree—channelsKeyValue—defaults,executorsTable(also via thetableopener suffix) —variables,helps,phrases,profiles,commands,bindings,melodies,mcp
BlockReader.read— reads a block body up toend <keyword>, skipping blank lines; an unclosed block yieldsIsClosed = falseplus anInvalidSyntaxdiagnosticAuthoringImportLine.tryParse— the unified include directive:import "logical/path",import <wire/library>, optionalas <alias>; legacy!includeparses withLegacy = trueAuthoringDiagnostic/AuthoringDiagnosticCode— 15 lexing/grammar codes (MissingDeckHeader,GrammarWireMismatch,DuplicateRow,EntryOutsideWorkspace, …) with line numbersAuthoringProjectmodel —AuthoringDocumentRef(LogicalFilevsFederationImport),ResolvedAuthoringDocument,AuthoringProject,AuthoringProjectLoadResult;PathBoundary.tryToLogicalmaps a physical path to a workspace-relative logical path (pure string math, no file IO)
Quick start
open AIGuiders.Platform.Modeling.Gdl.Authoring
// Raw text -> 1-based lines, '#' comments stripped
let lines =
AuthoringSource.fromText
"commands table\n name phrase\n build \"Build the project\" # inline comment\nend commands"
// Section opener: keyword + surface kind
let opener = BlockReader.tryParseOpener "commands table"
// Some { Keyword = "commands"; Kind = Table }
// Block body up to "end commands" (diagnostics collect via ref)
let diagnostics = ref []
let block = BlockReader.read lines 1 "commands" diagnostics
// block.IsClosed = true; block.Body has the two content lines
// Import directive: quoted = logical path, angle brackets = wire library
let import = AuthoringImportLine.tryParse "import <grain/date-filter> as dash-date"
// Some { Kind = WireLibrary; Path = "grain/date-filter"; Alias = Some "dash-date"; Legacy = false }
Problem
- Every hand-edited DSL re-implements the same lexical chores: strip comments, keep line numbers for diagnostics, split the file into
keyword … end keywordblocks, resolve includes. - Include syntax drifts per file type (
importhere,!includethere), and tooling — editors, language servers, build checks — pays that drift back with bespoke handling per grammar.
Solution
- One lexical kit shared by all GDL grammars: lines and blocks stay dumb, diagnostics keep line numbers, and includes use a single normative
importdirective with two target shapes (logical path vs wire library) per GUIDERS-ADR-0052; the project graph types follow GUIDERS-ADR-0051. - This is the F# mirror of the C#
Authoring.Corekit, with parity tracked in FSHARP-ADR-0003; in this repo it is the lexical foundation of the catalog, deck, config, and IDE-session parsers (Modeling.Gdl.Parse.*) and the Gdl language adapter.
When not to use
- Grammar and IR parsing are not here — the kit stops at lines, openers, blocks, and import directives; quarry-specific parsing lives in the
Gdl.Parse.*packages. - It is a deliberate F# mirror of the C#
AIGuiders.Platform.Authoring.Core— on the C# side use the original package instead. - No file IO: everything is pure functions over pre-loaded text; loading documents from disk is the host's job (and
PathBoundaryis pure path arithmetic).
Learn more
- GUIDERS-ADR-0051 — Authoring project abstraction
- GUIDERS-ADR-0052 — Unified import directive
- FSHARP-ADR-0003 — Model extraction matrix
MIT · Source & issues · part of the Guiders federation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FSharp.Core (>= 10.1.401)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on AIGuiders.Platform.Modeling.Gdl.Authoring:
| Package | Downloads |
|---|---|
|
AIGuiders.Platform.Modeling.Gdl.Parse.Deck
GDL deck quarry parser — F# mirror of Platform Authoring.Deck. |
|
|
AIGuiders.Platform.Modeling.Language.Adapters.Gdl
GDL quarry backend for Language Resolver Center. |
|
|
AIGuiders.Platform.Modeling.Gdl.Parse.Catalog
GDL catalog quarry parser — F# mirror of Platform Authoring.Command.Catalog (phase 1: structure + spine mapping). Parity gaps vs C# authoring emit path: profile bundle resolution (ICatalogBundleLibrary / CatalogProfileResolver), command-profile cross-validation, import-alias bundle path resolution, full notation grammar wire validation (C# injects keyboard parsers), CatalogPhraseSlotIndex codegen inputs. |
|
|
AIGuiders.Platform.Modeling.Gdl.Parse.Config
*.config.gdl parser — F# SSOT mirror of config quarry SAT pilot. |
|
|
AIGuiders.Platform.Modeling.Gdl.Parse.IdeSession
ide-session *.catalog.gdl gates table parser — F# SSOT mirror of Sat.IdeSession quarry. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 61 | 10/24/2026 |