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
llcc 2022-03-16 17:10:49 +08:00 committed by GitHub
parent 96da98e5bd
commit 1361728457
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 168 additions and 153 deletions

View File

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

View File

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

View File

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

View File

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