diff --git a/src/main/frontend/util/property.cljs b/src/main/frontend/util/property.cljs index 80f22a841a..4180d578d9 100644 --- a/src/main/frontend/util/property.cljs +++ b/src/main/frontend/util/property.cljs @@ -41,19 +41,19 @@ "") content)) -(defn simplified-property? +(defn- simplified-property? [line] (boolean (and (string? line) (re-find (re-pattern (str "^\\s?[^ ]+" gp-property/colons)) line)))) -(defn front-matter-property? +(defn- front-matter-property? [line] (boolean (and (string? line) (util/safe-re-find #"^\s*[^ ]+:" line)))) -(defn get-property-key +(defn- get-property-key [line format] (and (string? line) (when-let [key (last @@ -62,7 +62,7 @@ (util/safe-re-find #"^\s*([^ ]+):: " line)))] (keyword key)))) -(defn org-property? +(defn- org-property? [line] (boolean (and (string? line) @@ -70,7 +70,7 @@ (when-let [key (get-property-key line :org)] (not (contains? #{:PROPERTIES :END} key)))))) -(defn get-org-property-keys +(defn- get-org-property-keys [content] (let [content-lines (string/split-lines content) [_ properties&body] (split-with #(-> (string/triml %) @@ -91,7 +91,7 @@ string/upper-case) properties)))) -(defn get-markdown-property-keys +(defn- get-markdown-property-keys [content] (let [content-lines (string/split-lines content) properties (filter #(re-matches (re-pattern (str "^.+" gp-property/colons "\\s*.+")) %) @@ -103,7 +103,7 @@ string/upper-case) properties)))) -(defn get-property-keys +(defn- get-property-keys [format content] (cond (gp-property/contains-properties? content) @@ -163,7 +163,7 @@ :else content)) -(defn build-properties-str +(defn- build-properties-str [format properties] (when (seq properties) (let [org? (= format :org) diff --git a/src/main/frontend/util/property_edit.clj b/src/main/frontend/util/property_edit.clj index addb2e3758..eed1fcf2ff 100644 --- a/src/main/frontend/util/property_edit.clj +++ b/src/main/frontend/util/property_edit.clj @@ -1,9 +1,9 @@ (ns frontend.util.property-edit "Macros.") -(defmacro defn-for-file-based-graph +(defmacro defn-when-file-based [fname args] - (let [fn-name (symbol (str fname "-for-file-based")) + (let [fn-name (symbol (str fname "-when-file-based")) other-args (gensym "args") fn-args (vector 'repo '& other-args) call-fn-name (symbol (str "frontend.util.property/" fname))] diff --git a/src/main/frontend/util/property_edit.cljs b/src/main/frontend/util/property_edit.cljs index 7f047cc039..6d6439bab8 100644 --- a/src/main/frontend/util/property_edit.cljs +++ b/src/main/frontend/util/property_edit.cljs @@ -1,15 +1,27 @@ (ns frontend.util.property-edit "Property related fns, both file-based and db-based version need to be considered." {:clj-kondo/config {:linters {:unresolved-symbol {:level :off}}}} - (:require-macros [frontend.util.property-edit :refer [defn-for-file-based-graph]])) + (:require-macros [frontend.util.property-edit :refer [defn-when-file-based]]) + (:require [frontend.util.property :as property])) -;; Why need these XXX-for-file-based fns? +;; Why need these XXX-when-file-based fns? ;; there're a lot of usages of property-related fns(e.g. property/insert-property) in the whole codebase. ;; I want to minimize extensive modifications as much as possible when we add db-based graph support. -(defn-for-file-based-graph insert-property [format content key value & args]) -(defn-for-file-based-graph insert-properties [format content kvs]) -(defn-for-file-based-graph remove-property [format key content & args]) -(defn-for-file-based-graph remove-id-property [format content]) -(defn-for-file-based-graph remove-built-in-properties [format content]) +(defn-when-file-based insert-property [format content key value & args]) +(defn-when-file-based insert-properties [format content kvs]) +(defn-when-file-based remove-property [format key content & args]) +(defn-when-file-based remove-properties [format content]) +(defn-when-file-based remove-id-property [format content]) +(defn-when-file-based remove-built-in-properties [format content]) +(defn-when-file-based remove-empty-properties [content]) +(defn-when-file-based with-built-in-properties [properties content format]) + + +(def hidden-properties property/hidden-properties) +(def built-in-properties property/built-in-properties) +(def properties-hidden? property/properties-hidden?) +(def property-key-exist?-when-file-based property/property-key-exist?) +(def goto-properties-end-when-file-based property/goto-properties-end) +(def front-matter?-when-file-based property/front-matter?) diff --git a/src/test/frontend/util/property_test.cljs b/src/test/frontend/util/property_test.cljs index 540f093e59..2e556223ce 100644 --- a/src/test/frontend/util/property_test.cljs +++ b/src/test/frontend/util/property_test.cljs @@ -73,17 +73,17 @@ (deftest test-get-property-keys (testing "org mode" (are [x y] (= x y) - (property/get-property-keys :org "hello\n:PROPERTIES:\n:x1: y1\n:x2: y2\n:END:\n") + (#'property/get-property-keys :org "hello\n:PROPERTIES:\n:x1: y1\n:x2: y2\n:END:\n") ["X1" "X2"] - (property/get-property-keys :org "hello\n:PROPERTIES:\n:END:\n") + (#'property/get-property-keys :org "hello\n:PROPERTIES:\n:END:\n") nil)) (testing "markdown mode" (are [x y] (= x y) - (property/get-property-keys :markdown "hello\nx1:: y1\nx2:: y2\n") + (#'property/get-property-keys :markdown "hello\nx1:: y1\nx2:: y2\n") ["X1" "X2"] - (property/get-property-keys :markdown "hello\n") + (#'property/get-property-keys :markdown "hello\n") nil))) (deftest test-insert-property @@ -167,14 +167,14 @@ SCHEDULED: <2021-10-25 Mon>\n:PROPERTIES:\n:a: b\n:END:\nworld\n" "c" "d") "abcd\nempty::\nanother-empty::\nid:: 123")) (deftest test-build-properties-str - (are [x y] (= (property/build-properties-str :mardown x) y) + (are [x y] (= (#'property/build-properties-str :mardown x) y) {:title "a"} "title:: a\n" {:title "a/b/c"} "title:: a/b/c\n" {:title "a/b/c" :tags "d,e"} "title:: a/b/c\ntags:: d,e\n") - (are [x y] (= (property/build-properties-str :org x) y) + (are [x y] (= (#'property/build-properties-str :org x) y) {:title "a"} ":PROPERTIES:\n:title: a\n:END:" {:title "a/b/c"}