summaryrefslogtreecommitdiff
path: root/tex/context/base/node-par.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/node-par.mkiv')
-rw-r--r--tex/context/base/node-par.mkiv78
1 files changed, 78 insertions, 0 deletions
diff --git a/tex/context/base/node-par.mkiv b/tex/context/base/node-par.mkiv
new file mode 100644
index 000000000..cb53e643d
--- /dev/null
+++ b/tex/context/base/node-par.mkiv
@@ -0,0 +1,78 @@
+%D \module
+%D [ file=node-par,
+%D version=2008.09.30,
+%D title=\CONTEXT\ Node Macros,
+%D subtitle=Paragraph Building,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Node Macros / Paragraph Building}
+
+%D This is very experimental, undocumented, subjected to changes, etc. just as
+%D the underlying interfaces.
+
+% \enableparbuilders
+%
+% \startparbuilder[default]
+% \input tufte \par
+% \startparbuilder[oneline]
+% \input tufte \par
+% \stopparbuilder
+% \input tufte \par
+% \stopparbuilder
+
+\unprotect
+
+\registerctxluafile{node-par}{1.001}
+
+\definesystemattribute[parbuilder] \chardef\parbuilderattribute \dogetattributeid{parbuilder}
+
+% todo auto-enable
+
+% management (enable/disable) is global and will move to lua
+
+\newcount\nofparbuilders
+
+\unexpanded\def\defineparbuilder[#1]%
+ {\global\advance\nofparbuilders\plusone
+ \ctxlua{parbuilders.register("#1",\number\nofparbuilders)}%
+ \setxvalue{\??ng:#1}{\attribute\parbuilderattribute\nofparbuilders}}
+
+\unexpanded\def\startparbuilder[#1]%
+ {\edef\@@currentparbuilder{\number\attribute\parbuilderattribute}%
+ \globalpushmacro\@@currentparbuilder
+ \getvalue{\??ng:#1}%
+ \checkparbuilders}
+
+\unexpanded\def\stopparbuilder
+ {\ifhmode\par\fi
+ \globalpopmacro\@@currentparbuilder
+ \attribute\parbuilderattribute\@@currentparbuilder\relax
+ \checkparbuilders}
+
+\def\setmainparbuilder[#1]%
+ {\ctxlua{parbuilders.setmain("#1")}}
+
+% no high level interface, after all implementing a linebreaker is not something that
+% the average user will do
+
+\defineparbuilder[default] % just for testing
+\defineparbuilder[oneline] % just for testing
+\defineparbuilder[basic] % just for testing
+
+\def\enableparbuilders {\ctxlua{parbuilders.enable ()}}
+\def\disableparbuilders{\ctxlua{parbuilders.disable()}}
+
+\def\checkparbuilders % can be more efficient as we don't want to do this to often
+ {\ifcase\attribute\parbuilderattribute
+ \disableparbuilders
+ \else
+ \enableparbuilders
+ \fi}
+
+\protect \endinput