texlive[53901] Master/texmf-dist: luacolor (25feb20)

commits+karl at tug.org commits+karl at tug.org
Tue Feb 25 02:20:35 CET 2020


Revision: 53901
          http://tug.org/svn/texlive?view=revision&revision=53901
Author:   karl
Date:     2020-02-25 02:20:35 +0100 (Tue, 25 Feb 2020)
Log Message:
-----------
luacolor (25feb20)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/luacolor/luacolor.pdf
    trunk/Master/texmf-dist/source/latex/luacolor/luacolor.dtx
    trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.lua

Removed Paths:
-------------
    trunk/Master/texmf-dist/scripts/luacolor/

Modified: trunk/Master/texmf-dist/doc/latex/luacolor/luacolor.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/luacolor/luacolor.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/luacolor/luacolor.dtx	2020-02-25 01:20:13 UTC (rev 53900)
+++ trunk/Master/texmf-dist/source/latex/luacolor/luacolor.dtx	2020-02-25 01:20:35 UTC (rev 53901)
@@ -1,12 +1,12 @@
 % \iffalse meta-comment
 %
 % File: luacolor.dtx
-% Version: 2019/11/29 v1.13
+% Version: 2020-02-22 v1.14
 % Info: Color support via LuaTeX's attributes
 %
 % Copyright (C)
 %    2007, 2009-2011 Heiko Oberdiek
-%    2016-2019 Oberdiek Package Support Group
+%    2016-2020 Oberdiek Package Support Group
 %    https://github.com/ho-tex/luacolor/issues
 %
 % This work may be distributed and/or modified under the
@@ -80,7 +80,7 @@
 \input docstrip.tex
 \Msg{************************************************************************}
 \Msg{* Installation}
-\Msg{* Package: luacolor 2019/11/29 v1.13 Color support via LuaTeX's attributes (HO)}
+\Msg{* Package: luacolor 2020-02-22 v1.14 Color support via LuaTeX's attributes (HO)}
 \Msg{************************************************************************}
 
 \keepsilent
@@ -92,11 +92,11 @@
 This is a generated file.
 
 Project: luacolor
-Version: 2019/11/29 v1.13
+Version: 2020-02-22 v1.14
 
 Copyright (C)
    2007, 2009-2011 Heiko Oberdiek
-   2016-2019 Oberdiek Package Support Group
+   2016-2020 Oberdiek Package Support Group
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either
@@ -118,7 +118,6 @@
 This work consists of the main source file luacolor.dtx
 and the derived files
    luacolor.sty, luacolor.pdf, luacolor.ins, luacolor.drv,
-   luacolor-test1.tex, luacolor-test2.tex, luacolor-test3.tex,
    luacolor.lua,
 
 \endpreamble
@@ -129,14 +128,6 @@
   \file{luacolor.drv}{\from{luacolor.dtx}{driver}}%
   \usedir{tex/latex/luacolor}%
   \file{luacolor.sty}{\from{luacolor.dtx}{package}}%
-%  \usedir{doc/latex/luacolor/test}%
-%  \file{luacolor-test1.tex}{\from{luacolor.dtx}{test1}}%
-%  \file{luacolor-test2.tex}{\from{luacolor.dtx}{test2}}%
-%  \file{luacolor-test3.tex}{\from{luacolor.dtx}{test3}}%
-  \nopreamble
-  \nopostamble
-%  \usedir{source/latex/luacolor/catalogue}%
-%  \file{luacolor.xml}{\from{luacolor.dtx}{catalogue}}%
 }
 \def\MetaPrefix{-- }
 \def\defaultpostamble{%
@@ -178,7 +169,7 @@
 %<*driver>
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesFile{luacolor.drv}%
-  [2019/11/29 v1.13 Color support via LuaTeX's attributes (HO)]%
+  [2020-02-22 v1.14 Color support via LuaTeX's attributes (HO)]%
 \documentclass{ltxdoc}
 \usepackage{holtxdoc}[2011/11/22]
 \usepackage{paralist}
@@ -194,26 +185,11 @@
 % \fi
 %
 %
-% \CharacterTable
-%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-%   Digits        \0\1\2\3\4\5\6\7\8\9
-%   Exclamation   \!     Double quote  \"     Hash (number) \#
-%   Dollar        \$     Percent       \%     Ampersand     \&
-%   Acute accent  \'     Left paren    \(     Right paren   \)
-%   Asterisk      \*     Plus          \+     Comma         \,
-%   Minus         \-     Point         \.     Solidus       \/
-%   Colon         \:     Semicolon     \;     Less than     \<
-%   Equals        \=     Greater than  \>     Question mark \?
-%   Commercial at \@     Left bracket  \[     Backslash     \\
-%   Right bracket \]     Circumflex    \^     Underscore    \_
-%   Grave accent  \`     Left brace    \{     Vertical bar  \|
-%   Right brace   \}     Tilde         \~}
 %
 % \GetFileInfo{luacolor.drv}
 %
 % \title{The \xpackage{luacolor} package}
-% \date{2019/11/29 v1.13}
+% \date{2020-02-22 v1.14}
 % \author{Heiko Oberdiek\thanks
 % {Please report any issues at \url{https://github.com/ho-tex/luacolor/issues}}}
 %
@@ -356,7 +332,7 @@
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{luacolor}%
-  [2019/11/29 v1.13 Color support via LuaTeX's attributes (HO)]
+  [2020-02-22 v1.14 Color support via LuaTeX's attributes (HO)]
 %    \end{macrocode}
 %
 % \subsection{Check for \LuaTeX}
@@ -363,19 +339,12 @@
 %
 %    Without \LuaTeX\ there is no point in using this package.
 %    \begin{macrocode}
-\RequirePackage{infwarerr}[2010/04/08]%
-\RequirePackage{iftex}[2019/11/07]%
-\RequirePackage{ltxcmds}[2011/04/18]%
 \RequirePackage{color}
 %    \end{macrocode}
-% require ltluatex rather than luatex package support for \LuaTeX\ allocations.
+%
 %    \begin{macrocode}
-\ifluatex
-  \ifx\newattribute\@undefined
-    \RequirePackage{ltluatex}%
- \fi
-\else
-  \@PackageError{luacolor}{%
+\ifx\directlua\@undefined
+  \PackageError{luacolor}{%
     This package may only be run using LuaTeX%
   }\@ehc
   \expandafter\LuaCol at AtEnd
@@ -382,18 +351,12 @@
 \fi%
 %    \end{macrocode}
 %
-%    \begin{macro}{\LuaCol at directlua}
-%    \begin{macrocode}
-  \let\LuaCol at directlua\directlua
-%    \end{macrocode}
-%    \end{macro}
-%
 % \subsection{Check for disabled colors}
 %
 %    \begin{macrocode}
 \ifcolors@
 \else
-  \@PackageWarningNoLine{luacolor}{%
+  \PackageWarningNoLine{luacolor}{%
     Colors are disabled by option `monochrome'%
   }%
   \def\set at color{}%
@@ -407,15 +370,15 @@
 % \subsection{Load module and check version}
 %
 %    \begin{macrocode}
-\LuaCol at directlua{%
+\directlua{%
   require("luacolor")%
 }
 %    \end{macrocode}
 %    \begin{macrocode}
 \begingroup
-  \edef\x{\LuaCol at directlua{tex.write("2019/11/29 v1.13")}}%
+  \edef\x{\directlua{tex.write("2020-02-22 v1.14")}}%
   \edef\y{%
-    \LuaCol at directlua{%
+    \directlua{%
       if oberdiek.luacolor.getversion then %
         oberdiek.luacolor.getversion()%
       end%
@@ -423,7 +386,7 @@
   }%
   \ifx\x\y
   \else
-    \@PackageError{luacolor}{%
+    \PackageError{luacolor}{%
       Wrong version of lua module.\MessageBreak
       Package version: \x\MessageBreak
       Lua module: \y
@@ -435,7 +398,7 @@
 % \subsection{Find driver}
 %
 %    \begin{macrocode}
-\ifpdf
+\ifnum\outputmode=\@ne
 \else
   \begingroup
     \def\current at color{}%
@@ -446,12 +409,12 @@
       \endgroup
     }%
     \edef\reserved at a{%
-      \LuaCol at directlua{%
+      \directlua{%
         oberdiek.luacolor.dvidetect()%
       }%
     }%
     \ifx\reserved at a\@empty
-      \@PackageError{luacolor}{%
+      \PackageError{luacolor}{%
         DVI driver detection failed because of\MessageBreak
         unrecognized color \string\special
       }\@ehc
@@ -458,9 +421,9 @@
       \endgroup
       \expandafter\expandafter\expandafter\LuaCol at AtEnd
     \else
-      \@PackageInfoNoLine{luacolor}{%
+      \PackageInfo{luacolor}{%
         Type of color \string\special: \reserved at a
-      }%
+      \@gobble}%
     \fi%
   \endgroup
 \fi
@@ -470,17 +433,9 @@
 %
 %    \begin{macro}{\LuaCol at Attribute}
 %    \begin{macrocode}
-\ltx at IfUndefined{newluatexattribute}{%
-  \newattribute\LuaCol at Attribute
-}{%
-  \newluatexattribute\LuaCol at Attribute
-}
-\ltx at IfUndefined{setluatexattribute}{%
-  \let\LuaCol at setattribute\setattribute
-}{%
-  \let\LuaCol at setattribute\setluatexattribute
-}
-\LuaCol at directlua{%
+\newattribute\LuaCol at Attribute
+\let\LuaCol at setattribute\setattribute
+\directlua{%
   oberdiek.luacolor.setattribute(\number\allocationnumber)%
 }
 %    \end{macrocode}
@@ -490,7 +445,7 @@
 %    \begin{macrocode}
 \protected\def\set at color{%
   \LuaCol at setattribute\LuaCol at Attribute{%
-    \LuaCol at directlua{%
+    \directlua{%
       oberdiek.luacolor.get("\luaescapestring{\current at color}")%
     }%
   }%
@@ -508,7 +463,7 @@
 %    \begin{macro}{\luacolorProcessBox}
 %    \begin{macrocode}
 \def\luacolorProcessBox#1{%
-  \LuaCol at directlua{%
+  \directlua{%
     oberdiek.luacolor.process(\number#1)%
   }%
 }
@@ -527,44 +482,26 @@
 \set at color
 %    \end{macrocode}
 %
-% \subsection{\cs{pdfxform} support}
+% \subsection{\cs{pdfxform}/\cs{saveboxresource} support}
 %
 %    \begin{macrocode}
-\ifpdf
-  \ifx\pdfxform\@undefined
-    \let\pdfxform\saveboxresource
-  \fi
-  \ltx at IfUndefined{pdfxform}{%
-      \directlua{%
-        tex.enableprimitives('',{%
-          'pdfxform','pdflastxform','pdfrefxform'%
-        })%
+\ifnum\outputmode=\@ne
+    \let\LuaCol at org@pdfxform\saveboxresource
+%    \end{macrocode}
+% This is written in Lua so the integer setting is expandable and does not interfere with
+% a preceding \verb|\immediate|.
+%    \begin{macrocode}
+    \protected\def\saveboxresource{%
+      \directlua{
+        local c = token.scan_int()
+        oberdiek.luacolor.process(c)
+        token.put_next(token.create'LuaCol at org@pdfxform', token.new(c, token.command_id'char_given'))
       }%
-  }{}%
-  \ltx at IfUndefined{protected}{%
-      \directlua{tex.enableprimitives('',{'protected'})}%
-  }{}%
-  \ltx at IfUndefined{pdfxform}{%
-    \@PackageWarning{luacolor}{\string\pdfxform\space not found}%
-  }{%
-    \let\LuaCol at org@pdfxform\pdfxform
-    \begingroup\expandafter\expandafter\expandafter\endgroup
-    \expandafter\ifx\csname protected\endcsname\relax
-      \@PackageWarning{luacolor}{\string\protected\space not found}%
-    \else
-      \expandafter\protected
-    \fi
-    \def\pdfxform{%
-      \begingroup
-      \afterassignment\LuaCol at pdfxform
-      \count@=%
     }%
-    \def\LuaCol at pdfxform{%
-      \luacolorProcessBox\count@
-      \LuaCol at org@pdfxform\count@
-      \endgroup
-    }%
-  }%
+%    \end{macrocode}
+%    Legacy alias.
+%    \begin{macrocode}
+    \let\pdfxform\saveboxresource
 \fi
 %    \end{macrocode}
 %
@@ -589,7 +526,7 @@
 %    \begin{macro}{getversion()}
 %    \begin{macrocode}
 function luacolor.getversion()
-  tex.write("2019/11/29 v1.13")
+  tex.write("2020-02-22 v1.14")
 end
 %    \end{macrocode}
 %    \end{macro}
@@ -784,8 +721,10 @@
         traverse(n.leader, color, DRY_FALSE or dry)
       else
         traverse(n.leader, '', DRY_FALSE or dry)
+%    \end{macrocode}
 % The color status is unknown here, because the leader box
 % will or will not be set.
+%    \begin{macrocode}
         color = ''
       end
     elseif t == COLOR then
@@ -829,160 +768,21 @@
 end
 %    \end{macrocode}
 %    \end{macro}
-%
+% For recent versions of luaotfload, we can register a callback to
+% control how coloring glyph is handled for the color feature.
 %    \begin{macrocode}
-%</lua>
+if luaotfload.set_colorhandler then
+  local set_attribute = node.direct.set_attribute
+  luaotfload.set_colorhandler(function(head, n, color)
+    set_attribute(n, attribute, luacolor.getvalue(color))
+    return head, n
+  end)
+end
 %    \end{macrocode}
 %
-% \section{Test}
-%
 %    \begin{macrocode}
-%<*test1>
-\documentclass{article}
-\usepackage{color}
-%</test1>
+%</lua>
 %    \end{macrocode}
-% \subsection{Catcode checks for loading}
-%
-%    \begin{macrocode}
-%<*test1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\catcode`\{=1 %
-\catcode`\}=2 %
-\catcode`\#=6 %
-\catcode`\@=11 %
-\expandafter\ifx\csname count@\endcsname\relax
-  \countdef\count@=255 %
-\fi
-\expandafter\ifx\csname @gobble\endcsname\relax
-  \long\def\@gobble#1{}%
-\fi
-\expandafter\ifx\csname @firstofone\endcsname\relax
-  \long\def\@firstofone#1{#1}%
-\fi
-\expandafter\ifx\csname loop\endcsname\relax
-  \expandafter\@firstofone
-\else
-  \expandafter\@gobble
-\fi
-{%
-  \def\loop#1\repeat{%
-    \def\body{#1}%
-    \iterate
-  }%
-  \def\iterate{%
-    \body
-      \let\next\iterate
-    \else
-      \let\next\relax
-    \fi
-    \next
-  }%
-  \let\repeat=\fi
-}%
-\def\RestoreCatcodes{}
-\count@=0 %
-\loop
-  \edef\RestoreCatcodes{%
-    \RestoreCatcodes
-    \catcode\the\count@=\the\catcode\count@\relax
-  }%
-\ifnum\count@<255 %
-  \advance\count@ 1 %
-\repeat
-
-\def\RangeCatcodeInvalid#1#2{%
-  \count@=#1\relax
-  \loop
-    \catcode\count@=15 %
-  \ifnum\count@<#2\relax
-    \advance\count@ 1 %
-  \repeat
-}
-\def\RangeCatcodeCheck#1#2#3{%
-  \count@=#1\relax
-  \loop
-    \ifnum#3=\catcode\count@
-    \else
-      \errmessage{%
-        Character \the\count@\space
-        with wrong catcode \the\catcode\count@\space
-        instead of \number#3%
-      }%
-    \fi
-  \ifnum\count@<#2\relax
-    \advance\count@ 1 %
-  \repeat
-}
-\def\space{ }
-\expandafter\ifx\csname LoadCommand\endcsname\relax
-  \def\LoadCommand{\input luacolor.sty\relax}%
-\fi
-\def\Test{%
-  \RangeCatcodeInvalid{0}{47}%
-  \RangeCatcodeInvalid{58}{64}%
-  \RangeCatcodeInvalid{91}{96}%
-  \RangeCatcodeInvalid{123}{255}%
-  \catcode`\@=12 %
-  \catcode`\\=0 %
-  \catcode`\%=14 %
-  \LoadCommand
-  \RangeCatcodeCheck{0}{36}{15}%
-  \RangeCatcodeCheck{37}{37}{14}%
-  \RangeCatcodeCheck{38}{47}{15}%
-  \RangeCatcodeCheck{48}{57}{12}%
-  \RangeCatcodeCheck{58}{63}{15}%
-  \RangeCatcodeCheck{64}{64}{12}%
-  \RangeCatcodeCheck{65}{90}{11}%
-  \RangeCatcodeCheck{91}{91}{15}%
-  \RangeCatcodeCheck{92}{92}{0}%
-  \RangeCatcodeCheck{93}{96}{15}%
-  \RangeCatcodeCheck{97}{122}{11}%
-  \RangeCatcodeCheck{123}{255}{15}%
-  \RestoreCatcodes
-}
-\Test
-\csname @@end\endcsname
-\end
-%    \end{macrocode}
-%    \begin{macrocode}
-%</test1>
-%    \end{macrocode}
-%
-% \subsection{Driver detection}
-%
-%    \begin{macrocode}
-%<*test2>
-\NeedsTeXFormat{LaTeX2e}
-\ifcsname driver\endcsname
-  \expandafter\PassOptionsToPackage\expandafter{\driver}{color}%
-  \pdfoutput=0 %
-\fi
-\documentclass{minimal}
-\usepackage{luacolor}[2018/11/01]
-\csname @@end\endcsname
-\end
-%</test2>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<*test3>
-\NeedsTeXFormat{LaTeX2e}
-%    \end{macrocode}
-%    \begin{macrocode}
-\documentclass{minimal}
-\usepackage{luacolor}[2018/11/01]
-\usepackage{qstest}
-\IncludeTests{*}
-\LogTests{log}{*}{*}
-\makeatletter
-%    \end{macrocode}
-%    \begin{macrocode}
-\@@end
-%</test3>
-%    \end{macrocode}
-%
 % \section{Installation}
 %
 % \subsection{Download}
@@ -1236,6 +1036,14 @@
 %     Documentation updates.
 %   \item  Use \xpackage{iftex} directly.
 %   \end{Version}
+%   \begin{Version}{2020-02-22 v1.14}
+%   \item Drop use of \textsf{iftex} \textsf{ltxcmds} and \textsf{infwarerr}.
+%   \item Assume \textsf{ltluatex} preloaded into format (true since 2015).
+%   \item Patch \verb|\saveboxresource| rather than \verb|\pdfxform| (keep old name as alias).
+%   \item Grab the number via Lua so that a \verb|\immediate| prefix still works with
+%         \verb|\saveboxresource|\slash \verb|\pdfxform|.
+%   \item Added handler for the color feature of luaotfload      
+%   \end{Version}
 % \end{History}
 %
 % \PrintIndex

Added: trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.lua	2020-02-25 01:20:35 UTC (rev 53901)
@@ -0,0 +1,227 @@
+-- 
+--  This is file `luacolor.lua',
+--  generated with the docstrip utility.
+-- 
+--  The original source files were:
+-- 
+--  luacolor.dtx  (with options: `lua')
+--  
+--  This is a generated file.
+--  
+--  Project: luacolor
+--  Version: 2020-02-22 v1.14
+--  
+--  Copyright (C)
+--     2007, 2009-2011 Heiko Oberdiek
+--     2016-2020 Oberdiek Package Support Group
+--  
+--  This work may be distributed and/or modified under the
+--  conditions of the LaTeX Project Public License, either
+--  version 1.3c of this license or (at your option) any later
+--  version. This version of this license is in
+--     https://www.latex-project.org/lppl/lppl-1-3c.txt
+--  and the latest version of this license is in
+--     https://www.latex-project.org/lppl.txt
+--  and version 1.3 or later is part of all distributions of
+--  LaTeX version 2005/12/01 or later.
+--  
+--  This work has the LPPL maintenance status "maintained".
+--  
+--  The Current Maintainers of this work are
+--  Heiko Oberdiek and the Oberdiek Package Support Group
+--  https://github.com/ho-tex/luacolor/issues
+--  
+--  
+--  This work consists of the main source file luacolor.dtx
+--  and the derived files
+--     luacolor.sty, luacolor.pdf, luacolor.ins, luacolor.drv,
+--     luacolor.lua,
+--  
+oberdiek = oberdiek or {}
+local luacolor = oberdiek.luacolor or {}
+oberdiek.luacolor = luacolor
+function luacolor.getversion()
+  tex.write("2020-02-22 v1.14")
+end
+local ifpdf = tonumber(tex.outputmode or tex.pdfoutput) > 0
+local prefix
+local prefixes = {
+  dvips   = "color ",
+  dvipdfm = "pdf:sc ",
+  truetex = "textcolor:",
+  pctexps = "ps::",
+}
+local patterns = {
+  ["^color "]            = "dvips",
+  ["^pdf: *begincolor "] = "dvipdfm",
+  ["^pdf: *bcolor "]     = "dvipdfm",
+  ["^pdf: *bc "]         = "dvipdfm",
+  ["^pdf: *setcolor "]   = "dvipdfm",
+  ["^pdf: *scolor "]     = "dvipdfm",
+  ["^pdf: *sc "]         = "dvipdfm",
+  ["^textcolor:"]        = "truetex",
+  ["^ps::"]              = "pctexps",
+}
+local function info(msg, term)
+  local target = "log"
+  if term then
+    target = "term and log"
+  end
+  texio.write_nl(target, "Package luacolor info: " .. msg .. ".")
+  texio.write_nl(target, "")
+end
+function luacolor.dvidetect()
+  local v = tex.box[0]
+  assert(v.id == node.id("hlist"))
+  for v in node.traverse_id(node.id("whatsit"), v.head) do
+    if v and v.subtype == node.subtype("special") then
+      local data = v.data
+      for pattern, driver in pairs(patterns) do
+        if string.find(data, pattern) then
+          prefix = prefixes[driver]
+          tex.write(driver)
+          return
+        end
+      end
+      info("\\special{" .. data .. "}", true)
+      return
+    end
+  end
+  info("Missing \\special", true)
+end
+local map = {
+  n = 0,
+}
+function luacolor.get(color)
+  tex.write("" .. luacolor.getvalue(color))
+end
+function luacolor.getvalue(color)
+  local n = map[color]
+  if not n then
+    n = map.n + 1
+    map.n = n
+    map[n] = color
+    map[color] = n
+  end
+  return n
+end
+local attribute
+function luacolor.setattribute(attr)
+  attribute = attr
+end
+function luacolor.getattribute()
+  return attribute
+end
+local LIST = 1
+local LIST_LEADERS = 2
+local LIST_DISC = 3
+local COLOR = 4
+local RULE = node.id("rule")
+local node_types = {
+  [node.id("hlist")] = LIST,
+  [node.id("vlist")] = LIST,
+  [node.id("rule")]  = COLOR,
+  [node.id("glyph")] = COLOR,
+  [node.id("disc")]  = LIST_DISC,
+  [node.id("whatsit")] = {
+    [node.subtype("special")] = COLOR,
+    [node.subtype("pdf_literal")] = COLOR,
+    [node.subtype("pdf_save")] = COLOR,
+    [node.subtype("pdf_restore")] = COLOR, -- probably not needed
+-- TODO (DPC)    [node.subtype("pdf_refximage")] = COLOR,
+  },
+  [node.id("glue")] =
+    function(n)
+      if n.subtype >= 100 then -- leaders
+        if n.leader.id == RULE then
+          return COLOR
+        else
+          return LIST_LEADERS
+        end
+      end
+    end,
+}
+local function get_type(n)
+  local ret = node_types[n.id]
+  if type(ret) == 'table' then
+    ret = ret[n.subtype]
+  end
+  if type(ret) == 'function' then
+    ret = ret(n)
+  end
+  return ret
+end
+local mode = 2 -- luatex.pdfliteral.direct
+local WHATSIT = node.id("whatsit")
+local SPECIAL = node.subtype("special")
+local PDFLITERAL = node.subtype("pdf_literal")
+local DRY_FALSE = false
+local DRY_TRUE = true
+local function traverse(list, color, dry)
+  if not list then
+    return color
+  end
+  local head
+  if get_type(list) == LIST then
+    head = list.head
+  elseif get_type(list) == LIST_DISC then
+    head = list.replace
+  else
+    texio.write_nl("!!! Error: Wrong list type: " .. node.type(list.id))
+    return color
+  end
+  for n in node.traverse(head) do
+    local t = get_type(n)
+    if t == LIST or t == LIST_DISC then
+      color = traverse(n, color, dry)
+    elseif t == LIST_LEADERS then
+      local color_after = traverse(n.leader, color, DRY_TRUE)
+      if color == color_after then
+        traverse(n.leader, color, DRY_FALSE or dry)
+      else
+        traverse(n.leader, '', DRY_FALSE or dry)
+        color = ''
+      end
+    elseif t == COLOR then
+      local v = node.has_attribute(n, attribute)
+      if v then
+        local newColor = map[v]
+        if newColor ~= color then
+          color = newColor
+          if dry == DRY_FALSE then
+            local newNode
+            if ifpdf then
+              newNode = node.new(WHATSIT, PDFLITERAL)
+              newNode.mode = mode
+              newNode.data = color
+            else
+              newNode = node.new(WHATSIT, SPECIAL)
+              newNode.data = prefix .. color
+            end
+            head = node.insert_before(head, n, newNode)
+          end
+        end
+      end
+    end
+  end
+  if get_type(list) == LIST then
+    list.head = head
+  else
+    list.replace = head
+  end
+  return color
+end
+function luacolor.process(box)
+  local color = ""
+  local list = tex.getbox(box)
+  traverse(list, color, DRY_FALSE)
+end
+if luaotfload.set_colorhandler then
+  local set_attribute = node.direct.set_attribute
+  luaotfload.set_colorhandler(function(head, n, color)
+    set_attribute(n, attribute, luacolor.getvalue(color))
+    return head, n
+  end)
+end
+-- 
+--  End of File `luacolor.lua'.


Property changes on: trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.sty	2020-02-25 01:20:13 UTC (rev 53900)
+++ trunk/Master/texmf-dist/tex/latex/luacolor/luacolor.sty	2020-02-25 01:20:35 UTC (rev 53901)
@@ -9,11 +9,11 @@
 %% This is a generated file.
 %% 
 %% Project: luacolor
-%% Version: 2019/11/29 v1.13
+%% Version: 2020-02-22 v1.14
 %% 
 %% Copyright (C)
 %%    2007, 2009-2011 Heiko Oberdiek
-%%    2016-2019 Oberdiek Package Support Group
+%%    2016-2020 Oberdiek Package Support Group
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either
@@ -35,7 +35,6 @@
 %% This work consists of the main source file luacolor.dtx
 %% and the derived files
 %%    luacolor.sty, luacolor.pdf, luacolor.ins, luacolor.drv,
-%%    luacolor-test1.tex, luacolor-test2.tex, luacolor-test3.tex,
 %%    luacolor.lua,
 %% 
 \begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -90,25 +89,17 @@
 \edef\LuaCol at AtEnd{\LuaCol at AtEnd\noexpand\endinput}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{luacolor}%
-  [2019/11/29 v1.13 Color support via LuaTeX's attributes (HO)]
-\RequirePackage{infwarerr}[2010/04/08]%
-\RequirePackage{iftex}[2019/11/07]%
-\RequirePackage{ltxcmds}[2011/04/18]%
+  [2020-02-22 v1.14 Color support via LuaTeX's attributes (HO)]
 \RequirePackage{color}
-\ifluatex
-  \ifx\newattribute\@undefined
-    \RequirePackage{ltluatex}%
- \fi
-\else
-  \@PackageError{luacolor}{%
+\ifx\directlua\@undefined
+  \PackageError{luacolor}{%
     This package may only be run using LuaTeX%
   }\@ehc
   \expandafter\LuaCol at AtEnd
 \fi%
-  \let\LuaCol at directlua\directlua
 \ifcolors@
 \else
-  \@PackageWarningNoLine{luacolor}{%
+  \PackageWarningNoLine{luacolor}{%
     Colors are disabled by option `monochrome'%
   }%
   \def\set at color{}%
@@ -117,13 +108,13 @@
   \def\define at color#1#2{}%
   \expandafter\LuaCol at AtEnd
 \fi%
-\LuaCol at directlua{%
+\directlua{%
   require("luacolor")%
 }
 \begingroup
-  \edef\x{\LuaCol at directlua{tex.write("2019/11/29 v1.13")}}%
+  \edef\x{\directlua{tex.write("2020-02-22 v1.14")}}%
   \edef\y{%
-    \LuaCol at directlua{%
+    \directlua{%
       if oberdiek.luacolor.getversion then %
         oberdiek.luacolor.getversion()%
       end%
@@ -131,7 +122,7 @@
   }%
   \ifx\x\y
   \else
-    \@PackageError{luacolor}{%
+    \PackageError{luacolor}{%
       Wrong version of lua module.\MessageBreak
       Package version: \x\MessageBreak
       Lua module: \y
@@ -138,7 +129,7 @@
     }\@ehc
   \fi
 \endgroup
-\ifpdf
+\ifnum\outputmode=\@ne
 \else
   \begingroup
     \def\current at color{}%
@@ -149,12 +140,12 @@
       \endgroup
     }%
     \edef\reserved at a{%
-      \LuaCol at directlua{%
+      \directlua{%
         oberdiek.luacolor.dvidetect()%
       }%
     }%
     \ifx\reserved at a\@empty
-      \@PackageError{luacolor}{%
+      \PackageError{luacolor}{%
         DVI driver detection failed because of\MessageBreak
         unrecognized color \string\special
       }\@ehc
@@ -161,28 +152,20 @@
       \endgroup
       \expandafter\expandafter\expandafter\LuaCol at AtEnd
     \else
-      \@PackageInfoNoLine{luacolor}{%
+      \PackageInfo{luacolor}{%
         Type of color \string\special: \reserved at a
-      }%
+      \@gobble}%
     \fi%
   \endgroup
 \fi
-\ltx at IfUndefined{newluatexattribute}{%
-  \newattribute\LuaCol at Attribute
-}{%
-  \newluatexattribute\LuaCol at Attribute
-}
-\ltx at IfUndefined{setluatexattribute}{%
-  \let\LuaCol at setattribute\setattribute
-}{%
-  \let\LuaCol at setattribute\setluatexattribute
-}
-\LuaCol at directlua{%
+\newattribute\LuaCol at Attribute
+\let\LuaCol at setattribute\setattribute
+\directlua{%
   oberdiek.luacolor.setattribute(\number\allocationnumber)%
 }
 \protected\def\set at color{%
   \LuaCol at setattribute\LuaCol at Attribute{%
-    \LuaCol at directlua{%
+    \directlua{%
       oberdiek.luacolor.get("\luaescapestring{\current at color}")%
     }%
   }%
@@ -189,7 +172,7 @@
 }
 \def\reset at color{}
 \def\luacolorProcessBox#1{%
-  \LuaCol at directlua{%
+  \directlua{%
     oberdiek.luacolor.process(\number#1)%
   }%
 }
@@ -198,41 +181,16 @@
   \luacolorProcessBox\AtBeginShipoutBox
 }
 \set at color
-\ifpdf
-  \ifx\pdfxform\@undefined
-    \let\pdfxform\saveboxresource
-  \fi
-  \ltx at IfUndefined{pdfxform}{%
-      \directlua{%
-        tex.enableprimitives('',{%
-          'pdfxform','pdflastxform','pdfrefxform'%
-        })%
+\ifnum\outputmode=\@ne
+    \let\LuaCol at org@pdfxform\saveboxresource
+    \protected\def\saveboxresource{%
+      \directlua{
+        local c = token.scan_int()
+        oberdiek.luacolor.process(c)
+        token.put_next(token.create'LuaCol at org@pdfxform', token.new(c, token.command_id'char_given'))
       }%
-  }{}%
-  \ltx at IfUndefined{protected}{%
-      \directlua{tex.enableprimitives('',{'protected'})}%
-  }{}%
-  \ltx at IfUndefined{pdfxform}{%
-    \@PackageWarning{luacolor}{\string\pdfxform\space not found}%
-  }{%
-    \let\LuaCol at org@pdfxform\pdfxform
-    \begingroup\expandafter\expandafter\expandafter\endgroup
-    \expandafter\ifx\csname protected\endcsname\relax
-      \@PackageWarning{luacolor}{\string\protected\space not found}%
-    \else
-      \expandafter\protected
-    \fi
-    \def\pdfxform{%
-      \begingroup
-      \afterassignment\LuaCol at pdfxform
-      \count@=%
     }%
-    \def\LuaCol at pdfxform{%
-      \luacolorProcessBox\count@
-      \LuaCol at org@pdfxform\count@
-      \endgroup
-    }%
-  }%
+    \let\pdfxform\saveboxresource
 \fi
 \LuaCol at AtEnd%
 \endinput



More information about the tex-live-commits mailing list.