Ticketing venue maps look simple until brokers, marketplaces, and inventory systems need to agree on the same section-row shape. A section might contain numeric rows, alphabetic rows, repeated-letter rows, row aliases, and physical gaps where neighboring sections own the skipped positions.
Mapi models that problem with a compact row progression DSL. The DSL stores a section as one string that can be parsed, validated, compressed, diffed, and indexed for automated review workflows.
A row progression code is a comma-delimited list of atomic row codes, ranges, gap ranges, and equivalent rows.
DD:AA,A:C,1:4,5!,6:10:2,12=12W,ZZZ
This expands to:
| Row | Position |
|---|---|
| DD | 1 |
| CC | 2 |
| BB | 3 |
| AA | 4 |
| A | 5 |
| B | 6 |
| C | 7 |
| 1 | 8 |
| 2 | 9 |
| 3 | 10 |
| 4 | 11 |
| 6 | 13 |
| 8 | 14 |
| 10 | 15 |
| 12 | 16 |
| 12W | 16 |
| ZZZ | 17 |
Position 12 is consumed by 5!, but no row named 5 is returned.
Atomic rows are single row names:
- Numeric:
1,2,12 - Repeated-letter families:
A,B,AA,BB,CCC - Mixed rows:
12W,A1,21WC
Mixed rows are valid as single rows and equivalent aliases, but they are not
rangeable because A1:B1 has no reliable venue-independent ordering.
Ranges are inclusive and can ascend or descend.
| Code | Rows |
|---|---|
1:4 |
1, 2, 3, 4 |
5:1 |
5, 4, 3, 2, 1 |
1:6:2 |
1, 3, 5 |
A:D |
A, B, C, D |
D:A |
D, C, B, A |
AA:DD |
AA, BB, CC, DD |
HHH:DDD |
HHH, GGG, FFF, EEE, DDD |
Repeated-letter ranges stay inside one family. AA:DD does not mean Excel-style
labels AA, AB, AC, AD; it means row labels AA, BB, CC, DD.
Equivalent rows use = and share one physical position.
1:2,3=3W
This returns 1 at position 1, 2 at position 2, and both 3 and 3W at
position 3.
Gap rows use !. They consume physical position while returning no row.
A,B!,C
This returns A at position 1 and C at position 3. Position 2 exists in the
section alignment but belongs somewhere else or is intentionally skipped.
Mapi rejects:
- Empty segments such as
A,,B - Mixed ranges such as
A1:B1 - Unequal repeated-letter families such as
A:AA - Zero or negative range steps
- Duplicate returned row names
Gaps do not create returned rows, so a gap label cannot collide with an actual row name.