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

Reply via email to