(ns app.util.text (:require [cuerdas.core :as str])) (defonce default-text-attrs {:font-id "sourcesanspro" :font-family "sourcesanspro" :font-variant-id "regular" :font-size "14" :font-weight "400" :font-style "normal" :line-height "1.2" :letter-spacing "0" :text-transform "none" :text-align "left" :text-decoration "none" :fill-color "#000000" :fill-opacity 1}) (def typography-fields [:font-id :font-family :font-variant-id :font-size :font-weight :font-style :line-height :letter-spacing :text-transform]) (def default-typography (merge {:name "Source Sans Pro Regular"} (select-keys default-text-attrs typography-fields))) (defn some-node [predicate node] (or (predicate node) (some #(some-node predicate %) (:children node)))) (defn map-node [map-fn node] (cond-> (map-fn node) (:children node) (update :children (fn [children] (mapv #(map-node map-fn %) children))))) (defn content->text [node] (str (if (:children node) (str/join (if (= "paragraph-set" (:type node)) "\n" "") (map content->text (:children node))) (:text node "")))) (defn search-text-attrs [node attrs] (let [rec-fn (fn rec-fn [current node] (let [current (reduce rec-fn current (:children node []))] (merge current (select-keys node attrs))))] (rec-fn {} node)))