[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org
From: |
Ihor Radchenko |
Subject: |
[PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’ |
Date: |
Fri, 19 Nov 2021 19:38:28 +0800 |
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
>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
>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
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, (continued)
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Max Nikulin, 2021/11/17
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Samuel Wales, 2021/11/17
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Ihor Radchenko, 2021/11/18
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Nicolas Goaziou, 2021/11/18
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Ihor Radchenko, 2021/11/18
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Nicolas Goaziou, 2021/11/19
- [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’,
Ihor Radchenko <=
- Re: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Nicolas Goaziou, 2021/11/19
- Re: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Ihor Radchenko, 2021/11/19
- Re: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Nicolas Goaziou, 2021/11/20
- Re: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Ihor Radchenko, 2021/11/21
- Re: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Nicolas Goaziou, 2021/11/22
- Re: [PATCH] Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Ihor Radchenko, 2021/11/23
- org parser and priorities of inline elements, Max Nikulin, 2021/11/27
- Re: org parser and priorities of inline elements, Nicolas Goaziou, 2021/11/27
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Max Nikulin, 2021/11/19
- Re: c47b535bb origin/main org-element: Remove dependency on ‘org-emphasis-regexp-components’, Max Nikulin, 2021/11/20