Metapost with LuaTeX

From LuaTeXWiki

Writing directly some metapost code is now possible in LuaTeX, through MPLib. It only works in pdf mode.

To get it working, you will need three files: supp-mpl.lua and supp-mpl.tex (you need to copy/paste them) from the ConTeXt distribution, and a stupid .sty file:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mplib}

\input supp-mpl.tex

\directlua0{dofile(kpse.find_file("formathack.lua"))}

And create a file formathack.lua containing:

local preamble = [[
input %s ; dump ;
]]
metapost.make = function (name, mem_name)
    local mpx = mplib.new {
        ini_version = true,
        find_file = metapost.finder,
        job_name =  name}
    if mpx then
        local result = mpx:execute(string.format(preamble,name))
        mpx:finish()
    end
end
function replacesuffix(filename, suffix)
  return (string.gsub(filename,"%.[%a%d]+$","")) .. "." .. suffix
end
metapost.load = function (name)
    local mpx = mplib.new {
            ini_version = false,
            mem_name = replacesuffix(name,"mem"),
            find_file = finder
        }
    local result
    if not mpx then
        metapost.make(name)
        metapost.report("creating %s.mem", name)
        mpx = mplib.new {
            ini_version = false,
            mem_name = replacesuffix(name,"mem"),
            find_file = finder
        }
    end
    if not mpx then
        result = { status = 99, error = "out of memory"}
    end
    return mpx, result
end

Once you have all four files, the following example should work:

\mplibcode
beginfig(1);
pickup pencircle xscaled 5 rotated 30;
draw unitsquare scaled 20 withcmykcolor (0.3,0.4,0.6,0);
endfig;
\endmplibcode 

as well as any metapost code.