forked from mirrors/org-mode
ob-core: All Noweb parameters are read at point of definition
* lisp/ob-core.el (org-babel-params-from-properties): Do not force using `org-babel-current-src-block-location'. Extract properties from point. (org-babel--noweb-reference): Remove function. (org-babel-expand-noweb-references): Apply function removal. Small refactoring. * lisp/ob-lob.el (org-babel-lob-get-info): Small refactoring.
This commit is contained in:
parent
38be851245
commit
4d3e7a2a57
|
@ -1431,16 +1431,12 @@ specified in the properties of the current outline entry."
|
||||||
;; Header arguments specified with the header-args property at
|
;; Header arguments specified with the header-args property at
|
||||||
;; point of call.
|
;; point of call.
|
||||||
(org-babel-parse-header-arguments
|
(org-babel-parse-header-arguments
|
||||||
(org-entry-get org-babel-current-src-block-location
|
(org-entry-get (point) "header-args" 'inherit)
|
||||||
"header-args"
|
|
||||||
'inherit)
|
|
||||||
no-eval)
|
no-eval)
|
||||||
;; Language-specific header arguments at point of call.
|
;; Language-specific header arguments at point of call.
|
||||||
(and lang
|
(and lang
|
||||||
(org-babel-parse-header-arguments
|
(org-babel-parse-header-arguments
|
||||||
(org-entry-get org-babel-current-src-block-location
|
(org-entry-get (point) (concat "header-args:" lang) 'inherit)
|
||||||
(concat "header-args:" lang)
|
|
||||||
'inherit)
|
|
||||||
no-eval)))))
|
no-eval)))))
|
||||||
|
|
||||||
(defun org-babel-balanced-split (string alts)
|
(defun org-babel-balanced-split (string alts)
|
||||||
|
@ -2675,36 +2671,6 @@ CONTEXT may be one of :tangle, :export or :eval."
|
||||||
(cl-some (lambda (v) (member v allowed-values))
|
(cl-some (lambda (v) (member v allowed-values))
|
||||||
(split-string (or (cdr (assq :noweb params)) "")))))
|
(split-string (or (cdr (assq :noweb params)) "")))))
|
||||||
|
|
||||||
(defun org-babel--noweb-reference (element)
|
|
||||||
"Return Noweb reference for ELEMENT.
|
|
||||||
ELEMENT is a source block. Return value from `:noweb-ref',
|
|
||||||
possibly inherited from properties, or nil."
|
|
||||||
(let ((language (org-element-property :language element)))
|
|
||||||
(cdr
|
|
||||||
(or (assq :noweb-ref ;from block itself
|
|
||||||
(org-babel-parse-header-arguments
|
|
||||||
(mapconcat #'identity
|
|
||||||
(cons (org-element-property :parameters element)
|
|
||||||
(org-element-property :header element))
|
|
||||||
" ")))
|
|
||||||
(assq :noweb-ref ;from properties
|
|
||||||
(org-babel-parse-header-arguments
|
|
||||||
(org-trim
|
|
||||||
(concat
|
|
||||||
(and language
|
|
||||||
(org-entry-get (point)
|
|
||||||
(concat "header-args:" language)
|
|
||||||
'inherit))
|
|
||||||
" "
|
|
||||||
(org-entry-get (point) "header-args" 'inherit)))))
|
|
||||||
(and language
|
|
||||||
(let ((lang-headers
|
|
||||||
(intern (concat "org-babel-default-header-args:"
|
|
||||||
language))))
|
|
||||||
(and (boundp lang-headers)
|
|
||||||
(assq :noweb-ref (symbol-value lang-headers)))))
|
|
||||||
(assq :noweb-ref org-babel-default-header-args)))))
|
|
||||||
|
|
||||||
(defun org-babel-expand-noweb-references (&optional info parent-buffer)
|
(defun org-babel-expand-noweb-references (&optional info parent-buffer)
|
||||||
"Expand Noweb references in the body of the current source code block.
|
"Expand Noweb references in the body of the current source code block.
|
||||||
|
|
||||||
|
@ -2821,22 +2787,18 @@ block but are passed literally to the \"example-block\"."
|
||||||
;; those with a matching Noweb reference.
|
;; those with a matching Noweb reference.
|
||||||
(let ((expansion nil))
|
(let ((expansion nil))
|
||||||
(org-babel-map-src-blocks nil
|
(org-babel-map-src-blocks nil
|
||||||
(let ((element (org-element-at-point)))
|
(let* ((info (org-babel-get-src-block-info 'light))
|
||||||
|
(parameters (nth 2 info)))
|
||||||
(when (equal source-name
|
(when (equal source-name
|
||||||
(org-babel--noweb-reference element))
|
(cdr (assq :noweb-ref parameters)))
|
||||||
(let* ((i (org-babel-get-src-block-info
|
(push (funcall expand-body info) expansion)
|
||||||
'light element))
|
(push (or (cdr (assq :noweb-sep parameters))
|
||||||
(sep
|
"\n")
|
||||||
(or (cdr (assq :noweb-sep (nth 2 i)))
|
expansion))))
|
||||||
"\n")))
|
(when expansion
|
||||||
(setq expansion
|
(mapconcat #'identity
|
||||||
(cons sep
|
(nreverse (cdr expansion))
|
||||||
(cons (funcall expand-body i)
|
""))))))
|
||||||
expansion)))))))
|
|
||||||
(and expansion
|
|
||||||
(mapconcat #'identity
|
|
||||||
(nreverse (cdr expansion))
|
|
||||||
""))))))
|
|
||||||
;; Possibly raise an error if named block doesn't exist.
|
;; Possibly raise an error if named block doesn't exist.
|
||||||
(if (or org-babel-noweb-error-all-langs
|
(if (or org-babel-noweb-error-all-langs
|
||||||
(member lang org-babel-noweb-error-langs))
|
(member lang org-babel-noweb-error-langs))
|
||||||
|
|
|
@ -128,9 +128,8 @@ compatible with `org-babel-get-src-block-info', which see."
|
||||||
header
|
header
|
||||||
org-babel-default-lob-header-args
|
org-babel-default-lob-header-args
|
||||||
(append
|
(append
|
||||||
(org-with-wide-buffer
|
(org-with-point-at begin
|
||||||
(goto-char begin)
|
(org-babel-params-from-properties language))
|
||||||
(org-babel-params-from-properties language))
|
|
||||||
(list
|
(list
|
||||||
(org-babel-parse-header-arguments
|
(org-babel-parse-header-arguments
|
||||||
(org-element-property :inside-header context))
|
(org-element-property :inside-header context))
|
||||||
|
|
Loading…
Reference in New Issue