emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* The + character creating strike-through markup within in-line literal / code blocks
@ 2018-06-24  7:57 John Magolske
  2018-06-24  8:24 ` Nicolas Goaziou
  0 siblings, 1 reply; 4+ messages in thread
From: John Magolske @ 2018-06-24  7:57 UTC (permalink / raw)
  To: emacs-orgmode


I'd like to enter some in-line literal code in an org document
covering OCaml. For example, in this:

    in the expression (x +. y) the +. is a function ...

to show in-line code as literal I tried:

    in the expression =(x +. y)= the =+.= is a function ...

being under the impression that bracketing text with = would enclose
everything within to be literal. But what's happening -- as evidenced
by syntax coloring -- is that the first and second + characters here
create a strike-through region from the middle of one literal region
to the middle of the other. With (setq org-hide-emphasis-markers t)
I'm seeing this:

    in the expression (x . y) the . is a function ...

The + is acting as a markup character, whereas when the above example
is entered like so:

: in the expression (x +. y) the +. is a function ...

it all shows up just fine with the + coming through as a literal
character.

Is there some way to get the + to show up as literal within in-line
sections enclosed by = or ~ ? I suppose I could do something like:

    in the expression src_ocaml{(a +. b)} the src_ocaml{(+.)} is a function ...

But was hoping to use the more succinct = or ~ syntax.

Also tried to remove strike-through emphasis altogether by commenting
out the strike-through section in org-emphasis-alist like so:

(setq org-emphasis-alist
      (quote
       (("*" bold)
        ("/" italic)
        ("_" underline)
        ("=" org-verbatim verbatim)
        ("~" org-code verbatim)
        ("+" nil)
        ;; ("+" (:strike-through t))
        )))

Then re-started Emacs, but am still having the above issues.

Thanks for any help,

John

-- 
John Magolske
http://b79.net/contact

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: The + character creating strike-through markup within in-line literal / code blocks
  2018-06-24  7:57 The + character creating strike-through markup within in-line literal / code blocks John Magolske
@ 2018-06-24  8:24 ` Nicolas Goaziou
  2018-06-25  5:52   ` John Magolske
  0 siblings, 1 reply; 4+ messages in thread
From: Nicolas Goaziou @ 2018-06-24  8:24 UTC (permalink / raw)
  To: John Magolske; +Cc: emacs-orgmode

Hello,

John Magolske <listmail@b79.net> writes:

> I'd like to enter some in-line literal code in an org document
> covering OCaml. For example, in this:
>
>     in the expression (x +. y) the +. is a function ...
>
> to show in-line code as literal I tried:
>
>     in the expression =(x +. y)= the =+.= is a function ...
>
> being under the impression that bracketing text with = would enclose
> everything within to be literal. But what's happening -- as evidenced
> by syntax coloring -- is that the first and second + characters here
> create a strike-through region from the middle of one literal region
> to the middle of the other. With (setq org-hide-emphasis-markers t)

It happens because syntax coloring is a bit dumb. It uses regexps but
not the parser. However, if you try, e.g., to export the document, the
plus signs will not be treated as markers.

> Is there some way to get the + to show up as literal within in-line
> sections enclosed by = or ~ ? I suppose I could do something like:
>
>     in the expression src_ocaml{(a +. b)} the src_ocaml{(+.)} is a function ...
>
> But was hoping to use the more succinct = or ~ syntax.

You could insert a zero-width space between "+" and ".", in either or
both occurrences.

> Also tried to remove strike-through emphasis altogether by commenting
> out the strike-through section in org-emphasis-alist like so:
>
> (setq org-emphasis-alist
>       (quote
>        (("*" bold)
>         ("/" italic)
>         ("_" underline)
>         ("=" org-verbatim verbatim)
>         ("~" org-code verbatim)
>         ("+" nil)
>         ;; ("+" (:strike-through t))
>         )))
>
> Then re-started Emacs, but am still having the above issues.

You could try to remove ("+" ...) completely from the variable and
restart Emacs.

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: The + character creating strike-through markup within in-line literal / code blocks
  2018-06-24  8:24 ` Nicolas Goaziou
@ 2018-06-25  5:52   ` John Magolske
  2018-06-25 12:29     ` Nick Dokos
  0 siblings, 1 reply; 4+ messages in thread
From: John Magolske @ 2018-06-25  5:52 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Nicolas Goaziou

Hi,

Thanks for the reply.

* Nicolas Goaziou <mail@nicolasgoaziou.fr> [180624 16:11]:
> John Magolske <listmail@b79.net> writes:
> > to show in-line code as literal I tried:
> >
> >     in the expression =(x +. y)= the =+.= is a function ...
> >
> > being under the impression that bracketing text with = would enclose
> > everything within to be literal. But what's happening -- as evidenced
> > by syntax coloring -- is that the first and second + characters here
> > create a strike-through region from the middle of one literal region
> > to the middle of the other. With (setq org-hide-emphasis-markers t)
> 
> It happens because syntax coloring is a bit dumb. It uses regexps but
> not the parser. However, if you try, e.g., to export the document, the
> plus signs will not be treated as markers.

Ok, just tried org-html-export-as-html and see it renders properly
in html:

    ... expression <code>(x +. y)</code> the <code>+.</code> is ...

but I feel like there's a bug in the regex, that the =code= and
~verbatim~ marker characters should be able to prevent any other
marker characters bracketed by them from causing highlighting. Not
sure if I'll have time to dig into this any time soon, but it'd be
interesting to see how markdown-mode.el handles `inline code` defined
by backquotes, as it doesn't have the issues I'm seeing with how org.el
renders inline code. For example, all the text contained within the
backquotes here: `is this *bold* ?` shows up highlighted as code,
the *bold* there looks no different. In org-mode however, the *bold*
in ~is this *bold* ?~ shows up highlighted as bold, even though
org-html-export-as-html renders it as <code>is this *bold* ?</code> .

> > Also tried to remove strike-through emphasis altogether by commenting
> > out the strike-through section in org-emphasis-alist like so:
> >
> > (setq org-emphasis-alist
> >       (quote
> >        (("*" bold)
> >         ("/" italic)
> >         ("_" underline)
> >         ("=" org-verbatim verbatim)
> >         ("~" org-code verbatim)
> >         ("+" nil)
> >         ;; ("+" (:strike-through t))
> >         )))
> >
> > Then re-started Emacs, but am still having the above issues.
> 
> You could try to remove ("+" ...) completely from the variable and
> restart Emacs.

I tried this:

    (setq org-emphasis-alist
          (quote
           (("*" bold)
            ("/" italic)
            ("_" underline)
            ("=" org-verbatim verbatim)
            ("~" org-code verbatim))))

but for some reason I'm still seeing the exact same issues. In any
case, I don't think trying to do away with strike-through capability
is something I'd like to pursue. When viewing OCaml code in org-mode,
these also will not render properly:

    in =(x *. y)= the =*.= is a function ...
    in =(x /. y)= the =/.= is a function ...

highlighting this section as bold and italic respectively:

    . y)= the =

Ideally I'd like to make the org-verbatim and org-code emphasis regex
more robust.

Regards,

John


-- 
John Magolske
http://b79.net/contact

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: The + character creating strike-through markup within in-line literal / code blocks
  2018-06-25  5:52   ` John Magolske
@ 2018-06-25 12:29     ` Nick Dokos
  0 siblings, 0 replies; 4+ messages in thread
From: Nick Dokos @ 2018-06-25 12:29 UTC (permalink / raw)
  To: emacs-orgmode

John Magolske <listmail@b79.net> writes:

>> It happens because syntax coloring is a bit dumb. It uses regexps but
>> not the parser. However, if you try, e.g., to export the document, the
>> plus signs will not be treated as markers.
>
> Ok, just tried org-html-export-as-html and see it renders properly
> in html:
>
>     ... expression <code>(x +. y)</code> the <code>+.</code> is ...
>
> but I feel like there's a bug in the regex, that the =code= and
> ~verbatim~ marker characters should be able to prevent any other
> marker characters bracketed by them from causing highlighting.

Regexes recognize what is called a "regular" language which obeys a
context-free grammar. Although modern regexes are a bit more powerful,
it is still difficult (and computationally expensive) to have them
recognize context (e.g. figure out that we are now inside a verbatim
environment and so we need to do things differently).  That's why
context-sensitive grammars require parsers.

-- 
Nick

"There are only two hard problems in computer science: cache
invalidation, naming things, and off-by-one errors." -Martin Fowler

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-06-25 12:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-24  7:57 The + character creating strike-through markup within in-line literal / code blocks John Magolske
2018-06-24  8:24 ` Nicolas Goaziou
2018-06-25  5:52   ` John Magolske
2018-06-25 12:29     ` Nick Dokos

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).