[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org 669e8d8824 006/101: org-element-ast: New function `
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org 669e8d8824 006/101: org-element-ast: New function `org-element-property-inherited' |
Date: |
Sat, 1 Jul 2023 09:58:52 -0400 (EDT) |
branch: externals/org
commit 669e8d8824e86de511b1e2ba1b3fec7abf830dc8
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>
org-element-ast: New function `org-element-property-inherited'
---
lisp/org-element-ast.el | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/lisp/org-element-ast.el b/lisp/org-element-ast.el
index 174230abd7..0fc425c307 100644
--- a/lisp/org-element-ast.el
+++ b/lisp/org-element-ast.el
@@ -913,5 +913,45 @@ when DATUM belongs to a full parse tree."
(setq up (org-element-property :parent up)))
(if types up (nreverse ancestors))))
+(defun org-element-property-inherited (property node &optional with-self
accumulate literal-nil include-nil)
+ "Extract non-nil value from the PROPERTY of a NODE and/or its parents.
+
+PROPERTY is a single property or a list of properties to be considered.
+
+When WITH-SELF is non-nil, consider PROPERTY in the NODE itself.
+Otherwise, only start from the immediate parent.
+
+When optional argument ACCUMULATE is nil, return the first non-nil value
+\(properties when PROPERTY is a list are considered one by one).
+When ACCUMULATE is non-nil, extract all the values, starting from the
+outermost ancestor and accumulate them into a single list. The values
+that are lists are appended.
+
+When LITERAL-NIL is non-nil, treat property values \"nil\" and nil.
+
+When INCLUDE-NIL is non-nil, do not skip properties with value nil. The
+properties that are missing from the property list will still be
+skipped."
+ (setq property (ensure-list property))
+ (let (acc local val)
+ (catch :found
+ (unless with-self (setq node (org-element-property :parent node)))
+ (while node
+ (setq local nil)
+ (dolist (prop property)
+ (setq val (org-element-property prop node 'org-element-ast--nil))
+ (unless (eq val 'org-element-ast--nil) ; not present
+ (when literal-nil (setq val (org-not-nil val)))
+ (when (and (not accumulate) (or val include-nil))
+ (throw :found val))
+ ;; Append to the end.
+ (if (and include-nil (not val))
+ (setq local (append local '(nil)))
+ (setq local (append local (ensure-list val))))))
+ ;; Append parent to front.
+ (setq acc (append local acc))
+ (setq node (org-element-property :parent node)))
+ acc)))
+
(provide 'org-element-ast)
;;; org-element-ast.el ends here
- [elpa] externals/org updated (184b735323 -> 948c896448), ELPA Syncer, 2023/07/01
- [elpa] externals/org 1260f61830 003/101: Refactor org-element API for abstract syntax tree, ELPA Syncer, 2023/07/01
- [elpa] externals/org f611f131ee 007/101: org-element-ast: New function `org-element-ast-map', ELPA Syncer, 2023/07/01
- [elpa] externals/org 6333a20aa5 011/101: org-element-ast: New function `org-element-lineage-map', ELPA Syncer, 2023/07/01
- [elpa] externals/org 2d2656f6a7 004/101: org-element-ast: Add setters for `org-element-property' and `org-element-property-1', ELPA Syncer, 2023/07/01
- [elpa] externals/org f750f46c9d 001/101: Factor out pure syntax tree API to org-element-ast.el (copy old functions), ELPA Syncer, 2023/07/01
- [elpa] externals/org d5198e39fb 002/101: org-element-ast: Add commentary describing the basics of AST structure, ELPA Syncer, 2023/07/01
- [elpa] externals/org 5f37f77fc6 017/101: org-element--cache-shift-positions: Make use of inliner, ELPA Syncer, 2023/07/01
- [elpa] externals/org 669e8d8824 006/101: org-element-ast: New function `org-element-property-inherited',
ELPA Syncer <=
- [elpa] externals/org ae49451364 009/101: org-element-ast: New function `org-element-put-property-2', ELPA Syncer, 2023/07/01
- [elpa] externals/org 6b20a23065 010/101: org-element-ast: New function `org-element-type-p', ELPA Syncer, 2023/07/01
- [elpa] externals/org f4aa3747e1 014/101: org-element: Preserve order of multiple affiliated keywords, ELPA Syncer, 2023/07/01
- [elpa] externals/org 71e2ea5698 025/101: org-element: Update docstrings using new syntax node terminology, ELPA Syncer, 2023/07/01
- [elpa] externals/org ad75fd2bae 016/101: org-element: Use `org-element-create' when parsing, ELPA Syncer, 2023/07/01
- [elpa] externals/org daebeb6446 020/101: org-element-inlinetask-parser: Use deferred properties, ELPA Syncer, 2023/07/01
- [elpa] externals/org 23f9347d1a 024/101: org-element-map: Allow TYPES t and add new arg NO-UNDEFER, ELPA Syncer, 2023/07/01
- [elpa] externals/org 2d22d7f515 036/101: ox.el: Rename `org-element-get-parent-element' and move to org-element, ELPA Syncer, 2023/07/01
- [elpa] externals/org 6a7aee2c35 034/101: org-texinfo--normalize-headlines: Use `org-element-create', ELPA Syncer, 2023/07/01
- [elpa] externals/org 3b1693c461 043/101: org-back-to-heading: Use org-element API, ELPA Syncer, 2023/07/01