aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/combinator.bqn54
-rw-r--r--docs/style.css8
-rw-r--r--svg.bqn6
3 files changed, 68 insertions, 0 deletions
diff --git a/doc/combinator.bqn b/doc/combinator.bqn
new file mode 100644
index 00000000..9d060d08
--- /dev/null
+++ b/doc/combinator.bqn
@@ -0,0 +1,54 @@
+Text ← "text" Attr "dy"‿"0.32em"∾⊢
+
+ops ← ⍎∘⥊¨ spel ← "⊸⟜˜∘○˙"
+m2 ← ∾˜1‿1‿0
+_symb ← {𝕗<⊸∾≍○<}
+lrand ← 5‿1/⟨"𝔽"_symb,"𝕗"⟩
+lrsp ← 5‿1/"𝔽"‿"𝕗"
+names ← (¬×+`)⊸-∘=⟜' '⊸⊔ "Before After Self/Swap Atop Over Constant"
+
+w‿h ← 280‿260
+Pnt ← 32‿57×⌽
+
+app ← m2 {o←𝕩⊑ops⋄𝕨◶{𝕩_o}‿{𝕩_o_("𝔾"_symb)}𝕩⊑lrand}¨ ↕≠ops
+res ← >{⟨𝕏"𝕩","𝕨"𝕏"𝕩"⟩}¨app
+map ← ⟨⟩⊸{(1<≡)◶(≍(𝕨∾0)≍○<⊢)‿((𝕨≍○<⊑)∾⟜∾·𝕊¨˜⟜(𝕨⊸∾¨((2×↕)- -⟜1)∘≠)1↓⊢)𝕩}¨res
+path‿name ← <˘⍉⁼><˘∘⍉¨map
+
+notBase ← (1<≠)◶⟨1,0≠¯1⊸⊑⟩¨¨ path
+path ↓¨¨˜↩ -¬notBase
+FromPath ← ≠≍+´
+vv ← (1↓⌽↓"𝕨"‿"𝕩") ∾˜¨⎉1 notBase /¨ name
+vl ← (2 ≍⚇0 ⟨0⟩‿⟨¯1,1⟩) ∾˜¨⎉1 notBase FromPath¨∘/¨ path
+vp ← Pnt¨¨ vl
+
+ps ← >⟨"class"‿"yellow","style"‿"fill:none","stroke-width"‿"2"⟩
+Connect ← {
+ e ← FromPath ¯1↓𝕨
+ curve ← ⟨1‿1.3, 1‿1.25‿0.9‿1, 0.5‿1.25‿1‿0⟩
+ c ← 𝕨 ((1=≠)⊸∧⟜(2=⊑))◶⟨⟩‿(⊑⊸((⊣(⊢×≢∘⊢⥊1∾⊣)curve⊑˜×)○×)⟜(1⊸⊑)) 𝕩
+ "path" Elt ps∾⟨"d",∾("M"∾(2÷˜≠c)⊏"LQC")∾⟜(Fmt Pnt˘⌾(∘‿2⊸⥊))¨e‿(c∾𝕩)⟩
+}
+
+label ← ⍉ ""‿"𝕨 " ∾⌜ ∾⟜" 𝕩"¨ lrsp∾¨spel∾⟜(/⟜"𝔾")¨m2
+
+_trans ← {(𝕗∾" transform='translate(")∾(⊣∾","∾⊢)○FmtNum∾")'"˙}
+g ← (20+h×↕2) "g font-size='20px' text-anchor='middle'"_trans˜⌜ (5+w×0.5+↕3)
+
+rc ← >⟨"class"‿"code","stroke-width"‿"1","rx"‿"12"⟩
+rc ∾↩ (Pos⟨¯0.43×w,1⟩)∾"width"‿"height"≍˘FmtNum¨⟨0.86×w,h-55⟩
+cc ← >⟨"r"‿"12","class"‿"code","stroke-width"‿"0"⟩
+n ← Text∘‿2⥊⟨"y",FmtNum h-37, "fill","currentColor"⟩
+case ← (¯1‿1×w÷4.6) "g font-size='21px' font-family='monospace'"_trans¨ 25
+lt← Text∘‿2⥊⟨"y",FmtNum h-105, "font-size","19px"⟩
+
+(0‿0∾10+3‿2×w‿h) SVG g Enc¨ ⌽ <⎉1⍉>2‿3⊸⥊¨⟨
+ < "rect" Elt rc
+ n⊸Enc¨ names
+ (< case Enc¨ ⊢)⎉1 ∾¨´ ⟨
+ (<lt Enc Highlight)¨ label
+ path Connect¨¨⟜(vl⊏¨˜vv(⊐⌈≠∘⊣|⊒)¨⊢)○((0<≠¨¨path)/¨⊢) name
+ ("circle" Elt cc∾⟨"cx","cy"⟩≍˘FmtNum¨)¨¨ vp
+ vp Text∘Pos⊸Enc⟜Highlight¨¨ vv
+ ⟩
+⟩
diff --git a/docs/style.css b/docs/style.css
index 1f1e9fa0..47d82314 100644
--- a/docs/style.css
+++ b/docs/style.css
@@ -50,6 +50,10 @@ pre, code, textarea, .kb {
border: 1px solid #bdcac4;
letter-spacing: 0.2;
}
+.code {
+ fill: #e3e7e7;
+ stroke: #bdcac4;
+}
code {
padding: 0.15em 0.1em 0.05em;
white-space: nowrap;
@@ -119,6 +123,7 @@ a:visited { color: #3d155f; }
input { border-color: #0c0d0e; }
textarea, pre, code { color: #969698; background-color: #0c0d0e; }
textarea, pre, code, .kb { border-color: #040509; }
+ .code { fill: #0c0d0e; stroke: #040509; }
code { border-color: #0c0d0e; background-color: #0f1011; }
table td, th{ border-color: #636967; }
table th { border-color: #88918c; background-color: #292a2b; }
@@ -144,6 +149,9 @@ a:visited { color: #3d155f; }
a:visited { color: #8781c1; }
}
+svg tspan {
+ fill: currentColor;
+}
.purple { fill:#d6afe0; stroke:#3d1b46; } text.purple { fill:#3b1346; stroke:none; }
.bluegreen { fill:#55cbcb; stroke:#1c4e4e; } text.bluegreen { fill:#113939; stroke:none; }
.yellow { fill:#e2d17f; stroke:#a28237; } text.yellow { fill:#7a5a0e; stroke:none; }
diff --git a/svg.bqn b/svg.bqn
index 69441d66..ae7b12de 100644
--- a/svg.bqn
+++ b/svg.bqn
@@ -1,5 +1,11 @@
# Utilities for creating SVG diagrams as strings
+# Snag the code highlighter from md.bqn
+Highlight ← {
+ AddT ← (↑∾"t"∾↓)¨˜⟜(1‿2⥊˜≢) # span to tspan
+ (1¨ <⊸∾ ·AddT⌾⊑GetHighlights)⊸Modify 𝕩
+}
+
IsLines ← 1<≡
DeNest ← {(3⌊≡)◶⟨!∘0,⥊<,⊢,∾𝕊¨⟩ ⥊𝕩}
Indent ← " "⊸∾¨ DeNest