Files
rose-ash/shared/static/wasm/sx/text-layout.sxbc
giles 1884c28763 Fix browser compat: sublist replaces 3-arg slice, manual sum replaces reduce
- Added sublist helper (portable list extraction, avoids 3-arg slice
  which fails in browser WASM kernel)
- Replaced reduce + 0 lwid with manual sum loop (reduce has browser
  compat issues with dict-set! error in call stack)
- Imperative DOM update via effect for clean paragraph re-rendering
  on signal changes (clear container, create new spans)
- String slice in hyphenate-word kept (works on strings)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:31:34 +00:00

4 lines
11 KiB
Plaintext

(sxbc 1 "715f229a1855c912"
(code
:constants ("sublist" {:upvalue-count 0 :arity 3 :constants ({:upvalue-count 3 :arity 3 :constants (">=" "reverse" "empty?" "+" 1 "rest" "cons" "first") :bytecode (16 0 18 0 52 0 0 2 33 9 0 16 2 52 1 0 1 32 84 0 16 1 52 2 0 1 33 9 0 16 2 52 1 0 1 32 66 0 16 0 18 1 52 0 0 2 33 34 0 18 2 16 0 1 4 0 52 3 0 2 16 1 52 5 0 1 16 1 52 7 0 1 16 2 52 6 0 2 49 3 32 21 0 18 2 16 0 1 4 0 52 3 0 2 16 1 52 5 0 1 16 2 49 3 50)} 0 "list") :bytecode (2 17 3 51 0 0 1 2 1 1 1 3 17 3 16 3 1 1 0 16 0 52 2 0 0 49 3 50)} "measure-text" {:upvalue-count 0 :arity 3 :constants ("list" text-measure) :bytecode (1 1 0 16 0 16 1 16 2 52 0 0 4 112 50)} "line-badness" {:upvalue-count 0 :arity 2 :constants ("-" "<" 0 100000 "/" "*" 1000) :bytecode (16 1 16 0 52 0 0 2 17 2 16 2 1 2 0 52 1 0 2 33 6 0 1 3 0 32 31 0 16 2 16 1 52 4 0 2 17 3 16 3 16 3 52 5 0 2 16 3 1 6 0 52 5 0 2 52 5 0 2 50)} "compute-demerits" {:upvalue-count 0 :arity 2 :constants ("+" 1 "*") :bytecode (1 1 0 16 0 52 0 0 2 17 2 16 2 16 2 52 2 0 2 16 1 16 1 52 2 0 2 52 0 0 2 50)} "sum-widths" {:upvalue-count 0 :arity 4 :constants ({:upvalue-count 5 :arity 2 :constants (">=" "max" 0 "-" 1 "+" "*" "nth") :bytecode (16 0 18 0 52 0 0 2 33 41 0 1 2 0 18 0 18 1 52 3 0 2 1 4 0 52 3 0 2 52 1 0 2 17 2 16 1 16 2 18 2 52 6 0 2 52 5 0 2 32 27 0 18 3 16 0 1 4 0 52 5 0 2 16 1 18 4 16 0 52 7 0 2 52 5 0 2 49 2 50)} 0) :bytecode (2 17 4 51 0 0 1 3 1 2 1 1 1 4 1 0 17 4 16 4 16 2 1 1 0 49 2 50)} "find-breaks" {:upvalue-count 0 :arity 3 :constants ("len" "<=" 0 "list" "map" {:upvalue-count 0 :arity 1 :constants ("=" 0 "list" -1 999999999) :bytecode (16 0 1 1 0 52 0 0 2 33 13 0 1 1 0 1 3 0 52 2 0 2 32 10 0 1 4 0 1 3 0 52 2 0 2 50)} "range" "+" 1 "for-each" {:upvalue-count 5 :arity 1 :constants ("first" "nth" {:upvalue-count 8 :arity 1 :constants ("<" "sum-widths" "+" 1 "<=" "*" 1.15 "line-badness" 0 "compute-demerits" "nth" "first" "map-indexed" {:upvalue-count 3 :arity 2 :constants ("=" "+" 1 "list") :bytecode (16 0 18 0 1 2 0 52 1 0 2 52 0 0 2 33 11 0 18 1 18 2 52 3 0 2 32 2 0 16 1 50)}) :bytecode (16 0 18 0 52 0 0 2 33 147 0 20 1 0 18 1 18 2 18 3 16 0 1 3 0 52 2 0 2 48 4 17 1 16 1 18 4 1 6 0 52 5 0 2 52 4 0 2 33 103 0 20 7 0 16 1 18 4 48 2 17 2 1 8 0 17 3 18 5 20 9 0 16 2 16 3 48 2 52 2 0 2 17 4 18 6 16 0 1 3 0 52 2 0 2 52 10 0 2 17 5 16 4 16 5 52 11 0 1 52 0 0 2 33 20 0 51 13 0 1 0 1 4 0 3 18 6 52 12 0 2 19 6 32 1 0 2 5 18 7 16 0 1 3 0 52 2 0 2 49 1 32 1 0 2 32 1 0 2 50)}) :bytecode (18 0 16 0 52 1 0 2 52 0 0 1 17 1 2 17 2 51 2 0 0 1 0 2 0 3 1 0 0 4 1 1 0 0 1 2 17 2 16 2 16 0 49 1 50)} {:upvalue-count 2 :arity 2 :constants ("nth" 1 "<=" 0 "cons") :bytecode (18 0 16 0 52 0 0 2 1 1 0 52 0 0 2 17 2 16 2 1 3 0 52 2 0 2 33 5 0 16 1 32 14 0 18 1 16 2 16 2 16 1 52 4 0 2 49 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 3 1 2 0 52 1 0 2 33 7 0 52 3 0 0 32 68 0 51 5 0 16 3 1 8 0 52 7 0 2 52 6 0 1 52 4 0 2 17 4 51 10 0 1 4 1 3 1 0 1 1 1 2 16 3 52 6 0 1 52 9 0 2 5 2 17 5 51 11 0 1 4 1 5 17 5 16 5 16 3 52 3 0 0 49 2 50)} "break-lines" {:upvalue-count 0 :arity 3 :constants ("find-breaks" "len" "=" 0 "list" "cons" "append" "rest" "map-indexed" {:upvalue-count 1 :arity 2 :constants ("list" "nth") :bytecode (16 1 18 0 16 0 52 1 0 2 52 0 0 2 50)}) :bytecode (20 0 0 16 0 16 1 16 2 48 3 17 3 16 0 52 1 0 1 17 4 16 4 1 3 0 52 2 0 2 33 7 0 52 4 0 0 32 40 0 1 3 0 16 3 52 5 0 2 17 5 16 5 52 7 0 1 16 4 52 4 0 1 52 6 0 2 17 6 51 9 0 1 6 16 5 52 8 0 2 50)} "break-lines-greedy" {:upvalue-count 0 :arity 3 :constants ("len" "=" 0 "list" "for-each" {:upvalue-count 6 :arity 1 :constants ("nth" "=" "+" ">" "not" "append" "list") :bytecode (18 0 16 0 52 0 0 2 17 1 16 0 18 1 52 1 0 2 33 5 0 16 1 32 10 0 18 2 18 3 16 1 52 2 0 3 17 2 16 2 18 4 52 3 0 2 6 33 13 0 5 16 0 18 1 52 1 0 2 52 4 0 1 33 33 0 18 5 18 1 16 0 52 6 0 2 52 6 0 1 52 5 0 2 19 5 5 16 0 19 1 5 16 1 19 2 32 4 0 16 2 19 2 50)} "range" "append") :bytecode (16 0 52 0 0 1 17 3 16 3 1 2 0 52 1 0 2 33 7 0 52 3 0 0 32 60 0 52 3 0 0 17 4 1 2 0 17 5 1 2 0 17 6 51 5 0 1 0 1 5 1 6 1 1 1 2 1 4 16 3 52 6 0 1 52 4 0 2 5 16 4 16 5 16 3 52 3 0 2 52 3 0 1 52 7 0 2 50)} "position-line" {:upvalue-count 0 :arity 5 :constants ({:upvalue-count 5 :arity 3 :constants (">=" "len" "reverse" "nth" "+" 1 "cons" "width" "x" "y" "word") :bytecode (16 0 18 0 52 1 0 1 52 0 0 2 33 9 0 16 2 52 2 0 1 32 72 0 18 0 16 0 52 3 0 2 17 3 18 1 16 0 52 3 0 2 17 4 18 2 16 0 1 5 0 52 4 0 2 16 1 16 4 18 3 52 4 0 3 1 7 0 16 4 1 8 0 16 1 1 9 0 18 4 1 10 0 16 3 65 4 0 16 2 52 6 0 2 49 3 50)} 0 "list") :bytecode (2 17 5 51 0 0 1 0 1 1 1 5 1 2 1 4 17 5 16 5 1 1 0 16 3 52 2 0 0 49 3 50)} "position-lines" {:upvalue-count 0 :arity 7 :constants ("map-indexed" {:upvalue-count 6 :arity 2 :constants ("first" "nth" 1 "+" "*" "sublist" "position-line") :bytecode (16 1 52 0 0 1 17 2 16 1 1 2 0 52 1 0 2 17 3 18 0 16 0 18 1 52 4 0 2 52 3 0 2 17 4 20 5 0 18 2 16 2 16 3 48 3 17 5 20 5 0 18 3 16 2 16 3 48 3 17 6 20 6 0 16 5 16 6 18 4 18 5 16 4 49 5 50)}) :bytecode (51 1 0 1 6 1 4 1 0 1 1 1 3 1 5 16 2 52 0 0 2 50)} "pretext-position-line" {:upvalue-count 0 :arity 3 :constants ({:upvalue-count 4 :arity 3 :constants (">=" "len" "+" 1 "nth" "append" "list" "width" "x" "word") :bytecode (16 0 18 0 52 1 0 1 52 0 0 2 33 5 0 16 2 32 69 0 18 1 16 0 1 3 0 52 2 0 2 16 1 18 2 16 0 52 4 0 2 18 3 52 2 0 3 16 2 1 7 0 18 2 16 0 52 4 0 2 1 8 0 16 1 1 9 0 18 0 16 0 52 4 0 2 65 3 0 52 6 0 1 52 5 0 2 49 3 50)} 0 "list") :bytecode (2 17 3 51 0 0 1 0 1 3 1 1 1 2 17 3 16 3 1 1 0 1 1 0 52 2 0 0 49 3 50)} "pretext-layout-lines" {:upvalue-count 0 :arity 6 :constants ("len" "map" {:upvalue-count 7 :arity 1 :constants ("nth" "*" "first" 1 "sublist" {:upvalue-count 2 :arity 2 :constants (">=" "len" "+" 1 "nth") :bytecode (16 0 18 0 52 1 0 1 52 0 0 2 33 5 0 16 1 32 27 0 18 1 16 0 1 3 0 52 2 0 2 16 1 18 0 16 0 52 4 0 2 52 2 0 2 49 2 50)} 0 "max" "-" "len" "=" "/" "y" "words" "pretext-position-line") :bytecode (18 0 16 0 52 0 0 2 17 1 16 0 18 1 52 1 0 2 17 2 16 1 52 2 0 1 17 3 16 1 1 3 0 52 0 0 2 17 4 20 4 0 18 2 16 3 16 4 48 3 17 5 20 4 0 18 3 16 3 16 4 48 3 17 6 2 17 7 51 5 0 1 6 1 7 17 7 16 7 1 6 0 1 6 0 48 2 17 7 1 3 0 16 5 52 9 0 1 1 3 0 52 8 0 2 52 7 0 2 17 8 16 0 18 4 1 3 0 52 8 0 2 52 10 0 2 17 9 16 9 33 5 0 18 5 32 14 0 18 6 16 7 52 8 0 2 16 8 52 11 0 2 17 10 1 12 0 16 2 1 13 0 20 14 0 16 5 16 6 16 10 48 3 65 2 0 50)} "range") :bytecode (16 2 52 0 0 1 17 6 51 2 0 1 2 1 5 1 0 1 1 1 6 1 3 1 4 16 6 52 3 0 1 52 1 0 2 50)} "make-hyphenation-trie" {:upvalue-count 0 :arity 1 :constants ("children" "levels" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("list" 0 "for-each" {:upvalue-count 3 :arity 1 :constants (">=" "char-code" 48 "<=" 57 "parse-number" "append" "list" 0) :bytecode (16 0 52 1 0 1 1 2 0 52 0 0 2 6 33 14 0 5 16 0 52 1 0 1 1 4 0 52 3 0 2 33 11 0 16 0 52 5 0 1 19 0 32 35 0 18 1 16 0 52 7 0 1 52 6 0 2 19 1 5 18 2 18 0 52 7 0 1 52 6 0 2 19 2 5 1 8 0 19 0 50)} "map" {:upvalue-count 1 :arity 1 :constants ("char-at") :bytecode (18 0 16 0 52 0 0 2 50)} "range" "len" "append" {:upvalue-count 3 :arity 2 :constants (">=" "len" "dict-set!" "levels" "nth" "get" "children" "not" "has-key?" "list" "+" 1) :bytecode (16 1 18 0 52 1 0 1 52 0 0 2 33 14 0 16 0 1 3 0 18 1 52 2 0 3 32 86 0 18 0 16 1 52 4 0 2 17 2 16 0 1 6 0 52 5 0 2 17 3 16 3 16 2 52 8 0 2 52 7 0 1 33 27 0 16 3 16 2 1 6 0 65 0 0 1 3 0 52 9 0 0 65 2 0 52 2 0 3 32 1 0 2 5 18 2 16 3 16 2 52 5 0 2 16 1 1 11 0 52 10 0 2 49 2 50)}) :bytecode (52 0 0 0 17 1 52 0 0 0 17 2 1 1 0 17 3 51 3 0 1 3 1 1 1 2 51 5 0 1 0 16 0 52 7 0 1 52 6 0 1 52 4 0 2 52 2 0 2 5 16 2 16 3 52 0 0 1 52 8 0 2 17 2 5 2 17 4 51 9 0 1 1 1 2 1 4 17 4 16 4 18 0 1 1 0 49 2 50)}) :bytecode (1 0 0 65 0 0 1 1 0 52 2 0 0 65 2 0 17 1 51 4 0 1 1 16 0 52 3 0 2 5 16 1 50)} "find-hyphenation-points" {:upvalue-count 0 :arity 2 :constants ("len" "str" "." "+" 2 "map" {:upvalue-count 0 :arity 1 :constants (0) :bytecode (1 0 0 50)} "range" 1 "for-each" {:upvalue-count 5 :arity 1 :constants ({:upvalue-count 6 :arity 2 :constants ("<" "char-at" "get" "children" "has-key?" "not" "empty?" "levels" "for-each" {:upvalue-count 4 :arity 1 :constants ("<" "+" 1 "nth" ">" "map-indexed" {:upvalue-count 3 :arity 2 :constants ("=" "+") :bytecode (16 0 18 0 18 1 52 1 0 2 52 0 0 2 33 5 0 18 2 32 2 0 16 1 50)}) :bytecode (18 0 16 0 52 1 0 2 18 1 1 2 0 52 1 0 2 52 0 0 2 33 61 0 18 2 18 0 16 0 52 1 0 2 52 3 0 2 17 1 18 3 16 0 52 3 0 2 17 2 16 2 16 1 52 4 0 2 33 20 0 51 6 0 0 0 1 0 1 2 18 2 52 5 0 2 19 2 32 1 0 2 32 1 0 2 50)} "range" "len" "+" 1) :bytecode (16 1 18 0 52 0 0 2 33 125 0 18 1 16 1 52 1 0 2 17 2 16 0 1 3 0 52 2 0 2 17 3 16 3 16 2 52 4 0 2 33 89 0 16 3 16 2 52 2 0 2 17 4 16 4 1 7 0 52 2 0 2 52 6 0 1 52 5 0 1 33 39 0 16 4 1 7 0 52 2 0 2 17 5 51 9 0 0 2 0 3 0 4 1 5 16 5 52 11 0 1 52 10 0 1 52 8 0 2 32 1 0 2 5 18 5 16 4 16 1 1 13 0 52 12 0 2 49 2 32 1 0 2 32 1 0 2 50)}) :bytecode (2 17 1 51 0 0 0 0 0 1 1 0 0 2 0 3 1 1 17 1 16 1 18 4 16 0 49 2 50)} "filter" {:upvalue-count 2 :arity 1 :constants (">" 1 "<" "-" "=" "mod" "nth" 2) :bytecode (16 0 1 1 0 52 0 0 2 6 33 43 0 5 16 0 18 0 1 1 0 52 3 0 2 52 2 0 2 6 33 23 0 5 18 1 16 0 52 6 0 2 1 7 0 52 5 0 2 1 1 0 52 4 0 2 50)}) :bytecode (16 1 52 0 0 1 17 2 1 2 0 16 1 1 2 0 52 1 0 3 17 3 16 2 1 4 0 52 3 0 2 17 4 51 6 0 16 2 1 8 0 52 3 0 2 52 7 0 1 52 5 0 2 17 5 51 10 0 1 4 1 3 1 2 1 5 1 0 16 4 52 7 0 1 52 9 0 2 5 51 12 0 1 2 1 5 16 2 1 8 0 52 3 0 2 52 7 0 1 52 11 0 2 50)} "hyphenate-word" {:upvalue-count 0 :arity 2 :constants ("find-hyphenation-points" "empty?" "list" "cons" 0 "append" "len" "map-indexed" {:upvalue-count 2 :arity 2 :constants ("slice" "nth") :bytecode (18 0 16 1 18 1 16 0 52 1 0 2 52 0 0 3 50)}) :bytecode (20 0 0 16 0 16 1 48 2 17 2 16 2 52 1 0 1 33 9 0 16 1 52 2 0 1 32 42 0 1 4 0 16 2 52 3 0 2 17 3 16 2 16 1 52 6 0 1 52 2 0 1 52 5 0 2 17 4 51 8 0 1 1 1 4 16 3 52 7 0 2 50)} "layout-paragraph" {:upvalue-count 0 :arity 5 :constants ("map" {:upvalue-count 2 :arity 1 :constants ("measure-text") :bytecode (20 0 0 18 0 18 1 16 0 49 3 50)} {:upvalue-count 0 :arity 1 :constants ("get" "width") :bytecode (16 0 1 1 0 52 0 0 2 50)} "empty?" "get" "first" "height" "*" 1.4 "measure-text" " " "width" "break-lines" "position-lines" 0 "lines" "line-height" "font-height" "line-ranges" "len") :bytecode (51 1 0 1 1 1 2 16 0 52 0 0 2 17 5 51 2 0 16 5 52 0 0 2 17 6 16 5 52 3 0 1 33 5 0 16 2 32 13 0 16 5 52 5 0 1 1 6 0 52 4 0 2 17 7 16 7 16 4 6 34 4 0 5 1 8 0 52 7 0 2 17 8 20 9 0 16 1 16 2 1 10 0 48 3 17 9 16 9 1 11 0 52 4 0 2 17 10 20 12 0 16 6 16 10 16 3 48 3 17 11 20 13 0 16 0 16 6 20 12 0 16 6 16 10 16 3 48 3 16 10 16 8 1 14 0 1 14 0 48 7 17 12 1 15 0 16 12 1 11 0 16 3 1 16 0 16 8 1 17 0 16 7 1 18 0 16 11 1 6 0 16 11 52 19 0 1 16 8 52 7 0 2 65 6 0 50)} "typeset-plain" {:upvalue-count 0 :arity 4 :constants ("split" " " "layout-paragraph" 1.4) :bytecode (16 0 1 1 0 52 0 0 2 17 4 20 2 0 16 4 16 1 16 2 16 3 1 3 0 49 5 50)} "typeset" {:upvalue-count 0 :arity 5 :constants ("split" " " "serif" 16 600 1.4 "layout-paragraph") :bytecode (16 0 1 1 0 52 0 0 2 17 5 16 1 6 34 4 0 5 1 2 0 17 6 16 2 6 34 4 0 5 1 3 0 17 7 16 3 6 34 4 0 5 1 4 0 17 8 16 4 6 34 4 0 5 1 5 0 17 9 20 6 0 16 5 16 6 16 7 16 8 16 9 49 5 50)} {:library (sx text-layout) :op "import"}) :bytecode (51 1 0 128 0 0 5 51 3 0 128 2 0 5 51 5 0 128 4 0 5 51 7 0 128 6 0 5 51 9 0 128 8 0 5 51 11 0 128 10 0 5 51 13 0 128 12 0 5 51 15 0 128 14 0 5 51 17 0 128 16 0 5 51 19 0 128 18 0 5 51 21 0 128 20 0 5 51 23 0 128 22 0 5 51 25 0 128 24 0 5 51 27 0 128 26 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 0 5 51 35 0 128 34 0 5 1 36 0 112 50)))