mirror of
https://github.com/penpot/penpot.git
synced 2026-05-04 15:49:34 +00:00
62 lines
1.4 KiB
Clojure
62 lines
1.4 KiB
Clojure
(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)))
|