summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/lwarp/lwarpmk.lua
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/lwarp/lwarpmk.lua
Initial commit
Diffstat (limited to 'macros/latex/contrib/lwarp/lwarpmk.lua')
-rwxr-xr-xmacros/latex/contrib/lwarp/lwarpmk.lua862
1 files changed, 862 insertions, 0 deletions
diff --git a/macros/latex/contrib/lwarp/lwarpmk.lua b/macros/latex/contrib/lwarp/lwarpmk.lua
new file mode 100755
index 0000000000..3b4bb8564b
--- /dev/null
+++ b/macros/latex/contrib/lwarp/lwarpmk.lua
@@ -0,0 +1,862 @@
+#!/usr/bin/env texlua
+
+-- Copyright 2016-2019 Brian Dunn
+
+printversion = "v0.73"
+requiredconfversion = "2" -- also at *lwarpmk.conf
+
+function printhelp ()
+print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
+end
+
+function printusage ()
+--
+-- Print the usage of the lwarpmk command:
+--
+print ( [[
+
+lwarpmk print [-p project]: Compile the print version if necessary.
+lwarpmk print1 [-p project]: Forced single compile of the print version.
+lwarpmk printindex [-p project]: Process print indexes.
+lwarpmk printglossary [-p project]: Process the glossary for the print version.
+lwarpmk html [-p project]: Compile the HTML version if necessary.
+lwarpmk html1 [-p project]: Forced single compile of the HTML version.
+lwarpmk htmlindex [-p project]: Process HTML indexes.
+lwarpmk htmlglossary [-p project]: Process the glossary for the html version.
+lwarpmk again [-p project]: Touch the source code to trigger recompiles.
+lwarpmk limages [-p project]: Process the "lateximages" created by lwarp.sty.
+lwarpmk pdftohtml [-p project]:
+ For use with latexmk or a Makefile:
+ Converts project_html.pdf to project_html.html and individual HTML files.
+ Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
+lwarpmk epstopdf <list of file names>: Converts each EPS file to PDF.
+lwarpmk clean [-p project]: Remove *.aux, *.toc, *.lof/t,
+ *.idx, *.ind, *.log, *_html_inc.*, .gl*
+lwarpmk cleanall [-p project]: Remove auxiliary files, project.pdf, *.html
+lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
+lwarpmk -h: Print this help message.
+lwarpmk --help: Print this help message.
+
+]] )
+-- printconf ()
+end
+
+function splitfile (destfile,sourcefile)
+--
+-- Split one large sourcefile into a number of files,
+-- starting with destfile.
+-- The file is split at each occurance of <!--|Start file|newfilename|*
+--
+print ("lwarpmk: Splitting " .. sourcefile .. " into " .. destfile) ;
+local sfile = io.open(sourcefile)
+io.output(destfile)
+for line in sfile:lines() do
+i,j,copen,cstart,newfilename = string.find (line,"(.*)|(.*)|(.*)|") ;
+if ( (i~= nil) and (copen == "<!--") and (cstart == "Start file")) then
+ -- split the file
+ io.output(newfilename) ;
+else
+ -- not a splitpoint
+ io.write (line .. "\n") ;
+end
+end -- do
+io.close(sfile)
+end -- function
+
+function cvalueerror ( line, linenum , cvalue )
+--
+-- Incorrect value, so print an error and exit.
+--
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print (
+ "lwarpmk: incorrect variable value \"" .. cvalue ..
+ "\" in lwarpmk.conf.\n"
+ ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+ os.exit(1) ;
+end
+
+function printhowtorecompile ()
+-- Tells the user how to recompile to regenerate the configuration files.
+ print ("lwarpmk: The configuration files lwarpmk.conf and "..sourcename..".lwarpmkconf" )
+ print ("lwarpmk: must be updated. To do so, recompile" )
+ print ("lwarpmk: " , sourcename..".tex" )
+ if ( printlatexcmd == "" ) then
+ print ("lwarpmk: using xe/lua/pdflatex," )
+ else
+ print ("lwarpmk: using the command:")
+ print ("lwarpmk: " , printlatexcmd )
+ end
+ print ("lwarpmk: then use lwarpmk again.")
+end -- printhowtorecompile
+
+function ignoreconf ()
+-- Global argument index
+argindex = 2
+end
+
+function loadconf ()
+--
+-- Load settings from the project's "lwarpmk.conf" file:
+--
+-- Default configuration filename:
+local conffile = "lwarpmk.conf"
+local confroot = "lwarpmk"
+-- Global argument index
+argindex = 2
+-- Optional configuration filename:
+if ( arg[argindex] == "-p" ) then
+ argindex = argindex + 1
+ confroot = arg[argindex]
+ conffile = confroot..".lwarpmkconf"
+ argindex = argindex + 1
+end
+-- Additional defaults:
+confversion = "0"
+opsystem = "Unix"
+imagesdirectory = "lateximages"
+imagesname = "image-"
+latexmk = "false"
+printlatexcmd = ""
+HTMLlatexcmd = ""
+printindexcmd = ""
+HTMLindexcmd = ""
+latexmkindexcmd = ""
+-- to be removed:
+-- indexprog = "makeindex"
+-- makeindexstyle = "lwarp.ist"
+-- xindylanguage = "english"
+-- xindycodepage = "utf8"
+-- xindystyle = "lwarp.xdy"
+-- pdftotextenc = "UTF-8"
+glossarycmd = "makeglossaries"
+-- Verify the file exists:
+if (lfs.attributes(conffile,"mode")==nil) then
+ -- file not exists
+ print ("lwarpmk: ===")
+ print ("lwarpmk: File \"" .. conffile .."\" does not exist.")
+ print ("lwarpmk: Move to the project's source directory,")
+ print ("lwarpmk: recompile using pdflatex, xelatex, or lualatex,")
+ print ("lwarpmk: then try using lwarpmk again.")
+ if ( arg[argindex] ~= nil ) then
+ print (
+ "lwarpmk: (\"" .. confroot ..
+ "\" does not appear to be a project name.)"
+ )
+ end
+ print ("lwarpmk: ===")
+ printhelp () ;
+ os.exit(1) -- exit the entire lwarpmk script
+else -- file exists
+-- Read the file:
+print ("lwarpmk: Reading " .. conffile ..".")
+local cfile = io.open(conffile)
+-- Scan each line, parsing each line as: name = [[string]]
+local linenum = 0
+for line in cfile:lines() do -- scan lines
+linenum = linenum + 1
+i,j,cvarname,cvalue = string.find (line,"([%w-_]*)%s*=%s*%[%[([^%]]*)%]%]") ;
+-- Error if incorrect enclosing characters:
+if ( i == nil ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print ("lwarpmk: Incorrect entry in " .. conffile ..".\n" ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+ os.exit(1) ;
+end -- nil
+if ( cvarname == "confversion" ) then
+ confversion = cvalue
+elseif ( cvarname == "opsystem" ) then
+ -- Verify choice of opsystem:
+ if ( (cvalue == "Unix") or (cvalue == "Windows") ) then
+ opsystem = cvalue
+ else
+ cvalueerror ( line, linenum , cvalue )
+ end
+elseif ( cvarname == "sourcename" ) then sourcename = cvalue
+elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
+elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
+elseif ( cvarname == "imagesdirectory" ) then imagesdirectory = cvalue
+elseif ( cvarname == "imagesname" ) then imagesname = cvalue
+elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "printlatexcmd" ) then printlatexcmd = cvalue
+elseif ( cvarname == "HTMLlatexcmd" ) then HTMLlatexcmd = cvalue
+elseif ( cvarname == "printindexcmd" ) then printindexcmd = cvalue
+elseif ( cvarname == "HTMLindexcmd" ) then HTMLindexcmd = cvalue
+elseif ( cvarname == "latexmkindexcmd" ) then latexmkindexcmd = cvalue
+elseif ( cvarname == "glossarycmd" ) then glossarycmd = cvalue
+elseif ( cvarname == "pdftotextenc" ) then pdftotextenc = cvalue
+else
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. linenum .. " : " .. line ) ;
+ print (
+ "lwarpmk: Incorrect variable name \"" .. cvarname .. "\" in " ..
+ conffile ..".\n"
+ ) ;
+ print ("lwarpmk: ===")
+-- printconf () ;
+os.exit(1) ;
+end -- cvarname
+end -- do scan lines
+io.close(cfile)
+end -- file exists
+-- Error if sourcename is "lwarp".
+-- This could happen if a local copy of lwarp has recently been recompiled.
+if sourcename=="lwarp" then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: lwarp.sty has recently been recompiled in this directory,")
+ print ("lwarpmk: and \"lwarpmk.conf\" is no longer set for your own project.")
+ print ("lwarpmk: Recompile your own project using pdf/lua/xelatex <projectname>.")
+ print ("lwarpmk: After a recompile, \"lwarpmk.conf\" will be set for your project,")
+ print ("lwarpmk: and you may again use lwarpmk.")
+ print ("lwarpmk: ===")
+ os.exit(1)
+end -- sourcename of "lwarp"
+-- Select some operating-system commands:
+if opsystem=="Unix" then -- For Unix / Linux / Mac OS:
+ rmname = "rm"
+ mvname = "mv"
+ cpname = "cp"
+ touchnamepre = "touch"
+ touchnamepost = ""
+ newtouchname = "touch"
+ dirslash = "/"
+ opquote= "\'"
+ cmdgroupopenname = " ( "
+ cmdgroupclosename = " ) "
+ seqname = " && "
+ bgname = " &"
+elseif opsystem=="Windows" then -- For Windows
+ rmname = "DEL"
+ mvname = "MOVE"
+ cpname = "COPY"
+ touchnamepre = "COPY /b"
+ touchnamepost = "+,,"
+ newtouchname = "echo empty >"
+ dirslash = "\\"
+ opquote= "\""
+ cmdgroupopenname = ""
+ cmdgroupclosename = ""
+ seqname = " & "
+ bgname = ""
+else
+ print ("lwarpmk: ===")
+ print ("lwarpmk: Select Unix or Windows for opsystem." )
+ print ("lwarpmk: ===")
+ os.exit(1)
+end --- for Windows
+-- Warning if the operating system does not appear to be correct,
+-- in case files were transferred to another system.
+if ( (package.config:sub(1,1)) ~= dirslash ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: It appears that lwarpmk.conf is for a different operating system." )
+ printhowtorecompile ()
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+-- Error if the configuration file's version is not current:
+if ( confversion ~= requiredconfversion ) then
+ print ("lwarpmk: ===")
+ printhowtorecompile ()
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+end -- loadconf
+
+function executecheckerror ( executecommands , errormessage )
+--
+-- Execute an operating system call,
+-- and maybe exit with an error message.
+--
+local err
+err = os.execute ( executecommands )
+if ( err ~= 0 ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. errormessage )
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+end -- executecheckerror
+
+function refreshdate ()
+os.execute(touchnamepre .. " " .. sourcename .. ".tex " .. touchnamepost)
+end
+
+function reruntoget (filesource)
+--
+-- Scan the LaTeX log file for the phrase "Rerun to get",
+-- indicating that the file should be compiled again.
+-- Return true if found.
+--
+local fsource = io.open(filesource)
+for line in fsource:lines() do
+if ( string.find(line,"Rerun to get") ~= nil ) then
+ io.close(fsource)
+ return true
+end -- if
+end -- do
+io.close(fsource)
+return false
+end
+
+function onetime (latexcmd, fsuffix)
+--
+-- Compile one time, return true if should compile again.
+-- fsuffix is "" for print, "_html" for HTML output.
+--
+print("lwarpmk: Compiling with: " .. latexcmd)
+executecheckerror (
+ latexcmd ,
+ "Compile error."
+)
+return (reruntoget(sourcename .. fsuffix .. ".log") ) ;
+end
+
+function manytimes (latexcmd, fsuffix)
+--
+-- Compile up to five times.
+-- fsuffix is "" for print, "_html" for HTML output
+--
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+if onetime(latexcmd, fsuffix) == true then
+end end end end end
+end
+
+function verifyfileexists (filename)
+--
+-- Exit if the given file does not exist.
+--
+if (lfs.attributes ( filename , "modification" ) == nil ) then
+ print ("lwarpmk: ===")
+ print ("lwarpmk: " .. filename .. " not found." ) ;
+ print ("lwarpmk: ===")
+ os.exit (1) ;
+end
+end
+
+function pdftohtml ()
+--
+-- Convert <project>_html.pdf into HTML files:
+--
+-- Convert to text:
+print ("lwarpmk: Converting " .. sourcename
+ .."_html.pdf to " .. sourcename .. "_html.html")
+os.execute("pdftotext -enc " .. pdftotextenc .. " -nopgbrk -layout "
+ .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+-- Split the result into individual HTML files:
+splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
+end
+
+function removeaux ()
+--
+-- Remove auxiliary files:
+-- All .aux files are removed since there may be many bbl*.aux files.
+--
+os.execute ( rmname .. " *.aux " ..
+ sourcename ..".toc " .. sourcename .. "_html.toc " ..
+ sourcename ..".lof " .. sourcename .. "_html.lof " ..
+ sourcename ..".lot " .. sourcename .. "_html.lot " ..
+ " *.idx " ..
+ " *.ind " ..
+ sourcename ..".ps " .. sourcename .."_html.ps " ..
+ sourcename ..".log " .. sourcename .. "_html.log " ..
+ sourcename ..".gl* " .. sourcename .. "_html.gl* " ..
+ " *_html_inc.* "
+ )
+end
+
+function checkhtmlpdfexists ()
+--
+-- Error if the HTML document does not exist.
+-- The lateximages are drawn from the HTML PDF version of the document,
+-- so "lwarpmk html" must be done before "lwarpmk limages".
+--
+local htmlpdffile = io.open(sourcename .. "_html.pdf", "r")
+if ( htmlpdffile == nil ) then
+ print ("")
+ print ("lwarpmk: ===")
+ print ("lwarpmk: The HTML version of the document does not exist.")
+ print ("lwarpmk: Enter \"lwarpmk html\" to compile the HTML version.")
+ print ("lwarpmk: ===")
+ os.exit(1)
+end
+io.close (htmlpdffile)
+end -- checkhtmlpdfexists
+
+function warnlimages ()
+--
+-- Warning of a missing <sourcename>-images.txt file:
+ print ("lwarpmk: ===")
+ print ("lwarpmk: \"" .. sourcename .. "-images.txt\" does not exist.")
+ print ("lwarpmk: Your project does not use SVG math or other lateximages,")
+ print ("lwarpmk: or the file has been deleted somehow.")
+ print ("lwarpmk: Use \"lwarpmk html1\" to recompile your project")
+ print ("lwarpmk: and recreate \"" .. sourcename .. "-images.txt\".")
+ print ("lwarpmk: If your project does not use SVG math or other lateximages,")
+ print ("lwarpmk: then \"" .. sourcename .. "-images.txt\" will never exist, and")
+ print ("lwarpmk: \"lwarpmk limages\" will not be necessary.")
+ print ("lwarpmk: ===")
+end -- warnlimages
+
+function warnlimagesrecompile ()
+-- Warning if must recompile before creating limages:
+ print ("")
+ print ("lwarpmk: ===")
+ print ("lwarpmk: Cross-references are not yet correct.")
+ print ("lwarpmk: The document must be recompiled before creating the lateximages.")
+ print ("lwarpmk: Enter \"lwarpmk html1\" again, then try \"lwarpmk limages\" again.")
+ print ("lwarpmk: ===")
+end --warnlimagesrecompile
+
+function checklimages ()
+--
+-- Check <sourcename>.txt to see if need to recompile first.
+-- If any entry has a page number of zero, then there were incorrect images.
+--
+print ("lwarpmk: Checking for a valid " .. sourcename .. "-images.txt file.")
+local limagesfile = io.open(sourcename .. "-images.txt", "r")
+if ( limagesfile == nil ) then
+ warnlimages ()
+ os.exit(1)
+end
+-- Track warning to recompile if find a page 0
+local pagezerowarning = false
+-- Scan <sourcename>.txt
+for line in limagesfile:lines() do
+ -- lwimgpage is the page number in the PDF which has the image
+ -- lwimghash is true if this filename is a hash
+ -- lwimgname is the lateximage filename root to assign for the image
+ i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
+ -- For each entry:
+ if ( (i~=nil) ) then
+ -- If the page number is 0, image references are incorrect
+ -- and must recompile the soure document:
+ if ( lwimgpage == "0" ) then
+ pagezerowarning = true
+ end
+ end -- if i~=nil
+end -- do
+-- The last line should be |end|end|end|.
+-- If not, the compile must have aborted, and the images are incomplete.
+if ( lwimgpage ~= "end" ) then
+ warnlimagesrecompile()
+ os.exit(1) ;
+end
+if ( pagezerowarning ) then
+ warnlimagesrecompile()
+ os.exit(1) ;
+end -- pagezerowarning
+end -- checklimages
+
+function createuniximage ( lwimgfullname )
+--
+-- Create one lateximage for Unix / Linux / Mac OS.
+--
+executecheckerror (
+ cmdgroupopenname ..
+ "pdfseparate -f " .. lwimgpage .. " -l " .. lwimgpage .. " " ..
+ sourcename .."_html.pdf " ..
+ imagesdirectory .. dirslash .."lateximagetemp-%d" .. ".pdf" ..
+ seqname ..
+ -- Crop the image:
+ "pdfcrop --hires " .. imagesdirectory .. dirslash .. "lateximagetemp-" ..
+ lwimgpage .. ".pdf " ..
+ imagesdirectory .. dirslash .. lwimgname .. ".pdf" ..
+ seqname ..
+ -- Convert the image to svg:
+ "pdftocairo -svg -noshrink " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf " ..
+ imagesdirectory .. dirslash .. lwimgname ..".svg" ..
+ seqname ..
+ -- Remove the temporary files:
+ rmname .. " " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf" .. seqname ..
+ rmname .. " " .. imagesdirectory .. dirslash .. "lateximagetemp-" .. lwimgpage .. ".pdf" ..
+ cmdgroupclosename .. " >/dev/null " .. bgname
+ ,
+ "File error trying to convert " .. lwimgfullname
+)
+-- Every 32 images, wait for completion at below normal priority,
+-- allowing other image tasks to catch up.
+numimageprocesses = numimageprocesses + 1
+if ( numimageprocesses > 32 ) then
+ numimageprocesses = 0
+ print ( "lwarpmk: waiting" )
+ executecheckerror ( "wait" , "File error trying to wait.")
+end
+end -- createuniximage
+
+function createwindowsimage ( lwimgfullname )
+--
+-- Create one lateximage for Windows.
+--
+-- Every 32 images, wait for completion at below normal priority,
+-- allowing other image tasks to catch up.
+numimageprocesses = numimageprocesses + 1
+if ( numimageprocesses > 32 ) then
+ numimageprocesses = 0
+ thiswaitcommand = "/WAIT /BELOWNORMAL"
+ print ( "lwarpmk: waiting" )
+else
+ thiswaitcommand = ""
+end
+-- Execute the image generation command
+executecheckerror (
+ "start /B " .. thiswaitcommand .. " \"\" lwarp_one_limage " ..
+ lwimgpage .. " " ..
+ lwimghash .. " " ..
+ lwimgname .. " " ..
+ sourcename .. " <nul >nul"
+ ,
+ "File error trying to create image."
+)
+end -- createwindowsimage
+
+function createonelateximage ( line )
+--
+-- Given the next line of <sourcename>.txt, convert a single image.
+--
+-- lwimgpage is the page number in the PDF which has the image
+-- lwimghash is true if this filename is a hash
+-- lwimgname is the lateximage filename root to assign for the image
+i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
+-- For each entry:
+if ( (i~=nil) ) then
+ -- Skip if the page number is 0:
+ if ( lwimgpage == "0" ) then
+ pagezerowarning = true
+ -- Skip if the page number is "end":
+ else if ( lwimgpage == "end" ) then
+ else
+ -- Skip is this image is hashed and already exists:
+ local lwimgfullname = imagesdirectory .. dirslash .. lwimgname .. ".svg"
+ if (
+ (lwimghash ~= "true") or
+ (lfs.attributes(lwimgfullname,"mode")==nil) -- file not exists
+ )
+ then -- not hashed or not exists:
+ -- Print the name of the file being generated:
+ print ( "lwarpmk: " .. lwimgname )
+ -- Touch/create the dest so that only once instance tries to build it:
+ executecheckerror (
+ newtouchname .. " " .. lwimgfullname ,
+ "File error trying to touch " .. lwimgfullname
+ )
+ -- Separate out the image into its own single-page pdf:
+ if opsystem=="Unix" then
+ createuniximage (lwimgfullname)
+ elseif opsystem=="Windows" then
+ createwindowsimage (lwimgfullname)
+ end
+ end -- not hashed or not exists
+ end -- not page "end"
+ end -- not page 0
+end -- not nil
+end -- createonelateximage
+
+function createlateximages ()
+--
+-- Create lateximages based on <sourcename>-images.txt:
+--
+-- See if the document must be recompiled first:
+checklimages ()
+-- See if the HTML version exists:
+checkhtmlpdfexists ()
+-- Attempt to create the lateximages:
+print ("lwarpmk: Creating lateximages.")
+local limagesfile = io.open(sourcename .. "-images.txt", "r")
+if ( limagesfile == nil ) then
+ warnlimages ()
+ os.exit(1)
+end
+-- Create the lateximages directory, ignore error if already exists
+err = os.execute("mkdir " .. imagesdirectory)
+-- For Windows, create lwarp_one_limage.cmd from lwarp_one_limage.txt:
+if opsystem=="Windows" then
+ executecheckerror (
+ cpname .. " lwarp_one_limage.txt lwarp_one_limage.cmd" ,
+ "File error trying to copy lwarp_one_limage.txt to lwarp_one_limage.cmd"
+ )
+end -- create lwarp_one_limage.cmd
+-- Track the number of parallel processes
+numimageprocesses = 0
+-- Track warning to recompile if find a page 0
+pagezerowarning = false
+-- Scan <sourcename>.txt
+for line in limagesfile:lines() do
+ createonelateximage ( line )
+end -- do
+io.close(limagesfile)
+print ( "lwarpmk limages: ===")
+print ( "lwarpmk limages: Wait a moment for the images to complete" )
+print ( "lwarpmk limages: before reloading the page." )
+print ( "lwarpmk limages: ===")
+print ( "lwarpmk limages: Done." )
+if ( pagezerowarning == true ) then
+ print ( "lwarpmk limages: WARNING: Images will be incorrect." )
+ print ( "lwarpmk limages: Enter \"lwarpmk cleanlimages\", then" )
+ print ( "lwarpmk limages: recompile the document one more time, then" )
+ print ( "lwarpmk limages: repeat \"lwarpmk images\" again." )
+end -- pagezerowarning
+end -- function
+
+function convertepstopdf ()
+--
+-- Converts EPS files to PDF files.
+-- The filenames are arg[argindex] and up.
+-- arg[1] is the command "pdftosvg".
+--
+ignoreconf ()
+for i = argindex , #arg do
+ if (lfs.attributes(arg[i],"mode")==nil) then
+ print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+ else
+ print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+ os.execute ( "epstopdf " .. arg[i] )
+ end -- if
+end -- do
+end --function
+
+function convertpdftosvg ()
+--
+-- Converts PDF files to SVG files.
+-- The filenames are arg[argindex] and up.
+-- arg[1] is the command "pdftosvg".
+--
+ignoreconf ()
+for i = argindex , #arg do
+ if (lfs.attributes(arg[i],"mode")==nil) then
+ print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+ else
+ print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+ os.execute ( "pdftocairo -svg " .. arg[i] )
+ end -- if
+end -- do
+end --function
+
+-- Force an update and conclude processing:
+function updateanddone ()
+print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
+refreshdate ()
+print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
+print ("lwarpmk: Done.")
+end -- function
+
+-- Start of the main code: --
+
+-- lwarpmk --version :
+
+if (arg[1] == "--version") then
+print ( "lwarpmk: " .. printversion )
+
+else -- not --version
+
+-- print intro:
+
+print ("lwarpmk: " .. printversion .. " Automated make for the LaTeX lwarp package.")
+
+-- lwarpmk print:
+
+if arg[1] == "print" then
+loadconf ()
+if ( latexmk == "true" ) then
+ print ("lwarpmk: Compiling with: " .. printlatexcmd)
+ executecheckerror (
+ printlatexcmd ,
+ "Compile error."
+ )
+ print ("lwarpmk: Done.")
+else -- not latexmk
+ verifyfileexists (sourcename .. ".tex") ;
+ -- See if up to date:
+ if (
+ ( lfs.attributes ( sourcename .. ".pdf" , "modification" ) == nil ) or
+ (
+ lfs.attributes ( sourcename .. ".tex" , "modification" ) >
+ lfs.attributes ( sourcename .. ".pdf" , "modification" )
+ )
+ ) then
+ -- Recompile if not yet up to date:
+ manytimes(printlatexcmd, "")
+ print ("lwarpmk: Done.") ;
+ else
+ print ("lwarpmk: " .. sourcename .. ".pdf is up to date.") ;
+ end
+end -- not latexmk
+
+-- lwarpmk print1:
+
+elseif arg[1] == "print1" then
+ loadconf ()
+ verifyfileexists (sourcename .. ".tex") ;
+ onetime(printlatexcmd, "")
+ print ("lwarpmk: Done.") ;
+
+-- lwarpmk printindex:
+-- Compile the index then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "printindex" then
+loadconf ()
+os.execute ( printindexcmd )
+print ("lwarpmk: -------")
+updateanddone ()
+
+-- lwarpmk printglossary:
+-- Compile the glossary then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "printglossary" then
+loadconf ()
+print ("lwarpmk: Processing the glossary.")
+
+os.execute(glossarycmd .. " " .. sourcename)
+updateanddone ()
+
+-- lwarpmk html:
+
+elseif arg[1] == "html" then
+loadconf ()
+if ( latexmk == "true" ) then
+ print ("lwarpmk: Compiling with: " .. HTMLlatexcmd)
+ executecheckerror (
+ HTMLlatexcmd ,
+ "Compile error."
+ )
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+else -- not latexmk
+ verifyfileexists ( sourcename .. ".tex" ) ;
+ -- See if exists and is up to date:
+ if (
+ ( lfs.attributes ( homehtmlfilename .. ".html" , "modification" ) == nil ) or
+ (
+ lfs.attributes ( sourcename .. ".tex" , "modification" ) >
+ lfs.attributes ( homehtmlfilename .. ".html" , "modification" )
+ )
+ ) then
+ -- Recompile if not yet up to date:
+ manytimes(HTMLlatexcmd, "_html")
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+ else
+ print ("lwarpmk: " .. homehtmlfilename .. ".html is up to date.")
+ end
+end -- not latexmk
+
+-- lwarpmk html1:
+
+elseif arg[1] == "html1" then
+ loadconf ()
+ verifyfileexists ( sourcename .. ".tex" ) ;
+ onetime(HTMLlatexcmd, "_html")
+ pdftohtml ()
+ print ("lwarpmk: Done.")
+
+-- lwarpmk pdftohtml:
+elseif arg[1] == "pdftohtml" then
+ loadconf ()
+ pdftohtml ()
+
+-- lwarpmk htmlindex:
+-- Compile the index then touch the source
+-- to trigger a recompile of the document:
+
+elseif arg[1] == "htmlindex" then
+loadconf ()
+os.execute ( HTMLindexcmd )
+print ("lwarpmk: -------")
+updateanddone ()
+
+-- lwarpmk htmlglossary:
+-- Compile the glossary then touch the source
+-- to trigger a recompile of the document.
+-- The <sourcename>.xdy file is created by the glossaries package.
+
+elseif arg[1] == "htmlglossary" then
+loadconf ()
+print ("lwarpmk: Processing the glossary.")
+os.execute(glossarycmd .. " " .. sourcename .. "_html")
+updateanddone ()
+
+-- lwarpmk limages:
+-- Scan the <sourcename>.txt file to create lateximages.
+
+elseif arg[1] == "limages" then
+loadconf ()
+print ("lwarpmk: Processing images.")
+createlateximages ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk again:
+-- Touch the source to trigger a recompile.
+
+elseif arg[1] == "again" then
+loadconf ()
+updateanddone ()
+
+-- lwarpmk clean:
+-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
+
+elseif arg[1] == "clean" then
+loadconf ()
+removeaux ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk cleanall
+-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
+-- and also project.pdf, project.dvi, *.html
+
+elseif arg[1] == "cleanall" then
+loadconf ()
+removeaux ()
+os.execute ( rmname .. " " ..
+ sourcename .. ".pdf " .. sourcename .. "_html.pdf " ..
+ sourcename .. ".dvi " .. sourcename .. "_html.dvi " ..
+ "*.html"
+ )
+print ("lwarpmk: Done.")
+
+-- lwarpmk cleanlimages
+-- Remove images from the imagesdirectory.
+
+elseif arg[1] == "cleanlimages" then
+loadconf ()
+os.execute ( rmname .. " " .. imagesdirectory .. dirslash .. "*" )
+print ("lwarpmk: Done.")
+
+-- lwarpmk epstopdf <list of file names>
+-- Convert EPS files to PDF using epstopdf
+elseif arg[1] == "epstopdf" then
+convertepstopdf ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDF files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
+-- lwarpmk with no argument :
+
+elseif (arg[1] == nil) then
+printhelp ()
+
+-- lwarpmk -h or lwarpmk --help :
+
+elseif (arg[1] == "-h" ) or (arg[1] == "--help") then
+printusage ()
+
+-- Unknown command:
+
+else
+printhelp ()
+print ("\nlwarpmk: ****** Unknown command \""..arg[1].."\". ******\n")
+end
+
+end -- not --version