diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/lpdf-fmt.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/lpdf-fmt.lua | 88 |
1 files changed, 52 insertions, 36 deletions
diff --git a/Master/texmf-dist/tex/context/base/lpdf-fmt.lua b/Master/texmf-dist/tex/context/base/lpdf-fmt.lua index 8e118db1265..94c005f6570 100644 --- a/Master/texmf-dist/tex/context/base/lpdf-fmt.lua +++ b/Master/texmf-dist/tex/context/base/lpdf-fmt.lua @@ -36,6 +36,8 @@ local pdfstring = lpdf.string local pdfverbose = lpdf.verbose local pdfflushstreamfileobject = lpdf.flushstreamfileobject +local texset = tex.set -- we could make tex.setglobal + local addtoinfo = lpdf.addtoinfo local injectxmpinfo = lpdf.injectxmpinfo local insertxmpinfo = lpdf.insertxmpinfo @@ -360,7 +362,7 @@ local function loadprofile(name,filename) for i=1,#databases do local filename = locatefile(databases[i]) if filename and filename ~= "" then - local suffix = file.extname(filename) + local suffix = file.suffix(filename) local lname = lower(name) if suffix == "xml" then local xmldata = xml.load(filename) -- no need for caching it @@ -385,16 +387,16 @@ local function loadprofile(name,filename) end if profile then if next(profile) then - report_backend("profile specification '%s' loaded from '%s'",name,filename) + report_backend("profile specification %a loaded from %a",name,filename) return profile elseif trace_format then - report_backend("profile specification '%s' loaded from '%s' but empty",name,filename) + report_backend("profile specification %a loaded from %a but empty",name,filename) end return false end end end - report_backend("profile specification '%s' not found in '%s'",name,concat(filenames, ", ")) + report_backend("profile specification %a not found in %a",name,concat(filenames, ", ")) end local function urls(url) @@ -434,20 +436,20 @@ local function handleinternalprofile(s,include) local fullname = locatefile(filename) local channel = channels[colorspace] or nil if fullname == "" then - report_backend("error, couldn't locate profile '%s'",filename) + report_backend("error, couldn't locate profile %a",filename) elseif not channel then - report_backend("error, couldn't resolve channel entry for colorspace '%s'",colorspace) + report_backend("error, couldn't resolve channel entry for colorspace %a",colorspace) else profile = pdfflushstreamfileobject(fullname,pdfdictionary{ N = channel },false) -- uncompressed internalprofiles[tag] = profile if trace_format then - report_backend("including '%s' color profile from '%s'",colorspace,fullname) + report_backend("including %a color profile from %a",colorspace,fullname) end end else internalprofiles[tag] = true if trace_format then - report_backend("not including '%s' color profile '%s'",colorspace,filename) + report_backend("not including %a color profile %a",colorspace,filename) end end end @@ -506,7 +508,7 @@ local function handledefaultprofile(s,spec) -- specification local tag = profilename(filename) local n = internalprofiles[tag] -- or externalprofiles[tag] if n == true then -- not internalized - report_backend("no default profile '%s' for colorspace '%s'",filename,colorspace) + report_backend("no default profile %a for colorspace %a",filename,colorspace) elseif n then local a = pdfarray { pdfconstant("ICCBased"), @@ -515,12 +517,12 @@ local function handledefaultprofile(s,spec) -- specification -- used in page /Resources, so this must be inserted at runtime lpdf.adddocumentcolorspace(prefixes[colorspace],pdfreference(pdfflushobject(a))) loadeddefaults[colorspace] = true - report_backend("setting '%s' as default '%s' color space",filename,colorspace) + report_backend("setting %a as default %a color space",filename,colorspace) else - report_backend("no default profile '%s' for colorspace '%s'",filename,colorspace) + report_backend("no default profile %a for colorspace %a",filename,colorspace) end elseif trace_format then - report_backend("a default '%s' colorspace is already in use",colorspace) + report_backend("a default %a colorspace is already in use",colorspace) end end @@ -547,18 +549,18 @@ local function handleoutputintent(s,spec) elseif external and external ~= true then d.DestOutputProfileRef = pdfreference(external) else - report_backend("omitting reference to profile for intent '%s'",name) + report_backend("omitting reference to profile for intent %a",name) end intents[#intents+1] = pdfreference(pdfflushobject(pdfdictionary(d))) if trace_format then - report_backend("setting output intent to '%s' with id '%s' (entry %s)",name,id,#intents) + report_backend("setting output intent to %a with id %a for entry %a",name,id,#intents) end else - report_backend("invalid output intent '%s'",name) + report_backend("invalid output intent %a",name) end loadedintents[name] = true elseif trace_format then - report_backend("an output intent with name '%s' is already in use",name) + report_backend("an output intent with name %a is already in use",name) end end @@ -569,7 +571,7 @@ local function handleiccprofile(message,spec,name,filename,how,options,alwaysinc local name = list[i] local profile = loadprofile(name,filename) if trace_format then - report_backend("handling %s '%s'",message,name) + report_backend("handling %s %a",message,name) end if profile then if formatspecification.cmyk_colors then @@ -595,22 +597,22 @@ local function handleiccprofile(message,spec,name,filename,how,options,alwaysinc end if external then if trace_format then - report_backend("handling external profiles cf. '%s'",name) + report_backend("handling external profiles cf. %a",name) end handleexternalprofile(profile,false) else if trace_format then - report_backend("handling internal profiles cf. '%s'",name) + report_backend("handling internal profiles cf. %a",name) end if internal then handleinternalprofile(profile,always or include) else - report_backend("no profile inclusion for '%s'",formatname) + report_backend("no profile inclusion for %a",formatname) end end how(profile,spec) elseif trace_format then - report_backend("unknown profile '%s'",name) + report_backend("unknown profile %a",name) end end end @@ -625,29 +627,38 @@ end lpdf.registerdocumentfinalizer(flushoutputintents,2,"output intents") function codeinjections.setformat(s) - local format, level, profile, intent, option, filename = - s.format or "", s.level or "", s.profile or "", s.intent or "", s.option or "", s.file or "" - if format == "" then - -- we ignore this as we hook it in \everysetupbackend - else + local format = s.format or "" + local level = tonumber(s.level) + local intent = s.intent or "" + local profile = s.profile or "" + local option = s.option or "" + local filename = s.file or "" + if format ~= "" then local spec = formats[lower(format)] if spec then - formatspecification, formatname = spec, spec.format_name - level = level and tonumber(level) - report_backend("setting format to '%s'",formatname) + formatspecification = spec + formatname = spec.format_name + report_backend("setting format to %a",formatname) local xmp_file = formatspecification.xmp_file or "" if xmp_file == "" then -- weird error else codeinjections.setxmpfile(xmp_file) end - local pdf_version, inject_metadata = spec.pdf_version * 10, spec.inject_metadata - local majorversion, minorversion = math.div(pdf_version,10), math.mod(pdf_version,10) + if not level then + level = 3 -- good compromise, default anyway + end + local pdf_version = spec.pdf_version * 10 + local inject_metadata = spec.inject_metadata + local majorversion = math.div(pdf_version,10) + local minorversion = math.mod(pdf_version,10) local objectcompression = spec.object_compression and pdf_version >= 15 local compresslevel = level or tex.pdfcompresslevel -- keep default local objectcompresslevel = (objectcompression and (level or tex.pdfobjcompresslevel)) or 0 - tex.pdfcompresslevel, tex.pdfobjcompresslevel = compresslevel, objectcompresslevel - tex.pdfmajorversion, tex.pdfminorversion = majorversion, minorversion + texset("global","pdfcompresslevel",compresslevel) + texset("global","pdfobjcompresslevel",objectcompresslevel) + texset("global","pdfmajorversion",majorversion) + texset("global","pdfminorversion",minorversion) if objectcompression then report_backend("forcing pdf version %s.%s, compression level %s, object compression level %s", majorversion,minorversion,compresslevel,objectcompresslevel) @@ -694,16 +705,21 @@ function codeinjections.setformat(s) for k, v in table.sortedhash(formats.default) do local v = formatspecification[k] if type(v) ~= "function" then - report_backend("%s = %s",k,tostring(v or false)) + report_backend("%a = %a",k,v or false) end end end function codeinjections.setformat(noname) - report_backend("error, format is already set to '%s', ignoring '%s'",formatname,noname.format) + report_backend("error, format is already set to %a, ignoring %a",formatname,noname.format) end else - report_backend("error, format '%s' is not supported",format) + report_backend("error, format %a is not supported",format) end + elseif level then + texset("global","pdfcompresslevel",level) + texset("global","pdfobjcompresslevel",level) + else + -- we ignore this as we hook it in \everysetupbackend end end |