Taco Hoekwater wrote:
Hi,
I have just uploaded the archives for a new luatex release, 0.51.0.
New features:
Actually, there is another feature but it is experimental enough that
it is not documented in the manual yet.
local <node> nodelist, <sp> founddepth =
tex.linebreak(<node> listhead, <table> parameters)
The understood parameters are as follows (with example code):
d = false, % boolean
pardir = 'TLT', % dir
pretolerance = 100, % number
tracingparagraphs = 0, % number
tolerance = 200, % number
looseness = 0, % number
hyphenpenalty = 50, % number
exhyphenpenalty = 50, % number
pdfadjustspacing = 0, % number
adjdemerits = 10000, % number
pdfprotrudechars = 0, % number
linepenalty = 10, % number
lastlinefit = 0, % number
doublehyphendemerits = 10000, % number
finalhyphendemerits = 5000, % number
hangafter = 1, % number
interlinepenalty = 0, % number
clubpenalty = 150, % number
displaywidowpenalty = 150, % number
widowpenalty = 150, % number
brokenpenalty = 100, % number
emergencystretch = 0, % sp
hangindent = 0, % sp
hsize = 65536*72*4, % sp
leftskip = spec, % glue_spec node
rightskip = spec, % glue_spec node
parshape = {} % tabke
pdfeachlineheight = -65536000, % sp
pdfeachlinedepth = -65536000, % sp
pdffirstlineheight =-65536000, % sp
pdflastlinedepth = -65536000, % sp
pdfignoreddimen = -65536000, % sp
The 'd' is whether or not this should be taken as a pre-math-display
subparagraph, everything else should be fairly obvious except for
the last 5. The four pdf...line... things are ignored if their value
equals pdfignoreddimen. Parshape is a list of 2-item arrays, like
that returned from tex.parshape:
local j = tex.linebreak(h,{parshape = {
{tex.sp'1in',tex.sp'6in'},
{tex.sp'3in',tex.sp'3in'},
{tex.sp'4in',tex.sp'2in'},
{tex.sp'1in',tex.sp'6in'}}})
It is your own job to make sure that 'listhead' is a proper paragraph
list: this function does not add any nodes to it. To be exact, if
you want to replace the core line breaking, you may have to do the
following (when you are not actually working in the pre_line_break or
line_break callback, or when the original list starting at listhead
was generated in horizontal mode):
* make sure that all the prev pointers are ok, for example by
using node.slide(listhead)
* you may have to run lang.hyphenate(), node.ligaturing() or
node.kerning()
* add an 'indent box' and perhaps a local_par node at the start
(only if you need them)
* replace any found final glue by an infinite penalty (or add such
a penalty, if the last node is not a glue).
* add a glue node for the \parfillskip after that penalty.
The result is just a node list, it still needs to be vpacked.
There are a few special things you cannot interface using this function,
because there is no lua glue for the underlying data yet:
\interlinepenalties
\clubpenalties
\displaywidowpenalties
\widowpenalties
Also, you can't influence font expansion other than via
'pdfadjustspacing', because the settings for that take place elsewhere.
The same is true for hbadness and hfuzz etc. All these are in the
hpack() routine, and that fetches its own variables via globals.
If there are no complaints, I plan to officially document this function
for version 0.60.
Best wishes,
Taco
_______________________________________________
dev-luatex mailing list
[email protected]
http://www.ntg.nl/mailman/listinfo/dev-luatex