|
1
|
|
|
"""A setuptools based setup module. |
|
2
|
|
|
|
|
3
|
|
|
See: |
|
4
|
|
|
https://packaging.python.org/en/latest/distributing.html |
|
5
|
|
|
https://github.com/chdemko/pandoc-latex-tip |
|
6
|
|
|
""" |
|
7
|
|
|
|
|
8
|
|
|
# To use a consistent encoding |
|
9
|
|
|
|
|
10
|
|
|
# pylint: disable=no-name-in-module,import-error |
|
11
|
|
|
from distutils.version import LooseVersion |
|
12
|
|
|
|
|
13
|
|
|
import os |
|
14
|
|
|
import re |
|
15
|
|
|
import urllib.request |
|
16
|
|
|
import urllib.error |
|
17
|
|
|
import shutil |
|
18
|
|
|
import sys |
|
19
|
|
|
|
|
20
|
|
|
import pkg_resources |
|
21
|
|
|
from pkg_resources import get_distribution |
|
22
|
|
|
|
|
23
|
|
|
# Always prefer setuptools over distutils |
|
24
|
|
|
from setuptools import setup |
|
25
|
|
|
from setuptools.command.build_ext import build_ext |
|
26
|
|
|
from setuptools.command.build_py import build_py |
|
27
|
|
|
|
|
28
|
|
|
HERE = os.path.abspath(os.path.dirname(__file__)) |
|
29
|
|
|
|
|
30
|
|
|
# Get the long description from the README file |
|
31
|
|
|
with open("README.md", encoding="utf-8") as stream: |
|
32
|
|
|
LONG_DESCRIPTION = stream.read() |
|
33
|
|
|
|
|
34
|
|
|
# pylint: disable=too-many-locals,too-many-branches,too-many-statements |
|
35
|
|
|
def _post(): |
|
36
|
|
|
_post_fontawesome_47() |
|
37
|
|
|
_post_fontawesome_5x() |
|
38
|
|
|
_post_glyphicons_33() |
|
39
|
|
|
_post_material_design_3x() |
|
40
|
|
|
|
|
41
|
|
|
|
|
42
|
|
|
def _post_fontawesome_47(): |
|
43
|
|
|
# fontawesome 4.7 |
|
44
|
|
|
directory = _directory("fontawesome", "4.7") |
|
45
|
|
|
_download( |
|
46
|
|
|
"https://raw.githubusercontent.com/FortAwesome/Font-Awesome/v4.7.0/css/font-awesome.css", |
|
47
|
|
|
directory, |
|
48
|
|
|
"font-awesome.css", |
|
49
|
|
|
) |
|
50
|
|
|
_download( |
|
51
|
|
|
"https://github.com/FortAwesome/Font-Awesome/blob/v4.7.0/fonts/fontawesome-webfont.ttf?raw=true", |
|
52
|
|
|
directory, |
|
53
|
|
|
"fontawesome-webfont.ttf", |
|
54
|
|
|
) |
|
55
|
|
|
|
|
56
|
|
|
|
|
57
|
|
|
def _post_fontawesome_5x(): |
|
58
|
|
|
# fontawesome 5.x |
|
59
|
|
|
directory = _directory("fontawesome", "5.x") |
|
60
|
|
|
|
|
61
|
|
|
versions = _versions( |
|
62
|
|
|
"https://api.github.com/repos/FortAwesome/Font-Awesome/tags", |
|
63
|
|
|
"Unable to get the last version number of the Font-Awesome package on github\n", |
|
64
|
|
|
) |
|
65
|
|
|
|
|
66
|
|
|
latest = _latest("^5.", versions, "5.14.0") |
|
67
|
|
|
|
|
68
|
|
|
_download( |
|
69
|
|
|
"https://raw.githubusercontent.com/FortAwesome/Font-Awesome/" |
|
70
|
|
|
+ latest |
|
71
|
|
|
+ "/css/fontawesome.css", |
|
72
|
|
|
directory, |
|
73
|
|
|
"fontawesome.css", |
|
74
|
|
|
) |
|
75
|
|
|
for ttf in ["fa-brands-400", "fa-regular-400", "fa-solid-900"]: |
|
76
|
|
|
_download( |
|
77
|
|
|
"https://github.com/FortAwesome/Font-Awesome/blob/" |
|
78
|
|
|
+ latest |
|
79
|
|
|
+ "/webfonts/" |
|
80
|
|
|
+ ttf |
|
81
|
|
|
+ ".ttf?raw=true", |
|
82
|
|
|
directory, |
|
83
|
|
|
ttf + ".ttf", |
|
84
|
|
|
) |
|
85
|
|
|
|
|
86
|
|
|
|
|
87
|
|
|
def _post_glyphicons_33(): |
|
88
|
|
|
# glyphicons 3.3 |
|
89
|
|
|
directory = _directory("glyphicons", "3.3") |
|
90
|
|
|
|
|
91
|
|
|
_download( |
|
92
|
|
|
"https://github.com/twbs/bootstrap/raw/v3.3.7/dist/css/bootstrap.css", |
|
93
|
|
|
directory, |
|
94
|
|
|
"bootstrap.css", |
|
95
|
|
|
) |
|
96
|
|
|
|
|
97
|
|
|
_download( |
|
98
|
|
|
"https://github.com/twbs/bootstrap/blob/v3.3.7/dist/fonts/glyphicons-halflings-regular.ttf?raw=true", |
|
99
|
|
|
directory, |
|
100
|
|
|
"glyphicons-halflings-regular.ttf", |
|
101
|
|
|
) |
|
102
|
|
|
|
|
103
|
|
|
original = open(os.path.join(directory, "bootstrap.css"), "rt") |
|
104
|
|
|
modified = open(os.path.join(directory, "bootstrap-modified.css"), "w") |
|
105
|
|
|
index = 0 |
|
106
|
|
|
for line in original: |
|
107
|
|
|
if index >= 1067: |
|
108
|
|
|
break |
|
109
|
|
|
if index >= 280: |
|
110
|
|
|
modified.write(line) |
|
111
|
|
|
index = index + 1 |
|
112
|
|
|
original.close() |
|
113
|
|
|
modified.close() |
|
114
|
|
|
|
|
115
|
|
|
|
|
116
|
|
|
def _post_material_design_3x(): |
|
117
|
|
|
# material design 3.x |
|
118
|
|
|
directory = _directory("materialdesign", "3.x") |
|
119
|
|
|
|
|
120
|
|
|
versions = _versions( |
|
121
|
|
|
"https://api.github.com/repos/Templarian/MaterialDesign-Webfont/tags", |
|
122
|
|
|
"Unable to get the last version number of the MaterialDesign-Webfont package on github\n", |
|
123
|
|
|
) |
|
124
|
|
|
|
|
125
|
|
|
latest = _latest("^v3.", versions, "v5.9.55") |
|
126
|
|
|
|
|
127
|
|
|
_download( |
|
128
|
|
|
"https://github.com/Templarian/MaterialDesign-Webfont/blob/" |
|
129
|
|
|
+ latest |
|
130
|
|
|
+ "/css/materialdesignicons.css", |
|
131
|
|
|
directory, |
|
132
|
|
|
"materialdesignicons.css", |
|
133
|
|
|
) |
|
134
|
|
|
|
|
135
|
|
|
_download( |
|
136
|
|
|
"https://github.com/Templarian/MaterialDesign-Webfont/blob/" |
|
137
|
|
|
+ latest |
|
138
|
|
|
+ "/fonts/materialdesignicons-webfont.ttf?raw=true", |
|
139
|
|
|
directory, |
|
140
|
|
|
"materialdesignicons-webfont.ttf", |
|
141
|
|
|
) |
|
142
|
|
|
|
|
143
|
|
|
|
|
144
|
|
|
def _download(url, directory, filename): |
|
145
|
|
|
try: |
|
146
|
|
|
with urllib.request.urlopen(url) as response, open( |
|
147
|
|
|
os.path.join(directory, filename), "wb" |
|
148
|
|
|
) as out_file: |
|
149
|
|
|
shutil.copyfileobj(response, out_file) |
|
150
|
|
|
except urllib.error.HTTPError as exception: |
|
151
|
|
|
sys.stderr.write(str(exception)) |
|
152
|
|
|
|
|
153
|
|
|
|
|
154
|
|
|
def _latest(match, versions, latest): |
|
155
|
|
|
try: |
|
156
|
|
|
for version in versions: |
|
157
|
|
|
if re.match(match, version["name"]) and LooseVersion( |
|
158
|
|
|
version["name"] |
|
159
|
|
|
) > LooseVersion(latest): |
|
160
|
|
|
latest = version["name"] |
|
161
|
|
|
except TypeError: |
|
162
|
|
|
pass |
|
163
|
|
|
return latest |
|
164
|
|
|
|
|
165
|
|
|
|
|
166
|
|
|
def _directory(collection, icon_version): |
|
167
|
|
|
# pylint: disable=import-outside-toplevel |
|
168
|
|
|
import appdirs |
|
169
|
|
|
|
|
170
|
|
|
try: |
|
171
|
|
|
dirs = appdirs.AppDirs( |
|
172
|
|
|
os.path.join( |
|
173
|
|
|
"pandoc_latex_tip", |
|
174
|
|
|
get_distribution("pandoc_latex_tip").version, |
|
175
|
|
|
collection, |
|
176
|
|
|
icon_version, |
|
177
|
|
|
) |
|
178
|
|
|
) |
|
179
|
|
|
except pkg_resources.DistributionNotFound: |
|
180
|
|
|
dirs = appdirs.AppDirs( |
|
181
|
|
|
os.path.join( |
|
182
|
|
|
"pandoc_latex_tip", |
|
183
|
|
|
pkg_resources.require("pandoc_latex_tip")[0].version |
|
184
|
|
|
collection, |
|
185
|
|
|
icon_version, |
|
186
|
|
|
) |
|
187
|
|
|
) |
|
188
|
|
|
|
|
189
|
|
|
directory = dirs.user_data_dir |
|
190
|
|
|
if not os.path.exists(directory): |
|
191
|
|
|
os.makedirs(directory) |
|
192
|
|
|
return directory |
|
193
|
|
|
|
|
194
|
|
|
|
|
195
|
|
|
def _versions(url, message): |
|
196
|
|
|
# pylint: disable=import-outside-toplevel |
|
197
|
|
|
import requests |
|
198
|
|
|
|
|
199
|
|
|
try: |
|
200
|
|
|
return requests.get(url).json() |
|
201
|
|
|
except ValueError: |
|
202
|
|
|
sys.stderr.write(message) |
|
203
|
|
|
return [] |
|
204
|
|
|
|
|
205
|
|
|
|
|
206
|
|
|
class BuildPy(build_py): |
|
207
|
|
|
def run(self): |
|
208
|
|
|
super().run() |
|
209
|
|
|
self.execute(_post, (), msg="Running post build task") |
|
210
|
|
|
|
|
211
|
|
|
|
|
212
|
|
|
class BuildExt(build_ext): |
|
213
|
|
|
def run(self): |
|
214
|
|
|
super().run() |
|
215
|
|
|
self.execute(_post, (), msg="Running post build task") |
|
216
|
|
|
|
|
217
|
|
|
|
|
218
|
|
|
setup( |
|
219
|
|
|
cmdclass={"build_py": BuildPy, "build_ext": BuildExt}, |
|
220
|
|
|
name="pandoc-latex-tip", |
|
221
|
|
|
# Versions should comply with PEP440. For a discussion on single-sourcing |
|
222
|
|
|
# the version across setup.py and the project code, see |
|
223
|
|
|
# https://packaging.python.org/en/latest/single_source_version.html |
|
224
|
|
|
# The project's description |
|
225
|
|
|
description="A pandoc filter for adding tip in LaTeX", |
|
226
|
|
|
long_description=LONG_DESCRIPTION, |
|
227
|
|
|
long_description_content_type="text/markdown", |
|
228
|
|
|
# The project's main homepage. |
|
229
|
|
|
url="https://github.com/chdemko/pandoc-latex-tip", |
|
230
|
|
|
# The project's download page |
|
231
|
|
|
download_url="https://github.com/chdemko/pandoc-latex-tip/archive/develop.zip", |
|
232
|
|
|
# Author details |
|
233
|
|
|
author="Christophe Demko", |
|
234
|
|
|
author_email="[email protected]", |
|
235
|
|
|
# Maintainer details |
|
236
|
|
|
maintainer="Christophe Demko", |
|
237
|
|
|
maintainer_email="[email protected]", |
|
238
|
|
|
# Choose your license |
|
239
|
|
|
license="BSD-3-Clause", |
|
240
|
|
|
# See https://pypi.python.org/pypi?%3Aaction=list_classifiers |
|
241
|
|
|
classifiers=[ |
|
242
|
|
|
# How mature is this project? Common values are |
|
243
|
|
|
# 3 - Alpha |
|
244
|
|
|
# 4 - Beta |
|
245
|
|
|
# 5 - Production/Stable |
|
246
|
|
|
"Development Status :: 5 - Production/Stable", |
|
247
|
|
|
# Specify the OS |
|
248
|
|
|
"Operating System :: OS Independent", |
|
249
|
|
|
# Indicate who your project is intended for |
|
250
|
|
|
"Environment :: Console", |
|
251
|
|
|
"Intended Audience :: End Users/Desktop", |
|
252
|
|
|
"Intended Audience :: Developers", |
|
253
|
|
|
"Topic :: Software Development :: Build Tools", |
|
254
|
|
|
"Topic :: Software Development :: Documentation", |
|
255
|
|
|
"Topic :: Text Processing :: Filters", |
|
256
|
|
|
# Specify the Python versions you support here. In particular, ensure |
|
257
|
|
|
# that you indicate whether you support Python 2, Python 3 or both. |
|
258
|
|
|
"Programming Language :: Python :: 3.6", |
|
259
|
|
|
"Programming Language :: Python :: 3.7", |
|
260
|
|
|
"Programming Language :: Python :: 3.8", |
|
261
|
|
|
"Programming Language :: Python :: 3.9", |
|
262
|
|
|
], |
|
263
|
|
|
# What does your project relate to? |
|
264
|
|
|
keywords="pandoc filters latex tip Font-Awesome icon", |
|
265
|
|
|
# Alternatively, if you want to distribute just a my_module.py, uncomment |
|
266
|
|
|
# this: |
|
267
|
|
|
py_modules=["pandoc_latex_tip"], |
|
268
|
|
|
# To provide executable scripts, use entry points in preference to the |
|
269
|
|
|
# "scripts" keyword. Entry points provide cross-platform support and allow |
|
270
|
|
|
# pip to create the appropriate form of executable for the target platform. |
|
271
|
|
|
entry_points={"console_scripts": ["pandoc-latex-tip = pandoc_latex_tip:main"]}, |
|
272
|
|
|
# List run-time dependencies here. These will be installed by pip when |
|
273
|
|
|
# your project is installed. For an analysis of "install_requires" vs pip's |
|
274
|
|
|
# requirements files see: |
|
275
|
|
|
# https://packaging.python.org/en/latest/requirements.html |
|
276
|
|
|
install_requires=[ |
|
277
|
|
|
"panflute>=2.0", |
|
278
|
|
|
"icon_font_to_png>=0.4", |
|
279
|
|
|
"Pillow>=8.1", |
|
280
|
|
|
"appdirs>=1.4", |
|
281
|
|
|
"requests>=2", |
|
282
|
|
|
], |
|
283
|
|
|
# List additional groups of dependencies here (e.g. development |
|
284
|
|
|
# dependencies). You can install these using the following syntax, |
|
285
|
|
|
# for example: |
|
286
|
|
|
# $ pip install -e .[dev,test] |
|
287
|
|
|
extras_require={ |
|
288
|
|
|
"dev": ["check-manifest"], |
|
289
|
|
|
"test": [ |
|
290
|
|
|
"black", |
|
291
|
|
|
"tox", |
|
292
|
|
|
"pytest-runner", |
|
293
|
|
|
"coverage", |
|
294
|
|
|
"pylint", |
|
295
|
|
|
"Pygments", |
|
296
|
|
|
"radon", |
|
297
|
|
|
"mypy", |
|
298
|
|
|
"pytest-cov", |
|
299
|
|
|
], |
|
300
|
|
|
"docs": ["Sphinx>=3.5", "sphinx_rtd_theme>=0.5"] |
|
301
|
|
|
}, |
|
302
|
|
|
# packages=find_packages(), |
|
303
|
|
|
# include_package_data = True, |
|
304
|
|
|
setup_requires=["icon_font_to_png>=0.4", "appdirs>=1.4"], |
|
305
|
|
|
) |
|
306
|
|
|
|