local immediateobj = pdf.immediateobj local objectwriter = require'luatagging-objectwriter' local to_pdf_string = objectwriter.to_pdf_string local ref = objectwriter.ref local function late_ref(): objectwriter.Ref, function(objectwriter.PdfObject) local objnum = pdf.reserveobj() return ref(objnum), function(obj: objectwriter.PdfObject) immediateobj(objnum, to_pdf_string(obj)) end end local delayed: {function()} = {} luatexbase.add_to_callback('finish_pdffile', function() for _, f in ipairs(delayed) do f() end end, 'luatagging.delayed_pdf') return { late_ref = late_ref, delayed = function(f: function(objectwriter.Ref): objectwriter.PdfObject): objectwriter.Ref local reference, write = late_ref() delayed[#delayed + 1] = function() write(f(reference)) end return reference end, indirect = function(obj: objectwriter.PdfObject): objectwriter.Ref return ref(immediateobj(to_pdf_string(obj))) end, stream = function(dict: objectwriter.Dict, content: string): objectwriter.Ref return ref(immediateobj('stream', content, objectwriter.to_pdf_dict_content(dict))) end, }