From 0301efb86b994e2c79a37c21f17c664c1193d4c0 Mon Sep 17 00:00:00 2001 Message-ID: <0301efb86b994e2c79a37c21f17c664c1193d4c0.1735129004.git.yantar92@posteo.net> From: Ihor Radchenko Date: Wed, 25 Dec 2024 13:16:36 +0100 Subject: [PATCH] suggestions --- lisp/org-element.el | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 3b90dce2a2..d386ee4184 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -338,7 +338,8 @@ (defconst org-element-object-containers (defconst org-element-elements-no-affiliated '(org-data comment clock headline inlinetask item node-property planning property-drawer - section table-row)) + section table-row) + "List of paragraph-level node types that cannot have affiliated keywords.") (defconst org-element-affiliated-keywords '("CAPTION" "DATA" "HEADER" "HEADERS" "LABEL" "NAME" "PLOT" "RESNAME" "RESULT" @@ -5522,7 +5523,8 @@ (defun org-element-interpret-data (data) (make-string blank ?\n))))))))) (funcall fun data nil))) -(defun org-element--keyword-to-org (key value) +(defun org-element--interpret-affiliated-keyword (key value) + "Interpret affiliated keyword with KEY and VALUE." (let (dual) (when (member key org-element-dual-keywords) (setq dual (cdr value) value (car value))) @@ -5540,28 +5542,30 @@ (defun org-element--interpret-affiliated-keywords (element) If there is no affiliated keyword, return the empty string." ;; there are some elements that will never have affiliated keywords, ;; so do nothing for these - (if (member (org-element-type element) org-element-elements-no-affiliated) + (if (member (org-element-type element) + org-element-elements-no-affiliated) "" (let (acc) (org-element-properties-resolve element t) (org-element--properties-mapc (lambda (prop value) (when value - (let ((keyword (upcase (substring (symbol-name prop) 1)))) - (when (or (string-match-p "^ATTR_" keyword) + (let* ((keyword (upcase (substring (symbol-name prop) 1))) + (attrp (string-match-p "^ATTR_" keyword))) + (when (or attrp (and (member keyword org-element-affiliated-keywords) (not (assoc keyword - org-element-keyword-translation-alist)))) - (push (if (or (member keyword org-element-multiple-keywords) - ;; All attribute keywords can have multiple lines. - (string-match-p "^ATTR_" keyword)) - (mapconcat (lambda (line) (org-element--keyword-to-org keyword line)) - value "") - (org-element--keyword-to-org keyword value)) + org-element-keyword-translation-alist)))) + (push (if (or attrp ; All attribute keywords can have multiple lines. + (member keyword org-element-multiple-keywords)) + (mapconcat + (lambda (line) (org-element--interpret-affiliated-keyword keyword line)) + value "") + (org-element--interpret-affiliated-keyword keyword value)) acc))))) - element nil t) - (apply #'concat (nreverse acc))))) + element nil t) + (apply #'concat (nreverse acc))))) ;; Because interpretation of the parse tree must return the same ;; number of blank lines between elements and the same number of white -- 2.47.1