summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luatexbase
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-11-18 00:35:41 +0000
committerKarl Berry <karl@freefriends.org>2010-11-18 00:35:41 +0000
commit75a9ad6b597ca31c07f38850761832951b0f6224 (patch)
treed09aa23cca95f7ea69dfbd5f2683ec1869f9d0aa /Master/texmf-dist/tex/luatex/luatexbase
parente1353b47437cbc7c93c601670ce39cc2bfede42d (diff)
luatexbase (17nov10)
git-svn-id: svn://tug.org/texlive/trunk@20476 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexbase')
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty15
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty15
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty15
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty15
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty15
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty75
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty17
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty19
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/mcb.lua366
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/modutils.lua113
10 files changed, 319 insertions, 346 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty
index 5a78ea8a4fa..cea0e56aaac 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-attr.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-attr}[2010/05/27 v0.2a Attributes allocation for LuaTeX]
+\x{luatexbase-attr}[2010/10/10 v0.3 Attributes allocation for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@attr@AtEnd
\expandafter\endinput
\fi
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty
index d526f2f46a6..76321642650 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-cctb.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-cctb}[2010/05/27 v0.2a Catcodetable allocation for LuaTeX]
+\x{luatexbase-cctb}[2010/10/10 v0.3 Catcodetable allocation for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-cctb}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@cctb@AtEnd
\expandafter\endinput
\fi
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty
index be5d4e8ac3a..4dd53855cc6 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-compat.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-compat}[2010/05/27 v0.2a Compatibility tools for LuaTeX]
+\x{luatexbase-compat}[2010/10/10 v0.3 Compatibility tools for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-compat}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@compat@AtEnd
\expandafter\endinput
\fi
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty
index 1609aba726e..787dea8e1c0 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-loader.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-loader}[2010/05/27 v0.2a Lua module loader for LuaTeX]
+\x{luatexbase-loader}[2010/10/10 v0.3 Lua module loader for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-loader}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@loader@AtEnd
\expandafter\endinput
\fi
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty
index 0fcd35fc4b9..08d1dcf6524 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-mcb.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-mcb}[2010/05/27 v0.2a Callback management for LuaTeX]
+\x{luatexbase-mcb}[2010/10/10 v0.3 Callback management for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-mcb}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@mcb@AtEnd
\expandafter\endinput
\fi
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty
index c33ae6a1c61..d9f7e287f5c 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-modutils.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-modutils}[2010/05/27 v0.2a Module utilities for LuaTeX]
+\x{luatexbase-modutils}[2010/10/10 v0.3 Module utilities for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,37 +61,72 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-modutils}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@modutils@AtEnd
\expandafter\endinput
\fi
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname RequirePackage\endcsname\relax
- \input luatexbase-loader.sty
-\else
+\ifdefined\RequirePackage
\RequirePackage{luatexbase-loader}
+\else
+ \input luatexbase-loader.sty
\fi
\luatexbase@directlua{require('luatexbase.modutils')}
\luatexbase@ensure@primitive{luaescapestring}
-\def\luatexUseModule#1{\luatexbase@directlua{%
- luatexbase.use_module("\luatexluaescapestring{#1}")}}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname newcommand\endcsname\relax
- \def\luatexRequireModule#1#2{%
- \luatexbase@directlua{luatexbase.require_module(
- "\luatexluaescapestring{#1}", "\luatexluaescapestring{#2}")}}
+\ifdefined\kernel@ifnextchar
+ \let\lltxb@ifnextchar\kernel@ifnextchar
\else
- \newcommand\luatexRequireModule[2][0]{%
- \luatexbase@directlua{luatexbase.require_module(
- "\luatexluaescapestring{#2}", "\luatexluaescapestring{#1}")}}
+ \chardef\lltxb@zero0
+ \chardef\lltxb@two2
+ \long\def\lltxb@ifnextchar#1#2#3{%
+ \begingroup
+ \let\lltxb@CharToken= #1\relax
+ \toks\lltxb@zero{#2}%
+ \toks\lltxb@two{#3}%
+ \futurelet\lltxb@LetToken\lltxb@ifnextchar@
+ }
+ \def\lltxb@ifnextchar@{%
+ \ifx\lltxb@LetToken\lltxb@CharToken
+ \expandafter\endgroup\the\toks\expandafter\lltxb@zero
+ \else
+ \ifx\lltxb@LetToken\lltxb@SpaceToken
+ \expandafter\expandafter\expandafter\lltxb@@ifnextchar
+ \else
+ \expandafter\endgroup\the\toks
+ \expandafter\expandafter\expandafter\lltxb@two
+ \fi
+ \fi
+ }
+ \begingroup
+ \def\x#1{\endgroup
+ \def\lltxb@@ifnextchar#1{%
+ \futurelet\lltxb@LetToken\lltxb@ifnextchar@
+ }%
+ }%
+ \x{ }
+ \begingroup
+ \def\x#1{\endgroup
+ \let\lltxb@SpaceToken= #1%
+ }%
+ \x{ }
\fi
+\def\RequireLuaModule#1{%
+ \lltxb@ifnextchar[{\lltxb@requirelua{#1}}{\lltxb@requirelua{#1}[]}}
+\def\lltxb@requirelua#1[#2]{%
+ \luatexbase@directlua{luatexbase.require_module(
+ "\luatexluaescapestring{#1}"
+ \expandafter\ifx\expandafter\/\detokenize{#2}\/\else
+ , "\luatexluaescapestring{#2}"
+ \fi)}}
\lltxb@modutils@AtEnd
\endinput
%%
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty
index 816ddd411b1..aca0843da93 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase-regs.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-regs}[2010/05/27 v0.2a Registers allocation for LuaTeX]
+\x{luatexbase-regs}[2010/10/10 v0.3 Registers allocation for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase-regs}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@regs@AtEnd
\expandafter\endinput
\fi
@@ -86,7 +89,7 @@
\let\x\PackageWarningNoLine
\fi
\expandafter\endgroup
- \x{luatexbase-regs}{etex macros not loaded!^^J
+ \x{luatexbase-regs}{etex macros not loaded!^^J%
Registers allocation scheme will not be extended.}
\else
\ifnum\count270=32768 \count270=65536 \fi
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty
index 734a860310a..1f2c8ba0541 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty
+++ b/Master/texmf-dist/tex/luatex/luatexbase/luatexbase.sty
@@ -52,7 +52,7 @@
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase}[2010/05/27 v0.2a Module utilities for LuaTeX]
+\x{luatexbase}[2010/10/06 v0.3 Module utilities for LuaTeX]
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\input ifluatex.sty
@@ -61,14 +61,17 @@
\fi
\ifluatex\else
\begingroup
- \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
- \def\x#1#2{\begingroup\newlinechar10
- \immediate\write16{Package #1 warning: #2}\endgroup}
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2#3{\begingroup \newlinechar10
+ \errhelp{#3}\errmessage{Package #1 error: #2}\endgroup}
\else
- \let\x\PackageWarningNoLine
+ \let\x\PackageError
\fi
\expandafter\endgroup
- \x{luatexbase}{LuaTeX is required for this package. Aborting.}
+ \x{luatexbase-attr}{LuaTeX is required for this package. Aborting.}{%
+ This package can only be used with the LuaTeX engine^^J%
+ (command `lualatex' or `luatex').^^J%
+ Package loading has been stopped to prevent additional errors.}
\lltxb@core@AtEnd
\expandafter\endinput
\fi
@@ -79,12 +82,16 @@
\input luatexbase-regs.sty
\input luatexbase-attr.sty
\input luatexbase-cctb.sty
+ \input luatexbase-mcb.sty
+ \input luatexbase-modutils.sty
\else
\RequirePackage{luatexbase-compat}
\RequirePackage{luatexbase-loader}
\RequirePackage{luatexbase-regs}
\RequirePackage{luatexbase-attr}
\RequirePackage{luatexbase-cctb}
+ \RequirePackage{luatexbase-mcb}
+ \RequirePackage{luatexbase-modutils}
\fi
\lltxb@core@AtEnd
\endinput
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/mcb.lua b/Master/texmf-dist/tex/luatex/luatexbase/mcb.lua
index ff4605af30d..2b65b90a22d 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/mcb.lua
+++ b/Master/texmf-dist/tex/luatex/luatexbase/mcb.lua
@@ -12,198 +12,154 @@
-- See source file 'luatexbase-mcb.dtx' for details.
--
module('luatexbase', package.seeall)
-luatexbase.provides_module({
- name = "luamcallbacks",
+local err, warning, info = luatexbase.provides_module({
+ name = "luatexbase-mcb",
version = 0.2,
date = "2010/05/12",
description = "register several functions in a callback",
- author = "Hans Hagen, Elie Roux and Manuel P^^c3^^a9gourie-Gonnard",
- copyright = "Hans Hagen, Elie Roux and Manuel P^^c3^^a9gourie-Gonnard",
+ author = "Hans Hagen, Elie Roux and Manuel Pegourie-Gonnard",
+ copyright = "Hans Hagen, Elie Roux and Manuel Pegourie-Gonnard",
license = "CC0",
})
-local log = log or function(...)
- luatexbase.module_log('luamcallbacks', string.format(...))
-end
-local info = info or function(...)
- luatexbase.module_info('luamcallbacks', string.format(...))
-end
-local warning = warning or function(...)
- luatexbase.module_warning('luamcallbacks', string.format(...))
-end
-local err = err or function(...)
- luatexbase.module_error('luamcallbacks', string.format(...))
-end
local callbacklist = callbacklist or { }
-local lua_callbacks_defaults = { }
-local list = 1
-local data = 2
-local first = 3
-local simple = 4
+local list, data, first, simple = 1, 2, 3, 4
+local types = {
+ list = list,
+ data = data,
+ first = first,
+ simple = simple,
+}
local callbacktypes = callbacktypes or {
- buildpage_filter = simple,
- token_filter = first,
- pre_output_filter = list,
- hpack_filter = list,
- process_input_buffer = data,
- mlist_to_hlist = list,
- vpack_filter = list,
- define_font = first,
- open_read_file = first,
- linebreak_filter = list,
- post_linebreak_filter = list,
- pre_linebreak_filter = list,
- start_page_number = simple,
- stop_page_number = simple,
- start_run = simple,
- show_error_hook = simple,
- stop_run = simple,
- hyphenate = simple,
- ligaturing = simple,
- kerning = data,
- find_write_file = first,
- find_read_file = first,
- find_vf_file = data,
- find_map_file = data,
- find_format_file = data,
- find_opentype_file = data,
- find_output_file = data,
- find_truetype_file = data,
- find_type1_file = data,
- find_data_file = data,
- find_pk_file = data,
- find_font_file = data,
- find_image_file = data,
- find_ocp_file = data,
- find_sfd_file = data,
- find_enc_file = data,
- read_sfd_file = first,
- read_map_file = first,
- read_pk_file = first,
- read_enc_file = first,
- read_vf_file = first,
- read_ocp_file = first,
- read_opentype_file = first,
- read_truetype_file = first,
- read_font_file = first,
- read_type1_file = first,
- read_data_file = first,
+ find_read_file = first,
+ find_write_file = first,
+ find_font_file = data,
+ find_output_file = data,
+ find_format_file = data,
+ find_vf_file = data,
+ find_ocp_file = data,
+ find_map_file = data,
+ find_enc_file = data,
+ find_sfd_file = data,
+ find_pk_file = data,
+ find_data_file = data,
+ find_opentype_file = data,
+ find_truetype_file = data,
+ find_type1_file = data,
+ find_image_file = data,
+ open_read_file = first,
+ read_font_file = first,
+ read_vf_file = first,
+ read_ocp_file = first,
+ read_map_file = first,
+ read_enc_file = first,
+ read_sfd_file = first,
+ read_pk_file = first,
+ read_data_file = first,
+ read_truetype_file = first,
+ read_type1_file = first,
+ read_opentype_file = first,
+ process_input_buffer = data,
+ process_output_buffer = data,
+ token_filter = first,
+ buildpage_filter = simple,
+ pre_linebreak_filter = list,
+ linebreak_filter = list,
+ post_linebreak_filter = list,
+ hpack_filter = list,
+ vpack_filter = list,
+ pre_output_filter = list,
+ hyphenate = simple,
+ ligaturing = simple,
+ kerning = simple,
+ mlist_to_hlist = list,
+ start_run = simple,
+ stop_run = simple,
+ start_page_number = simple,
+ stop_page_number = simple,
+ show_error_hook = simple,
+ define_font = first,
}
-if luatexbase.luatexversion > 42 then
- callbacktypes["process_output_buffer"] = data
+local lua_callbacks_defaults = { }
+local original_register = original_register or callback.register
+callback.register = function ()
+ err("function callback.register has been trapped,\n"
+ .."please use luatexbase.add_to_callback instead.")
end
-local internalregister = internalregister or callback.register
-local function str_to_type(str)
- if str == 'list' then
- return list
- elseif str == 'data' then
- return data
- elseif str == 'first' then
- return first
- elseif str == 'simple' then
- return simple
- else
- return nil
- end
+local function register_callback(...)
+ return assert(original_register(...))
end
--- local
-function listhandler (name)
+local function listhandler (name)
return function(head,...)
- local l = callbacklist[name]
- if l then
- local done = true
- for _, f in ipairs(l) do
- -- the returned value is either true or a new head plus true
- rtv1, rtv2 = f.func(head,...)
- if type(rtv1) == 'boolean' then
- done = rtv1
- elseif type (rtv1) == 'userdata' then
- head = rtv1
- end
- if type(rtv2) == 'boolean' then
- done = rtv2
- elseif type(rtv2) == 'userdata' then
- head = rtv2
- end
- if done == false then
- err("function \"%s\" returned false in callback '%s'",
- f.description, name)
- end
+ local ret
+ local alltrue = true
+ for _, f in ipairs(callbacklist[name]) do
+ ret = f.func(head, ...)
+ if ret == false then
+ warn("function '%s' returned false\nin callback '%s'",
+ f.description, name)
+ break
+ end
+ if ret ~= true then
+ alltrue = false
+ head = ret
end
- return head, done
- else
- return head, false
end
+ return alltrue and true or head
end
end
local function datahandler (name)
- return function(data,...)
- local l = callbacklist[name]
- if l then
- for _, f in ipairs(l) do
- data = f.func(data,...)
- end
+ return function(data, ...)
+ for _, f in ipairs(callbacklist[name]) do
+ data = f.func(data, ...)
end
return data
end
end
local function firsthandler (name)
return function(...)
- local l = callbacklist[name]
- if l then
- local f = l[1].func
- return f(...)
- else
- return nil, false
- end
+ return callbacklist[name][1].func(...)
end
end
local function simplehandler (name)
return function(...)
- local l = callbacklist[name]
- if l then
- for _, f in ipairs(l) do
- f.func(...)
- end
+ for _, f in ipairs(callbacklist[name]) do
+ f.func(...)
end
end
end
+local handlers = {
+ [list] = listhandler,
+ [data] = datahandler,
+ [first] = firsthandler,
+ [simple] = simplehandler,
+}
function add_to_callback (name,func,description,priority)
if type(func) ~= "function" then
- err("unable to add function, no proper function passed")
- return
+ return err("unable to add function:\nno proper function passed")
end
if not name or name == "" then
- err("unable to add function, no proper callback name passed")
+ err("unable to add function:\nno proper callback name passed")
return
elseif not callbacktypes[name] then
- err("unable to add function, '%s' is not a valid callback", name)
+ err("unable to add function:\n'%s' is not a valid callback", name)
return
end
if not description or description == "" then
- err("unable to add function to '%s', no proper description passed",
+ err("unable to add function to '%s':\nno proper description passed",
name)
return
end
- if priority_in_callback(name, description) ~= 0 then
- warning("function '%s' already registered in callback '%s'",
+ if priority_in_callback(name, description) then
+ err("function '%s' already registered\nin callback '%s'",
description, name)
+ return
end
local l = callbacklist[name]
if not l then
l = {}
callbacklist[name] = l
if not lua_callbacks_defaults[name] then
- if callbacktypes[name] == list then
- internalregister(name, listhandler(name))
- elseif callbacktypes[name] == data then
- internalregister(name, datahandler(name))
- elseif callbacktypes[name] == simple then
- internalregister(name, simplehandler(name))
- elseif callbacktypes[name] == first then
- internalregister(name, firsthandler(name))
- else
- err("unknown callback type")
- end
+ register_callback(name, handlers[callbacktypes[name]](name))
end
end
local f = {
@@ -216,25 +172,25 @@ function add_to_callback (name,func,description,priority)
elseif priority < 1 then
priority = 1
end
- if callbacktypes[name] == first and (priority ~= 1 or #l ~= 0) then
- warning("several callbacks registered in callback '%s', "
- .."only the first function will be active.", name)
- end
table.insert(l,priority,f)
- log("inserting function '%s' at position %s in callback list for '%s'",
+ if callbacktypes[name] == first and #l ~= 1 then
+ warning("several functions in '%s',\n"
+ .."only one will be active.", name)
+ end
+ info("inserting '%s'\nat position %s in '%s'",
description, priority, name)
end
function remove_from_callback (name, description)
if not name or name == "" then
- err("unable to remove function, no proper callback name passed")
+ err("unable to remove function:\nno proper callback name passed")
return
elseif not callbacktypes[name] then
- err("unable to remove function, '%s' is not a valid callback", name)
+ err("unable to remove function:\n'%s' is not a valid callback", name)
return
end
if not description or description == "" then
err(
- "unable to remove function from '%s', no proper description passed",
+ "unable to remove function from '%s':\nno proper description passed",
name)
return
end
@@ -243,68 +199,91 @@ function remove_from_callback (name, description)
err("no callback list for '%s'",name)
return
end
+ local index = false
for k,v in ipairs(l) do
if v.description == description then
- table.remove(l,k)
- log("removing function '%s' from '%s'",description,name)
- if not next(l) then
- callbacklist[name] = nil
- if not lua_callbacks_defaults[name] then
- internalregister(name, nil)
- end
- end
- return
+ index = k
+ break
end
end
- warning("unable to remove function '%s' from '%s'",description,name)
+ if not index then
+ err("unable to remove '%s'\nfrom '%s'", description, name)
+ return
+ end
+ table.remove(l, index)
+ info("removing '%s'\nfrom '%s'", description, name)
+ if table.maxn(l) == 0 then
+ callbacklist[name] = nil
+ if not lua_callbacks_defaults[name] then
+ register_callback(name, nil)
+ end
+ end
+ return
end
-function reset_callback (name)
+function reset_callback (name, make_false)
if not name or name == "" then
- err("unable to reset, no proper callback name passed")
+ err("unable to reset:\nno proper callback name passed")
return
elseif not callbacktypes[name] then
- err("reset error, '%s' is not a valid callback", name)
+ err("unable to reset '%s':\nis not a valid callback", name)
return
end
+ info("resetting callback '%s'", name)
+ callbacklist[name] = nil
if not lua_callbacks_defaults[name] then
- internalregister(name, nil)
+ if make_false == true then
+ info("setting '%s' to false", name)
+ register_callback(name, false)
+ else
+ register_callback(name, nil)
+ end
+ end
+end
+function priority_in_callback (name, description)
+ if not name or name == ""
+ or not callbacktypes[name]
+ or not description then
+ return false
end
local l = callbacklist[name]
- if l then
- log("resetting callback list '%s'",name)
- callbacklist[name] = nil
+ if not l then return false end
+ for p, f in pairs(l) do
+ if f.description == description then
+ return p
+ end
end
+ return false
end
function create_callback(name, ctype, default)
if not name then
- err("unable to call callback, no proper name passed", name)
+ err("unable to call callback:\nno proper name passed", name)
return nil
end
if not ctype or not default then
- err("unable to create callback '%s': "
+ err("unable to create callback '%s':\n"
.."callbacktype or default function not specified", name)
return nil
end
if callbacktypes[name] then
- err("unable to create callback '%s', callback already exists", name)
+ err("unable to create callback '%s':\ncallback already exists", name)
return nil
end
- local temp = str_to_type(ctype)
- if not temp then
- err("unable to create callback '%s', type '%s' undefined", name, ctype)
+ ctype = types[ctype]
+ if not ctype then
+ err("unable to create callback '%s':\ntype '%s' undefined", name, ctype)
return nil
end
- ctype = temp
+ info("creating '%s' type %s", name, ctype)
lua_callbacks_defaults[name] = default
callbacktypes[name] = ctype
end
function call_callback(name, ...)
if not name then
- err("unable to call callback, no proper name passed", name)
+ err("unable to call callback:\nno proper name passed", name)
return nil
end
if not lua_callbacks_defaults[name] then
- err("unable to call lua callback '%s', unknown callback", name)
+ err("unable to call lua callback '%s':\nunknown callback", name)
return nil
end
local l = callbacklist[name]
@@ -312,38 +291,13 @@ function call_callback(name, ...)
if not l then
f = lua_callbacks_defaults[name]
else
- if callbacktypes[name] == list then
- f = listhandler(name)
- elseif callbacktypes[name] == data then
- f = datahandler(name)
- elseif callbacktypes[name] == simple then
- f = simplehandler(name)
- elseif callbacktypes[name] == first then
- f = firsthandler(name)
- else
+ f = handlers[callbacktypes[name]](name)
+ if not f then
err("unknown callback type")
+ return
end
end
return f(...)
end
-function priority_in_callback (name, description)
- if not name or name == ""
- or not callbacktypes[name]
- or not description then
- return 0
- end
- local l = callbacklist[name]
- if not l then return 0 end
- for p, f in pairs(l) do
- if f.description == description then
- return p
- end
- end
- return 0
-end
-callback.register = function ()
-err("function callback.register has been deleted by luamcallbacks, "
-.."please use luatexbase.add_to_callback instead.")
-end
--
-- End of File `mcb.lua'.
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua b/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
index 64b420c12cb..40063557c8b 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
+++ b/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
@@ -13,103 +13,62 @@
--
module("luatexbase", package.seeall)
local modules = modules or {}
-local requiredversions = {}
-local function datetonumber(date)
+local function date_to_int(date)
numbers = string.gsub(date, "(%d+)/(%d+)/(%d+)", "%1%2%3")
return tonumber(numbers)
end
-local function isdate(date)
- for _, _ in string.gmatch(date, "%d+/%d+/%d+") do
- return true
- end
- return false
-end
-local date, number = 1, 2
-local function parse_version(version)
- if isdate(version) then
- return {type = date, version = datetonumber(version), orig = version}
- else
- return {type = number, version = tonumber(version), orig = version}
- end
+local function msg_format(msg_type, mod_name, ...)
+ local cont = '('..mod_name..')' .. ('Module: '..msg_type):gsub('.', ' ')
+ return 'Module '..mod_name..' '..msg_type..': '
+ .. string.format(...):gsub('\n', '\n'..cont) .. '\n'
end
local function module_error_int(mod, ...)
- error('Module '..mod..' error: '..string.format(...), 3)
+ error(msg_format('error', mod, ...), 3)
end
function module_error(mod, ...)
module_error_int(mod, ...)
end
function module_warning(mod, ...)
- texio.write_nl("Module "..mod.." warning: "..string.format(...))
+ for _, line in ipairs(msg_format('warning', mod, ...):explode('\n')) do
+ texio.write_nl(line)
+ end
end
function module_info(mod, ...)
- texio.write_nl(mod..": "..string.format(...))
+ for _, line in ipairs(msg_format('info', mod, ...):explode('\n')) do
+ texio.write_nl(line)
+ end
end
-function module_log(mod, ...)
- texio.write_nl('log', mod..": "..string.format(...))
+function module_log(mod, msg, ...)
+ texio.write_nl('log', mod..': '..msg:format(...))
end
-function module_term(mod, ...)
- texio.write_nl('term', mod..": "..string.format(...))
+function errwarinf(name)
+ return function(...) module_error_int(name, ...) end,
+ function(...) module_warning(name, ...) end,
+ function(...) module_info(name, ...) end,
+ function(...) module_log(name, ...) end
end
-local function err(...) module_error_int('luatexbase.modutils', ...) end
-local function warn(...) module_warning('luatexbase.modutils', ...) end
-function use_module(name)
+local err, warn = errwarinf('luatexbase.modutils')
+function require_module(name, req_date)
require(name)
- if not modules[name] then
- warn("Module didn't properly identified itself: %s", name)
- end
-end
-function require_module(name, version)
- if not version then
- return use_module(name)
- end
- luaversion = parse_version(version)
- if modules[name] then
- if luaversion.type == date then
- if datetonumber(modules[name].date) < luaversion.version then
- err("found module `%s' loaded in version %s, "
- .."but version %s was required",
- name, modules[name].date, version)
- end
- else
- if modules[name].version < luaversion.version then
- err("found module `%s' loaded in version %.02f, "
- .."but version %s was required",
- name, modules[name].version, version)
- end
+ local info = modules[name]
+ if not info then
+ warn("module '%s' was not properly identified", name)
+ elseif version then
+ if not (info.date and date_to_int(info.date) > date_to_int(req_date))
+ then
+ warn("module '%s' required in version '%s'\n"
+ .. "but found in version '%s'", name, req_date, info.date)
end
- else
- requiredversions[name] = luaversion
- use_module(name)
end
end
-function provides_module(mod)
- if not mod then
- err('cannot provide nil module')
- return
- end
- if not mod.version or not mod.name or not mod.date
- or not mod.description then
- err("invalid module registered: "
- .."fields name, version, date and description are mandatory")
- return
- end
- requiredversion = requiredversions[mod.name]
- if requiredversion then
- if requiredversion.type == date
- and requiredversion.version > datetonumber(mod.date) then
- err("loading module %s in version %s, "
- .."but version %s was required",
- mod.name, mod.date, requiredversion.orig)
- elseif requiredversion.type == number
- and requiredversion.version > mod.version then
- err("loading module %s in version %.02f, "
- .."but version %s was required",
- mod.name, mod.version, requiredversion.orig)
- end
+function provides_module(info)
+ if not (info and info.name) then
+ err('provides_module: missing information')
end
- modules[mod.name] = mod
- texio.write_nl('log', string.format("Lua module: %s %s v%.02f %s\n",
- mod.name, mod.date, mod.version, mod.description))
+ texio.write_nl('log', string.format("Lua module: %s %s %s %s\n",
+ info.name, info.date or '', info.version or '', info.description or ''))
+ modules[info.name] = info
+ return errwarinf(info.name)
end
--
-- End of File `modutils.lua'.