mirror of https://github.com/logseq/logseq
fix #+keyword issues in orgmode (#4573)
* fix(orgmode): don't parse some in-file #+keyword as page properties e.g. #+Name:, #+tblfm:, etc. * enhance(orgmode): display image and table's caption keyword https://orgmode.org/manual/Captions.html * enhance(orgmode): ignore some #+keywords for parsing properties. Orgmode uses lots of file level #+keyword: styled keywords[1]. Logseq parses their value as page references except `title` and `filters`, which pollutes Logseq database. Users can setup `:ignored-page-property-tags` in config.edn to make Logseq not parsing those keywords. [1]: https://orgmode.org/manual/In_002dbuffer-Settings.html. * use take-while instead. Thanks tienson. * comment out new settings * revert some merge conflicts.pull/4596/head
parent
96da98e5bd
commit
1361728457
|
@ -2716,6 +2716,15 @@
|
|||
(interpose [:span ", "] vals))
|
||||
(inline-text format v))]))]
|
||||
|
||||
;; for file-level property in orgmode: #+key: value
|
||||
;; only display caption. https://orgmode.org/manual/Captions.html.
|
||||
["Directive" key value]
|
||||
[:div.file-level-property
|
||||
(when (contains? #{"caption"} (string/lower-case key))
|
||||
[:span.font-medium
|
||||
[:span.font-bold (string/upper-case key)]
|
||||
(str ": " value)])]
|
||||
|
||||
["Paragraph" l]
|
||||
;; TODO: speedup
|
||||
(if (util/safe-re-find #"\"Export_Snippet\" \"embed\"" (str l))
|
||||
|
|
|
@ -115,10 +115,9 @@
|
|||
(if (seq ast)
|
||||
(let [original-ast ast
|
||||
ast (map first ast) ; without position meta
|
||||
directive?
|
||||
(fn [[item _]] (= "directive" (string/lower-case (first item))))
|
||||
directive? (fn [[item _]] (= "directive" (string/lower-case (first item))))
|
||||
grouped-ast (group-by directive? original-ast)
|
||||
directive-ast (get grouped-ast true)
|
||||
directive-ast (take-while directive? original-ast)
|
||||
[properties-ast other-ast] (if (= "Property_Drawer" (ffirst ast))
|
||||
[(last (first ast))
|
||||
(rest original-ast)]
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
(:require [frontend.config :as config]
|
||||
[frontend.util :as util]
|
||||
[clojure.string :as string]
|
||||
[frontend.format.mldoc :as mldoc]))
|
||||
[frontend.format.mldoc :as mldoc]
|
||||
[clojure.set :as set]
|
||||
[frontend.state :as state]))
|
||||
|
||||
(def page-ref-re-0 #"\[\[(.*)\]\]")
|
||||
(def org-page-ref-re #"\[\[(file:.*)\]\[.+?\]\]")
|
||||
|
@ -344,7 +346,9 @@
|
|||
v (if (or (symbol? v) (keyword? v)) (name v) (str v))
|
||||
v (string/trim v)]
|
||||
(cond
|
||||
(contains? #{"title" "filters"} k)
|
||||
(contains? (set/union
|
||||
#{"title" "filters"}
|
||||
(get (state/get-config) :ignored-page-references-keywords)) k)
|
||||
v
|
||||
|
||||
(= v "true")
|
||||
|
|
|
@ -189,4 +189,7 @@
|
|||
|
||||
;; Extra CodeMirror options
|
||||
;; :editor/extra-codemirror-options {:keyMap "emacs" :lineWrapping true}
|
||||
|
||||
;; ignore #+keyword: for parsing page references in orgmode
|
||||
;; :ignored-page-references-keywords #{"author" "startup"}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue