Function: org-element-latex-fragment-parser

org-element-latex-fragment-parser is a byte-compiled function defined in org-element.el.gz.

Signature

(org-element-latex-fragment-parser)

Documentation

Parse LaTeX fragment at point, if any.

When at a LaTeX fragment, return a new syntax node of latex-fragment type containing :value, :begin, :end, and :post-blank as properties. Otherwise, return nil.

Assume point is at the beginning of the LaTeX fragment.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
;;;; LaTeX Fragment

(defun org-element-latex-fragment-parser ()
  "Parse LaTeX fragment at point, if any.

When at a LaTeX fragment, return a new syntax node of `latex-fragment'
type containing `:value', `:begin', `:end', and `:post-blank' as
properties.  Otherwise, return nil.

Assume point is at the beginning of the LaTeX fragment."
  (catch 'no-object
    (save-excursion
      (let* ((begin (point))
	     (after-fragment
	      (cond
	       ((not (eq ?$ (char-after)))
		(pcase (char-after (1+ (point)))
		  (?\( (search-forward "\\)" nil t))
		  (?\[ (search-forward "\\]" nil t))
		  (_
		   ;; Macro.
		   (and (looking-at "\\\\[a-zA-Z]+\\*?\\(\\(\\[[^][\n{}]*\\]\\)\
\\|\\({[^{}\n]*}\\)\\)*")
			(match-end 0)))))
	       ((eq ?$ (char-after (1+ (point))))
		(search-forward "$$" nil t 2))
	       (t
		(and (not (eq ?$ (char-before)))
		     (not (memq (char-after (1+ (point)))
				'(?\s ?\t ?\n ?, ?. ?\;)))
		     (search-forward "$" nil t 2)
		     (not (memq (char-before (match-beginning 0))
				'(?\s ?\t ?\n ?, ?.)))
		     (looking-at-p
		      "\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|'\\|$\\)")
		     (point)))))
	     (post-blank
	      (if (not after-fragment) (throw 'no-object nil)
		(goto-char after-fragment)
		(skip-chars-forward " \t")))
	     (end (point)))
	(org-element-create
         'latex-fragment
	 (list :value
               (org-element-deferred-create
                t #'org-element--substring
                0 (- after-fragment begin))
	       :begin begin
	       :end end
	       :post-blank post-blank))))))