From: chris <inkbottle007@gmail.com>
To: orgmode <emacs-orgmode@gnu.org>
Subject: Re: Using backticks for the inline code delimiter? (now with `org-publish-all`)
Date: Mon, 27 Nov 2023 07:54:43 +0000 [thread overview]
Message-ID: <5030515.31r3eYUQgx@nixos> (raw)
In-Reply-To: <4396644.LvFx2qVVIh@pluto>
The code below is working fine as long as I stay in `org-mode`. But it shows
its limitations when I do `M-x org-publish-all`, at which time, instead of
having the text with style verbatim, I get the text within backticks.
Is there any improvement you could think of that would fix that?
Thanks,
Chris
On Saturday, March 19, 2022 3:17:10 AM UTC you wrote:
> > George Mauer writes:
> >> is there a straightforward way to extend the org parser to do this?
> >
> > I don't think so. It seems the emphasis markers are hard-coded
> > in various places.
> >
> > From a quick look at the code, you'd have to customize
> > `org-emphasis-alist` and redefine `org-set-emph-re` and
> > `org-do-emphasis-faces`. Maybe that'd be enough.
>
> I did just what you said, and I've inserted what's bellow, somewhere in my
> `init.org` / `init.el`, before anything `org-mode` related (save for two
> `hook`): (Note it is an almost exact copy from `org.el`, I've only changed
> a few characters. And added the `advice-add override`.)
>
> #+begin_src emacs-lisp
> (defun org-set-emph-re-fixed (var val)
> "Set variable and compute the emphasis regular expression."
> (set var val)
> (when (and (boundp 'org-emphasis-alist)
> (boundp 'org-emphasis-regexp-components)
> org-emphasis-alist org-emphasis-regexp-components)
> (pcase-let*
> ((`(,pre ,post ,border ,body ,nl) org-emphasis-regexp-components)
> (body (if (<= nl 0) body
> (format "%s*?\\(?:\n%s*?\\)\\{0,%d\\}" body body nl)))
> (template
> (format (concat "\\([%s]\\|^\\)" ;before markers
> "\\(\\([%%s]\\)\\([^%s]\\|[^%s]%s[^%s]\\)\\3\\)"
> "\\([%s]\\|$\\)") ;after markers
> pre border border body border post)))
> (setq org-emph-re (format template "*/_+"))
> (setq org-verbatim-re (format template "=~`")))))
>
> (advice-add 'org-set-emph-re :override #'org-set-emph-re-fixed)
> #+end_src
>
> #+begin_src emacs-lisp
> (defun org-do-emphasis-faces-fixed (limit)
> "Run through the buffer and emphasize strings."
> (let ((quick-re (format "\\([%s]\\|^\\)\\([~`=*/_+]\\)"
> (car org-emphasis-regexp-components))))
> (catch :exit
> (while (re-search-forward quick-re limit t)
> (let* ((marker (match-string 2))
> (verbatim? (member marker '("~" "`" "="))))
> (when (save-excursion
> (goto-char (match-beginning 0))
> (and
> ;; Do not match table hlines.
> (not (and (equal marker "+")
> (org-match-line
> "[ \t]*\\(|[-+]+|?\\|\\+[-+]+\\+\\)[
> \t]*$"))) ;; Do not match headline stars. Do not consider ;; stars of a
> headline as closing marker for bold ;; markup either.
> (not (and (equal marker "*")
> (save-excursion
> (forward-char)
> (skip-chars-backward "*")
> (looking-at-p org-outline-regexp-bol))))
> ;; Match full emphasis markup regexp.
> (looking-at (if verbatim? org-verbatim-re org-emph-re))
> ;; Do not span over paragraph boundaries.
> (not (string-match-p org-element-paragraph-separate
> (match-string 2)))
> ;; Do not span over cells in table rows.
> (not (and (save-match-data (org-match-line "[ \t]*|"))
> (string-match-p "|" (match-string 4))))))
> (pcase-let ((`(,_ ,face ,_) (assoc marker org-emphasis-alist))
> (m (if org-hide-emphasis-markers 4 2)))
> (font-lock-prepend-text-property
> (match-beginning m) (match-end m) 'face face)
> (when verbatim?
> (org-remove-flyspell-overlays-in
> (match-beginning 0) (match-end 0))
> (remove-text-properties (match-beginning 2) (match-end 2)
> '(display t invisible t intangible
> t))) (add-text-properties (match-beginning 2) (match-end 2)
> '(font-lock-multiline t org-emphasis t)) (when (and
> org-hide-emphasis-markers
> (not (org-at-comment-p)))
> (add-text-properties (match-end 4) (match-beginning 5)
> '(invisible t))
> (add-text-properties (match-beginning 3) (match-end 3)
> '(invisible t)))
> (throw :exit t))))))))
next prev parent reply other threads:[~2023-11-27 7:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-19 3:17 Using backticks for the inline code delimeter? chris
2022-03-19 3:24 ` chris
2023-11-27 7:54 ` chris [this message]
2023-12-04 13:06 ` Using backticks for the inline code delimiter? (now with `org-publish-all`) Ihor Radchenko
2023-12-07 2:02 ` chris
2023-12-07 15:13 ` Ihor Radchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5030515.31r3eYUQgx@nixos \
--to=inkbottle007@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).