Function: org-element--parse-generic-emphasis
org-element--parse-generic-emphasis is a byte-compiled function
defined in org-element.el.gz.
Signature
(org-element--parse-generic-emphasis MARK TYPE)
Documentation
Parse emphasis object at point, if any.
MARK is the delimiter string used. TYPE is a symbol among
bold, code, italic, strike-through, underline, and
verbatim.
Assume point is at first MARK.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
;;; Objects
;;
;; Unlike to elements, raw text can be found between objects. Hence,
;; `org-element--object-lex' is provided to find the next object in
;; buffer.
;;
;; Some object types (e.g., `italic') are recursive. Restrictions on
;; object types they can contain will be specified in
;; `org-element-object-restrictions'.
;;
;; Creating a new type of object requires to alter
;; `org-element--object-regexp' and `org-element--object-lex', add the
;; new type in `org-element-all-objects', and possibly add
;; restrictions in `org-element-object-restrictions'.
;;;; Bold
(defun org-element--parse-generic-emphasis (mark type)
"Parse emphasis object at point, if any.
MARK is the delimiter string used. TYPE is a symbol among
`bold', `code', `italic', `strike-through', `underline', and
`verbatim'.
Assume point is at first MARK."
(save-excursion
(let ((origin (point)))
(unless (bolp) (forward-char -1))
(let ((opening-re
(rx-to-string
`(seq (or line-start (any space ?- ?\( ?' ?\" ?\{))
,mark
(not space)))))
(when (looking-at opening-re)
(goto-char (1+ origin))
(let ((closing-re
(rx-to-string
`(seq
(not space)
(group ,mark)
(or (any space ?- ?. ?, ?\; ?: ?! ?? ?' ?\" ?\) ?\} ?\\ ?\[)
line-end)))))
(when (re-search-forward closing-re nil t)
(let ((closing (match-end 1)))
(goto-char closing)
(let* ((post-blank (skip-chars-forward " \t"))
(contents-begin (1+ origin))
(contents-end (1- closing)))
(list type
(append
(list :begin origin
:end (point)
:post-blank post-blank)
(if (memq type '(code verbatim))
(list :value
(and (memq type '(code verbatim))
(buffer-substring
contents-begin contents-end)))
(list :contents-begin contents-begin
:contents-end contents-end)))))))))))))