;; content-on-sx — global find/replace across text-bearing blocks. ;; ;; Replaces every occurrence of `from` with `to` in the `text` field of ;; text / heading / code / quote / callout blocks, tree-wide (via the transform ;; layer). For renaming a term throughout a document. Immutable; case-sensitive. ;; (Same text-bearing set asText/stats/summary treat as content.) ;; ;; Requires (loaded by harness): block.sx, transform.sx (content/map-blocks). (define fr-in? (fn (x xs) (cond ((= (len xs) 0) false) ((= (first xs) x) true) (else (fr-in? x (rest xs)))))) (define fr-has-text? (fn (b) (fr-in? (blk-type b) (list "text" "heading" "code" "quote" "callout")))) (define content/find-replace (fn (doc from to) (content/map-blocks doc fr-has-text? (fn (b) (blk-set b "text" (replace (str (blk-get b "text")) from to))))))