all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Lars Magne Ingebrigtsen <larsi@gnus.org>
Cc: emacs-devel@gnu.org
Subject: Re: Bidirectional text and URLs
Date: Mon, 01 Dec 2014 20:22:36 +0200	[thread overview]
Message-ID: <83r3wj6xhv.fsf@gnu.org> (raw)
In-Reply-To: <m3y4qr45vd.fsf@stories.gnus.org>

> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
> Cc: emacs-devel@gnu.org
> Date: Mon, 01 Dec 2014 18:49:58 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> > Anyway, if you want this, please show the API of the function -- what
> >> > it should return and how.
> >> 
> >> Actually, I'm not sure.  :-) Would it make any sense to have a function
> >> like `(displayed-directionality POSITION)' that returns either
> >> `right-to-left' or `left-to-right?  If so, the URL-finding function
> >> would query about the start of the URL (which would normally be the HTTP
> >> part), and if that's `right-to-left', Here There Be Shenanigans.
> >
> > How is this different from the previous suggestion?
> 
> I'm not sure what you are referring to.

I'm saying that asking about "characters between FROM and TO that were
supposed to be LTR, but was forced to display as RTL", and asking
essentially the same question about a character at POS, is actually
asking the same question.  IOW, the same API will be able to satisfy
both needs.

  (defun bidi-find-overridden-directionality (from to)
     "Return position between FROM and TO where directionality was overridden.

   This function returns the first character position in the specified
   region where there is a character whose `bidi-class' property is `L',
   but which was forced to display as `R' by a directional override,
   and likewise with characters whose `bidi-class' is `R' or `AL'
   that were forced to display as `L'.

   Strong directional characters `L', `R', and `AL' can have their
   intrinsic directionality overridden by directional override
   control characters RLO \(u+202e) and LRO \(u+202d)."

OK?

If you want, the function can return a cons cell (POS . DIR), where
POS is the position and DIR is the intrinsic directionality of the
overridden character.  Or even (POS . DIR-ORIG DIR-OVERRIDDEN).

> > No, only RLOs that affect URLs.
> >
> > Specifically, I suggest to look for RLO before a URL on the same
> > physical line, and PDF or hard newline after it, and if found, cover
> > it by a display property whose value is e.g. a string " ".  Since just
> > the fact that you find an RLO before doesn't yet mean that it's a
> > malicious RLO (other bidirectional controls which you don't want to
> > know about can countermand the RLO before it affects the URL display),
> > I suggest to augment that by checking that the URL's host and domain
> > parts consist of LTR characters whose directionality was overridden.
> > The latter part is to be done by calling a new primitive mentioned
> > above.
> >
> > Given all this evidence, I think it's pretty much certain that we
> > found our offending RLO.
> 
> If you think that that's sufficient (that we only need to look for
> preceding RLOs on the same line), then this sounds like a good solution
> to me.

We need to look for an RLO on the same line when a LTR character was
forced to display as RTL, and for LRO in the opposite case.

This will detect the case you've demonstrated at the beginning of this
thread.  I don't know about other similar cases, so if you don't know
either, I suggest to treat this problem, and take it from there.



  reply	other threads:[~2014-12-01 18:22 UTC|newest]

Thread overview: 133+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-28  2:51 Bidirectional text and URLs Lars Magne Ingebrigtsen
2014-11-28  3:27 ` Stephen J. Turnbull
2014-11-28 14:54   ` Eli Zaretskii
2014-11-29  6:09     ` Stephen J. Turnbull
2014-11-29  8:22       ` Eli Zaretskii
2014-11-29 17:05         ` Richard Stallman
2014-11-29 17:13           ` Lars Magne Ingebrigtsen
2014-11-29 17:49             ` Lars Magne Ingebrigtsen
2014-11-29 17:54               ` Lars Magne Ingebrigtsen
2014-11-29 18:24                 ` Eli Zaretskii
2014-11-29 18:29                   ` Lars Magne Ingebrigtsen
2014-11-30  9:38                   ` Richard Stallman
2014-11-30 15:21                     ` Eli Zaretskii
2014-11-29 18:18               ` Eli Zaretskii
2014-11-29 18:33                 ` Lars Magne Ingebrigtsen
2014-11-29 18:47                   ` Eli Zaretskii
2014-11-29 19:12                     ` Andreas Schwab
2014-11-29 19:31                       ` Lars Magne Ingebrigtsen
2014-11-29 19:39                         ` Andreas Schwab
2014-11-29 20:13                       ` Eli Zaretskii
2014-11-30 16:26                 ` Lars Magne Ingebrigtsen
2014-11-30 17:29                   ` Yuri Khan
2014-11-30 17:57                     ` Lars Magne Ingebrigtsen
2014-11-30 18:18                       ` Eli Zaretskii
2014-11-30 17:53                   ` Eli Zaretskii
2014-11-30 18:13                     ` Lars Magne Ingebrigtsen
2014-11-30 19:06                       ` Lars Magne Ingebrigtsen
2014-11-30 19:10                         ` Lars Magne Ingebrigtsen
2014-11-30 20:41                           ` Eli Zaretskii
2014-11-30 19:19                       ` Lars Magne Ingebrigtsen
2014-11-30 21:05                       ` Eli Zaretskii
2014-11-30 21:36                         ` Lars Magne Ingebrigtsen
2014-12-01  3:45                           ` Eli Zaretskii
2014-12-01 16:19                             ` Lars Magne Ingebrigtsen
2014-12-01 17:39                               ` Eli Zaretskii
2014-12-01 17:49                                 ` Lars Magne Ingebrigtsen
2014-12-01 18:22                                   ` Eli Zaretskii [this message]
2014-12-01 18:28                                     ` Lars Magne Ingebrigtsen
2014-12-02 14:17                                       ` Eli Zaretskii
2014-12-02 16:31                                         ` Lars Magne Ingebrigtsen
2014-12-01 19:15                         ` Richard Stallman
2014-12-01 19:15                         ` Richard Stallman
2014-12-01 19:34                           ` Eli Zaretskii
2014-12-01 20:21                             ` Eli Zaretskii
2014-12-01 20:30                               ` David Kastrup
2014-12-01 20:45                                 ` Eli Zaretskii
2014-12-02 14:45                                   ` Richard Stallman
2014-12-02 14:45                               ` Richard Stallman
2014-12-02 15:03                                 ` Eli Zaretskii
2014-12-03  8:39                                   ` Richard Stallman
2014-12-03 17:39                                     ` Eli Zaretskii
2014-12-04  9:41                                       ` Eli Zaretskii
2014-12-05 11:16                                         ` Richard Stallman
2014-12-05 11:28                                           ` Eli Zaretskii
2014-12-05 22:43                                             ` Richard Stallman
2014-12-05 23:15                                               ` Eli Zaretskii
2014-12-06 12:06                                                 ` Richard Stallman
2014-12-06 12:59                                                   ` Eli Zaretskii
2014-12-05 22:43                                             ` Richard Stallman
2014-12-05 23:17                                               ` Eli Zaretskii
2014-12-06 12:06                                                 ` Richard Stallman
2014-12-02 14:44                             ` Richard Stallman
2014-12-02 15:00                               ` Eli Zaretskii
2014-12-03  8:39                                 ` Richard Stallman
2014-11-30  9:38               ` Richard Stallman
2014-11-30 15:27                 ` Eli Zaretskii
2014-12-01 10:17                   ` Richard Stallman
2014-12-01 16:17                     ` Eli Zaretskii
2014-12-02 14:42                       ` Richard Stallman
2014-12-02 14:48                         ` Eli Zaretskii
2014-12-03  8:38                           ` Richard Stallman
2014-12-03 11:56                             ` Nicolas Richard
2014-12-03 17:12                               ` Richard Stallman
2014-12-03 17:38                             ` Eli Zaretskii
2014-12-04 14:30                               ` Richard Stallman
2014-12-04 15:53                                 ` Stefan Monnier
2014-12-04 17:30                                   ` Eli Zaretskii
2014-12-04 20:25                                   ` Paul Eggert
2014-12-02 14:42                       ` Richard Stallman
2014-12-02 14:52                         ` Eli Zaretskii
2014-12-02 18:05                           ` Eli Zaretskii
2014-12-03 17:13                             ` Richard Stallman
2014-12-03 18:14                               ` Eli Zaretskii
2014-12-05 22:44                                 ` Richard Stallman
2014-12-05 23:19                                   ` Eli Zaretskii
2014-12-07  9:20                                     ` Richard Stallman
2014-12-07 15:50                                       ` Eli Zaretskii
2014-12-08  0:26                                         ` Richard Stallman
2014-12-08 15:46                                           ` Eli Zaretskii
2014-12-03 17:13                           ` Richard Stallman
2014-12-03 17:13                           ` Richard Stallman
2014-11-29 17:14         ` Ted Zlatanov
2014-11-30 13:42         ` Stephen J. Turnbull
2014-11-30 15:36           ` Eli Zaretskii
2014-12-01 10:18           ` Richard Stallman
2014-12-01 16:18             ` Eli Zaretskii
2014-12-01 18:32               ` Stephen J. Turnbull
2014-12-01 19:12                 ` Eli Zaretskii
2014-12-01 20:08                   ` Stephen J. Turnbull
2014-12-01 20:42                     ` Eli Zaretskii
2014-12-02 14:42               ` Richard Stallman
2014-12-02 14:54                 ` Eli Zaretskii
2014-12-03  8:39                   ` Richard Stallman
2014-11-28 11:19 ` Ted Zlatanov
2014-11-28 13:58   ` Lars Magne Ingebrigtsen
2014-11-28 19:49     ` Ted Zlatanov
2014-11-28 21:02       ` Stefan Monnier
2014-11-29  0:26         ` Ted Zlatanov
2014-11-28 22:26       ` Eli Zaretskii
2014-11-28 14:24   ` Stefan Monnier
2014-11-28 14:57   ` Eli Zaretskii
2014-11-29  6:17   ` Stephen J. Turnbull
2014-11-28 14:45 ` Eli Zaretskii
2014-11-28 17:09 ` Richard Stallman
2014-11-28 18:28   ` Eli Zaretskii
2014-11-29 17:03     ` Richard Stallman
2014-11-29 17:06       ` Eli Zaretskii
2014-11-30  9:37         ` Richard Stallman
2014-11-30 15:16           ` Eli Zaretskii
2014-12-01 10:18             ` Richard Stallman
2014-12-01 16:02               ` Eli Zaretskii
2014-11-28 19:28   ` Andreas Schwab
2014-11-29 17:04     ` Richard Stallman
2014-11-29 17:11       ` Eli Zaretskii
2014-11-30  9:38         ` Richard Stallman
2014-11-30 15:20           ` Eli Zaretskii
2014-11-30 23:39             ` chad
2014-12-01  3:49               ` Eli Zaretskii
2014-12-01  8:01                 ` chad
2014-12-01 15:58                   ` Eli Zaretskii
2014-12-02 14:41                     ` Richard Stallman
2014-12-01 19:17                   ` Richard Stallman
2014-12-01 10:18             ` Richard Stallman

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83r3wj6xhv.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=larsi@gnus.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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.