%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]
%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\ features 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 (temporarily disabled)
% --bodyfont=list       : additional bodyfont settings
% --paperformat=spec    : paper*print or paperxprint
%
% end help

\input mtx-context-common.tex

\setupbodyfont
  [11pt,tt,\getdocumentargument{bodyfont}]

\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",
    }

    local pattern = document.arguments.pattern

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

    if #document.files > 0 then
        if document.arguments.sort then
            table.sort(document.files)
        end
        for _, filename in ipairs(document.files) do
            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 pretty then
                    if type(pretty) ~= "string" or pretty == "" then
                        context.setuptyping { option = "color" }
                    else
                        context.setuptyping { option = types[pretty] or pretty }
                    end
                end
                context.typefile(filename)
            end
        end
    else
        context("no files given")
    end
\stopluacode

\stoptext
