wardley-map.fbl
fbl0.120.12wardley-map.fbl
Example document wardley-map.fbl
Views generated from the file
This view is drawn by this site from wardley-map.fbl itself. It shows the data in the document, not the notation the diagram draws.
wardley-map.fbl at 52bec21Diagram as text (Mermaid)
flowchart LR
accTitle: Bindings of wardley-map.fbl
accDescr: Flowchart of the bindings in wardley-map.fbl: 1 binding(s) (map) as boxes with the files they claim and their body's format family, and 19 element rule(s) and 0 relation rule(s) as rounded boxes with the type each produces.
b_map["Online Wardley Maps text<br/>map<br/>.owm .wm, grammar family"]
e_map_title("title<br/>Title")
b_map -->|element| e_map_title
e_map_style("style<br/>Style")
b_map -->|element| e_map_style
e_map_size("size<br/>Size")
b_map -->|element| e_map_size
e_map_component("component<br/>Component")
b_map -->|element| e_map_component
e_map_anchor("anchor<br/>Anchor")
b_map -->|element| e_map_anchor
e_map_submap("submap<br/>Submap")
b_map -->|element| e_map_submap
e_map_url("url<br/>Url")
b_map -->|element| e_map_url
e_map_evolve("evolve<br/>Evolve")
b_map -->|element| e_map_evolve
e_map_pipeline("pipeline<br/>Pipeline")
b_map -->|element| e_map_pipeline
e_map_legacyPipeline("legacyPipeline<br/>LegacyPipeline")
b_map -->|element| e_map_legacyPipeline
e_map_pipelineComponent("pipelineComponent<br/>PipelineComponent")
b_map -->|element| e_map_pipelineComponent
e_map_note("note<br/>Note")
b_map -->|element| e_map_note
e_map_annotation("annotation<br/>Annotation")
b_map -->|element| e_map_annotation
e_map_annotations("annotations<br/>AnnotationsPosition")
b_map -->|element| e_map_annotations
e_map_accelerator("accelerator<br/>Accelerator")
b_map -->|element| e_map_accelerator
e_map_deaccelerator("deaccelerator<br/>Accelerator")
b_map -->|element| e_map_deaccelerator
e_map_attitude("attitude<br/>Attitude")
b_map -->|element| e_map_attitude
e_map_dependency("dependency<br/>Dependency")
b_map -->|element| e_map_dependency
e_map_flow("flow<br/>Flow")
b_map -->|element| e_map_flowThe file
Download wardley-map.fbl (23,913 bytes, unchanged from the source).
{
"$schema": "https://etalii.net/adp/fbl/schema/0.1/fbl.schema.json#/$defs/Document",
"fbl": "0.12",
"doc": "The Wardley map's .owm, the text of Online Wardley Maps, bound in the grammar family (FBL 0.12): a pipeline whose { stands on the line below it, a component's segments in any order, an annotation's positions as structured items, and ids by kind and natural key with an ordinal for each later holder of one key, read from the legacy identities file the standalone tool writes. Built from etalii.adp.ide.standalone's WardleyMapParser and WardleyIdentityKeys at ad1a4680a; definitions/diagrams/wardley-map.md records what it does not read.",
"bindings": {
"map": {
"title": "Online Wardley Maps text",
"doc": "The .owm text of the Wardley map, read by the grammar family with wardley-map.lark beside this document (FBL 0.12). Ids are never written in the body: each element is known by its kind and natural key, as the tool keys it (WardleyIdentityKeys), and its id is kept beside the body, in the registration's identities: block or in the legacy {base}.identities.json the tool writes. The statements the tool keeps without modelling them, and a line no statement reads, are text no rule maps, kept byte for byte.",
"claims": {
"extensions": [
".owm",
".wm"
],
"origins": [
"wardley/map"
]
},
"body": {
"kind": "file",
"family": "grammar",
"grammar": {
"file": "wardley-map.lark"
},
"recover": {
"unit": "unit",
"sync": [
"_NL"
],
"nested": {
"open": "OPEN",
"close": "CLOSE"
}
}
},
"reader": "declared",
"text": {
"newline": "lf",
"indent": 2,
"finalNewline": true
},
"elements": [
{
"name": "title",
"type": "Title",
"doc": "The map's title; of two, each is read, and the tool shows the second.",
"at": "/title",
"attributes": {
"title": {
"node": "text",
"empty": "keep"
}
}
},
{
"name": "style",
"type": "Style",
"at": "/style",
"readOnly": true,
"attributes": {
"style": {
"node": "text"
}
}
},
{
"name": "size",
"type": "Size",
"at": "/size",
"readOnly": true,
"attributes": {
"width": {
"node": "width",
"number": "shortest"
},
"height": {
"node": "height",
"number": "shortest"
}
}
},
{
"name": "component",
"type": "Component",
"doc": "A component; its segments after the coordinates stand in any order (section 4.9).",
"at": "/component",
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "component",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"name": {
"node": "name",
"empty": "refuse"
},
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
},
"coordinates": {
"node": "coords",
"readOnly": true
},
"labelOffset": {
"node": "label",
"match": "[Ll][Aa][Bb][Ee][Ll][ \\t]*\\[[ \\t]*(?<value>[^\\]]*[^ \\t\\]])[ \\t]*\\]",
"empty": "remove",
"create": {
"emit": " label [{value}]",
"after": [
"coordinates"
]
}
},
"decorators": {
"node": "decorator",
"match": "\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
"empty": "remove",
"create": {
"emit": " ({value})",
"after": [
"coordinates"
]
}
},
"inertia": {
"node": "inertia",
"map": {
"inertia": "true",
"": "false"
},
"default": "false",
"empty": "remove",
"create": {
"emit": " {value}",
"after": [
"coordinates"
]
}
},
"url": {
"node": "url_ref",
"match": "[Uu][Rr][Ll][ \\t]*\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
"readOnly": true
}
},
"insert": {
"place": "end-of-document",
"emit": "component {name} [{visibility}, {maturity}]"
},
"remove": {
"cascade": [
"dependency",
"flow",
"evolve"
]
}
},
{
"name": "anchor",
"type": "Anchor",
"doc": "An anchor, keyed in the components' key space, as the tool keys it.",
"at": "/anchor",
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "component",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"name": {
"node": "name",
"empty": "refuse"
},
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
},
"coordinates": {
"node": "coords",
"readOnly": true
},
"labelOffset": {
"node": "label",
"match": "[Ll][Aa][Bb][Ee][Ll][ \\t]*\\[[ \\t]*(?<value>[^\\]]*[^ \\t\\]])[ \\t]*\\]",
"empty": "remove",
"create": {
"emit": " label [{value}]",
"after": [
"coordinates"
]
}
},
"decorators": {
"node": "decorator",
"match": "\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
"empty": "remove",
"create": {
"emit": " ({value})",
"after": [
"coordinates"
]
}
},
"inertia": {
"node": "inertia",
"map": {
"inertia": "true",
"": "false"
},
"default": "false",
"empty": "remove",
"create": {
"emit": " {value}",
"after": [
"coordinates"
]
}
},
"url": {
"node": "url_ref",
"match": "[Uu][Rr][Ll][ \\t]*\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
"readOnly": true
}
},
"insert": {
"place": "end-of-document",
"emit": "anchor {name} [{visibility}, {maturity}]"
},
"remove": {
"cascade": [
"dependency",
"flow",
"evolve"
]
}
},
{
"name": "submap",
"type": "Submap",
"doc": "A submap, keyed in the components' key space, as the tool keys it.",
"at": "/submap",
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "component",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"name": {
"node": "name",
"empty": "refuse"
},
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
},
"coordinates": {
"node": "coords",
"readOnly": true
},
"labelOffset": {
"node": "label",
"match": "[Ll][Aa][Bb][Ee][Ll][ \\t]*\\[[ \\t]*(?<value>[^\\]]*[^ \\t\\]])[ \\t]*\\]",
"empty": "remove",
"create": {
"emit": " label [{value}]",
"after": [
"coordinates"
]
}
},
"decorators": {
"node": "decorator",
"match": "\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
"empty": "remove",
"create": {
"emit": " ({value})",
"after": [
"coordinates"
]
}
},
"inertia": {
"node": "inertia",
"map": {
"inertia": "true",
"": "false"
},
"default": "false",
"empty": "remove",
"create": {
"emit": " {value}",
"after": [
"coordinates"
]
}
},
"url": {
"node": "url_ref",
"match": "[Uu][Rr][Ll][ \\t]*\\([ \\t]*(?<value>[^ \\t)]+)[ \\t]*\\)",
"readOnly": true
}
},
"insert": {
"place": "end-of-document",
"emit": "submap {name} [{visibility}, {maturity}]"
},
"remove": {
"cascade": [
"dependency",
"flow",
"evolve"
]
}
},
{
"name": "url",
"type": "Url",
"at": "/url",
"readOnly": true,
"attributes": {
"name": {
"node": "url_name"
},
"address": {
"node": "address"
}
}
},
{
"name": "evolve",
"type": "Evolve",
"doc": "An evolution has no identity kind in the tool, so it has no stored id and takes the one DISL derives.",
"at": "/evolve",
"attributes": {
"component": {
"node": "evolved",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
},
"empty": "refuse"
},
"becomes": {
"node": "becomes",
"match": "->[ \\t]*(?<value>.*)",
"empty": "remove",
"create": {
"emit": "->{value}",
"after": [
"component"
]
}
},
"maturity": {
"node": "maturity",
"number": {
"decimals": 4
}
}
},
"insert": {
"place": "end-of-document",
"emit": "evolve {component}[->{becomes}] {maturity}"
},
"remove": {}
},
{
"name": "pipeline",
"type": "Pipeline",
"doc": "The nested form, whose { may stand on the line below it; a first component added to a pipeline without a block writes its block with the brace on its own line, as the tool does.",
"at": "/pipeline",
"opens": {
"open": "\n{",
"close": "}"
},
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "pipeline",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"component": {
"node": "name",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
},
"empty": "refuse"
}
},
"insert": {
"place": "end-of-document",
"emit": "pipeline {component}\n{\n}"
},
"remove": {}
},
{
"name": "legacyPipeline",
"type": "LegacyPipeline",
"doc": "The older form, two numbers on the statement's line; read, never written.",
"at": "/legacy_pipeline",
"readOnly": true,
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "pipeline",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"component": {
"node": "name",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
}
}
}
},
{
"name": "pipelineComponent",
"type": "PipelineComponent",
"at": "/pipeline/pipeline_component",
"parent": {
"rules": [
"pipeline"
],
"slot": "components"
},
"id": {
"sidecar": {
"key": "parent.children[0].text + '\\u001f' + entry.children[0].text",
"kind": "pipeline-child",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"name": {
"node": "name",
"empty": "refuse"
},
"maturity": {
"node": "maturity",
"number": {
"decimals": 4
}
}
},
"insert": {
"place": "last-child",
"emit": "component {name} [{maturity}]"
},
"remove": {}
},
{
"name": "note",
"type": "Note",
"at": "/note",
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "note",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"text": {
"node": "note_text",
"empty": "refuse"
},
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
}
},
"insert": {
"place": "end-of-document",
"emit": "note {text} [{visibility}, {maturity}]"
},
"remove": {}
},
{
"name": "annotation",
"type": "Annotation",
"doc": "A numbered annotation pinned at one position or more; the positions are one list of structured values (section 5.2).",
"at": "/annotation",
"id": {
"sidecar": {
"key": "entry.children[0].text",
"kind": "annotation",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"number": {
"node": "number",
"readOnly": true
},
"positions": {
"node": "positions/position",
"items": {
"visibility": {
"node": "visibility"
},
"maturity": {
"node": "maturity"
}
},
"separator": ",",
"create": {
"emit": "[{visibility},{maturity}]"
}
},
"text": {
"node": "text",
"empty": "remove",
"create": {
"emit": " {value}",
"after": [
"positions"
]
}
}
},
"insert": {
"place": "end-of-document",
"emit": "annotation {number} [{positions}][ {text}]"
},
"remove": {}
},
{
"name": "annotations",
"type": "AnnotationsPosition",
"at": "/annotations",
"readOnly": true,
"attributes": {
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
}
}
},
{
"name": "accelerator",
"type": "Accelerator",
"at": "/accelerator",
"id": {
"sidecar": {
"key": "entry.children[0].text + '\\u001fac'",
"kind": "accelerator",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"name": {
"node": "name",
"empty": "refuse"
},
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
},
"deaccelerator": {
"value": "false"
}
},
"insert": {
"place": "end-of-document",
"emit": "accelerator {name} [{visibility}, {maturity}]"
},
"remove": {}
},
{
"name": "deaccelerator",
"type": "Accelerator",
"at": "/deaccelerator",
"id": {
"sidecar": {
"key": "entry.children[0].text + '\\u001fde'",
"kind": "accelerator",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"name": {
"node": "name",
"empty": "refuse"
},
"visibility": {
"node": "coords/visibility",
"number": {
"decimals": 4
}
},
"maturity": {
"node": "coords/maturity",
"number": {
"decimals": 4
}
},
"deaccelerator": {
"value": "true"
}
},
"insert": {
"place": "end-of-document",
"emit": "deaccelerator {name} [{visibility}, {maturity}]"
},
"remove": {}
},
{
"name": "attitude",
"type": "Attitude",
"at": "/attitude",
"id": {
"sidecar": {
"key": "(entry.children[0].text.lowerAscii() == 'pioneers' ? 'Pioneers' : entry.children[0].text.lowerAscii() == 'settlers' ? 'Settlers' : 'TownPlanners') + '\\u001f' + string(double(entry.children[1].text)) + '\\u001f' + string(double(entry.children[2].text))",
"kind": "attitude",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"attitude": {
"node": "ATTITUDE",
"readOnly": true
},
"visibility1": {
"node": "visibility",
"number": {
"decimals": 4
}
},
"maturity1": {
"node": "maturity",
"number": {
"decimals": 4
}
},
"visibility2": {
"node": "visibility2",
"number": {
"decimals": 4
}
},
"maturity2": {
"node": "maturity2",
"number": {
"decimals": 4
}
}
},
"remove": {}
},
{
"name": "dependency",
"type": "Dependency",
"at": "/dependency",
"id": {
"sidecar": {
"key": "entry.children[0].text + '\\u001f' + entry.children[1].text + '\\u001fDependency'",
"kind": "link",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"from": {
"node": "source",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
},
"empty": "refuse"
},
"to": {
"node": "target",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
},
"empty": "refuse"
},
"context": {
"node": "context",
"match": ";[ \\t]*(?<value>.*)",
"empty": "remove",
"create": {
"emit": "; {value}",
"after": [
"to"
]
}
}
},
"insert": {
"place": "end-of-document",
"emit": "{from}->{to}[; {context}]"
},
"remove": {}
},
{
"name": "flow",
"type": "Flow",
"at": "/flow",
"id": {
"sidecar": {
"key": "entry.children[0].text + '\\u001f' + entry.children[1].text + '\\u001fFlow'",
"kind": "link",
"ordinal": "\u001f{n}\t"
}
},
"attributes": {
"from": {
"node": "source",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
},
"empty": "refuse"
},
"to": {
"node": "target",
"reference": {
"to": [
"component",
"anchor",
"submap"
],
"by": "name"
},
"empty": "refuse"
},
"context": {
"node": "context",
"match": ";[ \\t]*(?<value>.*)",
"empty": "remove",
"create": {
"emit": "; {value}",
"after": [
"to"
]
}
}
},
"insert": {
"place": "end-of-document",
"emit": "{from}+>{to}[; {context}]"
},
"remove": {}
}
],
"registration": {
"createOnFirstPlacement": false,
"legacyIdentities": "{base}.identities.json"
},
"template": {
"text": "title {base}\n"
}
}
}
}In an IDE
No IDE host runs this example yet.