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.
next prev parent 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.