Add init.ps1 setup script, remove Loreline binaries from repo

- Add PowerShell init script that downloads Loreline v0.7.1 from GitHub
- Script also checks for .NET 10 SDK and restores NuGet packages
- Remove Loreline DLL/XML/deps from git tracking (now fetched by init.ps1)
- Update .gitignore to exclude entire lib/ directory
This commit is contained in:
Samuel Bouchet 2026-03-10 18:49:26 +01:00
parent b1f8ceec66
commit e0cdc7a6de
5 changed files with 121 additions and 528 deletions

11
.gitignore vendored
View file

@ -17,15 +17,8 @@ obj/
**/[Pp]roject.lock.json
project.assets.json
## Keep Loreline DLL
!lib/Loreline.dll
!lib/Loreline.xml
!lib/Loreline.deps.json
lib/Loreline/
lib/loreline-csharp.zip
lib/Loreline.csproj
lib/Loreline.sln
lib/Directory.Build.props
## Loreline (downloaded by init.ps1)
lib/
## Build results
[Dd]ebug/

119
init.ps1 Normal file
View file

@ -0,0 +1,119 @@
# Open The Box - Initialization Script
# Run this after cloning to download dependencies and verify the environment.
#
# Usage: .\init.ps1
$ErrorActionPreference = "Stop"
$LorelineVersion = "0.7.1"
$LorelineZipUrl = "https://github.com/Loreline/loreline/releases/download/v$LorelineVersion/loreline-csharp.zip"
$LibDir = Join-Path $PSScriptRoot "lib"
$LorelineDll = Join-Path $LibDir "Loreline.dll"
$TempZip = Join-Path $LibDir "loreline-csharp.zip"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Open The Box - Project Setup" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# ── Step 1: Check .NET SDK ────────────────────────────────────────────
Write-Host "[1/3] Checking .NET SDK..." -ForegroundColor Yellow
$sdks = & dotnet --list-sdks 2>$null
$hasNet10 = $sdks | Where-Object { $_ -match "^10\." }
if (-not $hasNet10) {
Write-Host " .NET 10 SDK not found." -ForegroundColor Red
Write-Host " Install it with: winget install Microsoft.DotNet.SDK.10" -ForegroundColor Red
Write-Host " Or download from: https://dotnet.microsoft.com/download/dotnet/10.0" -ForegroundColor Red
Write-Host ""
$response = Read-Host " Attempt to install via winget? (y/N)"
if ($response -eq "y" -or $response -eq "Y") {
Write-Host " Installing .NET 10 SDK..." -ForegroundColor Yellow
winget install Microsoft.DotNet.SDK.10 --accept-source-agreements --accept-package-agreements
Write-Host " Installed. You may need to restart your terminal for PATH changes." -ForegroundColor Green
} else {
Write-Host " Skipping .NET 10 SDK install. Build may fail without it." -ForegroundColor Red
}
} else {
$version = ($hasNet10 | Select-Object -First 1) -replace '\s+\[.*$', ''
Write-Host " .NET SDK $version found." -ForegroundColor Green
}
Write-Host ""
# ── Step 2: Download Loreline ─────────────────────────────────────────
Write-Host "[2/3] Checking Loreline dependency..." -ForegroundColor Yellow
if (-not (Test-Path $LibDir)) {
New-Item -ItemType Directory -Path $LibDir -Force | Out-Null
}
if (Test-Path $LorelineDll) {
Write-Host " Loreline.dll already present." -ForegroundColor Green
} else {
Write-Host " Downloading Loreline v$LorelineVersion from GitHub..." -ForegroundColor Yellow
try {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri $LorelineZipUrl -OutFile $TempZip -UseBasicParsing
Write-Host " Extracting..." -ForegroundColor Yellow
$extractDir = Join-Path $LibDir "_loreline_extract"
Expand-Archive -Path $TempZip -DestinationPath $extractDir -Force
# Find and copy the DLL, XML, and deps.json
$dllSource = Get-ChildItem -Path $extractDir -Recurse -Filter "Loreline.dll" | Select-Object -First 1
if ($dllSource) {
$sourceDir = $dllSource.DirectoryName
Copy-Item (Join-Path $sourceDir "Loreline.dll") $LibDir -Force
$xmlFile = Join-Path $sourceDir "Loreline.xml"
if (Test-Path $xmlFile) { Copy-Item $xmlFile $LibDir -Force }
$depsFile = Join-Path $sourceDir "Loreline.deps.json"
if (Test-Path $depsFile) { Copy-Item $depsFile $LibDir -Force }
Write-Host " Loreline v$LorelineVersion installed." -ForegroundColor Green
} else {
Write-Host " ERROR: Could not find Loreline.dll in downloaded archive." -ForegroundColor Red
exit 1
}
# Cleanup
Remove-Item $extractDir -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item $TempZip -Force -ErrorAction SilentlyContinue
}
catch {
Write-Host " ERROR: Failed to download Loreline." -ForegroundColor Red
Write-Host " $($_.Exception.Message)" -ForegroundColor Red
Write-Host ""
Write-Host " Manual install:" -ForegroundColor Yellow
Write-Host " 1. Download from: $LorelineZipUrl" -ForegroundColor Yellow
Write-Host " 2. Extract Loreline.dll to: $LibDir" -ForegroundColor Yellow
exit 1
}
}
Write-Host ""
# ── Step 3: Restore NuGet packages ───────────────────────────────────
Write-Host "[3/3] Restoring NuGet packages..." -ForegroundColor Yellow
dotnet restore
if ($LASTEXITCODE -eq 0) {
Write-Host " Packages restored." -ForegroundColor Green
} else {
Write-Host " WARNING: Package restore failed. Try running 'dotnet restore' manually." -ForegroundColor Red
}
Write-Host ""
# ── Done ──────────────────────────────────────────────────────────────
Write-Host "========================================" -ForegroundColor Green
Write-Host " Setup complete!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host ""
Write-Host " To build: dotnet build" -ForegroundColor Cyan
Write-Host " To run: dotnet run --project src/OpenTheBox" -ForegroundColor Cyan
Write-Host ""

View file

@ -1,24 +0,0 @@
{
"runtimeTarget": {
"name": ".NETStandard,Version=v2.1/",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETStandard,Version=v2.1": {},
".NETStandard,Version=v2.1/": {
"Loreline/1.0.0": {
"runtime": {
"Loreline.dll": {}
}
}
}
},
"libraries": {
"Loreline/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

View file

@ -1,495 +0,0 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Loreline</name>
</assembly>
<members>
<member name="T:Loreline.IFields">
<summary>
Base interface to hold loreline values.
This interface allows to map loreline object fields to game-specific objects.
</summary>
</member>
<member name="M:Loreline.IFields.LorelineCreate(Loreline.Interpreter)">
<summary>
Called when the object has been created from an interpreter
</summary>
<param name="interpreter">The interpreter instance</param>
</member>
<member name="M:Loreline.IFields.LorelineGet(Loreline.Interpreter,System.String)">
<summary>
Get the value associated to the given field key
</summary>
<param name="interpreter">The interpreter instance</param>
<param name="key">The field key</param>
<returns>The value associated with the key</returns>
</member>
<member name="M:Loreline.IFields.LorelineSet(Loreline.Interpreter,System.String,System.Object)">
<summary>
Set the value associated to the given field key
</summary>
<param name="interpreter">The interpreter instance</param>
<param name="key">The field key</param>
<param name="value">The value to set</param>
</member>
<member name="M:Loreline.IFields.LorelineRemove(Loreline.Interpreter,System.String)">
<summary>
Remove the field associated to the given key
</summary>
<param name="interpreter">The interpreter instance</param>
<param name="key">The field key to remove</param>
<returns>True if the key was found and removed, false otherwise</returns>
</member>
<member name="M:Loreline.IFields.LorelineExists(Loreline.Interpreter,System.String)">
<summary>
Check if a value exists for the given key
</summary>
<param name="interpreter">The interpreter instance</param>
<param name="key">The field key to check</param>
<returns>True if the key exists, false otherwise</returns>
</member>
<member name="M:Loreline.IFields.LorelineFields(Loreline.Interpreter)">
<summary>
Get all the fields of this object
</summary>
<param name="interpreter">The interpreter instance</param>
<returns>An array of field keys</returns>
</member>
<member name="T:Loreline.Interpreter">
<summary>
Main interpreter class for Loreline scripts.
This class is responsible for executing a parsed Loreline script,
managing the runtime state, and interacting with the host application
through handler functions.
</summary>
</member>
<member name="T:Loreline.Interpreter.TextTag">
<summary>
Represents a tag in text content, which can be used for styling or other purposes.
</summary>
</member>
<member name="F:Loreline.Interpreter.TextTag.Closing">
<summary>
Whether this is a closing tag.
</summary>
</member>
<member name="F:Loreline.Interpreter.TextTag.Value">
<summary>
The value or name of the tag.
</summary>
</member>
<member name="F:Loreline.Interpreter.TextTag.Offset">
<summary>
The offset in the text where this tag appears.
</summary>
</member>
<member name="T:Loreline.Interpreter.ChoiceOption">
<summary>
Represents a choice option presented to the user.
</summary>
</member>
<member name="F:Loreline.Interpreter.ChoiceOption.Text">
<summary>
The text of the choice option.
</summary>
</member>
<member name="F:Loreline.Interpreter.ChoiceOption.Tags">
<summary>
Any tags associated with the choice text.
</summary>
</member>
<member name="F:Loreline.Interpreter.ChoiceOption.Enabled">
<summary>
Whether this choice option is currently enabled.
</summary>
</member>
<member name="T:Loreline.Interpreter.Function">
<summary>
Delegate type for functions that can be called from the script.
</summary>
<param name="interpreter">The interpreter instance</param>
<param name="args">Arguments passed to the function</param>
<returns>The result of the function</returns>
</member>
<member name="T:Loreline.Interpreter.DialogueCallback">
<summary>
Callback type for dialogue continuation.
</summary>
</member>
<member name="T:Loreline.Interpreter.Dialogue">
<summary>
Contains information about a dialogue to be displayed to the user.
</summary>
</member>
<member name="F:Loreline.Interpreter.Dialogue.Interpreter">
<summary>
The interpreter instance.
</summary>
</member>
<member name="F:Loreline.Interpreter.Dialogue.Character">
<summary>
The character speaking (null for narrator text).
</summary>
</member>
<member name="F:Loreline.Interpreter.Dialogue.Text">
<summary>
The text content to display.
</summary>
</member>
<member name="F:Loreline.Interpreter.Dialogue.Tags">
<summary>
Any tags in the text.
</summary>
</member>
<member name="F:Loreline.Interpreter.Dialogue.Callback">
<summary>
Function to call when the text has been displayed.
</summary>
</member>
<member name="T:Loreline.Interpreter.DialogueHandler">
<summary>
Handler type for text output with callback.
This is called when the script needs to display text to the user.
</summary>
<param name="dialogue">A Dialogue structure containing all necessary information</param>
</member>
<member name="T:Loreline.Interpreter.ChoiceCallback">
<summary>
Callback type for choice selection.
</summary>
<param name="index">The index of the selected choice</param>
</member>
<member name="T:Loreline.Interpreter.Choice">
<summary>
Contains information about choices to be presented to the user.
</summary>
</member>
<member name="F:Loreline.Interpreter.Choice.Interpreter">
<summary>
The interpreter instance.
</summary>
</member>
<member name="F:Loreline.Interpreter.Choice.Options">
<summary>
The available choice options.
</summary>
</member>
<member name="F:Loreline.Interpreter.Choice.Callback">
<summary>
Function to call with the index of the selected choice.
</summary>
</member>
<member name="T:Loreline.Interpreter.ChoiceHandler">
<summary>
Handler type for choice presentation with callback.
This is called when the script needs to present choices to the user.
</summary>
<param name="choice">A Choice structure containing all necessary information</param>
</member>
<member name="T:Loreline.Interpreter.CreateFields">
<summary>
A custom instanciator to create fields objects.
</summary>
<param name="interpreter">The interpreter related to this object creation</param>
<param name="type">The expected type of the object, if there is any known</param>
<param name="node">The associated node in the script, if any</param>
<returns></returns>
</member>
<member name="T:Loreline.Interpreter.Finish">
<summary>
Contains information about the script execution completion.
</summary>
</member>
<member name="F:Loreline.Interpreter.Finish.Interpreter">
<summary>
The interpreter instance.
</summary>
</member>
<member name="M:Loreline.Interpreter.InterpreterOptions.Default">
<summary>
Retrieve default interpreter options
</summary>
</member>
<member name="F:Loreline.Interpreter.InterpreterOptions.Functions">
<summary>
Optional map of additional functions to make available to the script
</summary>
</member>
<member name="F:Loreline.Interpreter.InterpreterOptions.StrictAccess">
<summary>
Tells whether access is strict or not. If set to true,
trying to read or write an undefined variable will throw an error.
</summary>
</member>
<member name="F:Loreline.Interpreter.InterpreterOptions.CustomCreateFields">
<summary>
A custom instantiator to create fields objects.
</summary>
</member>
<member name="F:Loreline.Interpreter.InterpreterOptions.Translations">
<summary>
Optional translations map for localization.
Built from a parsed translation file using Engine.ExtractTranslations().
</summary>
</member>
<member name="T:Loreline.Interpreter.FinishHandler">
<summary>
Handler type to be called when the execution finishes.
</summary>
<param name="finish">A Finish structure containing the interpreter instance</param>
</member>
<member name="F:Loreline.Interpreter.RuntimeInterpreter">
<summary>
The underlying runtime interpreter instance.
</summary>
</member>
<member name="M:Loreline.Interpreter.#ctor(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler)">
<summary>
Creates a new Loreline script interpreter.
</summary>
<param name="script">The parsed script to execute</param>
<param name="handleDialogue">Function to call when displaying dialogue text</param>
<param name="handleChoice">Function to call when presenting choices</param>
<param name="handleFinish">Function to call when execution finishes</param>
</member>
<member name="M:Loreline.Interpreter.#ctor(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,Loreline.Interpreter.InterpreterOptions)">
<summary>
Creates a new Loreline script interpreter.
</summary>
<param name="script">The parsed script to execute</param>
<param name="handleDialogue">Function to call when displaying dialogue text</param>
<param name="handleChoice">Function to call when presenting choices</param>
<param name="handleFinish">Function to call when execution finishes</param>
<param name="options">Additional options</param>
</member>
<member name="M:Loreline.Interpreter.Start(System.String)">
<summary>
Starts script execution from the beginning or a specific beat.
</summary>
<param name="beatName">Optional name of the beat to start from. If null, execution starts from
the first beat or a beat named "_" if it exists.</param>
<exception cref="T:Loreline.Runtime.RuntimeError">Thrown if the specified beat doesn't exist or if no beats are found in the script</exception>
</member>
<member name="M:Loreline.Interpreter.Save">
<summary>
Saves the current state of the interpreter.
This includes all state variables, character states, and execution stack,
allowing execution to be resumed later from the exact same point.
</summary>
<returns>A JSON string containing the serialized state</returns>
</member>
<member name="M:Loreline.Interpreter.Restore(System.String)">
<summary>
Restores the interpreter state from a previously saved state.
This allows resuming execution from a previously saved state.
</summary>
<param name="savedData">The JSON string containing the serialized state</param>
<exception cref="T:Loreline.Runtime.RuntimeError">Thrown if the save data version is incompatible</exception>
</member>
<member name="M:Loreline.Interpreter.Resume">
<summary>
Resumes execution after restoring state.
This should be called after Restore() to continue execution.
</summary>
</member>
<member name="M:Loreline.Interpreter.GetCharacter(System.String)">
<summary>
Gets a character by name.
</summary>
<param name="name">The name of the character to get</param>
<returns>The character's fields or null if the character doesn't exist</returns>
</member>
<member name="M:Loreline.Interpreter.GetCharacterField(System.String,System.String)">
<summary>
Gets a specific field of a character.
</summary>
<param name="character">The name of the character</param>
<param name="name">The name of the field to get</param>
<returns>The field value or null if the character or field doesn't exist</returns>
</member>
<member name="T:Loreline.Engine">
<summary>
The main public API for Loreline runtime.
Provides easy access to the core functionality for parsing and running Loreline scripts.
</summary>
</member>
<member name="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)">
<summary>
Parses the given text input and creates an executable <see cref="T:Loreline.Script"/> instance from it.
</summary>
<remarks>
This is the first step in working with a Loreline script. The returned
<see cref="T:Loreline.Script"/> object can then be passed to methods Play() or Resume().
</remarks>
<param name="input">The Loreline script content as a string (.lor format)</param>
<param name="filePath">(optional) The file path of the input being parsed. If provided, requires `handleFile` as well.</param>
<param name="handleFile">(optional) A file handler to read imports. If that handler is asynchronous, then `parse()` method will return null and `callback` argument should be used to get the final script</param>
<param name="callback">If provided, will be called with the resulting script as argument. Mostly useful when reading file imports asynchronously</param>
<returns>The parsed script as an AST <see cref="T:Loreline.Script"/> instance (if loaded synchronously)</returns>
<exception cref="T:Loreline.Runtime.Error">Thrown if the script contains syntax errors or other parsing issues</exception>
</member>
<member name="M:Loreline.Engine.Play(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,System.String)">
<summary>
Starts playing a Loreline script from the beginning or a specific beat.
</summary>
<remarks>
This function takes care of initializing the interpreter and starting execution
immediately. You'll need to provide handlers for dialogues, choices, and
script completion.
</remarks>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="handleDialogue">Function called when dialogue text should be displayed</param>
<param name="handleChoice">Function called when player needs to make a choice</param>
<param name="handleFinish">Function called when script execution completes</param>
<param name="beatName">Name of a specific beat to start from (defaults to first beat)</param>
<returns>The interpreter instance that is running the script</returns>
</member>
<member name="M:Loreline.Engine.Play(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,Loreline.Interpreter.InterpreterOptions)">
<summary>
Starts playing a Loreline script from the beginning or a specific beat.
</summary>
<remarks>
This function takes care of initializing the interpreter and starting execution
immediately. You'll need to provide handlers for dialogues, choices, and
script completion.
</remarks>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="handleDialogue">Function called when dialogue text should be displayed</param>
<param name="handleChoice">Function called when player needs to make a choice</param>
<param name="handleFinish">Function called when script execution completes</param>
<param name="options">Additional options</param>
<returns>The interpreter instance that is running the script</returns>
</member>
<member name="M:Loreline.Engine.Play(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,System.String,Loreline.Interpreter.InterpreterOptions)">
<summary>
Starts playing a Loreline script from the beginning or a specific beat.
</summary>
<remarks>
This function takes care of initializing the interpreter and starting execution
immediately. You'll need to provide handlers for dialogues, choices, and
script completion.
</remarks>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="handleDialogue">Function called when dialogue text should be displayed</param>
<param name="handleChoice">Function called when player needs to make a choice</param>
<param name="handleFinish">Function called when script execution completes</param>
<param name="beatName">Name of a specific beat to start from (defaults to first beat)</param>
<param name="options">Additional options</param>
<returns>The interpreter instance that is running the script</returns>
</member>
<member name="M:Loreline.Engine.Resume(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,System.String,System.String)">
<summary>
Resumes a previously saved Loreline script from its saved state.
</summary>
<remarks>
This allows you to continue a story from the exact point where it was saved,
restoring all state variables, choices, and player progress.
</remarks>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="handleDialogue">Function called when dialogue text should be displayed</param>
<param name="handleChoice">Function called when player needs to make a choice</param>
<param name="handleFinish">Function called when script execution completes</param>
<param name="saveData">The saved game data (typically from <see cref="M:Loreline.Interpreter.Save"/>)</param>
<param name="beatName">Optional beat name to override where to resume from</param>
<returns>The interpreter instance that is running the script</returns>
</member>
<member name="M:Loreline.Engine.Resume(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,System.String,Loreline.Interpreter.InterpreterOptions)">
<summary>
Resumes a previously saved Loreline script from its saved state.
</summary>
<remarks>
This allows you to continue a story from the exact point where it was saved,
restoring all state variables, choices, and player progress.
</remarks>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="handleDialogue">Function called when dialogue text should be displayed</param>
<param name="handleChoice">Function called when player needs to make a choice</param>
<param name="handleFinish">Function called when script execution completes</param>
<param name="saveData">The saved game data (typically from <see cref="M:Loreline.Interpreter.Save"/>)</param>
<param name="options">Additional options</param>
<returns>The interpreter instance that is running the script</returns>
</member>
<member name="M:Loreline.Engine.Resume(Loreline.Script,Loreline.Interpreter.DialogueHandler,Loreline.Interpreter.ChoiceHandler,Loreline.Interpreter.FinishHandler,System.String,System.String,Loreline.Interpreter.InterpreterOptions)">
<summary>
Resumes a previously saved Loreline script from its saved state.
</summary>
<remarks>
This allows you to continue a story from the exact point where it was saved,
restoring all state variables, choices, and player progress.
</remarks>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="handleDialogue">Function called when dialogue text should be displayed</param>
<param name="handleChoice">Function called when player needs to make a choice</param>
<param name="handleFinish">Function called when script execution completes</param>
<param name="saveData">The saved game data (typically from <see cref="M:Loreline.Interpreter.Save"/>)</param>
<param name="beatName">Optional beat name to override where to resume from</param>
<param name="options">Additional options</param>
<returns>The interpreter instance that is running the script</returns>
</member>
<member name="M:Loreline.Engine.ExtractTranslations(Loreline.Script)">
<summary>
Extracts translations from a parsed translation script.
</summary>
<remarks>
Given a translation file parsed with <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>, this returns a translations map
that can be passed as <see cref="F:Loreline.Interpreter.InterpreterOptions.Translations"/> to
Play() or Resume().
</remarks>
<param name="script">The parsed translation script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/> on a .XX.lor file)</param>
<returns>A translations object to pass as <see cref="F:Loreline.Interpreter.InterpreterOptions.Translations"/></returns>
</member>
<member name="M:Loreline.Engine.Print(Loreline.Script,System.String,System.String)">
<summary>
Prints a parsed script back into Loreline source code.
</summary>
<param name="script">The parsed script (result from <see cref="M:Loreline.Engine.Parse(System.String,System.String,Loreline.Engine.ImportsFileHandler,Loreline.Engine.ParseCallback)"/>)</param>
<param name="indent">The indentation string to use (defaults to two spaces)</param>
<param name="newline">The newline string to use (defaults to "\n")</param>
<returns>The printed source code as a string</returns>
</member>
<member name="T:Loreline.Node">
<summary>
Represents a node in a Loreline AST.
</summary>
</member>
<member name="F:Loreline.Node.RuntimeNode">
<summary>
The underlying runtime node instance.
</summary>
</member>
<member name="F:Loreline.Node.Type">
<summary>
The type of the node as string
</summary>
</member>
<member name="F:Loreline.Node.Id">
<summary>
The id of this node (should be unique within a single script hierarchy)
</summary>
</member>
<member name="M:Loreline.Node.ToJson(System.Boolean)">
<summary>
Converts the node to a JSON representation.
This can be used for debugging or serialization purposes.
</summary>
<param name="pretty">Whether to format the JSON with indentation and line breaks</param>
<returns>A JSON string representation of the node</returns>
</member>
<member name="T:Loreline.Script">
<summary>
Represents the root node of a Loreline script AST.
</summary>
</member>
<member name="F:Loreline.Script.RuntimeScript">
<summary>
The underlying runtime script instance.
</summary>
</member>
<member name="M:Loreline.Script.#ctor(Loreline.Runtime.Script)">
<summary>
Creates a new Script instance with the provided runtime script.
</summary>
<param name="runtimeScript">The parsed runtime script to wrap</param>
</member>
</members>
</doc>