WesnothMarkupLanguage 2.0.0
See the version list below for details.
dotnet add package WesnothMarkupLanguage --version 2.0.0
NuGet\Install-Package WesnothMarkupLanguage -Version 2.0.0
<PackageReference Include="WesnothMarkupLanguage" Version="2.0.0" />
<PackageVersion Include="WesnothMarkupLanguage" Version="2.0.0" />
<PackageReference Include="WesnothMarkupLanguage" />
paket add WesnothMarkupLanguage --version 2.0.0
#r "nuget: WesnothMarkupLanguage, 2.0.0"
#:package WesnothMarkupLanguage@2.0.0
#addin nuget:?package=WesnothMarkupLanguage&version=2.0.0
#tool nuget:?package=WesnothMarkupLanguage&version=2.0.0
WesnothMarkupLanguage
A .NET Standard 2.0 library for reading, writing, preprocessing, and mapping Battle for Wesnoth WML configuration files.
Version 2 is a breaking redesign targeting Wesnoth 1.18.7 behavior.
Parse and edit WML
var tree = WmlParser.Parse(File.ReadAllText("unit.cfg"), "unit.cfg");
var units = tree.Document.FindTags("unit_type");
// An unchanged syntax tree round-trips byte-for-byte.
string unchanged = WmlWriter.Write(tree, WmlWriteMode.Lossless);
// Semantic documents can be emitted in a stable canonical style.
string canonical = WmlWriter.Write(tree.Document);
The parser understands nested and amended tags, top-level and multiple attributes, quoted/translatable/raw multiline values, concatenation, variables, formulas, comments, directives, and macro calls. Diagnostics carry source spans and parsing recovers where possible.
Map C# objects
[WmlTag("unit_type")]
public sealed class UnitType
{
[WmlAttribute("id")] public string Id { get; set; }
[WmlAttribute("cost")] public int Cost { get; set; }
[WmlChild("attack")] public List<Attack> Attacks { get; set; }
}
UnitType unit = WmlSerializer.Deserialize<UnitType>(tree.Document);
WmlDocument document = WmlSerializer.Serialize(unit);
[WmlExtensionData] can retain attributes that are not represented by declared properties.
Preprocess safely
var options = new WmlPreprocessorOptions
{
SourceResolver = new FileSystemWmlSourceResolver(addOnRoot, wesnothCoreRoot)
};
options.Defines["HARD"] = "";
WmlPreprocessorResult result = await WmlPreprocessor.ProcessAsync(source, options, fileName);
Filesystem includes are restricted to explicit roots and reparse points are rejected by default. Wesnoth core data is not bundled; add its data/core directory as an allowed root when core macro definitions are required.
Status
Version 2 includes the lossless parser, semantic DOM, canonical writer, POCO serializer, source diagnostics, root-sandboxed resolver, macro expansion, includes, common directives, conditionals, version checks, cycle detection, and resource limits.
Test an installed Wesnoth campaign
The integration tests can deserialize campaign metadata directly from an installed copy of Wesnoth. Set WESNOTH_INSTALLATION_PATH to the game directory; the current fixture validates the main Heir_To_The_Throne campaign.
$env:WESNOTH_INSTALLATION_PATH = 'I:\SteamLibrary\steamapps\common\wesnoth'
dotnet test --filter 'Category=InstalledGameIntegration'
For persistent local configuration, create the ignored file WesnothMarkupLanguage.Test/.env:
WESNOTH_INSTALLATION_PATH=I:\SteamLibrary\steamapps\common\wesnoth
WESNOTH_1_18_7_EXECUTABLE=I:\SteamLibrary\steamapps\common\wesnoth\wesnoth.exe
Values already supplied by the shell or CI take precedence over .env values.
When the installation variable is absent, installed-game integration tests are inert so ordinary builds and pull requests do not depend on a local game installation.
Licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.