if not modules then modules = { } end modules ['mtx-epub'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local concat = table.concat local helpinfo = [[ --make create epub zip file example: mtxrun --script epub --make mydocument ]] local application = logs.application { name = "mtx-epub", banner = "ConTeXt EPUB Helpers 0.10", helpinfo = helpinfo, } -- script code scripts = scripts or { } scripts.epub = scripts.epub or { } local mimetype = "application/epub+zip" local container = [[ ]] local package = [[ My Title en MySelf %s ]] local mimetypes = { xhtml = "application/xhtml+xml", css = "text/css", } -- specification = { -- name = "document", -- identifier = "123", -- root = "a.xhtml", -- files = { -- "a.xhtml", -- "b.css", -- "c.png", -- } -- } function scripts.epub.make() local filename = environment.files[1] if filename and filename ~= "" then filename = file.basename(filename) local specfile = file.replacesuffix(filename,"specification") local specification = lfs.isfile(specfile) and dofile(specfile) or { } -- inspect(specification) local name = specification.name or file.removesuffix(filename) local identifier = specification.identifier or os.uuid() local files = specification.files or { file.addsuffix(filename,"xhtml") } local root = specification.root or files[1] local epubname = name local epubpath = file.replacesuffix(name,"tree") local epubfile = file.replacesuffix(name,"epub") local epubroot = file.replacesuffix(name,"opf") lfs.mkdir(epubpath) lfs.mkdir(file.join(epubpath,"META-INF")) lfs.mkdir(file.join(epubpath,"OPS")) local used = { } for i=1,#files do local filename = files[i] local suffix = file.suffix(filename) local id = file.removesuffix(filename) local mime = mimetypes[suffix] if mime then file.copy(filename,file.join(epubpath,"OPS",filename)) if suffix == "css" then id = "stylesheet" elseif suffix == "ncx" then id = file.suffix(filename) end used[#used+1] = format("",id,filename,mime) end end container = format(container,epubroot) package = format(package,identifier,identifier,concat(used,"\n"),file.removesuffix(root)) io.savedata(file.join(epubpath,"mimetype"),mimetype) io.savedata(file.join(epubpath,"META-INF","container.xml"),container) io.savedata(file.join(epubpath,"OPS",epubroot),package) lfs.chdir(epubpath) os.remove(epubfile) os.execute(format("zip %s -0 %s",epubfile,"mimetype")) os.execute(format("zip %s -r %s",epubfile,"META-INF")) os.execute(format("zip %s -r %s",epubfile,"OPS")) lfs.chdir("..") application.report("epub archive: %s",file.join(epubpath,epubfile)) end end -- if environment.argument("make") then scripts.epub.make() else application.help() end