Say the fence rule without overloading pin, and file the twice-drawn table

This commit is contained in:
2026-09-21 16:44:32 +02:00
committed by Lillem4n
parent 4d45e3ebdc
commit f7f4960755
4 changed files with 12 additions and 6 deletions
+2 -2
View File
@@ -19,8 +19,8 @@ replacement, and each removed path, column or flag.
table above it, a table whose format or cell references its own family, and, table above it, a table whose format or cell references its own family, and,
within one render and draw group, a path drawing a table another path selects a within one render and draw group, a path drawing a table another path selects a
row of, or two paths pinning different rows of one table. Two reads are held to one row of, or two paths pinning different rows of one table. Two reads are held to one
draw only where a render can pin both their rows: a path read pins a row's ancestors draw only where both their rows can render together: a path read pins a row's
with it, while a table read whole draws a row and pins none. ancestors with it, while a table read whole draws a row and pins none.
- `New` refuses a root choice of templates sharing one format and one set of string - `New` refuses a root choice of templates sharing one format and one set of string
fields, naming the rows TSV to write instead. fields, naming the rows TSV to write instead.
- `misc.territory`, `misc.currency`, `misc.language`, `misc.httpstatus` and - `misc.territory`, `misc.currency`, `misc.language`, `misc.httpstatus` and
+2 -2
View File
@@ -1141,8 +1141,8 @@ the Development section below, and who ships a register the four above then draw
row and a cell in another never meet, and each may select its own row of another row and a cell in another never meet, and each may select its own row of another
table; the cells of one row, and whatever they reach, do meet, and so does the table; the cells of one row, and whatever they reach, do meet, and so does the
format beside them. The rule the fence applies is that two reads meet unless they format beside them. The rule the fence applies is that two reads meet unless they
sit in two rows of one table, or in rows no render pins at once: a path read pins a sit in two rows of one table, or in rows that never render together: a path read
row's ancestors with it, while a table read whole draws a row and pins none. A pins a row's ancestors with it, while a table read whole draws a row and pins none. A
choice's items get no such treatment yet: two items selecting different rows choice's items get no such treatment yet: two items selecting different rows
are still refused. are still refused.
- **A table never reaches its own family, by any route.** A `repeat` iteration and a - **A table never reaches its own family, by any route.** A `repeat` iteration and a
+4 -2
View File
@@ -297,7 +297,7 @@ type drawAt struct {
group string group string
route drawRoute route drawRoute
alt rowSet alt rowSet
drawn *table drawn *table // only that table's own cells read it, which the own-family fence is what keeps true, so the visit keys leave it out
} }
// rowSet is the rows a walk entered, one per table: only one row of a table renders, so reads in // rowSet is the rows a walk entered, one per table: only one row of a table renders, so reads in
@@ -404,7 +404,9 @@ func (w *drawWalk) walk(n node, at drawAt) {
if at.alt.excludes(cell) { if at.alt.excludes(cell) {
continue continue
} }
w.edge(n, e, drawAt{at.group, at.route, at.alt.enter(cell.cellOf, cell.cellRow, cell.cellOf != at.drawn), at.drawn}) in := at
in.alt = at.alt.enter(cell.cellOf, cell.cellRow, cell.cellOf != at.drawn)
w.edge(n, e, in)
continue continue
} }
w.edge(n, e, at) w.edge(n, e, at)
+4
View File
@@ -153,6 +153,10 @@ by a `data-import/` script, as README goal 12 asks.
### Library and CLI ### Library and CLI
- Hold two whole reads of one table to one row, or refuse the pair: `{/region}|{/region}`
draws a row for each read, so cells of two rows render together while the fence counts
them alternatives and compares neither — a bare `{/addr}` in one row beside
`{/addr.city}` in another is the overlap it refuses everywhere else.
- Name a spelling that works when a row selector misses: `misc.protocol[tcp]`, - Name a spelling that works when a row selector misses: `misc.protocol[tcp]`,
`misc.httpmethod[get]` and `misc.territory[se]` all answer "no row … has key or name" `misc.httpmethod[get]` and `misc.territory[se]` all answer "no row … has key or name"
and stop there, where a case-insensitive match could name the row that exists, and a and stop there, where a case-insensitive match could name the row that exists, and a