From: Ihor Radchenko <yantar92@gmail.com>
To: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Cc: Max Nikulin <manikulin@gmail.com>, emacs-orgmode@gnu.org
Subject: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’
Date: Fri, 19 Nov 2021 19:38:28 +0800 [thread overview]
Message-ID: <87mtm09xzf.fsf@localhost> (raw)
In-Reply-To: <8735nsv9qo.fsf@nicolasgoaziou.fr>
[-- Attachment #1: Type: text/plain, Size: 809 bytes --]
Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
> You can use a zero-width space to help Org sorting out the ambiguity,
> for example (| denotes the zero-width space):
>
> /|A link [[https://orgmode.org/?oops=true][Org Mode]]
>
> /A code ~user|/?my-user-variable~ with slash/
Makes sense. Maybe we should also mention it in the Markup section of
the manual? I attached a tentative patch.
Also, part of the problem with
/|A link [[https://orgmode.org/?oops=true][Org Mode]]
is that the link is emphasised despite not being parser as a link by
org-element. I attached a patch for our link/emphasis fontification that
makes sure that fontification is always consistent with the parser. The
patch might hit the performance slightly, but I do not see obvious
slowdown using my 15Mb notes file.
Best,
Ihor
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-manual.org-Clarify-how-to-handle-markup-ambiguit.patch --]
[-- Type: text/x-diff, Size: 1410 bytes --]
From 3b4a857582e848e9688a49c01b853ed577dd4935 Mon Sep 17 00:00:00 2001
Message-Id: <3b4a857582e848e9688a49c01b853ed577dd4935.1637321577.git.yantar92@gmail.com>
From: Ihor Radchenko <yantar92@gmail.com>
Date: Fri, 19 Nov 2021 19:27:56 +0800
Subject: [PATCH] org-manual.org: Clarify how to handle markup ambiguity
* doc/org-manual.org (Emphasis and Monospace): Advice users to insert
zero width space when Org does not parse emphasized text correctly.
---
doc/org-manual.org | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/doc/org-manual.org b/doc/org-manual.org
index a38dbec4a..1db993d3d 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -10818,6 +10818,18 @@ ** Emphasis and Monospace
~org-fontify-emphasized-text~ to ~nil~. To narrow down the list of
available markup syntax, you can customize ~org-emphasis-alist~.
+Sometimes, Org mode has difficulties recognising markup. It usually
+happens when markup marker symbols are present inside verbatim or code
+blocks:
+
+#+begin_example
+/The whole line is supposed to be marked italic, but the following
+~user/?variable~ contains italics =/= marker and confuses Org parser/.
+#+end_example
+
+You can use zero width space to help Org sorting out the ambiguity.
+See [[*Escape Character]] for more details.
+
** Subscripts and Superscripts
:PROPERTIES:
:DESCRIPTION: Simple syntax for raising/lowering text.
--
2.32.0
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0001-org.el-Make-emphasis-and-link-fontification-consiste.patch --]
[-- Type: text/x-diff, Size: 4619 bytes --]
From d5413e772fe6aedb8a8aa094f98c96fc20b82d3a Mon Sep 17 00:00:00 2001
Message-Id: <d5413e772fe6aedb8a8aa094f98c96fc20b82d3a.1637321613.git.yantar92@gmail.com>
From: Ihor Radchenko <yantar92@gmail.com>
Date: Fri, 19 Nov 2021 19:13:54 +0800
Subject: [PATCH] org.el: Make emphasis and link fontification consistent with
parser
* lisp/org.el (org-do-emphasis-faces):
(org-activate-links): Do not fontify just based on approximate
regexps. Make sure the current object is emphasis.
---
lisp/org.el | 62 ++++++++++++++++++++++++++++-------------------------
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index cb1b58c51..d9f073100 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -5106,12 +5106,15 @@ (defun org-do-emphasis-faces (limit)
(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))))))
+ ;; Verify that we are at the right object.
+ (let ((object (save-excursion
+ (save-match-data
+ (goto-char (match-beginning 2))
+ (org-element-context)))))
+ (and (memq (org-element-type object)
+ '(bold italic verbatim code strike-through))
+ (eq (match-beginning 2)
+ (org-element-property :begin object))))))
(pcase-let ((`(,_ ,face ,_) (assoc marker org-emphasis-alist))
(m (if org-hide-emphasis-markers 4 2)))
(font-lock-prepend-text-property
@@ -5206,7 +5209,7 @@ (defun org-activate-links (limit)
(eq 'org-tag face))))))
(let* ((link-object (save-excursion
(goto-char start)
- (save-match-data (org-element-link-parser))))
+ (save-match-data (org-element-context))))
(link (org-element-property :raw-link link-object))
(type (org-element-property :type link-object))
(path (org-element-property :path link-object))
@@ -5229,29 +5232,30 @@ (defun org-activate-links (limit)
((and (pred functionp) f) (funcall f))
(_ `(:uri ,link)))
'font-lock-multiline t)))
- (org-remove-flyspell-overlays-in start end)
- (org-rear-nonsticky-at end)
- (if (not (eq 'bracket style))
- (progn
+ (when (eq (org-element-type link-object) 'link)
+ (org-remove-flyspell-overlays-in start end)
+ (org-rear-nonsticky-at end)
+ (if (not (eq 'bracket style))
+ (progn
+ (add-face-text-property start end face-property)
+ (add-text-properties start end properties))
+ ;; Handle invisible parts in bracket links.
+ (remove-text-properties start end '(invisible nil))
+ (let ((hidden
+ (append `(invisible
+ ,(or (org-link-get-parameter type :display)
+ 'org-link))
+ properties)))
+ (add-text-properties start visible-start hidden)
(add-face-text-property start end face-property)
- (add-text-properties start end properties))
- ;; Handle invisible parts in bracket links.
- (remove-text-properties start end '(invisible nil))
- (let ((hidden
- (append `(invisible
- ,(or (org-link-get-parameter type :display)
- 'org-link))
- properties)))
- (add-text-properties start visible-start hidden)
- (add-face-text-property start end face-property)
- (add-text-properties visible-start visible-end properties)
- (add-text-properties visible-end end hidden)
- (org-rear-nonsticky-at visible-start)
- (org-rear-nonsticky-at visible-end)))
- (let ((f (org-link-get-parameter type :activate-func)))
- (when (functionp f)
- (funcall f start end path (eq style 'bracket))))
- (throw :exit t))))) ;signal success
+ (add-text-properties visible-start visible-end properties)
+ (add-text-properties visible-end end hidden)
+ (org-rear-nonsticky-at visible-start)
+ (org-rear-nonsticky-at visible-end)))
+ (let ((f (org-link-get-parameter type :activate-func)))
+ (when (functionp f)
+ (funcall f start end path (eq style 'bracket))))
+ (throw :exit t)))))) ;signal success
nil))
(defun org-activate-code (limit)
--
2.32.0
next prev parent reply other threads:[~2021-11-19 11:39 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-15 0:53 c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’ Ihor Radchenko
2021-11-15 9:56 ` Nicolas Goaziou
2021-11-15 15:20 ` Ihor Radchenko
2021-11-15 16:25 ` Max Nikulin
2021-11-16 7:43 ` Ihor Radchenko
2021-11-16 21:56 ` Samuel Wales
2021-11-16 22:16 ` Samuel Wales
2021-11-17 16:44 ` Max Nikulin
2021-11-17 22:44 ` Samuel Wales
2021-11-18 12:25 ` Ihor Radchenko
2021-11-18 12:35 ` Nicolas Goaziou
2021-11-18 12:55 ` Ihor Radchenko
2021-11-19 8:18 ` Nicolas Goaziou
2021-11-19 11:38 ` Ihor Radchenko [this message]
2021-11-19 12:37 ` [PATCH] " Nicolas Goaziou
2021-11-19 13:53 ` Ihor Radchenko
2021-11-20 18:25 ` Nicolas Goaziou
2021-11-21 9:28 ` Ihor Radchenko
2021-11-22 18:44 ` Nicolas Goaziou
2021-11-23 14:28 ` Ihor Radchenko
2021-11-27 12:16 ` org parser and priorities of inline elements Max Nikulin
2021-11-27 19:02 ` Nicolas Goaziou
2023-07-17 11:51 ` Org markup and non-ASCII punctuation (was: org parser and priorities of inline elements) Ihor Radchenko
2023-07-18 0:03 ` Tom Gillespie
2023-07-18 5:07 ` Ihor Radchenko
2023-07-18 5:40 ` Tom Gillespie
2023-07-18 9:45 ` Ihor Radchenko
2021-11-19 16:34 ` c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’ Max Nikulin
2021-11-20 12:02 ` Max Nikulin
2021-11-21 10:01 ` Ihor Radchenko
2021-11-21 16:36 ` Max Nikulin
2021-11-23 17:05 ` [PATCH] org.el: Warning for unsupported markers in `org-set-emphasis-alist' Max Nikulin
2022-11-04 6:53 ` Ihor Radchenko
2022-11-04 12:31 ` Max Nikulin
2022-11-05 8:21 ` Ihor Radchenko
2023-02-02 10:53 ` [PATCH v5] " Ihor Radchenko
2023-02-06 15:11 ` Max Nikulin
2023-02-06 16:49 ` Max Nikulin
2023-02-07 10:47 ` Should we obsolete org-emphasis-alist? (was: [PATCH v5] org.el: Warning for unsupported markers in `org-set-emphasis-alist') Ihor Radchenko
2023-02-07 12:22 ` Timothy
2023-02-09 12:11 ` Max Nikulin
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=87mtm09xzf.fsf@localhost \
--to=yantar92@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=mail@nicolasgoaziou.fr \
--cc=manikulin@gmail.com \
/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).