diff options
author | Marius <mariausol@gmail.com> | 2013-05-19 20:40:34 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2013-05-19 20:40:34 +0300 |
commit | 13ec4b540e0d46c97fd7b089e0b7413da81e0a9f (patch) | |
tree | bebfa563a17c06b3bd3bf8f6f4ba6d025e00d107 /scripts/context/lua/mtx-modules.lua | |
parent | 69ad13650cda027526271179e95b5294694143a1 (diff) | |
download | context-13ec4b540e0d46c97fd7b089e0b7413da81e0a9f.tar.gz |
beta 2013.05.19 19:27
Diffstat (limited to 'scripts/context/lua/mtx-modules.lua')
-rw-r--r-- | scripts/context/lua/mtx-modules.lua | 404 |
1 files changed, 202 insertions, 202 deletions
diff --git a/scripts/context/lua/mtx-modules.lua b/scripts/context/lua/mtx-modules.lua index f4003c1db..766be6b49 100644 --- a/scripts/context/lua/mtx-modules.lua +++ b/scripts/context/lua/mtx-modules.lua @@ -1,202 +1,202 @@ -if not modules then modules = { } end modules ['mtx-modules'] = { - version = 1.002, - comment = "companion to mtxrun.lua", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -scripts = scripts or { } -scripts.modules = scripts.modules or { } - -local helpinfo = [[ -<?xml version="1.0"?> -<application> - <metadata> - <entry name="name">mtx-modules</entry> - <entry name="detail">ConTeXt Module Documentation Generators</entry> - <entry name="version">1.00</entry> - </metadata> - <flags> - <category name="basic"> - <subcategory> - <flag name="convert"><short>convert source files (tex, mkii, mkiv, mp) to 'ted' files</short></flag> - <flag name="process"><short>process source files (tex, mkii, mkiv, mp) to 'pdf' files</short></flag> - <flag name="prep"><short>use original name with suffix 'prep' appended</short></flag> - </subcategory> - </category> - </flags> -</application> -]] - -local application = logs.application { - name = "mtx-modules", - banner = "ConTeXt Module Documentation Generators 1.00", - helpinfo = helpinfo, -} - -local report = application.report - --- Documentation can be woven into a source file. This script can generates --- a file with the documentation and source fragments properly tagged. The --- documentation is included as comment: --- --- %D ...... some kind of documentation --- %M ...... macros needed for documenation --- %S B begin skipping --- %S E end skipping --- --- The generated file is structured as: --- --- \starttypen --- \startmodule[type=suffix] --- \startdocumentation --- \stopdocumentation --- \startdefinition --- \stopdefinition --- \stopmodule --- \stoptypen --- --- Macro definitions specific to the documentation are not surrounded by --- start-stop commands. The suffix specificaction can be overruled at runtime, --- but defaults to the file extension. This specification can be used for language --- depended verbatim typesetting. --- --- In the mkiv variant we filter the \module settings so that we don't have --- to mess with global document settings. - -local find, format, sub, is_empty, strip, gsub = string.find, string.format, string.sub, string.is_empty, string.strip, string.gsub - -local function source_to_ted(inpname,outname,filetype) - local data = io.loaddata(inpname) - if not data or data == "" then - report("invalid module name '%s'",inpname) - return - end - report("converting '%s' to '%s'",inpname,outname) - local skiplevel, indocument, indefinition = 0, false, false - local started = false - local settings = format("type=%s",filetype or file.suffix(inpname)) - local preamble, n = lpeg.match(lpeg.Cs((1-lpeg.patterns.newline^2)^1) * lpeg.Cp(),data) - if preamble then - preamble = string.match(preamble,"\\module.-%[(.-)%]") - if preamble then - preamble = gsub(preamble,"%%D *","") - preamble = gsub(preamble,"%%(.-)[\n\r]","") - preamble = gsub(preamble,"[\n\r]","") - preamble = strip(preamble) - settings = format("%s,%s",settings,preamble) - data = string.sub(data,n,#data) - end - end - local lines = string.splitlines(data) - local result = { } - result[#result+1] = format("\\startmoduledocumentation[%s]",settings) - for i=1,#lines do - local line = lines[i] - if find(line,"^%%D ") or find(line,"^%%D$") then - if skiplevel == 0 then - local someline = #line < 3 and "" or sub(line,4,#line) - if indocument then - result[#result+1] = someline - else - if indefinition then - result[#result+1] = "\\stopdefinition" - indefinition = false - end - if not indocument then - result[#result+1] = "\\startdocumentation" - end - result[#result+1] = someline - indocument = true - end - end - elseif find(line,"^%%M ") or find(line,"^%%M$") then - if skiplevel == 0 then - local someline = (#line < 3 and "") or sub(line,4,#line) - result[#result+1] = someline - end - elseif find(line,"^%%S B") then - skiplevel = skiplevel + 1 - elseif find(line,"^%%S E") then - skiplevel = skiplevel - 1 - elseif find(line,"^%%") then - -- nothing - elseif skiplevel == 0 then - inlocaldocument = indocument - inlocaldocument = false - local someline = line - if indocument then - result[#result+1] = "\\stopdocumentation" - indocument = false - end - if indefinition then - if is_empty(someline) then - result[#result+1] = "\\stopdefinition" - indefinition = false - else - result[#result+1] = someline - end - elseif not is_empty(someline) then - result[#result+1] = "\n" - result[#result+1] = "\\startdefinition" - indefinition = true - if inlocaldocument then - -- nothing - else - result[#result+1] = someline - end - end - end - end - if indocument then - result[#result+1] = "\\stopdocumentation" - end - if indefinition then - result[#result+1] = "\\stopdefinition" - end - result[#result+1] = "\\stopmoduledocumentation" - io.savedata(outname,table.concat(result,"\n")) - return true -end - -local suffixes = table.tohash { 'tex','mkii','mkiv', 'mkvi', 'mp' } - -function scripts.modules.process(runtex) - local processed = { } - local prep = environment.argument("prep") - local files = environment.files - for i=1,#files do - local shortname = files[i] - local suffix = file.suffix(shortname) - if suffixes[suffix] then - local longname - if prep then - longname = shortname .. ".prep" - else - longname = file.removesuffix(shortname) .. "-" .. suffix .. ".ted" - end - local done = source_to_ted(shortname,longname) - if done and runtex then - os.execute(format("mtxrun --script context --usemodule=mod-01 --purge %s",longname)) - processed[#processed+1] = longname - end - end - end - for i=1,#processed do - local name = processed[i] - report("modules","processed: %s",name) - end -end - --- context --ctx=m-modules.ctx xxx.mkiv - -if environment.argument("process") then - scripts.modules.process(true) -elseif environment.argument("convert") then - scripts.modules.process(false) -elseif environment.argument("exporthelp") then - application.export(environment.argument("exporthelp"),environment.files[1]) -else - application.help() -end +if not modules then modules = { } end modules ['mtx-modules'] = {
+ version = 1.002,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+scripts = scripts or { }
+scripts.modules = scripts.modules or { }
+
+local helpinfo = [[
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-modules</entry>
+ <entry name="detail">ConTeXt Module Documentation Generators</entry>
+ <entry name="version">1.00</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="convert"><short>convert source files (tex, mkii, mkiv, mp) to 'ted' files</short></flag>
+ <flag name="process"><short>process source files (tex, mkii, mkiv, mp) to 'pdf' files</short></flag>
+ <flag name="prep"><short>use original name with suffix 'prep' appended</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+</application>
+]]
+
+local application = logs.application {
+ name = "mtx-modules",
+ banner = "ConTeXt Module Documentation Generators 1.00",
+ helpinfo = helpinfo,
+}
+
+local report = application.report
+
+-- Documentation can be woven into a source file. This script can generates
+-- a file with the documentation and source fragments properly tagged. The
+-- documentation is included as comment:
+--
+-- %D ...... some kind of documentation
+-- %M ...... macros needed for documenation
+-- %S B begin skipping
+-- %S E end skipping
+--
+-- The generated file is structured as:
+--
+-- \starttypen
+-- \startmodule[type=suffix]
+-- \startdocumentation
+-- \stopdocumentation
+-- \startdefinition
+-- \stopdefinition
+-- \stopmodule
+-- \stoptypen
+--
+-- Macro definitions specific to the documentation are not surrounded by
+-- start-stop commands. The suffix specificaction can be overruled at runtime,
+-- but defaults to the file extension. This specification can be used for language
+-- depended verbatim typesetting.
+--
+-- In the mkiv variant we filter the \module settings so that we don't have
+-- to mess with global document settings.
+
+local find, format, sub, is_empty, strip, gsub = string.find, string.format, string.sub, string.is_empty, string.strip, string.gsub
+
+local function source_to_ted(inpname,outname,filetype)
+ local data = io.loaddata(inpname)
+ if not data or data == "" then
+ report("invalid module name '%s'",inpname)
+ return
+ end
+ report("converting '%s' to '%s'",inpname,outname)
+ local skiplevel, indocument, indefinition = 0, false, false
+ local started = false
+ local settings = format("type=%s",filetype or file.suffix(inpname))
+ local preamble, n = lpeg.match(lpeg.Cs((1-lpeg.patterns.newline^2)^1) * lpeg.Cp(),data)
+ if preamble then
+ preamble = string.match(preamble,"\\module.-%[(.-)%]")
+ if preamble then
+ preamble = gsub(preamble,"%%D *","")
+ preamble = gsub(preamble,"%%(.-)[\n\r]","")
+ preamble = gsub(preamble,"[\n\r]","")
+ preamble = strip(preamble)
+ settings = format("%s,%s",settings,preamble)
+ data = string.sub(data,n,#data)
+ end
+ end
+ local lines = string.splitlines(data)
+ local result = { }
+ result[#result+1] = format("\\startmoduledocumentation[%s]",settings)
+ for i=1,#lines do
+ local line = lines[i]
+ if find(line,"^%%D ") or find(line,"^%%D$") then
+ if skiplevel == 0 then
+ local someline = #line < 3 and "" or sub(line,4,#line)
+ if indocument then
+ result[#result+1] = someline
+ else
+ if indefinition then
+ result[#result+1] = "\\stopdefinition"
+ indefinition = false
+ end
+ if not indocument then
+ result[#result+1] = "\\startdocumentation"
+ end
+ result[#result+1] = someline
+ indocument = true
+ end
+ end
+ elseif find(line,"^%%M ") or find(line,"^%%M$") then
+ if skiplevel == 0 then
+ local someline = (#line < 3 and "") or sub(line,4,#line)
+ result[#result+1] = someline
+ end
+ elseif find(line,"^%%S B") then
+ skiplevel = skiplevel + 1
+ elseif find(line,"^%%S E") then
+ skiplevel = skiplevel - 1
+ elseif find(line,"^%%") then
+ -- nothing
+ elseif skiplevel == 0 then
+ inlocaldocument = indocument
+ inlocaldocument = false
+ local someline = line
+ if indocument then
+ result[#result+1] = "\\stopdocumentation"
+ indocument = false
+ end
+ if indefinition then
+ if is_empty(someline) then
+ result[#result+1] = "\\stopdefinition"
+ indefinition = false
+ else
+ result[#result+1] = someline
+ end
+ elseif not is_empty(someline) then
+ result[#result+1] = "\n"
+ result[#result+1] = "\\startdefinition"
+ indefinition = true
+ if inlocaldocument then
+ -- nothing
+ else
+ result[#result+1] = someline
+ end
+ end
+ end
+ end
+ if indocument then
+ result[#result+1] = "\\stopdocumentation"
+ end
+ if indefinition then
+ result[#result+1] = "\\stopdefinition"
+ end
+ result[#result+1] = "\\stopmoduledocumentation"
+ io.savedata(outname,table.concat(result,"\n"))
+ return true
+end
+
+local suffixes = table.tohash { 'tex','mkii','mkiv', 'mkvi', 'mp' }
+
+function scripts.modules.process(runtex)
+ local processed = { }
+ local prep = environment.argument("prep")
+ local files = environment.files
+ for i=1,#files do
+ local shortname = files[i]
+ local suffix = file.suffix(shortname)
+ if suffixes[suffix] then
+ local longname
+ if prep then
+ longname = shortname .. ".prep"
+ else
+ longname = file.removesuffix(shortname) .. "-" .. suffix .. ".ted"
+ end
+ local done = source_to_ted(shortname,longname)
+ if done and runtex then
+ os.execute(format("mtxrun --script context --usemodule=mod-01 --purge %s",longname))
+ processed[#processed+1] = longname
+ end
+ end
+ end
+ for i=1,#processed do
+ local name = processed[i]
+ report("modules","processed: %s",name)
+ end
+end
+
+-- context --ctx=m-modules.ctx xxx.mkiv
+
+if environment.argument("process") then
+ scripts.modules.process(true)
+elseif environment.argument("convert") then
+ scripts.modules.process(false)
+elseif environment.argument("exporthelp") then
+ application.export(environment.argument("exporthelp"),environment.files[1])
+else
+ application.help()
+end
|