%D \module
%D   [       file=mult-prm,
%D        version=2011.09.18, % actually older
%D          title=\CONTEXT\ Multilingual Macros,
%D       subtitle=Primitives,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is therefore
%C copyrighted by \PRAGMA. See mreadme.pdf for details.

%D This file is only a helper for generating files that can be used in an
%D editor for syntax highlighting.

% local all = table.load("mult-prm.lua")
% local tex = table.tohash(all.tex)
% for k, v in next, all do
%     if k ~= "tex" then
%         local h = table.tohash(v)
%         for k, v in next, h do
%             tex[k] = nil
%         end
%         all[k] = table.sortedkeys(h)
%     end
% end
% all.tex = table.sortedkeys(tex)
% print((string.gsub(table.serialize(all,true),' "','\n  "')))

\startluacode

    context.starttext()

    local missing = {
        tex = {
        },
        etex = {
        },
        luatex = {
        },
        pdftex = { -- maybe not complete
            "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing",
            "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit",
            "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate",
            "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode",
            "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink",
            "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand",
            "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma",
            "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin",
            "pdfignoreddimen", "pdfignoreunknownimages", "pdfimageaddfilename",
            "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor",
            "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts",
            "pdfinclusionerrorlevel", "pdfinfo", "pdfinfoomitdate",
            "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink",
            "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages",
            "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral",
            "pdfmapfile", "pdfmapline", "pdfmajorversion", "pdfminorversion", "pdfnames",
            "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfrecompress",
            "pdfobjcompresslevel", "pdfoutline", "pdfoutput", "pdfpageattr",
            "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources",
            "pdfpagesattr", "pdfpagewidth", "pdfpkfixeddpi", "pdfpkmode",
            "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen",
            "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage",
            "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos",
            "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread",
            "pdfsuppressoptionalinfo", "pdfsuppressptexinfo", "pdftexbanner",
            "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin",
            "pdftracingfonts", "pdftrailer", "pdftrailerid", "pdfuniformdeviate",
            "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr",
            "pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage",
            "pdfomitcidset", "pdfomitcharset",
        },
        aleph = { -- we don't bother
            "Alephminorversion", "Alephrevision", "Alephversion",
        },
        omega = { -- we don't bother
            "Omegaminorversion", "Omegarevision", "Omegaversion",
        },
        xetex = { -- we don't bother
            "XeTeXversion",
        },
     -- plain = {
     --     "TeX",
     --     "bgroup", "egroup", "endgraf", "space", "empty", "null",
     --     "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newhelp", "newread", "newwrite", "newfam", "newlanguage", "newinsert", "newif",
     --     "maxdimen", "magstephalf", "magstep",
     --     "frenchspacing", "nonfrenchspacing", "normalbaselines", "obeylines", "obeyspaces", "raggedright", "ttraggedright",
     --     "thinspace", "negthinspace", "enspace", "enskip", "quad", "qquad",
     --     "smallskip", "medskip", "bigskip", "removelastskip", "topglue", "vglue", "hglue",
     --     "break", "nobreak", "allowbreak", "filbreak", "goodbreak", "smallbreak", "medbreak", "bigbreak",
     --     "line", "leftline", "rightline", "centerline", "rlap", "llap", "underbar", "strutbox", "strut",
     --     "cases", "matrix", "pmatrix", "bordermatrix", "eqalign", "displaylines", "eqalignno", "leqalignno",
     --     "pageno", "folio", "tracingall", "showhyphens", "fmtname", "fmtversion",
     --     "hphantom", "vphantom", "phantom", "smash",
     -- },
    }

    local primitives = {
        tex    = table.sorted( table.merged( missing.tex   , tex.extraprimitives("core","tex") ) ),
        etex   = table.sorted( table.merged( missing.etex  , tex.extraprimitives("etex") ) ),
        pdftex = table.sorted( table.merged( missing.pdftex, { } ) ),
        luatex = table.sorted( table.merged( missing.luatex, tex.extraprimitives("luatex") ) ),
        aleph  = table.sorted( table.merged( missing.aleph , { } ) ),
        omega  = table.sorted( table.merged( missing.omega , { } ) ),
        xetex  = table.sorted( table.merged( missing.xetex , { } ) ),
    }

 -- table.remove(primitives.tex,1) -- get rid of \-

    io.savedata("mult-prm.lua",table.serialize(primitives,true,{ reduce = true, inline = false }))

    context.stoptext()

\stopluacode
