\startluacode
 pgfutil = pgfutil or { }
 local texsprint, format = tex.sprint, string.format
 local prtcatcodes = tex.prtcatcodes
 local colors = attributes.colors

 function pgfutil.unsupported_color(name)
   texsprint(prtcatcodes,format("\\PackageError{pgf}{color %s has unsupported model}{}", name))
   texsprint(prtcatcodes,format("\\pgfutil@definecolor{%s}{gray}{0}", name))
 end

 function pgfutil.registercolor(name, attributes)
   print(name, attributes)
   local cv = colors.values[attributes]
   if cv then
     local model = cv[1]
     if model == 1 then
       print("model=1")
       texsprint(prtcatcodes,format("\\pgfutil@definecolor{%s}{gray}{%1.3f}", name, cv[2]))
     elseif model == 3 then
       print("model=2")
       texsprint(prtcatcodes,format("\\pgfutil@definecolor{%s}{rgb}{%1.3f,%1.3f,%1.3f}", name, cv[3], cv[4], cv[5]))
     else
       print("no model")
       pgfutil.unsupported_color(name)
     end
   else
       print("no color")
       pgfutil.unsupported_color(name)
   end
 end
\stopluacode

\unprotect
\def\pgfutil@registercolor#1%
 {\ctxlua{pgfutil.registercolor("#1",\thecolorattribute       {#1})}}
\protect

