summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/gitinfo-lua/tex/gitinfo-lua.sty
blob: 405c668901f8e3317e73b108c80b5ce34c8845a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
%% gitinfo-lua.sty
%% Copyright 2023 E. Nijenhuis
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status ‘maintained’.
%
% The Current Maintainer of this work is E. Nijenhuis.
%
% This work consists of the files gitinfo-lua.sty gitinfo-lua.pdf
% gitinfo-cmd.lua and gitinfo-lua.lua
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gitinfo-lua}[2023/11/10 Xerdi's Git Package]

\RequirePackage{luacode}

\directlua{git = require('gitinfo-lua')}

\RequirePackage{pgfopts}

\newif\ifgit@multipleauthors
\newif\ifgit@setmacros
\pgfkeys{/gitinfo-lua/.is family,
    /gitinfo-lua,
    author sort/.default=false,
    author sort/.store in=\git@author@sort,
    author sort,
    contrib/.style = {/git/author sort=true},
    alpha/.style = {/git/author sort=false},
    multiple authors/.is if=git@multipleauthors,
    multiple authors=false,
    author/.style={multiple authors=false},
    authors/.style={multiple authors=true},
    set title page macros/.is if=git@setmacros,
    set title page macros=false,
    titlepage/.style={set title page macros=true}
}

\ProcessPgfPackageOptions*

\newcommand*\git@single@arg[1]{#1}

\newcommand*\gitversion{\directlua{git:write_version()}}
\newcommand*\gitauthor{\directlua{git:write_local_author()}}
\newcommand*\gitemail{\directlua{git:write_local_email()}}
\newcommand*\gitdate{\directlua{git:cs_last_commit('git@single@arg', 'cs')}}
\newcommand*\gitdirectory[1]{\directlua{git:dir('#1')}}
\newcommand*\gitunsetdirectory{\directlua{git:dir(nil)}}

\newcommand\git@format@author[2]{%
    #1
    \ifcsname href\endcsname%
        \textlangle\href{mailto:#2}{#2}\textrangle%
    \else%
        \textlangle\texttt{#2}\textrangle%
    \fi%
}

\newcommand*\dogitauthors[1][,~]{%
    \directlua{git:cs_for_authors('git@format@author', '#1', \git@author@sort)}%
}

\newcommand*\forgitauthors[2][\authorconjunction]{%
    \directlua{git:cs_for_authors('#2', '#1', \git@author@sort)}%
}

\def\git@default@tag@format{refname:short,(taggername)(taggername,taggeremail,taggerdate:short)(authorname,authoremail,authordate:short),subject,body}
\newcommand{\gitcommit}[3][h,an,ae,as,s,b]{\directlua{git:cs_commit('#2', '#3', '#1')}}
\newcommand{\forgitcommit}[3][h,an,ae,as,s,b]{\directlua{git:cs_for_commit('#2', '#3', '#1')}}
\newcommand{\gittag}[3][\git@default@tag@format]{%
    \directlua{git:cs_tag('#2', '#1', '#3')}%
}
\newcommand{\forgittag}[2][\git@default@tag@format]{%
    \directlua{git:cs_for_tag('#2', '#1')}%
}
\newcommand{\forgittagseq}[1]{\directlua{git:cs_for_tag_sequence('#1')}}

\ifgit@setmacros
    \ifgit@multipleauthors
        \author{\dogitauthors[\\\\]}
    \else
        \author{\gitauthor}
    \fi
    \directlua{git:set_date()}
    \date{\today}
\fi

\endinput