local identifiers = fonts.hashes.identifiers

return function(specification)
    local f1, id1 = fonts.constructors.readanddefine('lmroman10-regular',     specification.size)
    local f2, id2 = fonts.constructors.readanddefine('lmsans10-regular',      specification.size)
    local f3, id3 = fonts.constructors.readanddefine('lmtypewriter10-regular',specification.size)
    if f1 and f2 and f3 then
        f1.properties.name = specification.name
        f1.properties.virtualized = true
        f1.fonts = {
            { id = id1 },
            { id = id2 },
            { id = id3 },
        }
        local color = { [0] =
            { "special", "pdf:0 g" },
            { "special", "pdf:1 0 0 rg" },
            { "special", "pdf:0 1 0 rg" },
            { "special", "pdf:0 0 1 rg" },
        }
        local chars = {
            identifiers[id1].characters,
            identifiers[id2].characters,
            identifiers[id3].characters,
        }
        for u, v in next, f1.characters do
            local n = math.floor(math.random(1,3)+0.5)
            local c = chars[n][u] or v
            v.commands = { color[n], { 'slot', n, u }, color[0] }
            v.kerns    = nil
            v.width    = c.width
            v.height   = c.height
            v.depth    = c.depth
            v.italic   = nil
        end
    end
    return f1
end
