cv-tools-cli 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. cv_tools/__init__.py +7 -0
  2. cv_tools/__main__.py +5 -0
  3. cv_tools/api.py +123 -0
  4. cv_tools/bib.py +122 -0
  5. cv_tools/charset.py +142 -0
  6. cv_tools/cli.py +384 -0
  7. cv_tools/doctor.py +185 -0
  8. cv_tools/engine.py +320 -0
  9. cv_tools/loader.py +424 -0
  10. cv_tools/markup.py +614 -0
  11. cv_tools/migrate.py +222 -0
  12. cv_tools/model.py +192 -0
  13. cv_tools/render/__init__.py +1 -0
  14. cv_tools/render/html.py +581 -0
  15. cv_tools/render/latex.py +154 -0
  16. cv_tools/schema/cv-v2.schema.json +707 -0
  17. cv_tools/starter/cv.yaml +129 -0
  18. cv_tools/starter/publications.bib +55 -0
  19. cv_tools/templates/html/cv.css +252 -0
  20. cv_tools/templates/html/cv.html.jinja +19 -0
  21. cv_tools/templates/html/icons/github.svg +1 -0
  22. cv_tools/templates/html/icons/linkedin.svg +1 -0
  23. cv_tools/templates/html/icons/orcid.svg +1 -0
  24. cv_tools/templates/html/icons/twitter.svg +1 -0
  25. cv_tools/templates/html/macros.jinja +89 -0
  26. cv_tools/templates/latex/cv.tex.jinja +45 -0
  27. cv_tools/templates/latex/layouts/dated.jinja +12 -0
  28. cv_tools/templates/latex/layouts/entries-inline.jinja +23 -0
  29. cv_tools/templates/latex/layouts/entries.jinja +29 -0
  30. cv_tools/templates/latex/layouts/list.jinja +24 -0
  31. cv_tools/templates/latex/layouts/pairs.jinja +14 -0
  32. cv_tools/templates/latex/layouts/publications.jinja +14 -0
  33. cv_tools/templates/latex/layouts/text.jinja +10 -0
  34. cv_tools/templates/latex/orcid.pdf +0 -0
  35. cv_tools/templates/latex/packages.txt +47 -0
  36. cv_tools/templates/latex/resume.cls +265 -0
  37. cv_tools/templates/latex/unicode.txt +398 -0
  38. cv_tools/v1.py +484 -0
  39. cv_tools/validate.py +165 -0
  40. cv_tools/watch.py +76 -0
  41. cv_tools_cli-2.0.0.dist-info/METADATA +498 -0
  42. cv_tools_cli-2.0.0.dist-info/RECORD +46 -0
  43. cv_tools_cli-2.0.0.dist-info/WHEEL +5 -0
  44. cv_tools_cli-2.0.0.dist-info/entry_points.txt +2 -0
  45. cv_tools_cli-2.0.0.dist-info/licenses/LICENSE +21 -0
  46. cv_tools_cli-2.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,24 @@
1
+ {#- v1 "bullets": an itemize with optional nested bullets. -#}
2
+ {% macro render(section) %}
3
+ \begin{rSection}{ {{ section.title }} }
4
+ {% if section.description %}
5
+ {{ section.description }}
6
+ {%-endif-%}
7
+ {%- if section.entries -%}
8
+ \begin{itemize}[leftmargin=*]
9
+ {% for entry in section.entries %}
10
+ {% if entry.bullets %}
11
+ \item {{ entry.text }}
12
+ \begin{itemize}
13
+ {% for bullet in entry.bullets %}
14
+ \item {{ bullet }}
15
+ {% endfor %}
16
+ \end{itemize}
17
+ {% else %}
18
+ \item {{ entry.text }}
19
+ {%-endif-%}
20
+ {% endfor %}
21
+ \end{itemize}
22
+ {%- endif %}
23
+ \end{rSection}
24
+ {% endmacro %}
@@ -0,0 +1,14 @@
1
+ {#- v1 "skills": "title:" on the left, text on the right. -#}
2
+ {% macro render(section) %}
3
+ % ====================== {{ section.comment }} Section ====================== %
4
+ \begin{rSection}{ {{-section.title-}} }
5
+ {% if section.description %}
6
+ {{ section.description }}
7
+ {%-endif-%}
8
+ \begin{itemize}[leftmargin=0em, label={}, noitemsep]
9
+ {% for entry in section.entries %}
10
+ \item { {{-entry.title-}} :} \hfill { {{-entry.text-}} }
11
+ {%-endfor %}
12
+ \end{itemize}
13
+ \end{rSection}
14
+ {% endmacro %}
@@ -0,0 +1,14 @@
1
+ {#- v1 "publications": one item per BibTeX entry, in file order. -#}
2
+ {% macro render(section) %}
3
+ % ====================== {{ section.comment }} Section ====================== %
4
+ \begin{rSection}{ {{ section.title }} }
5
+ {%- if section.description %}
6
+ {{ section.description }}
7
+ {%- else %}
8
+ \vspace{-1.1em}
9
+ {%- endif %}
10
+ {%-for citation in section.citations %}
11
+ \item {{ citation }}
12
+ {% endfor %}
13
+ \end{rSection}
14
+ {% endmacro %}
@@ -0,0 +1,10 @@
1
+ {#- One paragraph per entry. -#}
2
+ {% macro render(section) %}
3
+ % ====================== {{ section.comment }} Section ====================== %
4
+ \begin{rSection}{ {{ section.title }} }
5
+ {%- if section.description %}{{ section.description }}\par{% endif %}
6
+ {% for entry in section.entries %}
7
+ {{ entry.text }}\par
8
+ {% endfor %}
9
+ \end{rSection}
10
+ {% endmacro %}
Binary file
@@ -0,0 +1,47 @@
1
+ # TeX Live packages that cv-tools documents load with pdflatex.
2
+ # Generated by tools/derive_packages.py from a -recorder run; do not edit by hand.
3
+ amsfonts
4
+ amsmath
5
+ bigintcalc
6
+ bitset
7
+ cm
8
+ cm-super
9
+ datetime
10
+ ec
11
+ enumitem
12
+ epstopdf-pkg
13
+ etoolbox
14
+ fmtcount
15
+ fontawesome
16
+ fontname
17
+ geometry
18
+ gettitlestring
19
+ graphics
20
+ graphics-cfg
21
+ graphics-def
22
+ hycolor
23
+ hyperref
24
+ iftex
25
+ infwarerr
26
+ intcalc
27
+ kpathsea
28
+ kvdefinekeys
29
+ kvoptions
30
+ kvsetkeys
31
+ l3kernel
32
+ latex
33
+ latexconfig
34
+ ltxcmds
35
+ mptopdf
36
+ nameref
37
+ parskip
38
+ pdfescape
39
+ pdftexcmds
40
+ refcount
41
+ rerunfilecheck
42
+ stringenc
43
+ tools
44
+ uniquecounter
45
+ url
46
+ xcolor
47
+ xkeyval
@@ -0,0 +1,265 @@
1
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
+ % Medium Length Professional CV - RESUME CLASS FILE
3
+ %
4
+ % This template has been downloaded from:
5
+ % http://www.LaTeXTemplates.com
6
+ %
7
+ % This class file defines the structure and design of the template.
8
+ %
9
+ % Original header:
10
+ % Copyright (C) 2010 by Trey Hunner
11
+ %
12
+ % Copying and distribution of this file, with or without modification,
13
+ % are permitted in any medium without royalty provided the copyright
14
+ % notice and this notice are preserved. This file is offered as-is,
15
+ % without any warranty.
16
+ %
17
+ % Created by Trey Hunner and modified by www.LaTeXTemplates.com
18
+ %
19
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20
+
21
+ \ProvidesClass{resume}[2010/07/10 v0.9 Resume class]
22
+
23
+ \LoadClass[11pt,letterpaper]{article} % Font size and paper type
24
+
25
+ \usepackage[parfill]{parskip} % Remove paragraph indentation
26
+ \usepackage{array} % Required for boldface (\bf and \bfseries) tabular columns
27
+ \usepackage{ifthen} % Required for ifthenelse statements
28
+ \usepackage{fontawesome}
29
+ \usepackage{xcolor}
30
+ \usepackage{graphicx}
31
+
32
+ \newcommand{\colorfaLinkedinSquare}{\textcolor{rgb:red,6;green,108;blue,170}{\raisebox{-0.7pt}{\faLinkedinSquare}}}
33
+ \newcommand{\colorfaGithub}{\textcolor{black}{\raisebox{-1.3pt}{\large\faGithub}}}
34
+ \newcommand{\colorfaTwitter}{\textcolor{rgb:red,29;green,161;blue,242}{\raisebox{-1.5pt}{\large\faTwitter}}}
35
+
36
+ \pagestyle{empty} % Suppress page numbers
37
+
38
+ %----------------------------------------------------------------------------------------
39
+ % HEADINGS COMMANDS: Commands for printing name and address
40
+ %----------------------------------------------------------------------------------------
41
+
42
+ \def \name#1{\def\@name{#1}} % Defines the \name command to set name
43
+ \def \@name {} % Sets \@name to empty by default
44
+
45
+ \def \addressSep {$|$} % Set default address separator to a diamond
46
+
47
+ % One, two or three address lines can be specified
48
+ \let \@addressone \relax
49
+ \let \@addresstwo \relax
50
+ \let \@addressthree \relax
51
+
52
+ % \address command can be used to set the first, second, and third address (last 2 optional)
53
+ \def \address #1{
54
+ \@ifundefined{@addresstwo}{
55
+ \def \@addresstwo {#1}
56
+ }{
57
+ \@ifundefined{@addressthree}{
58
+ \def \@addressthree {#1}
59
+ }{
60
+ \def \@addressone {#1}
61
+ }}
62
+ }
63
+
64
+ % \printaddress is used to style an address line (given as input)
65
+ \def \printaddress #1{
66
+ \begingroup
67
+ \def \\ {\addressSep\ }
68
+ \centerline{#1}
69
+ \endgroup
70
+ \par
71
+ \addressskip
72
+ }
73
+
74
+ % \printname is used to print the name as a page header
75
+ \def \printname {
76
+ \begingroup
77
+ \hfil{\MakeUppercase{\namesize\bf \@name}}\hfil
78
+ \nameskip\break
79
+ \endgroup
80
+ }
81
+
82
+ %----------------------------------------------------------------------------------------
83
+ % PRINT THE HEADING LINES
84
+ %----------------------------------------------------------------------------------------
85
+
86
+ \let\ori@document=\document
87
+ \renewcommand{\document}{
88
+ \ori@document % Begin document
89
+ \printname % Print the name specified with \name
90
+ \@ifundefined{@addressone}{}{ % Print the first address if specified
91
+ \printaddress{\@addressone}}
92
+ \@ifundefined{@addresstwo}{}{ % Print the second address if specified
93
+ \printaddress{\@addresstwo}}
94
+ \@ifundefined{@addressthree}{}{ % Print the third address if specified
95
+ \printaddress{\@addressthree}}
96
+ }
97
+
98
+ %----------------------------------------------------------------------------------------
99
+ % SECTION FORMATTING
100
+ %----------------------------------------------------------------------------------------
101
+
102
+ % Defines the rSection environment for the large sections within the CV
103
+ \newenvironment{rSection}[1]{ % 1 input argument - section name
104
+ \sectionskip
105
+ \MakeUppercase{\bf #1} % Section title
106
+ \sectionlineskip
107
+ \hrule % Horizontal line
108
+ \begin{list}{}{ % List for each individual item in the section
109
+ \setlength{\leftmargin}{1.5em} % Margin within the section
110
+ }
111
+ \item[]
112
+ }{
113
+ \end{list}
114
+ }
115
+
116
+ %----------------------------------------------------------------------------------------
117
+ % WORK EXPERIENCE FORMATTING
118
+ %----------------------------------------------------------------------------------------
119
+
120
+ \newenvironment{rSubsection}[5]{ % 4 input arguments - company name, year(s) employed, job title and location
121
+ {#1} \hfill {\em #2} % Bold company name and date on the right
122
+ \ifthenelse{\equal{#3}{}}{}{ % If the third argument is not specified, don't print the job title and location line
123
+ \\
124
+ {#3} \hfill {#4} % Italic job title and location
125
+ \ifthenelse{\equal{#5}{}}{}{
126
+ \\
127
+ {#5}
128
+ }
129
+ }\smallskip
130
+ \begin{list}{\textbullet}{\leftmargin=1em} % \cdot used for bullets, no indentation
131
+ \setlength{\itemsep}{-0.5em} \vspace{-0.5em} % Reduce vertical spacing between items in the list for a tighter look
132
+ }{
133
+ \end{list}
134
+ \vspace{0.5em} % Some space after the list of bullet points
135
+ }
136
+
137
+ % The below commands define the whitespace after certain things in the document - they can be \smallskip, \medskip or \bigskip
138
+ \def\namesize{\huge} % Size of the name at the top of the document
139
+ \def\addressskip{\smallskip} % The space between the two address (or phone/email) lines
140
+ \def\sectionlineskip{\medskip} % The space above the horizontal line for each section
141
+ \def\nameskip{\bigskip} % The space after your name at the top
142
+ \def\sectionskip{\medskip} % The space after the heading section
143
+
144
+ \usepackage{enumitem}
145
+ \usepackage{hyperref}
146
+ \hypersetup{
147
+ colorlinks=true,
148
+ linkcolor=blue,
149
+ filecolor=magenta,
150
+ urlcolor=blue
151
+ }
152
+ % \MakeUppercase prints the name and the section titles. It must not change
153
+ % link targets, so the URL argument of \href and the argument of \url keep
154
+ % their case (LaTeX 2022 and later; older releases have no such list).
155
+ \ExplSyntaxOn
156
+ \tl_if_exist:NT \l_text_case_exclude_arg_tl
157
+ { \tl_put_right:Nn \l_text_case_exclude_arg_tl { \href \url } }
158
+ \ExplSyntaxOff
159
+
160
+ % The ORCID iD logo. cv-tools 1.x drew it with TikZ and sized it with
161
+ % \scalerel*{<drawing>}{|}. The same arithmetic (calc's \ratio and \resizebox)
162
+ % on an empty box of the drawing's natural size (256pt square, no depth) gives
163
+ % the same box at every font size. orcid.pdf is then drawn once at that size;
164
+ % it has a 1pt margin on each side, which trim removes.
165
+ \usepackage{calc}
166
+ \newlength\orcid@blob
167
+ \newlength\orcid@depth
168
+ \newlength\orcid@wd
169
+ \newlength\orcid@ht
170
+ \newcommand\orcid@logo{%
171
+ \setbox0\hbox{$|$}%
172
+ \setlength\orcid@blob{\ht0+\dp0}%
173
+ \setlength\orcid@depth{\dp0}%
174
+ \setbox0\hbox{\vrule width\z@ height256pt depth\z@ \kern256pt}%
175
+ \setlength\orcid@wd{\wd0*\ratio{\orcid@blob}{\ht0}}%
176
+ \setlength\orcid@ht{\ht0*\ratio{\orcid@blob}{\ht0}}%
177
+ \setbox0\hbox{\resizebox{\orcid@wd}{\orcid@ht}{\box0}}%
178
+ \setbox2\hbox{\includegraphics[trim=1pt 1pt 1pt 1pt,width=\wd0,height=\ht0]{orcid.pdf}}%
179
+ \wd2=\wd0 \ht2=\ht0 \dp2=\z@
180
+ \raisebox{-\orcid@depth}{\box2}}
181
+ \newcommand\orcidicon[1]{\href{https://orcid.org/#1}{\mbox{\orcid@logo}}}
182
+
183
+ % Greek letters and math symbols in text and .bib fields, as math. Only
184
+ % characters that LaTeX's own UTF-8 declarations (ot1enc, t1enc, ts1enc and
185
+ % omsenc.dfu) leave out are declared here; tools/derive_unicode.py checks that.
186
+ \DeclareUnicodeCharacter{03B1}{\ensuremath{\alpha}}% α
187
+ \DeclareUnicodeCharacter{03B2}{\ensuremath{\beta}}% β
188
+ \DeclareUnicodeCharacter{03B3}{\ensuremath{\gamma}}% γ
189
+ \DeclareUnicodeCharacter{03B4}{\ensuremath{\delta}}% δ
190
+ \DeclareUnicodeCharacter{03B5}{\ensuremath{\varepsilon}}% ε
191
+ \DeclareUnicodeCharacter{03B6}{\ensuremath{\zeta}}% ζ
192
+ \DeclareUnicodeCharacter{03B7}{\ensuremath{\eta}}% η
193
+ \DeclareUnicodeCharacter{03B8}{\ensuremath{\theta}}% θ
194
+ \DeclareUnicodeCharacter{03B9}{\ensuremath{\iota}}% ι
195
+ \DeclareUnicodeCharacter{03BA}{\ensuremath{\kappa}}% κ
196
+ \DeclareUnicodeCharacter{03BB}{\ensuremath{\lambda}}% λ
197
+ \DeclareUnicodeCharacter{03BC}{\ensuremath{\mu}}% μ
198
+ \DeclareUnicodeCharacter{03BD}{\ensuremath{\nu}}% ν
199
+ \DeclareUnicodeCharacter{03BE}{\ensuremath{\xi}}% ξ
200
+ \DeclareUnicodeCharacter{03BF}{\ensuremath{o}}% ο
201
+ \DeclareUnicodeCharacter{03C0}{\ensuremath{\pi}}% π
202
+ \DeclareUnicodeCharacter{03C1}{\ensuremath{\rho}}% ρ
203
+ \DeclareUnicodeCharacter{03C2}{\ensuremath{\varsigma}}% ς
204
+ \DeclareUnicodeCharacter{03C3}{\ensuremath{\sigma}}% σ
205
+ \DeclareUnicodeCharacter{03C4}{\ensuremath{\tau}}% τ
206
+ \DeclareUnicodeCharacter{03C5}{\ensuremath{\upsilon}}% υ
207
+ \DeclareUnicodeCharacter{03C6}{\ensuremath{\varphi}}% φ
208
+ \DeclareUnicodeCharacter{03C7}{\ensuremath{\chi}}% χ
209
+ \DeclareUnicodeCharacter{03C8}{\ensuremath{\psi}}% ψ
210
+ \DeclareUnicodeCharacter{03C9}{\ensuremath{\omega}}% ω
211
+ \DeclareUnicodeCharacter{03D1}{\ensuremath{\vartheta}}% ϑ
212
+ \DeclareUnicodeCharacter{03D5}{\ensuremath{\phi}}% ϕ
213
+ \DeclareUnicodeCharacter{03D6}{\ensuremath{\varpi}}% ϖ
214
+ \DeclareUnicodeCharacter{03F1}{\ensuremath{\varrho}}% ϱ
215
+ \DeclareUnicodeCharacter{03F5}{\ensuremath{\epsilon}}% ϵ
216
+ \DeclareUnicodeCharacter{0391}{\ensuremath{\mathrm{A}}}% Α
217
+ \DeclareUnicodeCharacter{0392}{\ensuremath{\mathrm{B}}}% Β
218
+ \DeclareUnicodeCharacter{0393}{\ensuremath{\Gamma}}% Γ
219
+ \DeclareUnicodeCharacter{0394}{\ensuremath{\Delta}}% Δ
220
+ \DeclareUnicodeCharacter{0395}{\ensuremath{\mathrm{E}}}% Ε
221
+ \DeclareUnicodeCharacter{0396}{\ensuremath{\mathrm{Z}}}% Ζ
222
+ \DeclareUnicodeCharacter{0397}{\ensuremath{\mathrm{H}}}% Η
223
+ \DeclareUnicodeCharacter{0398}{\ensuremath{\Theta}}% Θ
224
+ \DeclareUnicodeCharacter{0399}{\ensuremath{\mathrm{I}}}% Ι
225
+ \DeclareUnicodeCharacter{039A}{\ensuremath{\mathrm{K}}}% Κ
226
+ \DeclareUnicodeCharacter{039B}{\ensuremath{\Lambda}}% Λ
227
+ \DeclareUnicodeCharacter{039C}{\ensuremath{\mathrm{M}}}% Μ
228
+ \DeclareUnicodeCharacter{039D}{\ensuremath{\mathrm{N}}}% Ν
229
+ \DeclareUnicodeCharacter{039E}{\ensuremath{\Xi}}% Ξ
230
+ \DeclareUnicodeCharacter{039F}{\ensuremath{\mathrm{O}}}% Ο
231
+ \DeclareUnicodeCharacter{03A0}{\ensuremath{\Pi}}% Π
232
+ \DeclareUnicodeCharacter{03A1}{\ensuremath{\mathrm{P}}}% Ρ
233
+ \DeclareUnicodeCharacter{03A3}{\ensuremath{\Sigma}}% Σ
234
+ \DeclareUnicodeCharacter{03A4}{\ensuremath{\mathrm{T}}}% Τ
235
+ \DeclareUnicodeCharacter{03A5}{\ensuremath{\Upsilon}}% Υ
236
+ \DeclareUnicodeCharacter{03A6}{\ensuremath{\Phi}}% Φ
237
+ \DeclareUnicodeCharacter{03A7}{\ensuremath{\mathrm{X}}}% Χ
238
+ \DeclareUnicodeCharacter{03A8}{\ensuremath{\Psi}}% Ψ
239
+ \DeclareUnicodeCharacter{03A9}{\ensuremath{\Omega}}% Ω
240
+ \DeclareUnicodeCharacter{2264}{\ensuremath{\leq}}% ≤
241
+ \DeclareUnicodeCharacter{2265}{\ensuremath{\geq}}% ≥
242
+ \DeclareUnicodeCharacter{2260}{\ensuremath{\neq}}% ≠
243
+ \DeclareUnicodeCharacter{2248}{\ensuremath{\approx}}% ≈
244
+ \DeclareUnicodeCharacter{223C}{\ensuremath{\sim}}% ∼
245
+ \DeclareUnicodeCharacter{2194}{\ensuremath{\leftrightarrow}}% ↔
246
+ \DeclareUnicodeCharacter{21D2}{\ensuremath{\Rightarrow}}% ⇒
247
+ \DeclareUnicodeCharacter{221E}{\ensuremath{\infty}}% ∞
248
+ \DeclareUnicodeCharacter{2208}{\ensuremath{\in}}% ∈
249
+ \DeclareUnicodeCharacter{2209}{\ensuremath{\notin}}% ∉
250
+ \DeclareUnicodeCharacter{2282}{\ensuremath{\subset}}% ⊂
251
+ \DeclareUnicodeCharacter{2211}{\ensuremath{\sum}}% ∑
252
+ \DeclareUnicodeCharacter{220F}{\ensuremath{\prod}}% ∏
253
+ \DeclareUnicodeCharacter{221A}{\ensuremath{\surd}}% √
254
+ \DeclareUnicodeCharacter{2202}{\ensuremath{\partial}}% ∂
255
+ \DeclareUnicodeCharacter{2207}{\ensuremath{\nabla}}% ∇
256
+
257
+ \usepackage[nodayofweek]{datetime}
258
+
259
+ % Redefine the date format
260
+ \newdateformat{customdate}{%
261
+ \ordinal{DAY} \monthname[\THEMONTH] \THEYEAR}
262
+
263
+ \usepackage[left=0.55in,top=0.6in,right=0.55in,bottom=0.6in]{geometry} % Document margins
264
+ \newcommand{\tab}[1]{\hspace{.2667\textwidth}\rlap{#1}}
265
+ \newcommand{\itab}[1]{\hspace{0em}\rlap{#1}}