summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/spac-ali.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/spac-ali.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/spac-ali.mkiv209
1 files changed, 139 insertions, 70 deletions
diff --git a/Master/texmf-dist/tex/context/base/spac-ali.mkiv b/Master/texmf-dist/tex/context/base/spac-ali.mkiv
index b168a02be27..0cf22f470cf 100644
--- a/Master/texmf-dist/tex/context/base/spac-ali.mkiv
+++ b/Master/texmf-dist/tex/context/base/spac-ali.mkiv
@@ -15,6 +15,18 @@
\unprotect
+\registerctxluafile{spac-ali}{1.001}
+
+\definesystemattribute[realign][public]
+
+\unexpanded\def\resetrealignsignal{\attribute\realignattribute\attributeunsetvalue}
+\unexpanded\def\signalinnerrealign{\ctxcommand{setrealign(2)}}
+\unexpanded\def\signalouterrealign{\ctxcommand{setrealign(1)}}
+
+\appendtoks
+ \resetrealignsignal
+\to \everyforgetall
+
% We will not use bodydir and pagedir so we disable them. That way we get
% normal hyperlink support.
@@ -69,44 +81,66 @@
\unexpanded\def\definehbox
{\dodoubleargument\dodefinehbox}
-\def\iobox#1#2#3#% here #3# is not really needed
- {\vbox\bgroup % we want to return a vbox like the others
- \hbox\bgroup% we need to pack the signal with the box
- \signalrightpage
- \dowithnextboxcontent
- {\let\\=\endgraf\forgetall\doifrightpageelse#1#2}
- {\box\nextbox\egroup\egroup}
- \vbox#3}
+% To be redone:
+
+\def\ibox#1#2#3%
+ {\vbox\bgroup
+ \forgetall
+ \let\\=\endgraf
+ \ifdoublesided\signalinnerrealign\fi
+ \doifrightpageelse\raggedright\raggedleft
+ \let\next}
+
+\def\obox#1#2#3%
+ {\vbox\bgroup
+ \forgetall
+ \let\\=\endgraf
+ \ifdoublesided\signalouterrealign\fi
+ \doifrightpageelse\raggedleft\raggedright
+ \let\next}
+
+\def\@@ragged@@command{@@ragged@@c}
+\def\@@ragged@@hbox {@@ragged@@h}
+\def\@@ragged@@vbox {@@ragged@@v}
+
+\def\dosetraggedvbox#1% can be more keys
+ {\let\raggedbox\vbox
+ \processcommacommand[#1]\dosetraggedvbox}
-\def\obox{\iobox\raggedleft \raggedright} % outerbox
-\def\ibox{\iobox\raggedright\raggedleft} % innerbox
+\def\dosetraggedhbox#1% can be more keys
+ {\let\raggedbox\hbox
+ \processcommacommand[#1]\dosetraggedhbox}
\def\dosetraggedvbox#1%
- {\let\raggedbox\vbox
- \processfirstactioninset
- [#1]
- [ \v!left=>\let\raggedbox\lbox,
- \v!right=>\let\raggedbox\rbox,
- \v!middle=>\let\raggedbox\cbox,
- \v!inner=>\let\raggedbox\ibox,
- \v!outer=>\let\raggedbox\obox,
- \v!flushleft=>\let\raggedbox\rbox,
- \v!flushright=>\let\raggedbox\lbox,
- \v!center=>\let\raggedbox\cbox,
- \v!no=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]}
+ {\ifcsname\@@ragged@@vbox#1\endcsname
+ \csname\@@ragged@@vbox#1\endcsname
+ \quitcommalist
+ \fi}
\def\dosetraggedhbox#1%
- {\let\raggedbox\hbox
- \processaction % slow
- [#1]
- [ \v!left=>\def\raggedbox{\doalignedline\v!left },
- \v!right=>\def\raggedbox{\doalignedline\v!right },
- \v!middle=>\def\raggedbox{\doalignedline\v!middle},
- \v!inner=>\def\raggedbox{\doalignedline\v!inner },
- \v!outer=>\def\raggedbox{\doalignedline\v!outer },
- \v!flushleft=>\def\raggedbox{\doalignedline\v!right },
- \v!flushright=>\def\raggedbox{\doalignedline\v!left },
- \v!center=>\def\raggedbox{\doalignedline\v!middle}]}
+ {\ifcsname\@@ragged@@hbox#1\endcsname
+ \csname\@@ragged@@hbox#1\endcsname
+ \quitcommalist
+ \fi}
+
+\setvalue{\@@ragged@@vbox\v!left }{\let\raggedbox\lbox}
+\setvalue{\@@ragged@@vbox\v!right }{\let\raggedbox\rbox}
+\setvalue{\@@ragged@@vbox\v!middle }{\let\raggedbox\cbox}
+\setvalue{\@@ragged@@vbox\v!inner }{\let\raggedbox\ibox}
+\setvalue{\@@ragged@@vbox\v!outer }{\let\raggedbox\obox}
+\setvalue{\@@ragged@@vbox\v!flushleft }{\let\raggedbox\rbox}
+\setvalue{\@@ragged@@vbox\v!flushright}{\let\raggedbox\lbox}
+\setvalue{\@@ragged@@vbox\v!center }{\let\raggedbox\cbox}
+\setvalue{\@@ragged@@vbox\v!no }{\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]}
+
+\setvalue{\@@ragged@@hbox\v!left }{\def\raggedbox{\doalignedline\v!left }}
+\setvalue{\@@ragged@@hbox\v!right }{\def\raggedbox{\doalignedline\v!right }}
+\setvalue{\@@ragged@@hbox\v!middle }{\def\raggedbox{\doalignedline\v!middle}}
+\setvalue{\@@ragged@@hbox\v!inner }{\def\raggedbox{\doalignedline\v!inner }}
+\setvalue{\@@ragged@@hbox\v!outer }{\def\raggedbox{\doalignedline\v!outer }}
+\setvalue{\@@ragged@@hbox\v!flushleft }{\def\raggedbox{\doalignedline\v!right }}
+\setvalue{\@@ragged@@hbox\v!flushright}{\def\raggedbox{\doalignedline\v!left }}
+\setvalue{\@@ragged@@hbox\v!center }{\def\raggedbox{\doalignedline\v!middle}}
\def\dosetraggedcommand#1%
{\normalexpanded{\noexpand\dodosetraggedcommand{#1}}}
@@ -115,12 +149,17 @@
\def\raggedcommand{\the\everyraggedcommand}
-\def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that!
- {\everyraggedcommand\emptytoks
+% slow, we can do this in lua ... some day
+
+\let\raggedbox\relax
+
+\unexpanded\def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that!
+ {\everyraggedcommand{\resetrealignsignal}% \emptytoks maybe only when #1 <> empty
\let\raggedtopcommand\empty
\let\raggedbottomcommand\empty
- \chardef\raggedoneliner\zerocount
- \doifsomething{#1}
+ \let\raggedbox\relax
+ \setfalse\raggedonelinerstate
+ \doifsomething{#1}%
{\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse
\doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse
\!!donectrue
@@ -129,8 +168,6 @@
\def\dododosetraggedcommand#1%
{\executeifdefined{\@@ragged@@command\string#1}\relax}
-\def\@@ragged@@command{@@raggedcommand}
-
\setvalue{\@@ragged@@command\v!hanging }{\appendtoks\enableprotruding \to\everyraggedcommand}
\setvalue{\@@ragged@@command\v!nothanging }{\appendtoks\disableprotruding \to\everyraggedcommand}
\setvalue{\@@ragged@@command\v!hz }{\appendtoks\enableadjusting \to\everyraggedcommand}
@@ -193,16 +230,20 @@
\setvalue{\@@ragged@@command\v!normal}%
{\appendtoks\notragged\to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!inner}% not yet perfect
- {\signalrightpage % may interfere
- \doifrightpageelse
- {\getvalue{\@@ragged@@command\v!right}}
- {\getvalue{\@@ragged@@command\v!left}}}
+\setvalue{\@@ragged@@command\v!inner}%
+ {\ifdoublesided
+ \appendtoks\signalinnerrealign\to\everyraggedcommand
+ \fi
+ \rightorleftpageaction
+ {\getvalue{\@@ragged@@command\v!right}}%
+ {\getvalue{\@@ragged@@command\v!left }}}
-\setvalue{\@@ragged@@command\v!outer}% not yet perfect
- {\signalrightpage % may interfere
- \doifrightpageelse
- {\getvalue{\@@ragged@@command\v!left}}
+\setvalue{\@@ragged@@command\v!outer}%
+ {\ifdoublesided
+ \appendtoks\signalouterrealign\to\everyraggedcommand
+ \fi
+ \rightorleftpageaction
+ {\getvalue{\@@ragged@@command\v!left }}%
{\getvalue{\@@ragged@@command\v!right}}}
\setvalue{\@@ragged@@command\v!lesshyphenation}%
@@ -223,10 +264,10 @@
\setvalue{\@@ragged@@command\v!disable}% for one liners
{\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand}
-\chardef\raggedoneliner\zerocount
+\ifdefined\raggedonelinerstate \else \newconditional\raggedonelinerstate \fi
\setvalue{\@@ragged@@command\v!line}%
- {\chardef\raggedoneliner\plusone}
+ {\settrue\raggedonelinerstate}
% More alignments:
@@ -234,7 +275,7 @@
% \tolerance >= 1500 % was 200
% \raggedness = 2 .. 6\bodyfontsize
-\chardef\raggedstatus=0 % normal left center right
+\newconstant\raggedstatus % normal left center right
\def\leftraggedness {2\bodyfontsize}
\def\rightraggedness {2\bodyfontsize}
@@ -249,7 +290,7 @@
%D More hyphenation control, will be combined with align
%D setup.
-\def\nohyphens
+\def\nohyphens % % % % % not clever, we still hyphenate but supress application
{\ifx\dohyphens\relax
\edef\dohyphens
{\hyphenpenalty\the\hyphenpenalty
@@ -285,7 +326,7 @@
\updateraggedskips}
\def\dosetraggedskips#1#2#3#4#5#6#7%
- {\chardef \raggedstatus#1\relax
+ {\raggedstatus#1\relax
\leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3
\rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
\spaceskip #4\relax
@@ -325,7 +366,7 @@
\begingroup
\dontshowcomposition
\inleftmargin{\vsmash
- {\switchtobodyfont[7pt,tt]%
+ {\infofont
\framed[\c!align=\v!right]{\thepardata}}}%
\endgroup}
@@ -347,7 +388,7 @@
\def\raggedxspaceamount {.5em}
\unexpanded\def\notragged
- {\chardef\raggedstatus\zerocount
+ {\raggedstatus\zerocount
\leftskip 1\leftskip
\rightskip 1\rightskip
\spaceskip \zeropoint
@@ -433,6 +474,11 @@
\setvalue{@@ngila@@\v!broad }{\!!doneatrue}
\setvalue{@@ngila@@\v!wide }{\!!donebtrue}
+\def\setraggedparagraphmode
+ {\doifrightpageelse
+ {\ifdoublesided\signalinnerrealign\expandafter\firstoftwoarguments \fi}
+ {\ifdoublesided\signalouterrealign\expandafter\secondoftwoarguments\fi}}
+
\def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads
\installalign \v!new {\@@asraggedfalse}
@@ -504,6 +550,8 @@
\def\dosetupalign[#1]% can be made faster by checking for defined #1
{\!!doneafalse
\!!donebfalse
+ \raggedstatus\zerocount
+ \resetrealignsignal
\processcommacommand[#1]\dodosetupngila
\processcommacommand[#1]\dodosetupalign}
@@ -524,7 +572,7 @@
{\par
\egroup}
-\chardef\alignstrutmode=1
+\setnewconstant\alignstrutmode\plusone
% see later for the real definition, which in the simple case is:
@@ -568,7 +616,7 @@
\let\centeraligned\midaligned
-\def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated
+% \def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated
% indirecte commando's
@@ -579,9 +627,10 @@
\letvalue{\s!do\v!line\v!flushright}\leftaligned
\letvalue{\s!do\v!line\v!center }\midaligned
-\def\doalignedline#1{\csname\s!do\v!line#1\endcsname}
+\def\doalignedline#1{\resetrealignsignal\csname\s!do\v!line#1\endcsname}
-%D Experimental:
+%D Experimental (will be redone when floats are redone as it's real messy
+%D now):
\def\doxalignline#1#2#3#4#5#6%
{\noindentation % was \noindent
@@ -602,7 +651,7 @@
\endgroup}
\hbox}
-\def\doxcheckline
+\def\doxcheckline % used for floats so multipass anyway
{\signalrightpage\doifrightpageelse\donetrue\donefalse}
\setvalue{\s!do\v!line\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss }
@@ -630,9 +679,6 @@
\def\alignedline#1#2% setting default
{\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname}
-% \def\woordrechts
-% {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}}
-
% beware: \wordright{whatever\kern-\rightskip} should work!
% so, no funny boxing here
@@ -666,12 +712,35 @@
% \simplealignedbox{2cm}{right}{x}
-\setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}}
-\setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}}
-\setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}}
-\setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}}
-\setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}}
-
-\unexpanded\def\simplealignedbox#1{\executeifdefined{\s!simple\c!align#1}{\getvalue{\s!simple\c!align\v!right}}}
+% \setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}}
+% \setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}}
+% \setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}}
+% \setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}}
+% \setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}}
+
+% \unexpanded\def\simplealignedbox#1%
+% {\csname\s!simple\c!align\ifcsname\s!simple\c!align#1\endcsname#1\else\v!right\fi\endcsname}
+
+\setvalue{\s!simple:\c!align:\v!right }#1{{#1\hss}}
+\setvalue{\s!simple:\c!align:\v!left }#1{{\hss#1}}
+\setvalue{\s!simple:\c!align:\v!flushright }#1{{\hss#1}}
+\setvalue{\s!simple:\c!align:\v!flushleft }#1{{#1\hss}}
+\setvalue{\s!simple:\c!align:\v!middle }#1{{\hss#1\hss}}
+
+\unexpanded\def\simplealignedbox#1#2%
+ {\hbox to #1\csname\s!simple:\c!align:\ifcsname\s!simple:\c!align:#2\endcsname#2\else\v!right\fi\endcsname}
+
+% \setvalue{spac_align_set_ss_\v!right }#1#2{\let#1\relax\let#2\hss }
+% \setvalue{spac_align_set_ss_\v!left }#1#2{\let#1\hss \let#2\relax}
+% \setvalue{spac_align_set_ss_\v!flushright}#1#2{\let#1\hss \let#2\relax}
+% \setvalue{spac_align_set_ss_\v!flushleft }#1#2{\let#1\relax\let#2\hss }
+% \setvalue{spac_align_set_ss_\v!middle }#1#2{\let#1\hss \let#2\hss }
+% \setvalue{spac_align_set_ss_\v!low }#1#2{\let#1\vss \let#2\relax}
+% \setvalue{spac_align_set_ss_\v!high }#1#2{\let#1\relax\let#2\vss }
+% \setvalue{spac_align_set_ss_\v!lohi }#1#2{\let#1\vss \let#2\vss }
+% \setvalue{spac_align_set_ss_\s!unknown }#1#2{\let#1\relax\let#2\relax}
+
+% \unexpanded\def\spac_align_set_ss#1%
+% {\csname spac_align_set_ss_\ifcsname spac_align_set_ss_#1\endcsname#1\else\s!unknown\fi\endcsname}
\protect \endinput