% language=uk

\startcomponent hybrid-inserts

\environment hybrid-environment

\startchapter[title={The Bidi Dilemma}]

\startsection [title={Introduction}]

Here I will introduce a few concepts of bidirectional typesetting. While
\LUATEX\ does a lot automatically, this does not mean that you get
a proper bidirectional layout for free. We distinguish a few cases:

\startitemize [packed]
\startitem verbatim as used in manuals \stopitem
\startitem simulating a text editor \stopitem
\startitem typesetting of text \stopitem
\stopitemize

In addition to this we distinguish two document layouts:

\startitemize [packed]
\startitem predominantly left||to||right with some right||to||left snippets \stopitem
\startitem predominantly right||to||left with some left||to||right snippets \stopitem
\stopitemize

In both cases explicit choices have to be made when defining the layout,
programming the style, and coding the content.

\stopsection

\startsection [title={Verbatim}]

In verbatim mode we normally use a monospaced font and no interference with
features is to be expected. You normally get what you've keyed in. Because
verbatim is used for illustrative purposes, we need to have predictable
output. This is why we have to control the position of the linenumbers as
well as the alignment explicitly.

\startbuffer[basics]
\definetyping [XXtyping] [numbering=line]
\definetyping [RLtyping] [align=r2l,numbering=line]
\definetyping [LRtyping] [align=l2r,numbering=line]
\stopbuffer

\typebuffer[basics] \getbuffer[basics]

We use these definitions in the following example:

\startbuffer[sample]
\startLRtyping
At the left!
At the left!
\stopLRtyping

\startRLtyping
At the right!
At the right!
\stopRLtyping

\startalignment[l2r]
\startXXtyping
At the left!
At the left!
\stopXXtyping
\stopalignment

\startalignment[r2l]
\startXXtyping
At the right!
At the right!
\stopXXtyping
\stopalignment
\stopbuffer

\typebuffer[sample]

However, we can have a bit more control over the position of the
line numbers. As linenumbers are added in a later stage we need to
define additional line number classes for this. We show four
relevant positions of linenumbers. What setting you use depends on
the predominant direction of your document as well as what you
want to demonstrate.

\startbuffer
\definetyping [RLtypingLEFT] [align=r2l,numbering=line]
\definetyping [LRtypingLEFT] [align=l2r,numbering=line]

\setuplinenumbering [RLtypingLEFT] [location=left]
\setuplinenumbering [LRtypingLEFT] [location=left]

\startLRtypingLEFT
At the left!
At the left!
\stopLRtypingLEFT

\startRLtypingLEFT
At the right!
At the right!
\stopRLtypingLEFT
\stopbuffer

\typebuffer

When \type {location} is set to \type {left}, the line numbers
will always be in the left margin, no matter what the text
direction is.

\getbuffer

\startbuffer
\definetyping [RLtypingRIGHT] [align=r2l,numbering=line]
\definetyping [LRtypingRIGHT] [align=l2r,numbering=line]

\setuplinenumbering [RLtypingRIGHT] [location=right]
\setuplinenumbering [LRtypingRIGHT] [location=right]

\startLRtypingRIGHT
At the left!
At the left!
\stopLRtypingRIGHT

\startRLtypingRIGHT
At the right!
At the right!
\stopRLtypingRIGHT
\stopbuffer

From this it follows that when \type {location} is set to \type
{right}, the line numbers will always be in the right margin.

\typebuffer

Again, the text direction is not influencing the placement.

\getbuffer

\startbuffer
\definetyping [RLtypingBEGIN] [align=r2l,numbering=line]
\definetyping [LRtypingBEGIN] [align=l2r,numbering=line]

\setuplinenumbering [RLtypingBEGIN] [location=begin]
\setuplinenumbering [LRtypingBEGIN] [location=begin]

\startLRtypingBEGIN
At the left!
At the left!
\stopLRtypingBEGIN

\startRLtypingBEGIN
At the right!
At the right!
\stopRLtypingBEGIN
\stopbuffer

The next two cases {\em do} obey to the text direction. When set to
\type {begin}, the location will be at the beginning of the line.

\typebuffer

When typesetting a paragraph from right to left, the beginning of
the line is at the right margin.

\getbuffer

\startbuffer
\definetyping [RLtypingEND] [align=r2l,numbering=line]
\definetyping [LRtypingEND] [align=l2r,numbering=line]

\setuplinenumbering [RLtypingEND] [location=end]
\setuplinenumbering [LRtypingEND] [location=end]

\startLRtypingEND
At the left!
At the left!
\stopLRtypingEND

\startRLtypingEND
At the right!
At the right!
\stopRLtypingEND
\stopbuffer

Consequently we get the opposite result when we set \type {location} to
\type {end}.

\typebuffer

Now we complementary results:

\getbuffer

\stopsection

\stopchapter

\stopcomponent
