all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: martin rudalics <rudalics@gmx.at>
Cc: emacs-bidi@gnu.org, emacs-devel@gnu.org
Subject: Re: Mixed L2R and R2L paragraphs and horizontal scroll
Date: Tue, 02 Feb 2010 21:30:54 +0200	[thread overview]
Message-ID: <83mxzrh1u9.fsf@gnu.org> (raw)
In-Reply-To: <4B67DD88.6060602@gmx.at>

> Date: Tue, 02 Feb 2010 09:08:40 +0100
> From: martin rudalics <rudalics@gmx.at>
> CC: emacs-bidi@gnu.org, emacs-devel@gnu.org
> 
>  > I already implemented such a feature: a per-buffer variable that
>  > forces all paragraphs to be either L2R or R2L.  A value of `nil' means
>  > the direction of each paragraph is dynamically determined by applying
>  > the rules described in the Unicode Standard Annex 9 (UAX#9).
> 
> I meant a function which does (1) set such a variable

You mean, besides "M-x set-variable RET"?

> and (2) apply it to one or all windows showing a buffer.

Currently, the variable is per-buffer, so it affects all the windows
showing that buffer.  Why would one need to do that only in some
windows showing a buffer?

> Calling this function would temporarily override any L2R/R2L
> specifications specified for a file, buffer, or paragraph.

There are no specifications for a file (unless you set the variable
I'm talking about in file's local variables section).  As for
individual paragraphs, control of their base direction is not by some
Emacs setting, but by inserting special formatting characters at the
beginning of each paragraph.  These characters (LRM and RLM) are
supposed to be invisible by default, i.e. displayed as zero-width
space, but they have strong directionality, L for LRM and R for RLM.
Since UAX#9 says that a paragraph's base direction is determined by
its first strong directional character, each one of these two
characters sets the paragraph direction according to directionality of
the character.

It would be easy enough to write a command that inserts LRM or RLM at
the beginning of each paragraph in a buffer or region.  But that's
application level, and I still have a lot of turf to cover before I
get to that.

> BTW, do UAX#9 paragraphs require new definitions for `paragraph-start'
> or `paragraph-separate'?

It does:

   Paragraphs are divided by the Paragraph Separator or appropriate
   Newline Function [...].  Paragraphs may also be determined by
   higher-level protocols: for example, the text in two different
   cells of a table will be in different paragraphs.

and the table of Bidirectional Character Types says that a Paragaraph
Separator type is assigned to the following characters:

   Paragraph separator, appropriate Newline Functions, higher-level
   protocol paragraph determination

Accordingly, in the Unicode Database, the characters CR and LF
(a.k.a. NL) that normally separate lines have the Paragraph Separator
(B) type.

This could sound like a disaster (each line being a separate
paragraph), since Emacs uses hard newlines to fill paragraphs.
Fortunately, UAX#9 leaves a fire escape: it says (see above) that
paragraphs can also be determined by ``higher-level protocols''.  I
used this fire escape to preserve the normal Emacs notion of a
paragraph, including the usual sense of `paragraph-start' and
`paragraph-separate'.  For instance the code that determines the base
direction of each paragraph looks back for a position that matches
`paragraph-start', and then finds the first strong directional
character after that.

So UAX#9 does define a default for paragraph start that is different
from Emacs, but gives us a way to preserve ours.  Which we did.

  reply	other threads:[~2010-02-02 19:30 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-30 13:44 Mixed L2R and R2L paragraphs and horizontal scroll Eli Zaretskii
2010-01-30 15:14 ` David De La Harpe Golden
2010-01-30 15:33   ` Eli Zaretskii
2010-01-30 16:36 ` martin rudalics
2010-01-30 17:01   ` Eli Zaretskii
2010-01-30 17:22     ` martin rudalics
2010-01-30 17:52       ` Eli Zaretskii
2010-01-30 18:31         ` martin rudalics
2010-01-30 19:12           ` Eli Zaretskii
2010-01-30 19:45             ` martin rudalics
2010-01-30 21:40               ` Eli Zaretskii
2010-01-31  9:36                 ` martin rudalics
2010-01-31 18:02                   ` Eli Zaretskii
2010-01-31 20:01                     ` martin rudalics
2010-01-31 21:53                       ` Miles Bader
2010-02-01  4:12                         ` Eli Zaretskii
2010-02-01  8:34                         ` martin rudalics
2010-02-01  4:11                       ` Eli Zaretskii
2010-02-01  8:34                         ` martin rudalics
2010-02-01 20:21                           ` Eli Zaretskii
2010-02-02  8:08                             ` martin rudalics
2010-02-02 19:30                               ` Eli Zaretskii [this message]
2010-02-03 16:06                                 ` martin rudalics
2010-02-01 21:05                       ` Richard Stallman
2010-02-02  8:08                         ` martin rudalics
2010-02-02 13:23                           ` tomas
2010-02-02 14:39                             ` martin rudalics
2010-02-02 19:32                             ` Eli Zaretskii
2010-02-06  6:29                               ` tomas
2010-02-02 21:21                             ` Richard Stallman
2010-02-06  6:35                               ` tomas
2010-02-06 14:46                                 ` David De La Harpe Golden
2010-02-06 22:55                                 ` Richard Stallman
2010-02-02 21:21                           ` Richard Stallman
2010-01-30 23:26 ` David De La Harpe Golden
2010-01-31 12:42 ` Richard Stallman
2010-01-31 15:02   ` David De La Harpe Golden
2010-01-31 18:20     ` Eli Zaretskii
2010-01-31 18:16   ` Eli Zaretskii
2010-02-01 21:05     ` Richard Stallman
2010-02-01 21:51       ` Eli Zaretskii
2010-02-02 21:21         ` Richard Stallman
2010-02-01 14:00 ` Ehud Karni
2010-02-01 20:18   ` Eli Zaretskii
2010-02-01 22:05     ` [emacs-bidi] " Ehud Karni
2010-02-02 20:04       ` Eli Zaretskii
2010-02-03 13:10         ` Ehud Karni
2010-02-03 18:59           ` Eli Zaretskii
2010-02-04 11:01             ` Richard Stallman
2010-02-04 15:14               ` [emacs-bidi] " Stefan Monnier
2010-02-04 15:57                 ` David Kastrup
2010-02-04 17:21                   ` Davis Herring
2010-02-04 19:33                   ` Eli Zaretskii
2010-02-04 20:46                   ` [emacs-bidi] " tomas
2010-02-04 22:23                     ` Eli Zaretskii
2010-02-06  6:41                       ` [emacs-bidi] " tomas
2010-02-04 22:05                   ` Stefan Monnier
2010-02-04 19:12               ` Eli Zaretskii
2010-02-05 12:44                 ` Richard Stallman
2010-02-05 13:30                   ` Eli Zaretskii
2010-02-05 18:06                     ` [emacs-bidi] " Stefan Monnier
2010-02-05 21:48                       ` Eli Zaretskii
2010-02-06 22:55                         ` Richard Stallman
2010-02-07  4:08                           ` Eli Zaretskii
2010-02-07  8:35                             ` David Kastrup
2010-02-07 15:05                             ` Richard Stallman
2010-02-04 14:02             ` [emacs-bidi] " Ehud Karni
2010-02-04 19:30               ` Eli Zaretskii
2010-02-04 19:48                 ` [emacs-bidi] " Eli Zaretskii
2010-02-06  6:52               ` tomas
2010-02-03 21:02           ` Davis Herring
2010-02-04  4:16             ` Bidirectional embeddings (was: Mixed L2R and R2L paragraphs and horizontal scroll) Eli Zaretskii
2010-02-04 16:21             ` [emacs-bidi] Mixed L2R and R2L paragraphs and horizontal scroll Ehud Karni
2010-02-04 19:40               ` Eli Zaretskii
2010-02-04 22:13                 ` [emacs-bidi] " Stefan Monnier
2010-02-05  9:50                   ` Eli Zaretskii
2010-02-05 10:47                     ` Eli Zaretskii
2010-02-05 18:06                     ` [emacs-bidi] " Stefan Monnier
2010-02-06 13:39                     ` David De La Harpe Golden
2010-02-06 15:45                       ` Ehud Karni
2010-02-06 19:38                       ` Eli Zaretskii
2010-02-06 21:18                         ` [emacs-bidi] " David De La Harpe Golden
2010-02-11 21:40                     ` Beni Cherniavsky
2010-02-12 11:03                       ` Eli Zaretskii
2010-02-12 12:36                         ` Eli Zaretskii
2010-02-05 12:21                 ` [emacs-bidi] " Ehud Karni
2010-02-05 13:47                   ` Eli Zaretskii
2010-02-05 14:22                     ` Miles Bader
2010-02-05 14:52                       ` Eli Zaretskii
2010-02-06  1:07                         ` Miles Bader
2010-02-06  9:03                           ` Eli Zaretskii
2010-02-06  9:32                             ` Miles Bader
2010-02-06 15:42                     ` [emacs-bidi] " Ehud Karni
2010-02-06 19:14                       ` Eli Zaretskii
2010-02-03 13:22         ` [emacs-bidi] " Ehud Karni
2010-02-03 19:01           ` Eli Zaretskii
2010-02-04 14:08             ` [emacs-bidi] " Ehud Karni
2010-02-01 15:36 ` Stefan Monnier

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=83mxzrh1u9.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-bidi@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=rudalics@gmx.at \
    /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.