aboutsummaryrefslogtreecommitdiff
path: root/svg.bqn
blob: be859fecebc250a292276bd44563c183cd7112ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Utilities for creating SVG diagrams as strings

# Snag the code highlighter from md.bqn
Highlight  {
  AddT  (↑∾"t"∾↓)¨˜(12˜)(𝕨1)  # span to tspan
  (1¨ < ·AddT⊑GetHighlights)Modify 𝕩
}

# Create a node from a tag name and interior text.
Enc  {
  DeNest  {(3⌊≡)!0,⥊<,,∾𝕊¨ 𝕩}
  open  "<",𝕨,">"
  close "</", (`𝕨' ')/𝕨, ">"
  l  1 < d𝕩
   open ({"  "¨(∾DeNest¨)(3d)𝕩}l 𝕩){𝕨𝕗𝕩}(<l) close
}
Void  {"<",𝕩,"/>"}

FmtNums  {
  ! ´ (¯∞<  <) 𝕩
  k3˜b10
  mp"-."-'0'
  s𝕩<0a|𝕩v0.5+k×a
  ('0'+)´<˘⍉∾
    ≍≍<(m¨)/s
    {fb𝕩(´f),𝕊(⌊÷b)(f/)´b|(⊑⌽)𝕨𝕩}v÷k
    p¨(⊑⌽)(0<≠){f×𝕩k|𝕩𝕨(´f)02,(<(⌊÷k)∾𝕊)(b×)(f/)𝕩}v
  
}
FmtNum  (2⌊≡)(⊑FmtNums)(FmtNums){𝕩!0}
Fmt  (2⌊≡)FmtNum(1·' '¨FmtNum){𝕩!0}

At1  " "  {𝕨,"='",𝕩,"'"}´
Attr  ( <At11)
At  {
  _s  {((+`׬)-𝕗=)}
  𝕨 >((∾At1¨)) '='_s¨ '|'_s 𝕩
}
Pos  "x","y" ˘ FmtNum
Elt  VoidAttr

SVG  {
  ("svg" Attr "viewBox",Fmt 𝕨) Enc 𝕩
}