diff options
| -rw-r--r-- | luatex.dtx | 8 | ||||
| -rw-r--r-- | luatexbase-attr.dtx | 47 | ||||
| -rw-r--r-- | luatexbase-mcb.dtx | 8 | 
3 files changed, 50 insertions, 13 deletions
| @@ -227,6 +227,14 @@ See the aforementioned source file(s) for copyright and licensing information.  \fi  %    \end{macrocode}  % +%    We set |LuT@AllocAttribute| in order for the hacks in luatexbase-attr to +%    work. +% +%    \begin{macrocode} +\newcount\LuT@AllocAttribute +\LuT@AllocAttribute=\m@ne +%    \end{macrocode} +%  %    \subsection{Packages loading}  %  %    \begin{macrocode} diff --git a/luatexbase-attr.dtx b/luatexbase-attr.dtx index a3b2e46..ded08b3 100644 --- a/luatexbase-attr.dtx +++ b/luatexbase-attr.dtx @@ -145,7 +145,7 @@ See the aforementioned source file(s) for copyright and licensing information.  % number of the attribute associated to |\fooattr| assuming it was defined  % using |\newluatexattribute\fooattr|, something that \luatex currently  % doesn't support (you can get the current value of the associated attribute -% as |tex.atrribute.fooattr|, but not the attribute number). +% as |tex.attribute.fooattr|, but not the attribute number).  %  % There are several ways to work around this. For example, it is possible to  % extract the number at any time from the |\meaning| of |\fooattr|. @@ -158,7 +158,7 @@ See the aforementioned source file(s) for copyright and licensing information.  %  % Also, two Lua functions are provided that are analogous to the above \tex  % macros (actually, the macros are wrappers around the functions): -% |luatexbase.new_attributes|\parg{name} allocates a new attribute, without +% |luatexbase.new_attribute|\parg{name} allocates a new attribute, without  % defining a corresponding \tex control sequence (only an entry in  % |luatexbase.attributes| is created. It usually returns the number of the  % allocated attribute. If room is missing, it raises an error, unless the @@ -283,14 +283,16 @@ See the aforementioned source file(s) for copyright and licensing information.  %    \subsubsection{Load supporting Lua module}  %  %    First load \pk{luatexbase-loader} (hence \pk{luatexbase-compat}), then -%    the supporting Lua module. +%    the supporting Lua module. We make sure luatex.sty is loaded.  %  %    \begin{macrocode}  \begingroup\expandafter\expandafter\expandafter\endgroup  \expandafter\ifx\csname RequirePackage\endcsname\relax    \input luatexbase-loader.sty +  \input luatex.sty  \else    \RequirePackage{luatexbase-loader} +  \RequirePackage{luatex}  \fi  \luatexbase@directlua{require('luatexbase.attr')}  %    \end{macrocode} @@ -351,14 +353,34 @@ module('luatexbase', package.seeall)  attributes = {}  %    \end{macrocode}  % -%    The allocation function. Unlike other registers, allocate starting from 255. -%    Some code (e.g., font handling coming from Con\tex{}t) behaves strangely -%    with \verb+\attribute0+. What is more the font loader allocates its own -%    attributes in the range from 127 to 254. Since there is plenty of room -%    here, it doesn't seem bad to skep a few items in order to avoid clashes. +%    There are currently two functions that create a new attribute.One is in +%    |oberdiek| bundle, the other is this one. We will hack a little in order +%    to make them compatible. The other function uses |LuT@AllocAttribute| as +%    attribute counter, we will keep it in sync with ours. A possible problem +%    might also appear: the other function starts attribute allocation at 0, +%    which might break luaotfload. We output an error if a new attribute has +%    already been allocated with number 0.  %  %    \begin{macrocode} -local last_alloc = 255 +local luatex_sty_counter = 'LuT@AllocAttribute' +if tex.count[luatex_sty_counter] then +  if tex.count[luatex_sty_counter] > -1 then +    error("luatexbase error: attribute 0 has already been set by \newattribute" +        .."macro from luatex.sty, not belonging to this package, this makes" +        .."luaotfload unuseable. Please report to the maintainer of luatex.sty") +  else +    tex.count[luatex_sty_counter] = 0 +  end +end +%    \end{macrocode} +% +%    The allocaton function. Unlike other registers, allocate starting from 1. +%    Some code (eg, font handling coming from Con\tex{}t) behaves strangely +%    with \verb+\attribute0+ and since there is plenty of room here, it +%    doesn't seem bad to ``loose'' one item in order to avoid this problem. +% +%    \begin{macrocode} +local last_alloc = 0  function new_attribute(name, silent)      if last_alloc >= 65535 then          if silent then @@ -367,7 +389,14 @@ function new_attribute(name, silent)              error("No room for a new \\attribute", 1)          end      end +    local lsc = tex.count[luatex_sty_counter] +    if lsc and lsc > last_alloc then +      last_alloc = lsc +    end      last_alloc = last_alloc + 1 +    if lsc then +      tex.setcount('global', luatex_sty_counter, last_alloc) +    end      attributes[name] = last_alloc      unset_attribute(name)      if not silent then diff --git a/luatexbase-mcb.dtx b/luatexbase-mcb.dtx index ee07019..f4d6448 100644 --- a/luatexbase-mcb.dtx +++ b/luatexbase-mcb.dtx @@ -142,7 +142,7 @@ See the aforementioned source file(s) for copyright and licensing information.  %  % \luatex provides an extremely interesting feature, named callbacks. It  % allows to call some Lua functions at some points of the \TeX\ algorithm (a -% \emph{callback}), like when \TeX\ breaks likes, puts vertical spaces, etc. +% \emph{callback}), like when \TeX\ breaks lines, puts vertical spaces, etc.  % The \luatex core offers a function called \texttt{callback.register} that  % enables to register a function in a callback.  % @@ -157,7 +157,7 @@ See the aforementioned source file(s) for copyright and licensing information.  % \begin{description}  %   \item[simple] is for functions that don't return anything: they are called  %     in order, all with the same argument; -%   \item[data] is for functions receiving a piece of data of nay type +%   \item[data] is for functions receiving a piece of data of any type  %     except node list head (and possibly other arguments) and returning it  %     (possibly modified): the functions are called in order, and each is  %     passed the return value of the previous (and the other arguments @@ -167,8 +167,8 @@ See the aforementioned source file(s) for copyright and licensing information.  %     modified node list, or the boolean values |true| or |false|. The  %     functions are chained the same way as for \emph{data} except that for  %     the following. If -%     one function returns |false|, then |false| is immediately return and the -%     following functions are \emph{not} called. If one function returns +%     one function returns |false|, then |false| is immediately returned and +%     the following functions are \emph{not} called. If one function returns  %     |true|, then the same head is passed to the next function. If all  %     functions return |true|, then |true| is returned, otherwise the return  %     value of the last function not returning |true| is used. | 
