update frontend.util.property-edit

This commit is contained in:
rcmerci
2023-06-16 12:56:52 +08:00
parent 8746a373ae
commit 90fe19fa82
4 changed files with 35 additions and 23 deletions

View File

@@ -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)

View File

@@ -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))]

View File

@@ -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?)

View File

@@ -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"}