aboutsummaryrefslogtreecommitdiff
path: root/src/e.bqn
blob: dd7d8dd3a00bd2af561d250e0138a7797fc3189d (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Expression explainer: generates an svg diagram to show how a BQN
# program is evaluated

wh  10.7524
pad wh×21
to  1+wh÷23
t   10

ps  At "stroke=currentColor|fill=none|stroke-width=1"
rc  At "class=code|stroke-width=1|rx=10"
gr  "g" At "font-family=BQN,monospace|font-size=18px|class=Paren|fill=currentColor"
gt  "g" At "font-size=15px|text-anchor=middle"
gb  "g" At "class=codeCover|stroke-width=8|stroke-linejoin=round"
gf  "g" At "opacity=0.9"
Shadow  {
  p  ("text" Attr ·Pos -02)¨ 𝕨
  gt Enc gb,gf Enc¨ (1¨ <(p Enc¨) ¨) 𝕩
}

hlclhlch  <˘  2
  "Number"      , ('0'+↕10)"¯.π∞"
  "Paren"       , "()"
  "Bracket"     , "⟨⟩"
  "Brace"       , "{}"
  "Nothing"     , "·"
  "String"      , "'"'"'"@"
  "Comment"     , "#"

hlcl  
  "Gets"      # ¯3
  "Ligature"  # ¯2
  "Separator" # ¯1
  "Value"     #  0
  "Function"  #  1
  "Modifier"  #  2
  "Modifier2" #  3

GetHlclhlch{(+`¨𝕗)(𝕗)}
hlTag  {"<tspan class='"𝕩"'>"}¨ hlcl

Explain  {
  bconstblkitok  𝕨
  babcbobp  '0'-˜ # For each instruction, number of:
    "11111000000000010000022000"  # Arguments
    "000//232323223102303200121"  # Stack values consumed
    "11111111111111011101111110"  # Stack values output
    "00000110111001001101000100"  # Position determiner
  
  m  { # Mask of instruction starts
    a  ba(⊣⊏˜>×⊢)b
    na  (≠-(1+↕)(»·`×)) <128 b
    n  1+{(𝕩=a) +˝× >⊏na𝕩↕≠a}3
    ! ´ < n
    Se{(˜𝕨)Se 1¨((𝕩/𝕨))𝕩}(0=¯1⊑⊢)
    (≠↑∾≠Se 10¨) n
  }
  mbmi  0¯1 ¨ m/¨ bi
  la¯1=nambbc
  na(b˜1+⊣)(la/)˜/m
  no1(¯1)mbbo
  r+`no-na
  ! 1=¯1r
  d(+`no×)×f0<na
  p((¯1r)(r+⊒))⊏/na¬no
  f˜p

  srctoksii  tok {
    tokrolevalse  𝕨
    n  hlch
    o  hlTag ˜ (n+3+role) (⊢+-×n=) GetHlcl s𝕩
    c  "</tspan>"¨e
    t  co
    ilf  /𝕩=@+10
    𝕩  ((ilfs)" ⋄")(ilf)𝕩
    src  ((↕≠𝕩)(¨t)/es-1)  𝕩∾∾t
    tt <˘⍉> o, e(𝕩˜⊢+↕¬)¨s, c
    ti s(¬f)/mi
    src, titt, ti(s+e)÷2
  } 𝕩

  j¯1((1-˜+`¬f)ii)˜˜{s𝕩˜g𝕩(g/˜(s)=smbbp)((s))↕≠mb}p
  jej¯1.25
  q(/fjpje-la) (⊏≍⊣) p

  pd  <˘˜˝ q  wh×0.60.1+jed
  dim (wh×𝕩,2+⌈´d)+20×pad
  (5120(⊣∾˜(t+pad)-˜-˜÷2˙)dim+2×t) SVG gr Enc ∾⥊¨
    <"rect" Elt rc(Pos-pad)"width""height"˘FmtNum¨dim
    <"text" Enc src
    (<"path" Elt ps"d"<·"MVH"Fmt¨)˘ pd
    (ii (to+wh×≍)¨(d) (¬f)/p) Shadow toks
  
}