diff options
author | Jauhien Piatlicki <jauhien@gentoo.org> | 2014-05-10 03:26:11 +0200 |
---|---|---|
committer | Jauhien Piatlicki <jauhien@gentoo.org> | 2014-05-10 03:26:11 +0200 |
commit | efbc4fd4e6d9246021da01469f871d99331b7f51 (patch) | |
tree | 333696e35aea0bca290609ad46fbf1901516bfe4 | |
parent | fix: remove rest of gs-elpa (diff) | |
download | g-sorcery-efbc4fd4e6d9246021da01469f871d99331b7f51.tar.gz g-sorcery-efbc4fd4e6d9246021da01469f871d99331b7f51.tar.bz2 g-sorcery-efbc4fd4e6d9246021da01469f871d99331b7f51.zip |
remove gs-ctan as Gentoo already has good support for CTAN packages
-rw-r--r-- | README.md | 4 | ||||
-rwxr-xr-x | bin/gs-ctan | 3 | ||||
-rw-r--r-- | docs/Makefile | 2 | ||||
-rw-r--r-- | docs/developer_instructions.html | 2 | ||||
-rw-r--r-- | docs/developer_instructions.rst | 2 | ||||
-rw-r--r-- | docs/g-sorcery.8 | 2 | ||||
-rw-r--r-- | docs/g-sorcery.8.rst | 2 | ||||
-rw-r--r-- | docs/g-sorcery.cfg.8 | 2 | ||||
-rw-r--r-- | docs/g-sorcery.cfg.8.rst | 2 | ||||
-rw-r--r-- | docs/gs-ctan.8 | 153 | ||||
-rw-r--r-- | docs/gs-ctan.8.rst | 130 | ||||
-rw-r--r-- | docs/gs-pypi.8 | 2 | ||||
-rw-r--r-- | docs/gs-pypi.8.rst | 2 | ||||
-rw-r--r-- | gs-ctan-overlays.xml | 14 | ||||
-rw-r--r-- | gs-ctan.json | 706 | ||||
-rw-r--r-- | gs_ctan/__init__.py | 2 | ||||
-rw-r--r-- | gs_ctan/backend.py | 36 | ||||
-rw-r--r-- | gs_ctan/ctan_db.py | 210 | ||||
-rw-r--r-- | gs_ctan/data/gs-ctan.eclass | 102 | ||||
-rw-r--r-- | gs_ctan/ebuild.py | 62 | ||||
-rw-r--r-- | setup.py | 11 |
21 files changed, 15 insertions, 1436 deletions
@@ -52,7 +52,7 @@ Add `jauhien` overlay: **layman -a jauhien**. Emerge g-sorcery: **emerge -va g-sorcery**. -Currently 3 backends are available: **gs-elpa**, **gs-pypi** and **gs-ctan**. +Currently 2 backends are available: **gs-elpa** and **gs-pypi**. Here is an example of using gs-elpa backend. @@ -127,6 +127,6 @@ Repositories you can use are gnu-elpa, marmalade and melpa. You can use them all in one overlay. Note, that if you call **generate-tree** command your overlay will be wiped and overlay tree for a given repository will be generated. Be careful! -See man pages of **gs-elpa**, **gs-pypi** and **gs-ctan** for further information. +See man pages of **gs-elpa** and **gs-pypi** for further information. If you want to develop a new backend see [developer's instructions](https://github.com/jauhien/g-sorcery/blob/master/docs/developer_instructions.rst). diff --git a/bin/gs-ctan b/bin/gs-ctan deleted file mode 100755 index 7b1612d..0000000 --- a/bin/gs-ctan +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -g-sorcery gs-ctan $@ diff --git a/docs/Makefile b/docs/Makefile index 8af5b2c..5c25523 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,7 +1,7 @@ HTML_SOURCES=developer_instructions HTML_DOCS=$(HTML_SOURCES:=.html) -MAN_SOURCES=g-sorcery g-sorcery.cfg gs-pypi gs-ctan +MAN_SOURCES=g-sorcery g-sorcery.cfg gs-pypi MANS=$(MAN_SOURCES:=.8) RST2HTML=rst2html.py diff --git a/docs/developer_instructions.html b/docs/developer_instructions.html index a9798cb..f4e89ab 100644 --- a/docs/developer_instructions.html +++ b/docs/developer_instructions.html @@ -943,7 +943,7 @@ that quacks like this class.</p> <p>Before doing it you should have defined classes you pass to it as parameters. They should be database generator, two ebuild generators, eclass and metadata generators.</p> <p>Also you should write an executable that calls g-sorcery and some configs.</p> -<p>To have better understanding you can look at gs-elpa, gs-ctan and gs-pypi backends available +<p>To have better understanding you can look at gs-elpa and gs-pypi backends available in g-sorcery repository. Also available tests could be usefull.</p> <p>Note that there is a tool for editing generated database named <strong>gs-db-tool</strong>.</p> </div> diff --git a/docs/developer_instructions.rst b/docs/developer_instructions.rst index b54adfa..de266b9 100644 --- a/docs/developer_instructions.rst +++ b/docs/developer_instructions.rst @@ -634,7 +634,7 @@ generator, two ebuild generators, eclass and metadata generators. Also you should write an executable that calls g-sorcery and some configs. -To have better understanding you can look at gs-elpa, gs-ctan and gs-pypi backends available +To have better understanding you can look at gs-elpa and gs-pypi backends available in g-sorcery repository. Also available tests could be usefull. Note that there is a tool for editing generated database named **gs-db-tool**. diff --git a/docs/g-sorcery.8 b/docs/g-sorcery.8 index 1122fde..066e35b 100644 --- a/docs/g-sorcery.8 +++ b/docs/g-sorcery.8 @@ -127,7 +127,7 @@ At the moment the only package mangler \fBg\-sorcery\fP supports is \fBportage\f .UNINDENT .SH SEE ALSO .sp -\fBg\-sorcery.cfg\fP(8), \fBgs\-elpa\fP(8), \fBgs\-pypi\fP(8), \fBgs\-ctan\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) +\fBg\-sorcery.cfg\fP(8), \fBgs\-elpa\fP(8), \fBgs\-pypi\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) .SH AUTHOR Written by Jauhien Piatlicki <piatlicki@gmail.com>. GSoC idea and mentorship by Rafael Martins. Lots of help and improvements diff --git a/docs/g-sorcery.8.rst b/docs/g-sorcery.8.rst index 121b571..9ea702f 100644 --- a/docs/g-sorcery.8.rst +++ b/docs/g-sorcery.8.rst @@ -112,4 +112,4 @@ NOTES SEE ALSO ======== -**g-sorcery.cfg**\(8), **gs-elpa**\(8), **gs-pypi**\(8), **gs-ctan**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) +**g-sorcery.cfg**\(8), **gs-elpa**\(8), **gs-pypi**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) diff --git a/docs/g-sorcery.cfg.8 b/docs/g-sorcery.cfg.8 index 0f11180..1643315 100644 --- a/docs/g-sorcery.cfg.8 +++ b/docs/g-sorcery.cfg.8 @@ -63,7 +63,7 @@ marmalade_packages = clojure\-mode clojurescript\-mode .UNINDENT .SH SEE ALSO .sp -\fBg\-sorcery\fP(8), \fBgs\-elpa\fP(8), \fBgs\-pypi\fP(8), \fBgs\-ctan\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) +\fBg\-sorcery\fP(8), \fBgs\-elpa\fP(8), \fBgs\-pypi\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) .SH AUTHOR Written by Jauhien Piatlicki <piatlicki@gmail.com>. GSoC idea and mentorship by Rafael Martins. Lots of help and improvements diff --git a/docs/g-sorcery.cfg.8.rst b/docs/g-sorcery.cfg.8.rst index 50a732c..7f9790f 100644 --- a/docs/g-sorcery.cfg.8.rst +++ b/docs/g-sorcery.cfg.8.rst @@ -56,4 +56,4 @@ EXAMPLE SEE ALSO ======== -**g-sorcery**\(8), **gs-elpa**\(8), **gs-pypi**\(8), **gs-ctan**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) +**g-sorcery**\(8), **gs-elpa**\(8), **gs-pypi**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) diff --git a/docs/gs-ctan.8 b/docs/gs-ctan.8 deleted file mode 100644 index 8c456be..0000000 --- a/docs/gs-ctan.8 +++ /dev/null @@ -1,153 +0,0 @@ -.\" Man page generated from reStructuredText. -. -.TH GS-CTAN 8 "2013-08-04" "0.1" "g-sorcery" -.SH NAME -gs-ctan \- manage overlays for CTAN repository -. -.nr rst2man-indent-level 0 -. -.de1 rstReportMargin -\\$1 \\n[an-margin] -level \\n[rst2man-indent-level] -level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] -- -\\n[rst2man-indent0] -\\n[rst2man-indent1] -\\n[rst2man-indent2] -.. -.de1 INDENT -.\" .rstReportMargin pre: -. RS \\$1 -. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] -. nr rst2man-indent-level +1 -.\" .rstReportMargin post: -.. -.de UNINDENT -. RE -.\" indent \\n[an-margin] -.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] -.nr rst2man-indent-level -1 -.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] -.in \\n[rst2man-indent\\n[rst2man-indent-level]]u -.. -.SH SYNOPSIS -.sp -\fBgs\-ctan\fP \fB\-o\fP \fIOVERLAY\fP [\fB\-r\fP \fIREPO\fP] \fBsync\fP -.sp -\fBgs\-ctan\fP \fB\-o\fP \fIOVERLAY\fP [\fB\-r\fP \fIREPO\fP] \fBlist\fP -.sp -\fBgs\-ctan\fP \fB\-o\fP \fIOVERLAY\fP [\fB\-r\fP \fIREPO\fP] \fBgenerate\fP \fIPACKAGE\fP -.sp -\fBgs\-ctan\fP \fB\-o\fP \fIOVERLAY\fP [\fB\-r\fP \fIREPO\fP] \fBinstall\fP \fIPACKAGE\fP -.sp -\fBgs\-ctan\fP \fB\-o\fP \fIOVERLAY\fP [\fB\-r\fP \fIREPO\fP] \fBgenerate\-tree\fP [\fB\-d\fP] -.SH DESCRIPTION -.sp -\fBgs\-ctan\fP is an ebuild generator for CTAN TEXLIVE repository. -.sp -There are two ways of using \fBgs\-ctan\fP: -.INDENT 0.0 -.INDENT 3.5 -.INDENT 0.0 -.IP \(bu 2 -use it with \fBlayman\fP -.sp -In this case all you need to do is install \fBlayman\-9999\fP and \fBg\-sorcery\fP. -Then you should just run \fIlayman \-L\fP as -root and find an overlay you want. Type of overlay will be -displayed as \fIg\-sorcery\fP. Then you add this overlay as -usual. It\(aqs all you need to do and it\(aqs the recommended way of -using \fBgs\-ctan\fP. -.IP \(bu 2 -use it as stand\-alone tool -.sp -In this case you should create an overlay (see \fBportage\fP documentation), sync it and populate -it with one or more ebuilds. Then ebuilds could be installed by emerge or by \fBgs\-ctan\fP tool. -.UNINDENT -.UNINDENT -.UNINDENT -.SH OPTIONS -.INDENT 0.0 -.TP -.B \fB\-\-overlay\fP \fIOVERLAY\fP, \fB\-o\fP \fIOVERLAY\fP -Overlay directory. This option is mandatory if there is no -\fBdefault_overlay\fP entry in a backend config. -.TP -.B \fB\-\-repository\fP \fIREPO\fP, \fB\-r\fP \fIREPO\fP -Repository name. This option is not mandatory. If present should be \fBctan\fP. -.UNINDENT -.SH COMMANDS -.INDENT 0.0 -.TP -.B \fBsync\fP -Synchronize a repository database. -.TP -.B \fBlist\fP -List packages available in a repository. -.TP -.B \fBgenerate\fP -Generate a given ebuild and all its dependencies. -.TP -.B \fBinstall\fP -Generate and install an ebuild using your package mangler. -.TP -.B \fBgenerate\-tree\fP -Generate entire overlay structure. Without option \fB\-d\fP after -this command sources are not fetched during generation and there -are no entries for them in Manifest files. -.UNINDENT -.SH FILES -.INDENT 0.0 -.TP -.B \fB/etc/g\-sorcery/gs\-ctan.json\fP -Backend config. -.TP -.B \fB/etc/layman/overlays/gs\-ctan\-overlays.xml\fP -List of available repositories. -.UNINDENT -.SH EXAMPLES -.INDENT 0.0 -.TP -.B Using gs\-ctan with layman -Execute -.sp -\fBlayman \-L\fP -.sp -If you see there a \fBctan\fP overlay then anything should work. -.sp -\fBlayman \-a ctan\fP -.sp -Emerge any package from it using \fBemerge\fP. -.TP -.B Generating user ebuilds in user overlay -Create new user overlay. Run -.sp -\fBgs\-ctan \-o\fP \fIOVERLAY_DIRECTORY\fP \fB\-r ctan\fP \fBsync\fP -.sp -List packages: -.sp -\fBgs\-ctan \-o\fP \fIOVERLAY_DIRECTORY\fP \fB\-r ctan\fP \fBlist\fP -.sp -Install any package you want: -.sp -\fBgs\-ctan \-o\fP \fIOVERLAY_DIRECTORY\fP \fB\-r ctan\fP \fBinstall\fP \fIPACKAGE\fP -.sp -Note, that if you call \fBgenerate\-tree\fP command your overlay -will be wiped and overlay tree for a given repository will be generated. Be careful! -.UNINDENT -.SH NOTES -.INDENT 0.0 -.IP 1. 3 -At the moment the only package mangler \fBgs\-ctan\fP supports is \fBportage\fP. -.UNINDENT -.SH SEE ALSO -.sp -\fBgs\-pypi\fP(8), \fBgs\-elpa\fP(8), \fBg\-sorcery.cfg\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) -.SH AUTHOR -Written by Jauhien Piatlicki <piatlicki@gmail.com>. GSoC idea -and mentorship by Rafael Martins. Lots of help and improvements -by Brian Dolbec. -.SH COPYRIGHT -Copyright (c) 2013 Jauhien Piatlicki, License: GPL-2 -.\" Generated by docutils manpage writer. -. diff --git a/docs/gs-ctan.8.rst b/docs/gs-ctan.8.rst deleted file mode 100644 index 348617e..0000000 --- a/docs/gs-ctan.8.rst +++ /dev/null @@ -1,130 +0,0 @@ -======= -gs-ctan -======= - ------------------------------------ -manage overlays for CTAN repository ------------------------------------ - -:Author: Written by Jauhien Piatlicki <piatlicki@gmail.com>. GSoC idea - and mentorship by Rafael Martins. Lots of help and improvements - by Brian Dolbec. -:Date: 2013-08-04 -:Copyright: Copyright (c) 2013 Jauhien Piatlicki, License: GPL-2 -:Version: 0.1 -:Manual section: 8 -:Manual group: g-sorcery - - -SYNOPSIS -======== - -**gs-ctan** **-o** *OVERLAY* [**-r** *REPO*] **sync** - -**gs-ctan** **-o** *OVERLAY* [**-r** *REPO*] **list** - -**gs-ctan** **-o** *OVERLAY* [**-r** *REPO*] **generate** *PACKAGE* - -**gs-ctan** **-o** *OVERLAY* [**-r** *REPO*] **install** *PACKAGE* - -**gs-ctan** **-o** *OVERLAY* [**-r** *REPO*] **generate-tree** [**-d**] - -DESCRIPTION -=========== - -**gs-ctan** is an ebuild generator for CTAN TEXLIVE repository. - -There are two ways of using **gs-ctan**: - - * use it with **layman** - - In this case all you need to do is install **layman-9999** and **g-sorcery**. - Then you should just run `layman -L` as - root and find an overlay you want. Type of overlay will be - displayed as *g-sorcery*. Then you add this overlay as - usual. It's all you need to do and it's the recommended way of - using **gs-ctan**. - - * use it as stand-alone tool - - In this case you should create an overlay (see **portage** documentation), sync it and populate - it with one or more ebuilds. Then ebuilds could be installed by emerge or by **gs-ctan** tool. - - -OPTIONS -======= - -**--overlay** *OVERLAY*, **-o** *OVERLAY* - Overlay directory. This option is mandatory if there is no - **default_overlay** entry in a backend config. - -**--repository** *REPO*, **-r** *REPO* - Repository name. This option is not mandatory. If present should be **ctan**. - -COMMANDS -======== - -**sync** - Synchronize a repository database. - -**list** - List packages available in a repository. - -**generate** - Generate a given ebuild and all its dependencies. - -**install** - Generate and install an ebuild using your package mangler. - -**generate-tree** - Generate entire overlay structure. Without option **-d** after - this command sources are not fetched during generation and there - are no entries for them in Manifest files. - -FILES -===== -**/etc/g-sorcery/gs-ctan.json** - Backend config. - -**/etc/layman/overlays/gs-ctan-overlays.xml** - List of available repositories. - -EXAMPLES -======== - -Using gs-ctan with layman - Execute - - **layman -L** - - If you see there a **ctan** overlay then anything should work. - - **layman -a ctan** - - Emerge any package from it using **emerge**. - -Generating user ebuilds in user overlay - Create new user overlay. Run - - **gs-ctan -o** *OVERLAY_DIRECTORY* **-r ctan** **sync** - - List packages: - - **gs-ctan -o** *OVERLAY_DIRECTORY* **-r ctan** **list** - - Install any package you want: - - **gs-ctan -o** *OVERLAY_DIRECTORY* **-r ctan** **install** *PACKAGE* - - Note, that if you call **generate-tree** command your overlay - will be wiped and overlay tree for a given repository will be generated. Be careful! - -NOTES -===== - -1. At the moment the only package mangler **gs-ctan** supports is **portage**. - -SEE ALSO -======== - -**gs-pypi**\(8), **gs-elpa**\(8), **g-sorcery.cfg**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) diff --git a/docs/gs-pypi.8 b/docs/gs-pypi.8 index 633de7d..7536605 100644 --- a/docs/gs-pypi.8 +++ b/docs/gs-pypi.8 @@ -142,7 +142,7 @@ At the moment the only package mangler \fBgs\-pypi\fP supports is \fBportage\fP. .UNINDENT .SH SEE ALSO .sp -\fBgs\-elpa\fP(8), \fBgs\-ctan\fP(8), \fBg\-sorcery.cfg\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) +\fBgs\-elpa\fP(8), \fBg\-sorcery.cfg\fP(8), \fBportage\fP(5), \fBemerge\fP(1), \fBlayman\fP(8) .SH AUTHOR Written by Jauhien Piatlicki <piatlicki@gmail.com>. GSoC idea and mentorship by Rafael Martins. Lots of help and improvements diff --git a/docs/gs-pypi.8.rst b/docs/gs-pypi.8.rst index d5c7c07..92031cc 100644 --- a/docs/gs-pypi.8.rst +++ b/docs/gs-pypi.8.rst @@ -127,4 +127,4 @@ NOTES SEE ALSO ======== -**gs-elpa**\(8), **gs-ctan**\(8), **g-sorcery.cfg**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) +**gs-elpa**\(8), **g-sorcery.cfg**\(8), **portage**\(5), **emerge**\(1), **layman**\(8) diff --git a/gs-ctan-overlays.xml b/gs-ctan-overlays.xml deleted file mode 100644 index 0faceb6..0000000 --- a/gs-ctan-overlays.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE repositories SYSTEM "/dtd/repositories.dtd"> -<repositories xmlns="" version="1.0"> -<repo quality="experimental" status="unofficial"> - <name>ctan</name> - <description>CTAN packages</description> - <homepage>http://www.ctan.org/</homepage> - <owner> - <email>piatlicki@gmail.com</email> - <name>Jauhien Piatlicki</name> - </owner> - <source type="g-sorcery">gs-ctan ctan</source> -</repo> -</repositories> diff --git a/gs-ctan.json b/gs-ctan.json deleted file mode 100644 index d25dbd1..0000000 --- a/gs-ctan.json +++ /dev/null @@ -1,706 +0,0 @@ -{ - "backend": "gs-ctan", - "package": "gs_ctan", - "repositories": { - "ctan": { - "repo_uri": "http://mirror.ctan.org/systems/texlive/tlnet/" - } - }, - "common_config": { - "licenses": { - "apache2": "Apache-2.0", - "artistic": "Artistic", - "Artistic2": "Artistic-2", - "gpl": "GPL-1", - "gpl2": "GPL-2", - "gpl3": "GPL-3", - "knuth": "TeX", - "lgpl": "LGPL-2", - "lgpl2.1": "LGPL-2.1", - "lppl": "LPPL-1.2", - "lppl1": "LPPL-1.2", - "lppl1.2": "LPPL-1.2", - "lppl1.3": "LPPL-1.3c" - }, - "exclude": [ - "avantgar", "bookman", "charter", "cm-super", - "cmextra", "courier", "euro", "euro-ce", "eurosym", "fpl", - "helvetic", "lm", "lm-math", "marvosym", "mathpazo", "ncntrsbk", - "palatino", "pxfonts", "rsfs", "symbol", "tex-gyre", "tex-gyre-math", - "times", "tipa", "txfonts", "utopia", "wasy", "wasysym", "zapfchan", "zapfding", - "epsf", "fontname", "genmisc", "kastrup", "multido", "path", - "tex-ps", "ulem", - "anysize", "booktabs", "caption", "cite", "cmap", "crop", "ctable", "ec", - "eso-pic", "euler", "extsizes", "fancybox", "fancyref", "fancyvrb", "float", - "fontspec", "fp", "index", "jknapltx", "koma-script", "l3kernel", - "l3packages", "l3experimental", "listings", "mdwtools", "memoir", "metalogo", - "mh", "microtype", "ms", "ntgclass", "parskip", "pdfpages", "powerdot", "psfrag", - "rcs", "rotating", "sansmath", "section", "seminar", "sepnum", "setspace", - "subfig", "textcase", "thumbpdf", "typehtml", "underscore", "url", "xkeyval", - "aichej", "amsrefs", "apacite", "apalike2", "beebe", "bibarts", "biber", - "bibexport", "bibhtml", "biblatex-apa", "biblatex-bwl", "biblatex-caspervector", - "biblatex-chem", "biblatex-chicago", "biblatex-dw", "biblatex-fiwi", "biblatex-gost", - "biblatex-historian", "biblatex-ieee", "biblatex-juradiss", "biblatex-luh-ipw", - "biblatex-mla", "biblatex-musuos", "biblatex-nature", "biblatex-nejm", - "biblatex-philosophy", "biblatex-phys", "biblatex-publist", "biblatex-science", - "biblatex-swiss-legal", "biblatex-trad", "biblist", "bibtopic", "bibtopicprefix", - "bibunits", "breakcites", "cell", "chbibref", "chicago", "chicago-annote", "chembst", - "chscite", "collref", "compactbib", "custom-bib", "din1505", "dk-bib", "doipubmed", - "fbs", "figbib", "footbib", "francais-bst", "geschichtsfrkl", "harvard", "harvmac", - "historische-zeitschrift", "ijqc", "inlinebib", "iopart-num", "jneurosci", "jurabib", - "ksfh_nat", "listbib", "logreq", "margbib", "multibib", "multibibliography", - "munich", "notes2bib", "oscola", "perception", "pnas2009", "rsc", "showtags", - "sort-by-letters", "splitbib", "uni-wtal-ger", "uni-wtal-lin", "urlbst", "usebib", - "vak", "xcite", - "Asana-Math", "adforn", "adfsymbols", "aecc", "allrunes", "antiqua", "antt", - "archaic", "arev", "ascii-font", "aspectratio", "astro", "augie", "auncial-new", - "aurical", "b1encoding", "barcodes", "baskervald", "bbding", "bbm", "bbm-macros", - "bbold", "bbold-type1", "belleek", "bera", "berenisadf", "bguq", "blacklettert1", - "boisik", "bookhands", "boondox", "braille", "brushscr", "cabin", "calligra", "calligra-type1", - "cantarell", "carolmin-ps", "ccicons", "cfr-lm", "cherokee", "cm-lgc", "cm-unicode", - "cmbright", "cmll", "cmpica", "cmtiup", "comfortaa", "concmath-fonts", "cookingsymbols", - "countriesofeurope", "courier-scaled", "cryst", "cyklop", "dancers", "dejavu", "dice", - "dictsym", "dingbat", "doublestroke", "dozenal", "droid", "duerer", "duerer-latex", - "dutchcal", "ean", "ebgaramond", "ecc", "eco", "eiad", "eiad-ltx", "electrum", "elvish", - "epigrafica", "epsdice", "esstix", "esvect", "eulervm", "euxm", "fdsymbol", "feyn", "fge", - "foekfont", "fonetika", "fontawesome", "fourier", "fouriernc", "frcursive", "genealogy", - "gentium", "gfsartemisia", "gfsbodoni", "gfscomplutum", "gfsdidot", "gfsneohellenic", - "gfssolomos", "gillcm", "gnu-freefont", "gothic", "greenpoint", "grotesq", "hacm", - "hands", "hfbright", "hfoldsty", "ifsym", "inconsolata", "initials", "ipaex-type1", "iwona", - "jablantile", "jamtimes", "junicode", "kixfont", "knuthotherfonts", "kpfonts", - "kurier", "lato", "lfb", "libertine", "librebaskerville", "libris", "linearA", "lxfonts", - "ly1", "mathabx", "mathabx-type1", "mathdesign", "mdputu", "mdsymbol", "mnsymbol", "newpx", - "newtx", "nkarta", "ocherokee", "ocr-b", "ocr-b-outline", "ogham", "oinuit", "oldlatin", - "oldstandard", "opensans", "orkhun", "pacioli", "paratype", "phaistos", "phonetic", "pigpen", - "poltawski", "prodint", "punk", "punk-latex", "punknova", "pxtxalfa", "quattrocento", "raleway", - "recycle", "romande", "rsfso", "sansmathaccent", "sansmathfonts", "sauter", "sauterfonts", - "schulschriften", "semaphor", "skull", "sourcecodepro", "sourcesanspro", "starfont", "staves", - "stix", "superiors", "tapir", "tengwarscript", "tfrupee", "tpslifonts", "trajan", "txfontsb", - "umtypewriter", "universa", "urwchancal", "venturisadf", "wsuipa", "xits", "yfonts", - "edmac", "eplain", "mltex", "psizzl", "startex", "texsis", - "abbr", "abstyles", "barr", "bitelist", "borceux", "c-pascal", "catcodes", "chronosys", - "colorsep", "dinat", "dirtree", "dowith", "eijkhout", "encxvlna", "epigram", "fenixpar", - "fltpoint", "fntproof", "gates", "ifetex", "iftex", "insbox", "langcode", "lecturer", "librarian", - "mathdots", "metatex", "midnight", "navigator", "ofs", "pdf-trans", "plainpkg", "schemata", - "shade", "systeme", "tabto-generic", "texapi", "upca", "xlop", "yax", - "2up", "ESIEEcv", "GS1", "HA-prosper", "Tabbing", "a0poster", - "a4wide", "a5comb", "abraces", "abstract", "achemso", "acro", - "acronym", "acroterm", "actuarialangle", "addlines", - "adjmulticol", "adjustbox", "adrconv", "advdate", "akktex", - "akletter", "alterqcm", "altfont", "amsaddr", "animate", - "anonchap", "answers", "anyfontsize", "appendix", - "appendixnumberbeamer", "apptools", "arcs", "arrayjobx", - "assignment", "attachfile", "autopdf", "authoraftertitle", - "authorindex", "autonum", "background", "bashful", "bchart", - "beamer2thesis", "beameraudience", "beamerposter", - "beamersubframe", "beamertheme-upenn-bc", "beamerthemejltree", - "beamerthemenirma", "begriff", "beton", "bez123", "bezos", - "bhcexam", "bigfoot", "bigints", "bizcard", "blindtext", - "blkarray", "block", "blowup", "boites", "bold-extra", - "bookest", "booklet", "boolexpr", "bophook", "boxedminipage", - "boxhandler", "bracketkey", "braket", "breakurl", "bullcntr", - "bussproofs", "bxdpx-beamer", "calcage", "calctab", - "calculator", "calrsfs", "cals", "calxxxx-yyyy", "cancel", - "canoniclayout", "capt-of", "captcont", "captdef", "cases", - "casyl", "catchfilebetweentags", "catechis", "catoptions", - "cbcoptic", "ccaption", "cclicenses", "cd", "cd-cover", - "cdpbundl", "cellspace", "censor", "changebar", "changelayout", - "changepage", "changes", "chappg", "chapterfolder", "chet", - "chextras", "chkfloat", "chletter", "chngcntr", "chronology", - "circ", "classics", "clefval", "cleveref", "clipboard", "clock", - "cmdstring", "cmdtrack", "cmsd", "codedoc", "codepage", - "collcell", "collectbox", "colordoc", "colorinfo", "colortab", - "colorwav", "colourchange", "combelow", "combine", "comma", - "commado", "comment", "concepts", "concprog", "constants", - "contour", "contracard", "cooking", "cool", "coollist", - "coolstr", "coolthms", "cooltooltips", "coordsys", - "copyrightbox", "coseoul", "counttexruns", "courseoutline", - "coursepaper", "coverpage", "cprotect", "crbox", - "crossreference", "csquotes", "csvsimple", "csvtools", - "cuisine", "currfile", "cutwin", "cv", "cweb-latex", "dashbox", - "dashrule", "dashundergaps", "datatool", "dateiliste", - "datenumber", "datetime", "dblfloatfix", "decimal", "decorule", - "delim", "delimtxt", "diagbox", "diagnose", "dialogl", - "dichokey", "dinbrief", "directory", "dirtytalk", "dlfltxb", - "dnaseq", "docmfp", "docmute", "documentation", "doi", - "dotarrow", "dotseqn", "download", "dox", "dpfloat", - "dprogress", "drac", "draftcopy", "draftwatermark", "dtk", - "dtxgallery", "dvdcoll", "dynblocks", "easy", "easy-todo", - "easyfig", "easylist", "ean13isbn", "ebezier", "ecclesiastic", - "ecv", "ed", "edmargin", "eemeir", "egplot", "ellipsis", - "elmath", "elpres", "emarks", "embrac", "emptypage", - "emulateapj", "endfloat", "endheads", "endnotes", "engpron", - "engrec", "enotez", "enumitem", "enumitem-zref", "envbig", - "environ", "epigraph", "epiolmec", "eqell", "eqlist", "eqname", - "eqparbox", "errata", "esami", "esdiff", "esint", "esint-type1", - "etaremune", "etextools", "etoc", "etoolbox", "eukdate", - "everyhook", "everypage", "exam", "examdesign", "examplep", - "exceltex", "excludeonly", "exercise", "exp-testopt", - "expdlist", "export", "exsheets", "exsol", "extract", - "facsimile", "factura", "fancynum", "fancypar", "fancytabs", - "fancytooltips", "figsize", "filecontents", "filedate", - "filehook", "fileinfo", "filemod", "fink", "finstrut", - "fixfoot", "fixme", "fixmetodonotes", "fjodor", "flabels", - "flacards", "flagderiv", "flashcards", "flashmovie", "flipbook", - "flippdf", "floatflt", "floatrow", "flowfram", "fmp", - "fmtcount", "fn2end", "fnbreak", "fncychap", "fncylab", - "fnpara", "fnpct", "fnumprint", "foilhtml", "fontaxes", - "fonttable", "footmisc", "footnotebackref", "footnoterange", - "footnpag", "forarray", "foreign", "forloop", "formlett", - "formular", "fragments", "frame", "framed", "frankenstein", - "frege", "ftcap", "ftnxtra", "fullblck", "fullwidth", - "fundus-calligra", "fundus-cyr", "fundus-sueterlin", "fwlw", - "gauss", "gcard", "gcite", "genmpage", "getfiledate", "ginpenc", - "gitinfo", "gloss", "gmdoc", "gmdoc-enhance", "gmeometric", - "gmiflink", "gmutils", "gmverb", "graphicx-psmin", "grfpaste", - "grid", "gridset", "guitlogo", "hanging", "hardwrap", - "harnon-cv", "harpoon", "hc", "he-she", "hhtensor", "histogr", - "hitec", "hletter", "hpsdiss", "hrefhide", "hvindex", - "hypdvips", "hyper", "hypernat", "hyperref-docsrc", "hyperxmp", - "hyphenat", "idxlayout", "ifmslide", "ifmtarg", "ifnextok", - "ifoddpage", "ifplatform", "ifthenx", "iitem", "image-gallery", - "imakeidx", "import", "incgraph", "inlinedef", "inputtrc", - "interactiveworkbook", "interfaces", "inversepath", "invoice", - "iso", "iso10303", "isodate", "isonums", "isodoc", "isorot", - "isotope", "issuulinks", "iwhdp", "jlabels", "jvlisting", - "kantlipsum", "kerntest", "keycommand", "keyreader", - "keystroke", "keyval2e", "kix", "koma-moderncvclassic", - "koma-script-sfs", "ktv-texdata", "labbook", "labelcas", - "labels", "lastpage", "latex-tds", "layouts", "lazylist", "lcd", - "lcg", "leading", "leftidx", "lengthconvert", "lettre", - "lettrine", "lewis", "lhelp", "libgreek", "limap", "linegoal", - "lipsum", "lisp-on-tex", "listing", "listofsymbols", - "listliketab", "lkproof", "lmake", "locality", "localloc", - "logbox", "logical-markup-utils", "logpap", "longnamefilelist", - "loops", "lsc", "lstaddons", "ltablex", "ltabptch", "ltxdockit", - "ltxindex", "ltxkeys", "ltxnew", "ltxtools", "magaz", "mailing", - "mailmerge", "makebarcode", "makebox", "makecell", "makecirc", - "makecmds", "makedtx", "makeglos", "mandi", "manfnt", - "manuscript", "marginfix", "marginnote", "mathalfa", - "mathastext", "mathexam", "maybemath", "mbenotes", "mcaption", - "mceinleger", "mcite", "mciteplus", "mdframed", "media9", - "meetingmins", "memexsupp", "memory", "menu", "menukeys", - "method", "metre", "mftinc", "midpage", "minibox", "minifp", - "minipage-marginpar", "minitoc", "minted", "minutes", "misc209", - "mla-paper", "mlist", "mmap", "mnotes", "moderncv", - "moderntimeline", "modref", "modroman", "monofill", "moreenum", - "morefloats", "morehype", "moresize", "moreverb", "morewrites", - "movie15", "mparhack", "msc", "msg", "mslapa", "mtgreek", - "multenum", "multibbl", "multicap", "multienv", "multiexpand", - "multirow", "mversion", "mwe", "mycv", "mylatexformat", "nag", - "nameauth", "namespc", "ncclatex", "ncctools", "needspace", - "nestquot", "newcommand", "newenviron", "newfile", "newlfm", - "newspaper", "newunicodechar", "newvbtm", "newverbs", - "nextpage", "nfssext-cfr", "nicefilelist", "niceframe", - "nicetext", "nlctdoc", "noconflict", "noitcrul", "nolbreaks", - "nomencl", "nomentbl", "nonfloat", "nonumonpart", "nopageno", - "notes", "notoccite", "nowidow", "ntheorem", "numberedblock", - "numname", "numprint", "ocg-p", "ocgx", "ocr-latex", "octavo", - "oldstyle", "onlyamsmath", "opcit", "optional", "outline", - "outliner", "outlines", "overpic", "pagecolor", "pagecont", - "pagenote", "pagerange", "pageslts", "paper", "papercdcase", - "papermas", "papertex", "paracol", "paralist", "paresse", - "parnotes", "parselines", "patch", "patchcmd", "pauldoc", - "pawpict", "pbox", "pbsheet", "pdf14", "pdfcomment", "pdfcprot", - "pdfmarginpar", "pdfscreen", "pdfslide", "pdfsync", "pdfwin", - "pdfx", "pecha", "perltex", "permute", "petiteannonce", - "philex", "photo", "piff", "pittetd", "placeins", "plates", - "plantslabels", "plweb", "polynom", "polynomial", "polytable", - "postcards", "poster-mac", "ppr-prv", "preprint", "prettyref", - "preview", "printlen", "probsoln", "program", "progress", - "progressbar", "properties", "prosper", "protex", "protocol", - "psfragx", "pst-pdf", "pstool", "pxgreeks", "python", "qcm", - "quoting", "qstest", "qsymbols", "quotchap", "quotmark", - "ran_toks", "randtext", "rccol", "rcs-multi", "rcsinfo", - "readarray", "realboxes", "recipe", "recipecard", "rectopma", - "refcheck", "refman", "refstyle", "regcount", "regexpatch", - "register", "regstats", "relenc", "relsize", "repeatindex", - "rjlparshap", "rlepsf", "rmpage", "robustcommand", - "robustindex", "romanbar", "romanneg", "romannum", "rotfloat", - "rotpages", "roundbox", "rterface", "rtkinenc", "rvwrite", - "sauerj", "savefnmark", "savesym", "savetrees", "scale", - "scalebar", "scalerel", "sdrt", "secdot", "sectionbox", - "sectsty", "selectp", "semantic", "semioneside", "sepfootnotes", - "seqsplit", "sf298", "sffms", "sfmath", "shadow", "shadowtext", - "shadethm", "shapepar", "shipunov", "shorttoc", "show2e", - "showcharinbox", "showdim", "showexpl", "showlabels", "sidecap", - "sidenotes", "silence", "simplecd", "simplecv", "simplewick", - "sitem", "skb", "skdoc", "skeycommand", "skeyval", "skrapport", - "slantsc", "smalltableof", "smartref", "snapshot", "snotez", - "soul", "spanglish", "sparklines", "sphack", "spreadtab", - "spverbatim", "splitindex", "spot", "spotcolor", "srbook-mem", - "srcltx", "sseq", "stack", "stackengine", "standalone", - "statistik", "stdclsdv", "stdpage", "stex", "storebox", - "storecmd", "stringstrings", "sttools", "stubs", "subdepth", - "subeqn", "subeqnarray", "subfigmat", "subfigure", "subfiles", - "subfloat", "substitutefont", "substr", "supertabular", "svg", - "svgcolor", "svn", "svn-multi", "svn-prov", "syntax", - "syntrace", "synttree", "tabfigures", "tableaux", - "tablefootnote", "tableof", "tablists", "tabls", "tabto-ltx", - "tabu", "tabularborder", "tabularcalc", "tabularew", "tabulary", - "tagging", "talk", "tamefloats", "tcldoc", "tcolorbox", - "tdclock", "technics", "ted", "termcal", "termlist", - "tex-label", "texlogos", "texmate", "texments", "texpower", - "texshade", "textfit", "textgreek", "textmerg", "textpos", - "theoremref", "threadcol", "threeparttable", "threeparttablex", - "thinsp", "thmtools", "thumb", "thumbs", "thumby", "ticket", - "titlecaps", "titlefoot", "titlepic", "titleref", "titlesec", - "titling", "tocbibind", "tocloft", "tocvsec2", "todo", - "todonotes", "tokenizer", "toolbox", "topfloat", "totcount", - "totpages", "trfsigns", "trimspaces", "trsym", "trivfloat", - "truncate", "tucv", "turnthepage", "twoinone", "twoup", - "txgreeks", "type1cm", "typeface", "typogrid", "ucs", - "uebungsblatt", "umoline", "underlin", "underoverlap", - "undolabl", "units", "upmethodology", "upquote", "uri", - "ushort", "uwmslide", "varindex", "varsfromjobname", "varwidth", - "vdmlisting", "verbasef", "verbatimbox", "verbatimcopy", - "verbdef", "verbments", "version", "versions", "vertbars", - "vhistory", "vmargin", "volumes", "vpe", "vruler", "vwcol", - "wallpaper", "warning", "warpcol", "was", "widetable", - "williams", "wordlike", "wrapfig", "xargs", "xbmc", "xcomment", - "xhfill", "xtab", "xdoc", "xfor", "xifthen", "xint", "xmpincl", - "xnewcommand", "xoptarg", "xpatch", "xpeek", "xpunctuate", - "xstring", "xwatermark", "xytree", "yafoot", "yagusylo", "ydoc", - "yplan", "zed-csp", "ziffer", "zwgetfdate", "zwpagelayout", - "12many", "amstex", "backnaur", "binomexp", "boldtensors", - "bosisio", "bropd", "ccfonts", "commath", "concmath", - "concrete", "conteq", "eqnarray", "extarrows", "extpfeil", - "faktor", "interval", "ionumbers", "isomath", "mathcomp", - "mattens", "mhequ", "multiobjective", "nath", "ot-tableau", - "oubraces", "proba", "rec-thy", "shuffle", "skmath", "statex", - "statex2", "stmaryrd", "subsupscripts", "susy", "syllogism", - "synproof", "tablor", "tensor", "tex-ewd", "thmbox", - "turnstile", "unicode-math", "venn", "yhmath", "ytableau", - "figflow", "fixpdfmag", "font-change", "fontch", "getoptk", - "graphics-pln", "hyplain", "js-misc", "mkpattern", "newsletr", - "pitex", "placeins-plain", "plipsum", "plnfss", "plstmary", - "present", "resumemac", "texinfo", "timetable", "treetex", - "varisize", - "aastex", "chktex", "curve", "envlab", "g-brief", "isotope", "latexmk", "minted", "", - "polytable", "rcsinfo", "tex4ht", "xmltex", "abntex", "circuit_macros", "detex", "europecv", - "glossaries", "ivritex", "lazylist", "natbib", "ppower4", "revtex", "texamator", "xymtex", - "bera", "cjk-latex", "dot2tex", "feynmf", "harvard", "latex-beamer", "leaflet", "newlfm", - "prosper", "rubber", "texmfind", "biblatex", "cpp2latex", "dot2texi", "flabels", "herm-pic", - "latex-calendar", "lgrind", "notoccite", "pscyr", "serienbrief", "texpower", "bibtex2html", - "crosstex", "dvi2gr", "floatflt", "hevea", "latex-unicode", "luatex", "oesch", "pstplus", - "sketch", "tipa", "bibtexu", "csindex", "dvi2tty", "foiltex", "hlatex", "latex2html", - "pdfannotextractor", "qtexengine", "slatex", "translator", "catdvi", - "culmus-latex", "dvipost", "frakturx", "html2latex", "latex2rtf", "metapost", "pdftex", - "quotchap", "style-check", "tth", "cdcover", "currvita", "ellipsis", "fundus", "hyphen_show", - "latexdiff", "mh", "pgf", "rail", "svninfo", "xcolor", - "amsfonts", "bibtex", "cm", "dvipdfmx-def", "enctex", "etex", - "etex-pkg", "glyphlist", "hyph-utf8", "ifluatex", "ifxetex", - "lua-alt-getopt", "luatex", "makeindex", "metafont", "mflogo", - "mfware", "misc", "pdftex", "plain", - "context", "jmn", - "accfonts", "afm2pl", "dosepsbin", "epstopdf", "fontware", - "lcdftypetools", "ps2pkm", "pstools", "psutils", "dvipsconfig", - "fontinst", "fontools", "mf2pt1", "t1utils", - "bartel-chess-fonts", "chess", "chess-problem-diagrams", - "chessboard", "chessfss", "crossword", "crosswrd", "egameps", - "gamebook", "go", "hanoi", "hexgame", "horoscop", "logicpuzzle", - "othello", "othelloboard", "psgo", "reverxii", "schwalbe-chess", - "sgame", "skak", "skaknew", "sudoku", "sudokubundle", "xq", - "xskak", "xmlplay", - "alnumsec", "arydshln", "bibleref", "bibleref-lds", - "bibleref-mouth", "bibleref-parse", "covington", "dramatist", - "dvgloss", "ecltree", "edfnotes", "ednotes", "eledform", - "eledmac", "gb4e", "gmverse", "jura", "juraabbrev", "juramisc", - "jurarsp", "ledmac", "leipzig", "lexikon", "lineno", "linguex", - "liturg", "parallel", "parrun", "plari", "play", "poemscol", - "poetrytex", "qobitree", "qtree", "rrgtrees", "rtklage", - "screenplay", "sides", "stage", "textglos", "tree-dvips", - "verse", "xyling", - "SIstyle", "SIunits", "alg", "algorithm2e", "algorithmicx", - "algorithms", "biocon", "bohr", "bpchem", "bytefield", - "chemarrow", "chemcompounds", "chemcono", "chemexec", - "chemmacros", "chemnum", "chemstyle", "clrscode", "complexity", - "computational-complexity", "digiconfigs", "drawstack", - "dyntree", "eltex", "endiagram", "engtlc", "fouridx", "functan", - "galois", "gastex", "gene-logic", "gu", "hep", "hepnames", - "hepparticles", "hepthesis", "hepunits", "karnaugh", "mhchem", - "miller", "mychemistry", "nuc", "objectz", "physics", "physymb", - "pseudocode", "sasnrdisplay", "sciposter", "sfg", "siunitx", - "steinmetz", "struktex", "substances", "t-angles", "textopo", - "ulqda", "unitsdef", "youngtab", - "checkcites", "chickenize", "enigma", "interpreter", - "lua-check-hyphen", "lua-visual-debug", "lua2dox", - "luabibentry", "luabidi", "luacode", "luaindex", "luainputenc", - "luaintro", "lualatex-doc", "lualatex-math", "lualibs", - "luamplib", "luaotfload", "luasseq", "luatexbase", "luatexko", - "luatextra", "luaxml", "odsfile", "selnolig", "showhyphens", - "spelling", - "automata", "bbcard", "blockdraw_mp", "bpolynomial", - "cmarrows", "drv", "dviincl", "emp", "epsincl", "expressg", - "exteps", "featpost", "feynmp-auto", "garrigues", "gmp", - "hatching", "latexmp", "metago", "metaobj", "metaplot", - "metapost", "metauml", "mfpic", "mfpic4ode", "mp3d", - "mpcolornames", "mpattern", "mpgraphics", "piechartmp", "roex", - "slideshow", "splines", "suanpan", "textpath", "threeddice", - "abc", "figbas", "gchords", "gtrcrd", "guitar", "harmony", - "m-tx", "musixguit", "musixtex", "musixtex-fonts", "pmx", - "songbook", "songs", - "aleph", "antomega", "lambda", "mxedruli", "omega", "omegaware", "otibet", - "asyfig", "autoarea", "bardiag", "bloques", "bodegraph", - "bondgraph", "braids", "bxeepic", "cachepic", "chemfig", - "combinedgraphics", "circuitikz", "curve", "curve2e", "curves", - "dcpic", "diagmac2", "doc-pictex", "dottex", "", "dratex", - "drs", "duotenzor", "eepic", "", "epspdfconversion", "esk", - "fast-diagram", "fig4latex", "flowchart", "forest", "gincltex", - "gnuplottex", "gradientframe", "grafcet", "here", "hf-tikz", - "hobby", "hvfloat", "knitting", "knittingpattern", "lapdf", - "lpic", "makeshape", "mathspic", "miniplot", "modiagram", - "numericplots", "pb-diagram", "petri-nets", "", "pgf-blur", - "pgf-soroban", "pgf-umlsd", "pgfgantt", "pgfkeyx", "pgfmolbio", - "pgfopts", "pgfplots", "piano", "picinpar", "pict2e", "pictex", - "pictex2", "pinlabel", "pmgraph", "prerex", "productbox", - "pxpgfmark", "randbild", "randomwalk", "reotex", "rviewport", - "sa-tikz", "schemabloc", "setdeck", "smartdiagram", "spath3", - "swimgraf", "texdraw", "tikz-3dplot", "tikz-bayesnet", - "tikz-cd", "tikz-dependency", "tikz-inet", "tikz-qtree", - "tikz-timing", "tikzinclude", "tikzmark", "tikzorbital", - "tikzpagenodes", "tikzpfeile", "tikzposter", "tikzscale", - "tikzsymbols", "tqft", "tkz-base", "tkz-berge", "tkz-doc", - "tkz-euclide", "tkz-fct", "tkz-graph", "tkz-kiviat", - "tkz-linknodes", "tkz-orm", "tkz-tab", "tsemlines", - "tufte-latex", "venndiagram", "xpicture", "xypic", - "auto-pst-pdf", "bclogo", "makeplot", "pdftricks", - "pedigree-perl", "psbao", "pst-2dplot", "pst-3d", "pst-3dplot", - "pst-abspos", "pst-am", "pst-asr", "pst-bar", "pst-barcode", - "pst-bezier", "pst-blur", "pst-bspline", "pst-calendar", - "pst-circ", "pst-coil", "pst-cox", "pst-dbicons", - "pst-diffraction", "pst-electricfield", "pst-eps", "pst-eucl", - "pst-exa", "pst-fill", "pst-fit", "pst-fr3d", "pst-fractal", - "pst-fun", "pst-func", "pst-gantt", "pst-geo", "pst-ghsb", - "pst-gr3d", "pst-grad", "pst-graphicx", "pst-infixplot", - "pst-jtree", "pst-knot", "pst-labo", "pst-layout", "pst-lens", - "pst-light3d", "pst-magneticfield", "pst-math", "pst-mirror", - "pst-node", "pst-ob3d", "pst-ode", "pst-optexp", "pst-optic", - "pst-osci", "pst-pad", "pst-pdgr", "pst-platon", "pst-plot", - "pst-poly", "pst-pulley", "pst-qtree", "pst-rubans", - "pst-sigsys", "pst-slpe", "pst-solarsystem", "pst-spectra", - "pst-solides3d", "pst-soroban", "pst-stru", "pst-support", - "pst-text", "pst-thick", "pst-tools", "pst-tree", "pst-tvz", - "pst-uml", "pst-vectorian", "pst-vowel", "pst-vue3d", "pst2pdf", - "pstricks", "pstricks-add", "pstricks_calcnotes", "uml", - "vaucanson-g", "vocaltract", - "IEEEconf", "IEEEtran", "aastex", "abntex2", "acmconf", - "active-conf", "adfathesis", "afthesis", "aguplus", "aiaa", - "ametsoc", "anufinalexam", "aomart", "apa", "apa6", "apa6e", - "arsclassica", "articleingud", "asaetr", "ascelike", - "beamer-FUBerlin", "bgteubner", "cascadilla", "chem-journal", - "classicthesis", "cmpj", "confproc", "ebook", "ebsthesis", - "ejpecp", "elbioimp", "elsarticle", "elteikthesis", "erdc", - "estcpmm", "fbithesis", "fcltxdoc", "gaceta", "gatech-thesis", - "har2nat", "hobete", "icsv", "ieeepes", "ijmart", "imac", - "imtekda", "jmlr", "jpsj", "kdgdocs", "kluwer", "lps", "matc3", - "matc3mem", "mentis", "msu-thesis", "musuos", "muthesis", - "nature", "nddiss", "nih", "nostarch", "nrc", "onrannual", - "opteng", "philosophersimprint", "pkuthss", "powerdot-FUBerlin", - "pracjourn", "procIAGssymp", "proposal", "ptptex", "psu-thesis", - "resphilosophica", "resumecls", "revtex", "revtex4", - "ryethesis", "sageep", "sapthesis", "scrjrnl", "seuthesis", - "soton", "spie", "stellenbosch", "suftesi", "sugconf", - "tabriz-thesis", "texilikechaps", "texilikecover", - "thesis-titlepage-fhac", "thuthesis", "toptesi", "tugboat", - "tugboat-plain", "tui", "uaclasses", "uadocs", "uafthesis", - "ucdavisthesis", "ucthesis", "uestcthesis", "uiucredborder", - "uiucthesis", "ulthese", "umthesis", "umich-thesis", - "unamthesis", "unswcover", "ut-thesis", "uothesis", "uowthesis", - "uspatent", "uwthesis", "vancouver", "xcookybooky", - "york-thesis", "texinfo", - "arabxetex", "euenc", "fixlatvian", "fontbook", "fontwrap", - "mathspec", "philokalia", "polyglossia", "realscripts", - "unisugar", "xecjk", "xecolor", "xecyr", "xeindex", "xepersian", - "xesearch", "xetex", "xetex-def", "xetex-itrans", - "xetex-pstricks", "xetexconfig", "xetexfontinfo", "xltxtra", - "xunicode", - "ethiop", "ethiop-t1", "fc", "hyphen-ethiopic", - "amiri", "arabi", "arabtex", "bidi", "hyphen-arabic", - "hyphen-farsi", "persian-bib", "persian-modern", - "adobemapping", "arphic", "c90", "cjkpunct", "cns", "ctex", - "dnp", "fonts-tlwg", "garuda-c90", "hyphen-chinese", "ipaex", - "japanese", "japanese-otf", "japanese-otf-uptex", "jfontmaps", - "jsclasses", "luatexja", "norasi-c90", "ptex", "thailatex", - "uhc", "uptex", "wadalab", "xpinyin", "zhmetrics", "zhnumber", - "zhspacing", - "hrlatex", "hyphen-croatian", "cmcyr", "cyrillic", - "cyrillic-bin", "cyrplain", "disser", "eskd", "eskdx", "gost", - "lcyw", "lh", "lhcyr", "ruhyphen", "russ", "t2", "ukrhyph", - "hyphen-bulgarian", "hyphen-russian", "hyphen-ukrainian", "cs", - "csbulletin", "cslatex", "csplain", "hyphen-czech", - "hyphen-slovak", "hyphen-danish", "finbib", "aeguill", - "basque-book", "basque-date", "bib-fr", "bibleref-french", - "booktabs-fr", "droit-fr", "facture", "frenchle", "frletter", - "impnattypo", "mafr", "tabvar", "tdsfrmath", "variations", - "bibleref-german", "dehyph-exptl", "dhua", "booktabs-de", - "csquotes-de", "etoolbox-de", "geometry-de", "german", - "germbib", "germkorr", "hausarbeit-jura", "microtype-de", - "r_und_s", "tipa-de", "umlaute", "betababel", "bgreek", - "cbfonts", "gfsbaskerville", "gfsporson", "greek-inputenc", - "greekdates", "greektex", "grverb", "ibycus-babel", "ibygrk", - "kerkis", "levy", "lgreek", "lgrx", "mkgrkindex", "teubner", - "xgreek", "yannisgr", "cjhebrew", "magyar", "bangtex", - "bengali", "burmese", "devnag", "ebong", "hyphen-indic", - "hyphen-sanskrit", "malayalam", "sanskrit", "velthuis", "wnri", - "wnri-latex", "xetex-devanagari", "codicefiscaleitaliano", - "fixltxhyph", "hyphen-italian", "frontespizio", "itnumpar", - "layaureo", "lithuanian", "montex", "mongolian-babel", "cc-pl", - "gustlib", "gustprog", "mex", "mwcls", "pl", "polski", - "przechlewski-book", "qpxqtx", "tap", "utf8mex", "ordinalpt", - "swebib", "ctib", "otibet", "turkmen", "vntex", - "lshort-persian", "lshort-bulgarian", "pst-eucl-translation-bg", - "asymptote-faq-zh-cn", "asymptote-by-example-zh-cn", - "asymptote-manual-zh-cn", "ctex-faq", "latex-notes-zh-cn", - "lshort-chinese", "texlive-zh-cn", "lshort-czech", - "lshort-slovak", "texlive-cz", "lshort-dutch", "FAQ-en", - "MemoirChapStyles", "Type1fonts", "amslatex-primer", - "around-the-bend", "ascii-chart", "components-of-TeX", - "comprehensive", "dtxtut", "first-latex-doc", "gentle", - "guide-to-latex", "happy4th", "impatient", "intro-scientific", - "knuth", "l2tabu-english", "latex-course", "latex-doc-ptr", - "latex-graphics-companion", "latex-veryshortguide", - "latex-web-companion", "latex2e-help-texinfo", "latex4wp", - "latexcheat", "latexfileinfo-pkgs", "lshort-english", - "macros2e", "math-e", "mathmode", "memdesign", - "metafont-beginners", "metapost-examples", "mil3", - "patgen2-tutorial", "pictexsum", "plain-doc", - "pstricks-examples-en", "pstricks-tutorial", "simplified-latex", - "svg-inkscape", "tabulars-e", "tamethebeast", "tds", - "tex-font-errors-cheatsheet", "tex-overview", "tex-refs", - "texbytopic", "titlepages", "tlc2", "visualfaq", "webguide", - "xetexref", "lshort-finnish", "apprends-latex", "epslatex-fr", - "impatient-fr", "l2tabu-french", "lshort-french", "texlive-fr", - "translation-array-fr", "translation-dcolumn-fr", - "translation-natbib-fr", "translation-tabbing-fr", - "einfuehrung", "fifinddo-info", "kopka", "l2picfaq", "l2tabu", - "latex-bib-ex", "latex-referenz", "latex-tabellen", - "lshort-german", "presentations", "pstricks-examples", - "templates-fenn", "templates-sommer", "texlive-de", - "translation-arsclassica-de", "translation-biblatex-de", - "translation-chemsym-de", "translation-ecv-de", - "translation-enumitem-de", "translation-europecv-de", - "translation-filecontents-de", "translation-moreverb-de", - "voss-de", "amsldoc-it", "amsmath-it", "amsthdoc-it", - "fancyhdr-it", "l2tabu-italian", "latex4wp-it", - "lshort-italian", "psfrag-italian", "texlive-it", - "lshort-japanese", "lshort-korean", "lshort-mongol", - "lshort-polish", "beamer-tut-pt", "cursolatex", - "latexcheat-ptbr", "lshort-portuguese", "xypic-tut-pt", - "lshort-russian", "mpman-ru", "texlive-ru", "texlive-sr", - "lshort-slovenian", "es-tex-faq", "l2tabu-spanish", - "latex2e-help-texinfo-spanish", "latexcheat-esmx", - "lshort-spanish", "lshort-thai", "lshort-turkish", "lshort-ukr", - "amsldoc-vn", "lshort-vietnamese", "ntheorem-vn", - "babel-albanian", "babel-breton", "babel-croatian", "babel-danish", - "babel-dutch", "babel-estonian", "babel-finnish", "babel-friulan", - "babel-hungarian", "babel-icelandic", "babel-irish", "babel-kurmanji", - "babel-latin", "babel-norsk", "babel-piedmontese", "babel-romanian", - "babel-romansh", "babel-samin", "babel-scottish", "babel-slovenian", - "babel-swedish", "babel-turkish", "babel-welsh", "finbib", "hrlatex", - "arabxetex", "euenc", "fixlatvian", "fontbook", "fontwrap", - "mathspec", "philokalia", "polyglossia", "ptext", "realscripts", - "ucharclasses", "unisugar", "xecjk", "xecolor", "xecyr", - "xeindex", "xepersian", "xesearch", "xetex", "xetex-def", - "xetex-itrans", "xetex-pstricks", "xetex-tibetan", - "xetexconfig", "xetexfontinfo", "xetexko", "xevlna", "xltxtra", - "xunicode", - "babel-bulgarian", "babel-russian", "babel-serbian", - "babel-serbianc", "babel-ukraineb", "cmcyr", "cyrillic", - "cyrillic-bin", "cyrplain", "disser", "eskd", "eskdx", "gost", - "hyphen-bulgarian", "hyphen-mongolian", "hyphen-russian", - "hyphen-serbian", "hyphen-ukrainian", "lcyw", "lh", "lhcyr", - "lshort-bulgarian", "lshort-mongol", "lshort-russian", - "lshort-ukr", "mongolian-babel", "montex", "mpman-ru", - "pst-eucl-translation-bg", "ruhyphen", "russ", - "serbian-apostrophe", "serbian-date-lat", "serbian-def-cyr", - "serbian-lig", "t2", "texlive-ru", "texlive-sr", "ukrhyph", - "ae", "amscls", "amsmath", "babel", "babel-english", "babelbib", - "carlisle", "colortbl", "fancyhdr", "fix2col", "geometry", - "graphics", "hyperref", "latex", "latex-bin", "latex-fonts", - "latexconfig", "ltxmisc", "mfnfss", "mptopdf", "natbib", - "oberdiek", "pdftex-def", "pslatex", "psnfss", "pspicture", - "tools", - "adobemapping", "arphic", "asymptote-by-example-zh-cn", - "asymptote-faq-zh-cn", "asymptote-manual-zh-cn", "bxbase", - "bxjscls", "c90", "cjk-ko", "cjkpunct", "cns", "convbkmk", - "ctex", "ctex-faq", "dnp", "garuda-c90", "hyphen-chinese", - "ipaex", "japanese", "japanese-otf", "japanese-otf-uptex", - "jfontmaps", "jsclasses", "latex-notes-zh-cn", "lshort-chinese", - "lshort-japanese", "lshort-korean", "luatexja", "nanumtype1", - "norasi-c90", "ptex", "ptex2pdf", "pxbase", "pxchfon", - "pxcjkcat", "pxjahyper", "pxrubrica", "texlive-zh-cn", "uhc", - "uptex", "wadalab", "xpinyin", "zhmetrics", "zhnumber", - "zhspacing", "zxjafbfont", "zxjafont", "zxjatype", "beamer", - "2up", "ESIEEcv", "HA-prosper", "Tabbing", "a0poster", "a4wide", - "a5comb", "abstract", "achemso", "acro", "acronym", "acroterm", - "addlines", "adjmulticol", "adrconv", "advdate", "akktex", - "akletter", "alterqcm", "altfont", "amsaddr", "animate", - "anonchap", "answers", "anyfontsize", "appendix", - "appendixnumberbeamer", "arcs", "arrayjobx", "assignment", - "attachfile", "authoraftertitle", "authorindex", "autonum", - "background", "bashful", "bchart", "beamer2thesis", - "beameraudience", "beamerposter", "beamersubframe", - "beamerthemejltree", "beamerthemenirma", "begriff", "beton", - "bez123", "bezos", "bhcexam", "bigfoot", "bigints", "bizcard", - "blindtext", "blkarray", "block", "blowup", "boites", - "bold-extra", "bookest", "booklet", "boolexpr", "bophook", - "boxedminipage", "boxhandler", "bracketkey", "braket", - "breakurl", "bullcntr", "bussproofs", "calctab", "calculator", - "calrsfs", "cals", "calxxxx-yyyy", "cancel", "canoniclayout", - "capt-of", "captcont", "captdef", "cases", "casyl", - "catchfilebetweentags", "catechis", "catoptions", "cbcoptic", - "ccaption", "cclicenses", "cd", "cd-cover", "cdpbundl", - "cellspace", "censor", "changebar", "changelayout", - "changepage", "changes", "chappg", "chapterfolder", "chet", - "chextras", "chletter", "chngcntr", "chronology", "circ", - "clefval", "cleveref", "clock", "cmdstring", "cmsd", "codedoc", - "codepage", "collcell", "collectbox", "colordoc", "colorinfo", - "colortab", "colorwav", "colourchange", "combelow", "combine", - "comma", "comment", "concprog", "constants", "contour", - "cooking", "cool", "coollist", "coolstr", "coolthms", - "cooltooltips", "coordsys", "copyrightbox", "coseoul", - "courseoutline", "coursepaper", "coverpage", "cprotect", - "crbox", "crossreference", "csquotes", "csvsimple", "csvtools", - "cuisine", "currfile", "cutwin", "cv", "cweb-latex", "dashbox", - "dashrule", "dashundergaps", "datatool", "dateiliste", - "datenumber", "datetime", "dblfloatfix", "decimal", "decorule", - "delim", "delimtxt", "diagbox", "diagnose", "dichokey", - "dinbrief", "directory", "dirtytalk", "dlfltxb", "dnaseq", - "docmfp", "docmute", "documentation", "doi", "dotarrow", - "dotseqn", "dox", "dpfloat", "dprogress", "drac", "draftcopy", - "draftwatermark", "dtk", "dtxgallery", "dvdcoll", "dynblocks", - "easy", "easy-todo", "easyfig", "easylist", "ean13isbn", - "ebezier", "ecclesiastic", "ecv", "ed", "edmargin", "eemeir", - "egplot", "ellipsis", "elmath", "elpres", "emarks", "embrac", - "emptypage", "emulateapj", "endfloat", "endheads", "endnotes", - "engpron", "engrec", "enotez", "enumitem", "enumitem-zref", - "envbig", "environ", "epigraph", "epiolmec", "eqell", "eqlist", - "eqname", "eqparbox", "errata", "esdiff", "esint", - "esint-type1", "etaremune", "etextools", "etoolbox", "eukdate", - "everyhook", "everypage", "exam", "examdesign", "examplep", - "exceltex", "excludeonly", "exercise", "exp-testopt", - "expdlist", "export", "extract", "facsimile", "fancynum", - "fancypar", "fancytabs", "fancytooltips", "figsize", - "filecontents", "filehook", "fileinfo", "filemod", "fink", - "finstrut", "fixfoot", "fixme", "fixmetodonotes", "fjodor", - "flabels", "flacards", "flagderiv", "flashcards", "flashmovie", - "flipbook", "flippdf", "floatflt", "floatrow", "flowfram", - "fmp", "fmtcount", "fn2end", "fnbreak", "fncychap", "fncylab", - "fnpara", "fnpct", "foilhtml", "fontaxes", "fonttable", - "footmisc", "footnotebackref", "footnoterange", "footnpag", - "forarray", "foreign", "forloop", "formlett", "formular", - "fragments", "frame", "framed", "frankenstein", "frege", - "friulan", "ftcap", "ftnxtra", "fullblck", "fullwidth", - "fundus-calligra", "fundus-cyr", "fundus-sueterlin", "fwlw", - "gauss", "gcard", "gcite", "genmpage", "getfiledate", "ghab", - "ginpenc", "gitinfo", "gloss", "gmdoc", "gmdoc-enhance", - "gmeometric", "gmiflink", "gmutils", "gmverb", "graphicx-psmin", - "grfpaste", "grid", "gridset", "guitlogo", "hanging", - "hardwrap", "harnon-cv", "harpoon", "hc", "he-she", "hhtensor", - "histogr", "hitec", "hletter", "hpsdiss", "hrefhide", "hvindex", - "hypdvips", "hyper", "hypernat", "hyperref-docsrc", "hyperxmp", - "hyphenat", "idxlayout", "ifmslide", "ifmtarg", "ifnextok", - "ifoddpage", "ifplatform", "ifthenx", "image-gallery", - "imakeidx", "import", "incgraph", "inlinedef", "inputtrc", - "interactiveworkbook", "interfaces", "inversepath", "invoice", - "iso", "iso10303", "isodate", "isonums", "isodoc", "isorot", - "isotope", "issuulinks", "iwhdp", "jlabels", "jvlisting", - "kantlipsum", "kerntest", "keycommand", "keyreader", - "keystroke", "keyval2e", "kix", "koma-moderncvclassic", - "koma-script-sfs", "labbook", "labelcas", "labels", "lastpage", - "latex-tds", "layouts", "lazylist", "lcd", "lcg", "leading", - "leftidx", "lettre", "lettrine", "lewis", "lhelp", "libgreek", - "limap", "linegoal", "lipsum", "listing", "listofsymbols", - "listliketab", "lkproof", "lmake", "locality", "localloc", - "logbox", "logical-markup-utils", "logpap", "longnamefilelist", - "lsc", "lstaddons", "ltabptch", "ltxdockit", "ltxindex", - "ltxkeys", "ltxnew", "ltxtools", "magaz", "mailing", - "mailmerge", "makebarcode", "makebox", "makecell", "makecirc", - "makecmds", "makedtx", "makeglos", "manfnt", "manuscript", - "marginfix", "marginnote", "mathalfa", "mathastext", "mathexam", - "maybemath", "mbenotes", "mcaption", "mceinleger", "mcite", - "mciteplus", "mdframed", "media9", "meetingmins", "memexsupp", - "menu", "menukeys", "method", "metre", "mftinc", "midpage", - "minibox", "minipage-marginpar", "minitoc", "minted", "minutes", - "misc209", "mla-paper", "mlist", "mmap", "moderncv", - "moderntimeline", "modref", "modroman", "monofill", "moreenum", - "morefloats", "morehype", "moresize", "moreverb", "morewrites", - "movie15", "mparhack", "msc", "msg", "mslapa", "mtgreek", - "multenum", "multibbl", "multicap", "multienv", "multirow", - "mversion", "mwe", "mycv", "mylatexformat", "nag", "nameauth", - "namespc", "ncclatex", "ncctools", "needspace", "newcommand", - "newfile", "newlfm", "newspaper", "newunicodechar", "newvbtm", - "newverbs", "nextpage", "nfssext-cfr", "nicefilelist", - "niceframe", "nicetext", "nlctdoc", "noitcrul", "nolbreaks", - "nomencl", "nomentbl", "nonfloat", "nonumonpart", "nopageno", - "notes", "notoccite", "nowidow", "ntheorem", "numname", - "numprint", "ocgtools", "ocr-latex", "octavo", "oldstyle", - "onlyamsmath", "opcit", "optional", "outline", "outliner", - "outlines", "overpic", "pagecolor", "pagecont", "pagenote", - "pagerange", "pageslts", "paper", "papercdcase", "papermas", - "papertex", "paracol", "paralist", "paresse", "parnotes", - "parselines", "patch", "patchcmd", "pauldoc", "pawpict", "pbox", - "pbsheet", "pdf14", "pdfcomment", "pdfcprot", "pdfmarginpar", - "pdfscreen", "pdfslide", "pdfsync", "pdfwin", "pdfx", "pecha", - "perltex", "permute", "petiteannonce", "philex", "photo", - "piff", "pittetd", "placeins", "plates", "plantslabels", - "plweb", "polyglot", "polynom", "polynomial", "polytable", - "postcards", "poster-mac", "ppr-prv", "preprint", "prettyref", - "preview", "printlen", "probsoln", "program", "progress", - "progressbar", "properties", "prosper", "protex", "protocol", - "psfragx", "pst-pdf", "pstool", "pxgreeks", "python", "qcm", - "quoting", "qstest", "qsymbols", "quotchap", "quotmark", - "randtext", "rccol", "rcs-multi", "rcsinfo", "realboxes", - "recipe", "recipecard", "rectopma", "refcheck", "refman", - "refstyle", "regcount", "regexpatch", "register", "regstats", - "relenc", "relsize", "repeatindex", "rjlparshap", "rlepsf", - "rmpage", "robustcommand", "robustindex", "romanbar", - "romanneg", "romannum", "romansh", "rotfloat", "rotpages", - "rtkinenc", "rvwrite", "sauerj", "savefnmark", "savesym", - "savetrees", "scale", "scalebar", "sdrt", "secdot", - "sectionbox", "sectsty", "selectp", "semantic", "semioneside", - "sepfootnotes", "seqsplit", "serbian-apostrophe", - "serbian-date-lat", "serbian-def-cyr", "serbian-lig", - "serbianc", "sf298", "sffms", "sfmath", "shadow", "shadowtext", - "shadethm", "shapepar", "shipunov", "shorttoc", "show2e", - "showcharinbox", "showexpl", "showlabels", "sidecap", - "sidenotes", "silence", "simplecd", "simplecv", "simplewick", - "sitem", "skb", "skeycommand", "skeyval", "slantsc", - "smalltableof", "smartref", "snapshot", "soul", "spanglish", - "sparklines", "sphack", "spreadtab", "spverbatim", "splitindex", - "spot", "spotcolor", "srbook-mem", "srcltx", "sseq", "stack", - "standalone", "statistik", "stdclsdv", "stdpage", "stex", - "storebox", "storecmd", "stringstrings", "sttools", "stubs", - "subdepth", "subeqn", "subeqnarray", "subfigmat", "subfigure", - "subfiles", "subfloat", "substitutefont", "substr", - "supertabular", "svgcolor", "svn", "svn-multi", "svn-prov", - "syntax", "syntrace", "synttree", "tabfigures", "tableaux", - "tablefootnote", "tablists", "tabls", "tabto-ltx", "tabu", - "tabularborder", "tabularcalc", "tabularew", "tabulary", - "tagging", "talk", "tcldoc", "tcolorbox", "tdclock", "technics", - "ted", "termcal", "termlist", "tex-label", "texlogos", - "texmate", "texments", "texpower", "texshade", "textfit", - "textgreek", "textmerg", "textpos", "theoremref", - "threeparttable", "threeparttablex", "thinsp", "thmtools", - "thumb", "thumbs", "thumby", "ticket", "timesht", "titlefoot", - "titlepic", "titleref", "titlesec", "titling", "tocbibind", - "tocloft", "tocvsec2", "todo", "todonotes", "tokenizer", - "toolbox", "topfloat", "totcount", "totpages", "tram", - "trfsigns", "trimspaces", "trsym", "trivfloat", "truncate", - "tucv", "turnthepage", "twoinone", "twoup", "txgreeks", - "type1cm", "typeface", "typogrid", "ucs", "uebungsblatt", - "umoline", "underlin", "undolabl", "units", "upmethodology", - "upquote", "uri", "ushort", "varindex", "varsfromjobname", - "varwidth", "verbasef", "verbatimbox", "verbatimcopy", - "verbdef", "verbments", "version", "versions", "vertbars", - "vhistory", "vmargin", "volumes", "vpe", "vruler", "vwcol", - "wallpaper", "warning", "warpcol", "was", "widetable", - "williams", "wordlike", "wrapfig", "xargs", "xbmc", "xcomment", - "xhfill", "xtab", "xdoc", "xfor", "xifthen", "xmpincl", - "xnewcommand", "xoptarg", "xpatch", "xpunctuate", "xstring", - "xwatermark", "xytree", "yafoot", "yagusylo", "ydoc", "yplan", - "zed-csp", "ziffer", "zwgetfdate", "zwpagelayout" - ] - } -} diff --git a/gs_ctan/__init__.py b/gs_ctan/__init__.py deleted file mode 100644 index cf529d7..0000000 --- a/gs_ctan/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env python - diff --git a/gs_ctan/backend.py b/gs_ctan/backend.py deleted file mode 100644 index 92245e6..0000000 --- a/gs_ctan/backend.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" - backend.py - ~~~~~~~~~~ - - CTAN backend - - :copyright: (c) 2013 by Jauhien Piatlicki - :license: GPL-2, see LICENSE for more details. -""" - -import os - -from g_sorcery.backend import Backend -from g_sorcery.metadata import MetadataGenerator -from g_sorcery.eclass import EclassGenerator -from g_sorcery.fileutils import get_pkgpath - -from .ctan_db import CtanDBGenerator -from .ebuild import CtanEbuildWithoutDigestGenerator, CtanEbuildWithDigestGenerator - - -class CtanEclassGenerator(EclassGenerator): - """ - Implementation of eclass generator. Only specifies a data directory. - """ - def __init__(self): - super(CtanEclassGenerator, self).__init__(os.path.join(get_pkgpath(__file__), 'data')) - - -#Backend instance to be loaded by g_sorcery -instance = Backend(CtanDBGenerator, - CtanEbuildWithDigestGenerator, CtanEbuildWithoutDigestGenerator, - CtanEclassGenerator, MetadataGenerator) diff --git a/gs_ctan/ctan_db.py b/gs_ctan/ctan_db.py deleted file mode 100644 index 0f7d939..0000000 --- a/gs_ctan/ctan_db.py +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" - ctan_db.py - ~~~~~~~~~~ - - CTAN package database - - :copyright: (c) 2013 by Jauhien Piatlicki - :license: GPL-2, see LICENSE for more details. -""" - -import itertools -import re - -import portage - -from g_sorcery.g_collections import Dependency, Package, serializable_elist -from g_sorcery.package_db import DBGenerator -from g_sorcery.logger import Logger - -class CtanDBGenerator(DBGenerator): - """ - Implementation of database generator for CTAN LaTeX backend. - """ - def __init__(self, package_db_class): - super(CtanDBGenerator, self).__init__(package_db_class) - - logger = Logger() - gentoo_arch = portage.settings['ARCH'] - self.arch = "" - if gentoo_arch == "x86": - self.arch = "i386-linux" - elif gentoo_arch == "amd64": - self.arch = "x86_64-linux" - else: - logger.warning("not supported arch: " + gentoo_arch) - - - def get_download_uries(self, common_config, config): - """ - Get download URI. - """ - tlpdb_uri = config["repo_uri"] + "/tlpkg/texlive.tlpdb.xz" - return [tlpdb_uri] - - def parse_data(self, data_f): - """ - Parse downloaded data. - - Parsed data is a list of dictionaries. - Each dictionary corresponds to one package. - - Args: - data_f: Open file wit data. - - Returns: - Parsed data. - """ - data = data_f.read() - - data = data.split("\n") - - #entries are separated by new lines - data = \ - [list(group) for key, group in itertools.groupby(data, bool) if key] - - #we need only Package entries - data = \ - [entry for entry in data if entry[1] == "category Package"] - - result = [] - - KEY = 0 - VALUE = 1 - FILES_LENGTH = len("files") - - for entry in data: - res_entry = {} - previous_key = "" - current_key = "" - for line in entry: - line = line.split(" ") - if line[KEY][-FILES_LENGTH:] == "files": - current_key = line[KEY] - res_entry[current_key] = {} - for value in line[VALUE:]: - key, val = value.split("=") - res_entry[current_key][key] = val - res_entry[current_key]["files"] = [] - elif not line[KEY]: - res_entry[current_key]["files"].append(" ".join(line[VALUE:])) - elif line[KEY] == "depend": - if "depend" in res_entry: - res_entry["depend"].append(" ".join(line[VALUE:])) - else: - res_entry["depend"] = [" ".join(line[VALUE:])] - else: - if previous_key == line[KEY]: - res_entry[previous_key] += " " + " ".join(line[VALUE:]) - else: - res_entry[line[KEY]] = " ".join(line[VALUE:]) - previous_key = line[KEY] - current_key = "" - - parts = res_entry["name"].split(".") - if len(parts) > 1: - if parts[1] != self.arch: - continue - - result.append(res_entry) - - return result - - def process_data(self, pkg_db, data, common_config, config): - """ - Process parsed data and fill database. - """ - - category = "dev-tex" - - pkg_db.add_category(category) - - ARCH_LENGTH = len("ARCH") - - data = data["texlive.tlpdb"] - - for entry in data: - realname = entry["name"] - - pkgname = realname - parts = pkgname.split(".") - if len(parts) > 1: - pkgname = "_".join(parts) - - if self.in_config([common_config, config], "exclude", pkgname): - continue - - #todo: work on common data vars processing: external deps, filtering etc. - #at the moment just copy necessary code from elpa_db.py - allowed_ords = set(range(ord('a'), ord('z'))) | set(range(ord('A'), ord('Z'))) | \ - set(range(ord('0'), ord('9'))) | set(list(map(ord, - ['+', '_', '-', ' ', '.', '(', ')', '[', ']', '{', '}', ',']))) - - if "shortdesc" in entry: - description = entry["shortdesc"] - else: - description = entry["name"] - description = "".join([x for x in description if ord(x) in allowed_ords]) - - if "longdesc" in entry: - longdescription = entry["longdesc"] - longdescription = "".join([x for x in longdescription if ord(x) in allowed_ords]) - else: - longdescription = description - - if "catalogue-version" in entry: - version = entry["catalogue-version"] - #todo better version checking and processing - match_object = re.match("(^[0-9]+[a-z]?$)|(^[0-9][0-9\.]+[0-9][a-z]?$)", version) - if not match_object: - version = entry["revision"] - else: - version = entry["revision"] - - if "catalogue-license" in entry: - license = self.convert([common_config, config], "licenses", entry["catalogue-license"]) - else: - license = "unknown" - - if "catalogue-ctan" in entry: - source_type = "zip" - base_src_uri = "ftp://tug.ctan.org/pub/tex-archive" - catalogue = entry["catalogue-ctan"] - homepage = "http://www.ctan.org/tex-archive" + catalogue - catalogue = catalogue[:-len(realname)] - else: - source_type = "tar.xz" - base_src_uri = "http://mirror.ctan.org/systems/texlive/tlnet/archive/" - catalogue = "" - homepage = "http://www.ctan.org/tex-archive/systems/texlive/tlnet" - - dependencies = serializable_elist(separator="\n\t") - - if "depend" in entry: - for dependency in entry["depend"]: - if dependency[-ARCH_LENGTH:] == "ARCH": - dependency = dependency[:-ARCH_LENGTH-1] + "_" + self.arch - dependencies.append(Dependency(category, dependency)) - - ebuild_data = {"realname" : realname, - "description" : description, - "homepage" : homepage, - "license" : license, - "source_type" : source_type, - "base_src_uri" : base_src_uri, - "catalogue" : catalogue, - "dependencies" : dependencies, - "depend" : dependencies, - "rdepend" : dependencies, - #eclass entry - 'eclasses' : ['gs-ctan'], - #metadata entries - 'maintainer' : [{'email' : 'piatlicki@gmail.com', - 'name' : 'Jauhien Piatlicki'}], - 'longdescription' : longdescription - } - - pkg_db.add_package(Package(category, pkgname, version), ebuild_data) diff --git a/gs_ctan/data/gs-ctan.eclass b/gs_ctan/data/gs-ctan.eclass deleted file mode 100644 index b2124ed..0000000 --- a/gs_ctan/data/gs-ctan.eclass +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright 1999-2013 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ -# automatically generated by gs-ctan -# please do not edit this file -# -# TODO: write common base eclass for g-sorcery -# -# Original Author: Jauhien Piatlicki <piatlicki@gmail.com> -# Purpose: support installation of latex packages -# from overlays generated by gs-ctan -# -# Bugs to piatlicki@gmail.com -# -# @ECLASS: gs-ctan.eclass -# -# @ECLASS-VARIABLE: BASE_SRC_URI -# @DESCRIPTION: address of a repository with packages -# -# @ECLASS-VARIABLE: CATALOGUE -# @DESCRIPTION: directory on the server where package lives -# -# @ECLASS-VARIABLE: SOURCE_TYPE -# @DESCRIPTION: type of a package (zip or tar.xz) -# -# @ECLASS-VARIABLE: DIGEST_SOURCES -# @DESCRIPTION: whether manifest for sources exists -# -# @ECLASS-VARIABLE: REALNAME -# @DESCRIPTION: real name of a package in the repository -# -# @ECLASS-VARIABLE: GSCTAN_STORE_DIR -# @DESCRIPTION: store location for downloaded sources -GSCTAN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}" -# -# @ECLASS-VARIABLE: GSCTAN_FETCH_CMD -# @DESCRIPTION: fetch command -GSCTAN_FETCH_CMD="wget" - -inherit latex-package - -if [[ ${SOURCE_TYPE} = "zip" ]]; then - EXPORT_FUNCTIONS src_{unpack,compile,install} -else - EXPORT_FUNCTIONS src_{unpack,install} -fi - -SUFFIX="${SOURCE_TYPE}" -SOURCEFILE=${REALNAME}.${SUFFIX} - -gs-ctan_fetch() { - addwrite "${GSCTAN_STORE_DIR}" - pushd "${GSCTAN_STORE_DIR}" >/dev/null || die "can't chdir to ${GSCTAN_STORE_DIR}" - if [[ ! -f "${SOURCEFILE}" ]]; then - $GSCTAN_FETCH_CMD ${BASE_SRC_URI}${CATALOGUE}${SOURCEFILE} || die - fi - popd >/dev/null || die -} - -gs-ctan_src_unpack() { - if [[ ${SOURCE_TYPE} = "zip" ]]; then - if [[ x${DIGEST_SOURCES} = x ]]; then - gs-ctan_fetch - fi - cp ${GSCTAN_STORE_DIR}/${SOURCEFILE} . || die - unzip ${SOURCEFILE} || die - mv ${PN} ${P} || die - else - if [[ x${DIGEST_SOURCES} = x ]]; then - gs-ctan_fetch - fi - mkdir ${S} || die - cd ${S} || die - tar xvf ${GSCTAN_STORE_DIR}/${SOURCEFILE} || die - rm -rf tlpkg || die - fi -} - -gs-ctan_src_compile() { - cd ${S} || die - latex-package_src_compile - for d in `ls -d -- */`; do - pushd ${d} || die - latex-package_src_compile - popd || die - done -} - -gs-ctan_src_install() { - if [[ ${SOURCE_TYPE} = "zip" ]]; then - cd ${S} || die - latex-package_src_install - for d in `ls -d -- */`; do - pushd ${d} || die - latex-package_src_install - popd || die - done - else - insinto ${TEXMF} - doins -r * - fi -} diff --git a/gs_ctan/ebuild.py b/gs_ctan/ebuild.py deleted file mode 100644 index 2ba154b..0000000 --- a/gs_ctan/ebuild.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" - ebuild.py - ~~~~~~~~~ - - ebuild generation - - :copyright: (c) 2013 by Jauhien Piatlicki - :license: GPL-2, see LICENSE for more details. -""" - -import collections - -from g_sorcery.ebuild import DefaultEbuildGenerator - -Layout = collections.namedtuple("Layout", - ["vars_before_inherit", "inherit", "vars_after_description", "vars_after_keywords"]) - - -class CtanEbuildWithoutDigestGenerator(DefaultEbuildGenerator): - """ - Implementation of ebuild generator without sources digesting. - """ - def __init__(self, package_db): - - vars_before_inherit = \ - ["base_src_uri", "catalogue", "source_type", "realname"] - - inherit = ["gs-ctan"] - - vars_after_description = \ - ["homepage", {"name" : "src_uri", "value" : ""}, "license"] - - vars_after_keywords = \ - ["depend", "rdepend"] - - layout = Layout(vars_before_inherit, inherit, vars_after_description, vars_after_keywords) - - super(CtanEbuildWithoutDigestGenerator, self).__init__(package_db, layout) - -class CtanEbuildWithDigestGenerator(DefaultEbuildGenerator): - """ - Implementation of ebuild generator with sources digesting. - """ - def __init__(self, package_db): - - vars_before_inherit = \ - ["base_src_uri", "catalogue", "source_type", "realname", {"name" : "digest_sources", "value" : "yes"}] - - inherit = ["gs-ctan"] - - vars_after_description = \ - ["homepage", {"name" : "src_uri", "value" : "${BASE_SRC_URI}${CATALOGUE}${REALNAME}.${SOURCE_TYPE} -> ${P}.${SOURCE_TYPE}"}, "license"] - - vars_after_keywords = \ - ["depend", "rdepend"] - - layout = Layout(vars_before_inherit, inherit, vars_after_description, vars_after_keywords) - - super(CtanEbuildWithDigestGenerator, self).__init__(package_db, layout) @@ -7,16 +7,13 @@ setup(name = 'g-sorcery', description = 'g-sorcery framework for automated ebuild generators', author = 'Jauhien Piatlicki', author_email = 'jauhien@gentoo.org', - packages = ['g_sorcery', 'gs_db_tool', 'gs_ctan', 'gs_pypi'], + packages = ['g_sorcery', 'gs_db_tool', 'gs_pypi'], package_data = {'g_sorcery': ['data/*'], - 'gs_pypi': ['data/*'], - 'gs_ctan': ['data/*']}, + 'gs_pypi': ['data/*']}, scripts = ['bin/g-sorcery', 'bin/gs-db-tool', - 'bin/gs-ctan', 'bin/gs-pypi-generate-db', 'bin/gs-pypi'], - data_files = [('/etc/g-sorcery/', ['gs-ctan.json']), - ('/etc/g-sorcery/', ['gs-pypi.json']), + 'bin/gs-pypi-generate-db', 'bin/gs-pypi'], + data_files = [('/etc/g-sorcery/', ['gs-pypi.json']), ('/etc/g-sorcery/', ['g-sorcery.cfg']), - ('/etc/layman/overlays/', ['gs-ctan-overlays.xml']), ('/etc/layman/overlays/', ['gs-pypi-overlays.xml'])], license = 'GPL', ) |