mtx-context-listing.tex / last modification: 2020-01-30 14:16
%D \module
%D   [       file=mtx-context-listing,
%D        version=2008.11.10, % about that time i started playing with this
%D          title=\CONTEXT\ Extra Trickry,
%D       subtitle=Listing Files,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

%D This is a \TEXEXEC\ feature that has been moved to \MKIV.

% begin help
%
% usage: context --extra=listing [options] list-of-files
%
% --sort                : sort filenames first
% --topspace=dimension  : distance above first line
% --backspace=dimension : distance before left margin
% --pretty              : pretty print comform suffix
% --scite               : pretty print comform suffix using scite lexer
% --bodyfont=list       : additional bodyfont settings
% --paperformat=spec    : paper*print or paperxprint
% --compact             : small margins, 8pt font
% --verycompact         : small margins, 7pt font
%
% end help

\input mtx-context-common.tex

\doifdocumentargument {compact} {
    \setdocumentargument{topspace} {5mm}
    \setdocumentargument{backspace}{5mm}
    \setdocumentargument{bodyfont} {8pt}
}

\doifdocumentargument {verycompact} {
    \setdocumentargument{topspace} {5mm}
    \setdocumentargument{backspace}{5mm}
    \setdocumentargument{bodyfont} {7pt}
}

\setupbodyfont
  [dejavu,9pt,tt,\getdocumentargument{bodyfont}] % dejavu is more complete

\setuptyping
  [lines=yes]

\setuplayout
  [header=0cm,
   footer=1.5cm,
   topspace=\getdocumentargumentdefault{topspace}{1.5cm},
   backspace=\getdocumentargumentdefault{backspace}{1.5cm},
   width=middle,
   height=middle]

\setuppapersize
  [\getdocumentargument{paperformat_paper}]
  [\getdocumentargument{paperformat_print}]

% \startluacode
%     -- syntax check
%     local topspace  = dimen(document.arguments.topspace  or 0)
%     local backspace = dimen(document.arguments.backspace or 0)
%     local zeropoint = dimen(0)
%     if topspace > zeropoint then
%         context.setuplayout { topspace = tostring(topspace) }
%     end
%     if backspace > zeropoint then
%         context.setuplayout { backspace = tostring(backspace) }
%     end
% \stopluacode

\starttext

\startluacode
    local types = {
        mkiv = "tex",
        mkii = "tex",
        cld  = "lua",
        lfg  = "lua",
        mpiv = "mp",
        mpii = "mp",
    }

    local pattern = document.arguments.pattern
    local scite   = document.arguments.scite

    if pattern then
        document.files = dir.glob(pattern)
    end

    if scite then
        context.usemodule { "scite" }
    end

    local done  = false
    local files = document.files

    if #files > 0 then
        if document.arguments.sort then
            table.sort(files)
        end
        for i=1,#files do
            local filename = files[i]
            if not string.find(filename,"^mtx%-context%-") then
                local pretty = document.arguments.pretty
                if pretty == true then
                    pretty = file.extname(filename) or ""
                elseif pretty == false then
                    pretty = ""
                else
                    -- forced
                end
                context.page()
                context.setupfootertexts( -- return true: we need to keep this entry
                    { function() context.detokenize(pattern and filename or file.basename(filename)) return true end },
                    { function() context.pagenumber() return true end }
                )
                if scite then
                    context.scitefile { filename } -- here { }
                elseif pretty then
                    if type(pretty) ~= "string" or pretty == "" then
                        context.setuptyping { option = "color" }
                    else
                        context.setuptyping { option = types[pretty] or pretty }
                    end
                    context.typefile(filename)
                else
                    context.typefile(filename)
                end
                done = true
            end
        end
    end

    if not done then
        context("no files given")
    end

\stopluacode

\stoptext