This is great. Here’s a slight tweak ensuring the correct use of the rev
mark property, and using the tip/tail-origin/end
properties to make the alignments look right:
#import "@preview/fletcher:0.5.7" as fletcher: diagram, node, edge
#fletcher.MARKS.update(m => {
import fletcher.cetz.draw
m + (
"]": (
rev: false,
size: 6,
depth: 3,
draw: mark => draw.line(
(-mark.depth, mark.size),
(0, mark.size),
(0, -mark.size),
(-mark.depth, -mark.size),
fill: none,
),
tail-origin: mark => -mark.depth,
),
"[": (inherit: "]", rev: true),
")": (
rev: false,
size: 8,
angle: 50deg,
draw: mark => draw.arc(
(0, 0),
start: -mark.angle,
stop: mark.angle,
radius: mark.size,
fill: none,
anchor: "origin",
),
tail-end: mark => mark.size,
tip-end: mark => mark.size,
tip-origin: mark => mark.size,
tail-origin: mark => mark.size*calc.cos(mark.angle),
),
"(": (inherit: ")", rev: true),
)
})
#diagram(spacing: (20mm, 5mm), $
a edge("[-]") & b edge("(-)") & c \
a edge("]-[") & b edge(")-(") & c \
$)
#table(
columns: 2,
fletcher.mark-debug("("),
fletcher.mark-demo("("),
fletcher.mark-debug("["),
fletcher.mark-demo("["),
)