summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty
blob: ac2304e9f0e03e86ff0ef33993a9d161f482c0bb (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
%%
%% This is file `metakeys.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% metakeys.dtx  (with options: `package')
%% 
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{metakeys}[2019/03/20 v0.9 Framework for Metadata Keys]
\newif\ifmetakeys@showmeta\metakeys@showmetafalse
\DeclareOption{showmeta}{\metakeys@showmetatrue}
\DeclareOption*{}
\ProcessOptions
\RequirePackage{keyval}[1997/11/10]
\RequirePackage{etoolbox}
\newcommand\addmetakey{\@ifstar\addmetakey@star\addmetakey@nostar}%
\newcommand\addmetakey@star[3][]{%
  \@ifnextchar[{%
    \addmetakey@star@aux[#1]{#2}{#3}%
  }{%
    \addmetakey@star@aux[#1]{#2}{#3}[]%
  }%
}%
\def\addmetakey@star@aux[#1]#2#3[#4]{%
  \metakeys@ext@clear@keys{#2}{#3}{#1}%
  \metakeys@initialize@showkeys{#2}%
  \define@key{#2}{#3}[#4]{%
    \csxdef{#2@#3}{##1}%
  }%
}%
\newcommand\addmetakey@nostar[3][]{%
  \metakeys@ext@showkeys{#2}{#3}%
  \addmetakey@star[#1]{#2}{#3}%
}%
\newcommand\metasetkeys[2]{%
  \@nameuse{clear@#1@keys}%
  \setkeys{#1}{#2}%
  \ifmetakeys@showmeta%
    \edef\@@keys{\@nameuse{#1@showkeys}}%
    \metakeys@show@keys{#1}{%
      \@for\@I:=\@@keys\do{%
        \metakeys@show@keyval{#1}{\@I}%
      }%
    }%
  \fi%
}%
\newrobustcmd\metakeys@ext@clear@keys[3]{%
  \@metakeys@ext@clear@keys{#1}{#1@#2}{#3}%
}%
\newrobustcmd\@metakeys@ext@clear@keys[3]{%
  \@ifundefined{clear@#1@keys}{%
\csgdef{clear@#1@keys}{\csgdef{#2}{#3}}%
  }%
  {\expandafter\gappto\csname clear@#1@keys\endcsname{\csgdef{#2}{#3}}}%
}%
\newrobustcmd\addmetalistkey{%
  \@ifstar\addmetalistkey@star\addmetalistkey@nostar%
}%
\newrobustcmd\addmetalistkey@star[3][]{%
  \metakeys@ext@clear@keys{#2}{#3}{#1}%
  \metakeys@initialize@showkeys{#2}%
  \csgdef{#2@#3s}{}%
  \define@key{#2}{#3}[#1]{%
    \ifcsempty{#2@#3s}{%
      \csgdef{#2@#3s}{##1}%
    }{%
      \csxdef{#2@#3s}{\csuse{#2@#3s},##1}%
    }%
  }%
}%
\newrobustcmd\addmetalistkey@nostar[3][]{%
  \metakeys@ext@showkeys{#2}{#3}%
  \addmetalistkey@star[#1]{#2}{#3}%
}%
\newrobustcmd\metakeys@initialize@showkeys[1]{%
  \@ifundefined{#1@showkeys}{%
    \csdef{#1@showkeys}{}%
  }{}%
}%
\newrobustcmd\metakeys@ext@showkeys[2]{%
  \@ifundefined{#1@showkeys}{%
    \csdef{#1@showkeys}{#2}%
  }{%
    \csedef{#1@showkeys}{\csuse{#1@showkeys},#2}%
  }%
}%
\newrobustcmd\@metakeys@show@key[2]{\metakeys@show@key{#2}{#1}}%
\newrobustcmd\metakeys@show@key[2]{%
  \edef\@test{#2}%
  \ifx\@test\@empty\else #1:#2\quad\fi%
}%
\newrobustcmd\metakeys@show@keys[2]{\marginpar{{\scriptsize #2}}}%
\newrobustcmd\metakeys@show@keyval[2]{%
  \expandafter\@metakeys@show@key\csname #1@#2\endcsname{#2}%
}%
\newrobustcmd\showmetakeys{\metakeys@showmetatrue}%
\newrobustcmd\hidemetakeys{\metakeys@showmetafalse}%
\newrobustcmd\addmetakeynew[3][]{%
  \metakeys@ext@clear@keys{#2}{#3}{#1}%
  \define@key{#2}{#3}{%
    \csgdef{#2@#3}{##1}%
  }%
}%
\newrobustcmd\metakeys@unspecified{an metakeys-defined key left unspecified}%
\newrobustcmd\metakeysifus[4]{%
  \message{testing #1@#2=\csname#1@#2\endcsname}%
  \expandafter\ifx\csname #1@#2\endcsname\metakeys@unspecified{#3}\else{#4}\fi%
}%
\endinput
%%
%% End of file `metakeys.sty'.