|
@@ -157,20 +157,16 @@ Return a list whose CAR is `center-block' and CDR is a plist
|
|
|
containing `:begin', `:end', `:hiddenp', `:contents-begin',
|
|
|
`:contents-end' and `:post-blank' keywords.
|
|
|
|
|
|
-Assume point is at beginning or end of the block."
|
|
|
+Assume point is at the beginning of the block."
|
|
|
(save-excursion
|
|
|
(let* ((case-fold-search t)
|
|
|
- (keywords (progn
|
|
|
- (end-of-line)
|
|
|
- (re-search-backward
|
|
|
- (concat "^[ \t]*#\\+BEGIN_CENTER") nil t)
|
|
|
- (org-element-collect-affiliated-keywords)))
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (contents-end (progn (re-search-forward
|
|
|
- (concat "^[ \t]*#\\+END_CENTER") nil t)
|
|
|
- (point-at-bol)))
|
|
|
+ (contents-end
|
|
|
+ (progn (re-search-forward "^[ \t]*#\\+END_CENTER" nil t)
|
|
|
+ (point-at-bol)))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol)))))
|
|
@@ -719,18 +715,17 @@ containing `:type', `:begin', `:end', `:contents-begin' and
|
|
|
`:contents-end', `:level', `:structure' and `:post-blank'
|
|
|
keywords.
|
|
|
|
|
|
-Assume point is at one of the list items."
|
|
|
+Assume point is at the beginning of the list."
|
|
|
(save-excursion
|
|
|
(let* ((struct (or structure (org-list-struct)))
|
|
|
(prevs (org-list-prevs-alist struct))
|
|
|
(parents (org-list-parents-alist struct))
|
|
|
(type (org-list-get-list-type (point) struct prevs))
|
|
|
- (contents-begin (goto-char
|
|
|
- (org-list-get-list-begin (point) struct prevs)))
|
|
|
+ (contents-begin (point))
|
|
|
(keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
- (contents-end (goto-char
|
|
|
- (org-list-get-list-end (point) struct prevs)))
|
|
|
+ (contents-end
|
|
|
+ (goto-char (org-list-get-list-end (point) struct prevs)))
|
|
|
(end (save-excursion (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol))))
|
|
|
(level 0))
|
|
@@ -773,19 +768,14 @@ Return a list whose CAR is `quote-block' and CDR is a plist
|
|
|
containing `:begin', `:end', `:hiddenp', `:contents-begin',
|
|
|
`:contents-end' and `:post-blank' keywords.
|
|
|
|
|
|
-Assume point is at beginning or end of the block."
|
|
|
+Assume point is at the beginning of the block."
|
|
|
(save-excursion
|
|
|
(let* ((case-fold-search t)
|
|
|
- (keywords (progn
|
|
|
- (end-of-line)
|
|
|
- (re-search-backward
|
|
|
- (concat "^[ \t]*#\\+BEGIN_QUOTE") nil t)
|
|
|
- (org-element-collect-affiliated-keywords)))
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (contents-end (progn (re-search-forward
|
|
|
- (concat "^[ \t]*#\\+END_QUOTE") nil t)
|
|
|
+ (contents-end (progn (re-search-forward "^[ \t]*#\\+END_QUOTE" nil t)
|
|
|
(point-at-bol)))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
@@ -848,23 +838,18 @@ Return a list whose CAR is `special-block' and CDR is a plist
|
|
|
containing `:type', `:begin', `:end', `:hiddenp',
|
|
|
`:contents-begin', `:contents-end' and `:post-blank' keywords.
|
|
|
|
|
|
-Assume point is at beginning or end of the block."
|
|
|
+Assume point is at the beginning of the block."
|
|
|
(save-excursion
|
|
|
(let* ((case-fold-search t)
|
|
|
- (type (progn (looking-at
|
|
|
- "[ \t]*#\\+\\(?:BEGIN\\|END\\)_\\([-A-Za-z0-9]+\\)")
|
|
|
+ (type (progn (looking-at "[ \t]*#\\+BEGIN_\\([-A-Za-z0-9]+\\)")
|
|
|
(org-match-string-no-properties 1)))
|
|
|
- (keywords (progn
|
|
|
- (end-of-line)
|
|
|
- (re-search-backward
|
|
|
- (concat "^[ \t]*#\\+BEGIN_" type) nil t)
|
|
|
- (org-element-collect-affiliated-keywords)))
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (contents-end (progn (re-search-forward
|
|
|
- (concat "^[ \t]*#\\+END_" type) nil t)
|
|
|
- (point-at-bol)))
|
|
|
+ (contents-end
|
|
|
+ (progn (re-search-forward (concat "^[ \t]*#\\+END_" type) nil t)
|
|
|
+ (point-at-bol)))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol)))))
|
|
@@ -986,45 +971,35 @@ CONTENTS is nil."
|
|
|
|
|
|
Return a list whose CAR is `comment' and CDR is a plist
|
|
|
containing `:begin', `:end', `:value' and `:post-blank'
|
|
|
-keywords."
|
|
|
- (let (beg-coms begin end end-coms keywords)
|
|
|
- (save-excursion
|
|
|
- (if (looking-at "#")
|
|
|
- ;; First type of comment: comments at column 0.
|
|
|
- (let ((comment-re "^\\([^#]\\|#\\+[a-z]\\)"))
|
|
|
- (save-excursion
|
|
|
- (re-search-backward comment-re nil 'move)
|
|
|
- (if (bobp) (setq keywords nil beg-coms (point))
|
|
|
- (forward-line)
|
|
|
- (setq keywords (org-element-collect-affiliated-keywords)
|
|
|
- beg-coms (point))))
|
|
|
- (re-search-forward comment-re nil 'move)
|
|
|
- (setq end-coms (if (eobp) (point) (match-beginning 0))))
|
|
|
- ;; Second type of comment: indented comments.
|
|
|
- (let ((comment-re "[ \t]*#\\+\\(?: \\|$\\)"))
|
|
|
- (unless (bobp)
|
|
|
- (while (and (not (bobp)) (looking-at comment-re))
|
|
|
- (forward-line -1))
|
|
|
- (unless (looking-at comment-re) (forward-line)))
|
|
|
- (setq beg-coms (point))
|
|
|
- (setq keywords (org-element-collect-affiliated-keywords))
|
|
|
- ;; Get comments ending. This may not be accurate if
|
|
|
- ;; commented lines within an item are followed by commented
|
|
|
- ;; lines outside of the list. Though, parser will always
|
|
|
- ;; get it right as it already knows surrounding element and
|
|
|
- ;; has narrowed buffer to its contents.
|
|
|
- (while (looking-at comment-re) (forward-line))
|
|
|
- (setq end-coms (point))))
|
|
|
- ;; Find position after blank.
|
|
|
- (goto-char end-coms)
|
|
|
- (org-skip-whitespace)
|
|
|
- (setq end (if (eobp) (point) (point-at-bol))))
|
|
|
- `(comment
|
|
|
- (:begin ,(or (car keywords) beg-coms)
|
|
|
- :end ,end
|
|
|
- :value ,(buffer-substring-no-properties beg-coms end-coms)
|
|
|
- :post-blank ,(count-lines end-coms end)
|
|
|
- ,@(cadr keywords)))))
|
|
|
+keywords.
|
|
|
+
|
|
|
+Assume point is at comment beginning."
|
|
|
+ (save-excursion
|
|
|
+ (let* ((com-beg (point))
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
+ (begin (car keywords))
|
|
|
+ (com-end
|
|
|
+ ;; Get comments ending. This may not be accurate if
|
|
|
+ ;; commented lines within an item are followed by
|
|
|
+ ;; commented lines outside of a list. Though, parser will
|
|
|
+ ;; always get it right as it already knows surrounding
|
|
|
+ ;; element and has narrowed buffer to its contents.
|
|
|
+ (if (looking-at "#")
|
|
|
+ (if (re-search-forward "^\\([^#]\\|#\\+[a-z]\\)" nil 'move)
|
|
|
+ (progn (goto-char (match-beginning 0)) (point))
|
|
|
+ (point))
|
|
|
+ (while (looking-at "[ \t]*#\\+\\(?: \\|$\\)")
|
|
|
+ (forward-line))
|
|
|
+ (point)))
|
|
|
+ (end (progn (goto-char com-end)
|
|
|
+ (org-skip-whitespace)
|
|
|
+ (if (eobp) (point) (point-at-bol)))))
|
|
|
+ `(comment
|
|
|
+ (:begin ,(or (car keywords) com-beg)
|
|
|
+ :end ,end
|
|
|
+ :value ,(buffer-substring-no-properties com-beg com-end)
|
|
|
+ :post-blank ,(count-lines com-end end)
|
|
|
+ ,@(cadr keywords))))))
|
|
|
|
|
|
(defun org-element-comment-interpreter (comment contents)
|
|
|
"Interpret COMMENT element as Org syntax.
|
|
@@ -1039,19 +1014,18 @@ CONTENTS is nil."
|
|
|
|
|
|
Return a list whose CAR is `comment-block' and CDR is a plist
|
|
|
containing `:begin', `:end', `:hiddenp', `:value' and
|
|
|
-`:post-blank' keywords."
|
|
|
+`:post-blank' keywords.
|
|
|
+
|
|
|
+Assume point is at comment block beginning."
|
|
|
(save-excursion
|
|
|
- (end-of-line)
|
|
|
(let* ((case-fold-search t)
|
|
|
- (keywords (progn
|
|
|
- (re-search-backward "^[ \t]*#\\+BEGIN_COMMENT" nil t)
|
|
|
- (org-element-collect-affiliated-keywords)))
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (contents-end (progn (re-search-forward
|
|
|
- "^[ \t]*#\\+END_COMMENT" nil t)
|
|
|
- (point-at-bol)))
|
|
|
+ (contents-end
|
|
|
+ (progn (re-search-forward "^[ \t]*#\\+END_COMMENT" nil t)
|
|
|
+ (point-at-bol)))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol))))
|
|
@@ -1081,12 +1055,10 @@ containing `:begin', `:end', `:number-lines', `:preserve-indent',
|
|
|
`:retain-labels', `:use-labels', `:label-fmt', `:hiddenp',
|
|
|
`:switches', `:value' and `:post-blank' keywords."
|
|
|
(save-excursion
|
|
|
- (end-of-line)
|
|
|
(let* ((case-fold-search t)
|
|
|
- (switches (progn
|
|
|
- (re-search-backward
|
|
|
- "^[ \t]*#\\+BEGIN_EXAMPLE\\(?: +\\(.*\\)\\)?" nil t)
|
|
|
- (org-match-string-no-properties 1)))
|
|
|
+ (switches
|
|
|
+ (progn (looking-at "^[ \t]*#\\+BEGIN_EXAMPLE\\(?: +\\(.*\\)\\)?")
|
|
|
+ (org-match-string-no-properties 1)))
|
|
|
;; Switches analysis
|
|
|
(number-lines (cond ((not switches) nil)
|
|
|
((string-match "-n\\>" switches) 'new)
|
|
@@ -1104,16 +1076,16 @@ containing `:begin', `:end', `:number-lines', `:preserve-indent',
|
|
|
(or (not switches)
|
|
|
(and retain-labels (not (string-match "-k\\>" switches)))))
|
|
|
(label-fmt (and switches
|
|
|
- (string-match "-l +\"\\([^\"\n]+\\)\"" switches)
|
|
|
- (match-string 1 switches)))
|
|
|
+ (string-match "-l +\"\\([^\"\n]+\\)\"" switches)
|
|
|
+ (match-string 1 switches)))
|
|
|
;; Standard block parsing.
|
|
|
(keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (contents-end (progn
|
|
|
- (re-search-forward "^[ \t]*#\\+END_EXAMPLE" nil t)
|
|
|
- (point-at-bol)))
|
|
|
+ (contents-end
|
|
|
+ (progn (re-search-forward "^[ \t]*#\\+END_EXAMPLE" nil t)
|
|
|
+ (point-at-bol)))
|
|
|
(value (buffer-substring-no-properties contents-begin contents-end))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
@@ -1149,22 +1121,20 @@ CONTENTS is nil."
|
|
|
|
|
|
Return a list whose CAR is `export-block' and CDR is a plist
|
|
|
containing `:begin', `:end', `:type', `:hiddenp', `:value' and
|
|
|
-`:post-blank' keywords."
|
|
|
+`:post-blank' keywords.
|
|
|
+
|
|
|
+Assume point is at export-block beginning."
|
|
|
(save-excursion
|
|
|
- (end-of-line)
|
|
|
(let* ((case-fold-search t)
|
|
|
- (contents)
|
|
|
- (type (progn (re-search-backward
|
|
|
- (concat "[ \t]*#\\+BEGIN_"
|
|
|
- (org-re "\\([[:alnum:]]+\\)")))
|
|
|
+ (type (progn (looking-at "[ \t]*#\\+BEGIN_\\([A-Za-z0-9]+\\)")
|
|
|
(upcase (org-match-string-no-properties 1))))
|
|
|
(keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (contents-end (progn (re-search-forward
|
|
|
- (concat "^[ \t]*#\\+END_" type) nil t)
|
|
|
- (point-at-bol)))
|
|
|
+ (contents-end
|
|
|
+ (progn (re-search-forward (concat "^[ \t]*#\\+END_" type) nil t)
|
|
|
+ (point-at-bol)))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol))))
|
|
@@ -1193,42 +1163,26 @@ CONTENTS is nil."
|
|
|
"Parse a fixed-width section.
|
|
|
|
|
|
Return a list whose CAR is `fixed-width' and CDR is a plist
|
|
|
-containing `:begin', `:end', `:value' and `:post-blank'
|
|
|
-keywords."
|
|
|
- (let ((fixed-re "[ \t]*:\\( \\|$\\)")
|
|
|
- beg-area begin end value pos-before-blank keywords)
|
|
|
- (save-excursion
|
|
|
- ;; Move to the beginning of the fixed-width area.
|
|
|
- (unless (bobp)
|
|
|
- (while (and (not (bobp)) (looking-at fixed-re))
|
|
|
- (forward-line -1))
|
|
|
- (unless (looking-at fixed-re) (forward-line 1)))
|
|
|
- (setq beg-area (point))
|
|
|
- ;; Get affiliated keywords, if any.
|
|
|
- (setq keywords (org-element-collect-affiliated-keywords))
|
|
|
- ;; Store true beginning of element.
|
|
|
- (setq begin (car keywords))
|
|
|
- ;; Get ending of fixed-width area. If point is in a list,
|
|
|
- ;; ensure to not get outside of it.
|
|
|
- (let* ((itemp (org-in-item-p))
|
|
|
- (max-pos (if itemp
|
|
|
- (org-list-get-bottom-point
|
|
|
- (save-excursion (goto-char itemp) (org-list-struct)))
|
|
|
- (point-max))))
|
|
|
- (while (and (looking-at fixed-re) (< (point) max-pos))
|
|
|
- (forward-line)))
|
|
|
- (setq pos-before-blank (point))
|
|
|
- ;; Find position after blank
|
|
|
- (org-skip-whitespace)
|
|
|
- (setq end (if (eobp) (point) (point-at-bol)))
|
|
|
- ;; Extract value.
|
|
|
- (setq value (buffer-substring-no-properties beg-area pos-before-blank)))
|
|
|
- `(fixed-width
|
|
|
- (:begin ,begin
|
|
|
- :end ,end
|
|
|
- :value ,value
|
|
|
- :post-blank ,(count-lines pos-before-blank end)
|
|
|
- ,@(cadr keywords)))))
|
|
|
+containing `:begin', `:end', `:value' and `:post-blank' keywords.
|
|
|
+
|
|
|
+Assume point is at the beginning of the fixed-width area."
|
|
|
+ (save-excursion
|
|
|
+ (let* ((beg-area (point))
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
+ (begin (car keywords))
|
|
|
+ (end-area
|
|
|
+ (progn (while (looking-at "[ \t]*:\\( \\|$\\)")
|
|
|
+ (forward-line))
|
|
|
+ (point)))
|
|
|
+ (end (progn (org-skip-whitespace)
|
|
|
+ (if (eobp) (point) (point-at-bol))))
|
|
|
+ (value (buffer-substring-no-properties beg-area end-area)))
|
|
|
+ `(fixed-width
|
|
|
+ (:begin ,begin
|
|
|
+ :end ,end
|
|
|
+ :value ,value
|
|
|
+ :post-blank ,(count-lines end-area end)
|
|
|
+ ,@(cadr keywords))))))
|
|
|
|
|
|
(defun org-element-fixed-width-interpreter (fixed-width contents)
|
|
|
"Interpret FIXED-WIDTH element as Org syntax.
|
|
@@ -1241,9 +1195,8 @@ CONTENTS is nil."
|
|
|
(defun org-element-horizontal-rule-parser ()
|
|
|
"Parse an horizontal rule.
|
|
|
|
|
|
- Return a list whose CAR is `horizontal-rule' and CDR is
|
|
|
- a plist containing `:begin', `:end' and `:post-blank'
|
|
|
- keywords."
|
|
|
+Return a list whose CAR is `horizontal-rule' and CDR is a plist
|
|
|
+containing `:begin', `:end' and `:post-blank' keywords."
|
|
|
(save-excursion
|
|
|
(let* ((keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
@@ -1271,7 +1224,8 @@ Return a list whose CAR is `keyword' and CDR is a plist
|
|
|
containing `:key', `:value', `:begin', `:end' and `:post-blank'
|
|
|
keywords."
|
|
|
(save-excursion
|
|
|
- (let* ((begin (point))
|
|
|
+ (let* ((case-fold-search t)
|
|
|
+ (begin (point))
|
|
|
(key (progn (looking-at
|
|
|
"[ \t]*#\\+\\(\\(?:[a-z]+\\)\\(?:_[a-z]+\\)*\\):")
|
|
|
(upcase (org-match-string-no-properties 1))))
|
|
@@ -1302,11 +1256,12 @@ CONTENTS is nil."
|
|
|
|
|
|
Return a list whose CAR is `latex-environment' and CDR is a plist
|
|
|
containing `:begin', `:end', `:value' and `:post-blank'
|
|
|
-keywords."
|
|
|
+keywords.
|
|
|
+
|
|
|
+Assume point is at the beginning of the latex environment."
|
|
|
(save-excursion
|
|
|
- (end-of-line)
|
|
|
(let* ((case-fold-search t)
|
|
|
- (contents-begin (re-search-backward "^[ \t]*\\\\begin" nil t))
|
|
|
+ (contents-begin (point))
|
|
|
(keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
(contents-end (progn (re-search-forward "^[ \t]*\\\\end")
|
|
@@ -1342,12 +1297,11 @@ Assume point is at the beginning of the paragraph."
|
|
|
(let* ((contents-begin (point))
|
|
|
(keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
|
- (contents-end (progn
|
|
|
- (end-of-line)
|
|
|
- (if (re-search-forward
|
|
|
- org-element-paragraph-separate nil 'm)
|
|
|
- (progn (forward-line -1) (end-of-line) (point))
|
|
|
- (point))))
|
|
|
+ (contents-end
|
|
|
+ (progn (end-of-line)
|
|
|
+ (if (re-search-forward org-element-paragraph-separate nil 'm)
|
|
|
+ (progn (forward-line -1) (end-of-line) (point))
|
|
|
+ (point))))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol)))))
|
|
@@ -1422,28 +1376,27 @@ CONTENTS is nil."
|
|
|
|
|
|
Return a list whose CAR is `property-drawer' and CDR is a plist
|
|
|
containing `:begin', `:end', `:hiddenp', `:contents-begin',
|
|
|
-`:contents-end', `:properties' and `:post-blank' keywords."
|
|
|
+`:contents-end', `:properties' and `:post-blank' keywords.
|
|
|
+
|
|
|
+Assume point is at the beginning of the property drawer."
|
|
|
(save-excursion
|
|
|
(let ((case-fold-search t)
|
|
|
- (begin (progn (end-of-line)
|
|
|
- (re-search-backward org-property-start-re)
|
|
|
- (match-beginning 0)))
|
|
|
- (contents-begin (progn (forward-line) (point)))
|
|
|
+ (begin (point))
|
|
|
+ (prop-begin (progn (forward-line) (point)))
|
|
|
(hidden (org-truely-invisible-p))
|
|
|
- (properties (let (val)
|
|
|
- (while (not (looking-at "^[ \t]*:END:"))
|
|
|
- (when (looking-at
|
|
|
- (org-re
|
|
|
- "[ \t]*:\\([[:alpha:]][[:alnum:]_-]*\\):"))
|
|
|
- (push (cons (match-string 1)
|
|
|
- (org-trim
|
|
|
- (buffer-substring
|
|
|
- (match-end 0) (point-at-eol))))
|
|
|
- val))
|
|
|
- (forward-line))
|
|
|
- val))
|
|
|
- (contents-end (progn (re-search-forward "^[ \t]*:END:" nil t)
|
|
|
- (point-at-bol)))
|
|
|
+ (properties
|
|
|
+ (let (val)
|
|
|
+ (while (not (looking-at "^[ \t]*:END:"))
|
|
|
+ (when (looking-at "[ \t]*:\\([A-Za-z][-_A-Za-z0-9]*\\):")
|
|
|
+ (push (cons (org-match-string-no-properties 1)
|
|
|
+ (org-trim
|
|
|
+ (buffer-substring-no-properties
|
|
|
+ (match-end 0) (point-at-eol))))
|
|
|
+ val))
|
|
|
+ (forward-line))
|
|
|
+ val))
|
|
|
+ (prop-end (progn (re-search-forward "^[ \t]*:END:" nil t)
|
|
|
+ (point-at-bol)))
|
|
|
(pos-before-blank (progn (forward-line) (point)))
|
|
|
(end (progn (org-skip-whitespace)
|
|
|
(if (eobp) (point) (point-at-bol)))))
|
|
@@ -1508,16 +1461,21 @@ containing `:language', `:switches', `:parameters', `:begin',
|
|
|
|
|
|
Assume point is at the beginning of the block."
|
|
|
(save-excursion
|
|
|
- (looking-at
|
|
|
- (concat
|
|
|
- "^[ \t]*#\\+BEGIN_SRC"
|
|
|
- "\\(?: +\\(\\S-+\\)\\)?" ; language
|
|
|
- "\\(\\(?: +\\(?:-l \".*?\"\\|[-+][A-Za-z]\\)\\)+\\)?" ; switches
|
|
|
- "\\(.*\\)[ \t]*$")) ; parameters
|
|
|
(let* ((case-fold-search t)
|
|
|
(contents-begin (point))
|
|
|
+ ;; Get affiliated keywords.
|
|
|
+ (keywords (org-element-collect-affiliated-keywords))
|
|
|
+ ;; Get beginning position.
|
|
|
+ (begin (car keywords))
|
|
|
;; Get language as a string.
|
|
|
- (language (org-match-string-no-properties 1))
|
|
|
+ (language
|
|
|
+ (progn
|
|
|
+ (looking-at
|
|
|
+ (concat "^[ \t]*#\\+BEGIN_SRC"
|
|
|
+ "\\(?: +\\(\\S-+\\)\\)?"
|
|
|
+ "\\(\\(?: +\\(?:-l \".*?\"\\|[-+][A-Za-z]\\)\\)+\\)?"
|
|
|
+ "\\(.*\\)[ \t]*$"))
|
|
|
+ (org-match-string-no-properties 1)))
|
|
|
;; Get switches.
|
|
|
(switches (org-match-string-no-properties 2))
|
|
|
;; Get parameters.
|
|
@@ -1541,10 +1499,6 @@ Assume point is at the beginning of the block."
|
|
|
(use-labels
|
|
|
(or (not switches)
|
|
|
(and retain-labels (not (string-match "-k\\>" switches)))))
|
|
|
- ;; Get affiliated keywords.
|
|
|
- (keywords (org-element-collect-affiliated-keywords))
|
|
|
- ;; Get beginning position.
|
|
|
- (begin (car keywords))
|
|
|
;; Get position at end of block.
|
|
|
(contents-end (progn (re-search-forward "^[ \t]*#\\+END_SRC" nil t)
|
|
|
(forward-line)
|
|
@@ -1613,10 +1567,12 @@ CONTENTS is nil."
|
|
|
|
|
|
Return a list whose CAR is `table' and CDR is a plist containing
|
|
|
`:begin', `:end', `:tblfm', `:type', `:contents-begin',
|
|
|
-`:contents-end', `:value' and `:post-blank' keywords."
|
|
|
+`:contents-end', `:value' and `:post-blank' keywords.
|
|
|
+
|
|
|
+Assume point is at the beginning of the table."
|
|
|
(save-excursion
|
|
|
(let* ((case-fold-search t)
|
|
|
- (table-begin (goto-char (org-table-begin t)))
|
|
|
+ (table-begin (point))
|
|
|
(type (if (org-at-table.el-p) 'table.el 'org))
|
|
|
(keywords (org-element-collect-affiliated-keywords))
|
|
|
(begin (car keywords))
|
|
@@ -1632,9 +1588,9 @@ Return a list whose CAR is `table' and CDR is a plist containing
|
|
|
:end ,end
|
|
|
:type ,type
|
|
|
:tblfm ,tblfm
|
|
|
- ;; Only `org' tables have contents. `table.el'
|
|
|
- ;; tables use a `:value' property to store raw
|
|
|
- ;; table as a string.
|
|
|
+ ;; Only `org' tables have contents. `table.el' tables
|
|
|
+ ;; use a `:value' property to store raw table as
|
|
|
+ ;; a string.
|
|
|
:contents-begin ,(and (eq type 'org) table-begin)
|
|
|
:contents-end ,(and (eq type 'org) table-end)
|
|
|
:value ,(and (eq type 'table.el)
|