wmap-parser-swift
A parser for wmap formatted Wardley Map files built in Swift.
Features
- No dependencies.
- Free software.
- Reasonably fast.
Installation
Add it to your project using Swift Package Manager by adding the following to your Package.swift:
dependencies: [
.package(url: "https://git.sr.ht/~rbdr/wmap-parser-swift", from: "1.0.0")
]
Or add it directly in Xcode using File > Add Packages...
Usage
import WmapParser
let wmapSource = """
[I] 0.25
[II] 0.5
[III] 0.75
[IV] 1.0
Tea (0.9, 0.5) [Circle]
Cup (0.8, 0.4)
Hot Water (0.6, 0.2)
Tea -> Cup
Cup -> Hot Water
[Note] (0.5, 0.5) Supply chain for tea
[Group] Tea, Cup
[Inertia] Cup
[Evolution] Tea + 0.1
"""
let map = parse(wmapSource)
print(map.components)
// [
// Component(label: "Tea", coordinates: (0.9, 0.5), shape: .circle),
// Component(label: "Cup", coordinates: (0.8, 0.4), shape: .circle),
// ...
// ]
print(map.dependencies)
// [
// Dependency(from: "Tea", to: "Cup", isDirected: true),
// ...
// ]
API
parse(_ source: String) -> Map
Parses a wmap formatted string and returns a Map object.
Parameters:
source(String): The wmap source code to parse
Returns:
Map: A Map struct containing the parsed components, dependencies, notes, stages, groups, inertias, and evolutions
Format Specification
See The map website for more information on the format.
Reasonably Fast
Benchmarked on an M1 Pro mac. A map with around 120 entities parses in 14µs. While a larger map with slightly under 2000 entities does so in 230µs.
You can run the benchmarks by using:
make benchmark
Development
This project uses a Makefile to run all commands. This is to keep the commands uniform with the other wmap-parser projects.
Running Tests
make test
Or to see coverage
make coverage
See Also
- wmap specification - Formal grammar
- wmap specification - Javascript wmap-parser
- wmap specification - ANSI C wmap-parser
- wmap specification - Rust wmap-parser
- Wardley Maps - Learn about Wardley Mapping