diff options
author | Karl Berry <karl@freefriends.org> | 2019-03-11 22:03:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-03-11 22:03:21 +0000 |
commit | 0b7ad48e8649c8021bce33948002008e76165b88 (patch) | |
tree | eae0b29bac4f27307aa3b08ce8d0036e3593e6ad | |
parent | 73fc8f1428dc92eee4f0fc4f3f8b8b5f163be79d (diff) |
ctanbib (11mar19)
git-svn-id: svn://tug.org/texlive/trunk@50340 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-x | Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib | 57 | ||||
-rw-r--r-- | Master/texmf-dist/doc/man/man1/ctanbib.1 | 72 | ||||
-rw-r--r-- | Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf | bin | 0 -> 20182 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf | bin | 30489 -> 33837 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex | 48 | ||||
-rwxr-xr-x | Master/texmf-dist/scripts/ctanbib/ctanbib | 57 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 1 |
7 files changed, 203 insertions, 32 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib b/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib index 7f8ac74cb85..f73fc70c9ff 100755 --- a/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib +++ b/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib @@ -15,17 +15,23 @@ kpse.set_program_name("luatex") -- -- The Current Maintainer of this work is Michal Hoftich +local bibtype = "manual" if #arg < 1 or arg[1]=="--help" or arg[1]=="-h" then - print [[ctanbib - convert ctan package information to bibtex format - Usage: - texlua ctanbib <package name> - - This command will bibtex entry to the terminal output - ]] + print([[ctanbib - convert ctan package information to bibtex format +Usage: +ctanbib [options] <package name> +Available options: + -c,--ctan Use @ctan type instead of @manual + -h,--help Print this message + -v,--version Print version info + ]]) os.exit(1) elseif arg[1]=="--version" or arg[1]=="-v" then - print "ctanbib version v0.1a" + print "ctanbib version v0.1b" os.exit(1) +elseif arg[1]=="--ctan" or arg[1]=="-c" then + table.remove(arg, 1) + bibtype = "ctan" end local pkgname = arg[1] @@ -61,13 +67,26 @@ local load_xml = function(url) return dom.parse(info) end +local bibtex_escape = function(a) + local a = a or "" + return a:gsub("([%$%{%}%\\])", function(x) + if x == "\\" then return "\\textbackslash " end + return '\\'..x + end) +end + local get_authors = function(a) local retrieved_authors = {} for _, author in ipairs(a) do local current = {} current[#current+1] = author:get_attribute("familyname") current[#current+1] = author:get_attribute("givenname") - table.insert(retrieved_authors, table.concat(current, ", ")) + -- the author is an organization + if #current == 1 then + table.insert(retrieved_authors, "{" .. current[1] .. "}") + else + table.insert(retrieved_authors, table.concat(current, ", ")) + end end return table.concat(retrieved_authors," and ") end @@ -80,7 +99,7 @@ local get_title = function(record) else title = pkgname end - return string.format(titleformat, title) + return string.format(titleformat, bibtex_escape(title)) end @@ -92,7 +111,7 @@ end local get_caption = function(record) local caption = record:query_selector("caption")[1] - if caption then return caption:get_text() end + if caption then return bibtex_escape(caption:get_text()) end return nil end @@ -103,14 +122,18 @@ local get_version = function(record) end end -local bibtex_escape = function(a) - local a = a or "" - return a:gsub("([%$%{%}])", function(x) return '\\'..x end) +local ctan_url = function(record) + local ctan = record:query_selector("ctan")[1] + -- some package don't contain the CTAN path + if not ctan then return get_url(record) end + local path = ctan:get_attribute("path") + return path end + local compile = function(template, records) return template:gsub("$([a-z]+)", function(a) - return bibtex_escape(records[a]) or "" + return records[a] or "" end) end @@ -131,9 +154,15 @@ e.package = pkgname e.title = get_title(record) e.subtitle = get_caption(record) e.url = get_url(record) +-- use the CTAN path as url for the CTAN type +if bibtype == "ctan" then + e.url = ctan_url(record) +end e.version, e.date = get_version(record) e.urldate = os.date("%Y-%m-%d") local result = compile(bibtexformat, e) +-- update the bibliography type +result = result:gsub("^@manual", "@" .. bibtype) print(result) diff --git a/Master/texmf-dist/doc/man/man1/ctanbib.1 b/Master/texmf-dist/doc/man/man1/ctanbib.1 new file mode 100644 index 00000000000..baa40b1190a --- /dev/null +++ b/Master/texmf-dist/doc/man/man1/ctanbib.1 @@ -0,0 +1,72 @@ +.\" Manpage for ctanbib. +.\" Contact michal.h21@gmail.com to correct errors or typos. +.TH ctanbib 1 "28 aug 2018" "0.1" "ctanbib man page" +.SH NAME +ctanbib +\- retrieve bibliographic information for packages hosted on CTAN. +.SH SYNOPSIS +ctanbib <options> [package name] +.SH DESCRIPTION +This command can retrieve bibliographic information for TeX packages hosted on +CTAN in the BibTeX format. +.SH OPTIONS +.IP -c,--ctan +use @ctan type instead of @manual. The difference between the two is that the +url field contains package CTAN path, instead of link to the package. +.IP -h,--help +print the help message. +.IP -v,--version +print the version info. +.SH EXAMPLES + +$ ctanbib latex + +.Pp +This invocation will print data in the BibLaTeX format to the standard output: + +.nf +.ft CW +@manual{latex, +title = {The Latex package}, +subtitle = {A TeX macro package that defines LaTeX}, +author = {Lamport, Leslie and The LaTeX Team}, +url = {http://www.latex-project.org/}, +urldate = {2018-08-23}, +date = {2018-04-01}, +version = {PL 5} +} +.ft R +.fi + +.Pp +The --ctan option: + +$ ctanbib -c hyperref + +.Pp +This produces bib record with the @ctan type: + +.nf +.ft CW +@ctan{hyperref, +title = {The Hyperref package}, +subtitle = {Extensive support for hypertext in LaTeX}, +author = {Rahtz, Sebastian and Oberdiek, Heiko}, +url = {/macros/latex/contrib/hyperref}, +urldate = {2018-08-27}, +date = {}, +version = {6.86b} +} +.ft R +.fi + +.SH See also +See ctanbib-doc.pdf for more details +.SH BUGS +No known bugs. +.SH AUTHOR +Michal Hoftich (michal.h21@gmail.com) +.SH LICENSE +Permission is granted to copy, distribute and/or modify this software +under the terms of the LaTeX Project Public License, version 1.3. + diff --git a/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf b/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf Binary files differnew file mode 100644 index 00000000000..2a48c8545c0 --- /dev/null +++ b/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf diff --git a/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf b/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf Binary files differindex 74fa918fa00..9128765bd12 100644 --- a/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf +++ b/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf diff --git a/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex b/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex index 3a6c3a77ee6..699dee2765e 100644 --- a/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex +++ b/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex @@ -24,14 +24,27 @@ This package provides script named \package{ctanbib} which can be used for retri It can be used in the following way: -\noindent\package{ctanbib $\langle$packagename$\rangle$ > filename.bib} +\noindent\package{ctanbib [options] $\langle$packagename$\rangle$ > filename.bib} -\section{Example} + +\section{Available options} + +\begin{description} + \item[-c,-\/-ctan] use the \texttt{@ctan} type instead of \texttt{@manual}. + The difference between the two is that the url field contains packages CTAN + path, instead of a link to the package. + \item[-h,-\/-help] print the help message. + \item[-v,-\/-version] print the version info. +\end{description} + + +\section{Examples} \begin{verbatim} ctanbib latex \end{verbatim} + \noindent This invocation will print data in the Bib\LaTeX\ format to the standard output: \begin{verbatim} @@ -46,21 +59,48 @@ version = {PL 5} } \end{verbatim} +The \texttt{--ctan} option: + +\begin{verbatim} +ctanbib -c hyperref +\end{verbatim} + +\noindent This produces a bib record with the \texttt{@ctan} type: + +\begin{verbatim} +@ctan{hyperref, +title = {The Hyperref package}, +subtitle = {Extensive support for hypertext in LaTeX}, +author = {Rahtz, Sebastian and Oberdiek, Heiko}, +url = {/macros/latex/contrib/hyperref}, +urldate = {2018-08-27}, +date = {}, +version = {6.86b} +} +\end{verbatim} + + \section{License} Permission is granted to copy, distribute and/or modify this software -under the terms of the LaTeX Project Public License, version 1.3. +under the terms of the \LaTeX\ Project Public License, version 1.3. \section{Acknowledgements} This package was created thanks to TeX.sx user Daniel\footnote{\url{https://tex.stackexchange.com/users/3751/daniel}}. Lukas -C. Bossert had useful comments which led to update of the original script and +C.~Bossert had useful comments which led to update of the original script and it's eventual release on CTAN. +\newpage \section{Changelog} \begin{changelog} + \change{2019-03-11}{Version 0.1b released} + \change{2018-09-10}{Added support for institutional names} + \change{2018-09-10}{Escape TeX commands in the title and subtitle} + \change{2018-08-29}{Added man page} + \change{2018-08-27}{Added --ctan option} \change{2018-08-23}{Version 0.1 released.} \change{2018-08-23}{Created documentation.} \change{2018-08-21}{Rewrote the script to use the DOM api provided by LuaXML. This provides greater flexibility in the XML processing.} diff --git a/Master/texmf-dist/scripts/ctanbib/ctanbib b/Master/texmf-dist/scripts/ctanbib/ctanbib index 7f8ac74cb85..f73fc70c9ff 100755 --- a/Master/texmf-dist/scripts/ctanbib/ctanbib +++ b/Master/texmf-dist/scripts/ctanbib/ctanbib @@ -15,17 +15,23 @@ kpse.set_program_name("luatex") -- -- The Current Maintainer of this work is Michal Hoftich +local bibtype = "manual" if #arg < 1 or arg[1]=="--help" or arg[1]=="-h" then - print [[ctanbib - convert ctan package information to bibtex format - Usage: - texlua ctanbib <package name> - - This command will bibtex entry to the terminal output - ]] + print([[ctanbib - convert ctan package information to bibtex format +Usage: +ctanbib [options] <package name> +Available options: + -c,--ctan Use @ctan type instead of @manual + -h,--help Print this message + -v,--version Print version info + ]]) os.exit(1) elseif arg[1]=="--version" or arg[1]=="-v" then - print "ctanbib version v0.1a" + print "ctanbib version v0.1b" os.exit(1) +elseif arg[1]=="--ctan" or arg[1]=="-c" then + table.remove(arg, 1) + bibtype = "ctan" end local pkgname = arg[1] @@ -61,13 +67,26 @@ local load_xml = function(url) return dom.parse(info) end +local bibtex_escape = function(a) + local a = a or "" + return a:gsub("([%$%{%}%\\])", function(x) + if x == "\\" then return "\\textbackslash " end + return '\\'..x + end) +end + local get_authors = function(a) local retrieved_authors = {} for _, author in ipairs(a) do local current = {} current[#current+1] = author:get_attribute("familyname") current[#current+1] = author:get_attribute("givenname") - table.insert(retrieved_authors, table.concat(current, ", ")) + -- the author is an organization + if #current == 1 then + table.insert(retrieved_authors, "{" .. current[1] .. "}") + else + table.insert(retrieved_authors, table.concat(current, ", ")) + end end return table.concat(retrieved_authors," and ") end @@ -80,7 +99,7 @@ local get_title = function(record) else title = pkgname end - return string.format(titleformat, title) + return string.format(titleformat, bibtex_escape(title)) end @@ -92,7 +111,7 @@ end local get_caption = function(record) local caption = record:query_selector("caption")[1] - if caption then return caption:get_text() end + if caption then return bibtex_escape(caption:get_text()) end return nil end @@ -103,14 +122,18 @@ local get_version = function(record) end end -local bibtex_escape = function(a) - local a = a or "" - return a:gsub("([%$%{%}])", function(x) return '\\'..x end) +local ctan_url = function(record) + local ctan = record:query_selector("ctan")[1] + -- some package don't contain the CTAN path + if not ctan then return get_url(record) end + local path = ctan:get_attribute("path") + return path end + local compile = function(template, records) return template:gsub("$([a-z]+)", function(a) - return bibtex_escape(records[a]) or "" + return records[a] or "" end) end @@ -131,9 +154,15 @@ e.package = pkgname e.title = get_title(record) e.subtitle = get_caption(record) e.url = get_url(record) +-- use the CTAN path as url for the CTAN type +if bibtype == "ctan" then + e.url = ctan_url(record) +end e.version, e.date = get_version(record) e.urldate = os.date("%Y-%m-%d") local result = compile(bibtexformat, e) +-- update the bibliography type +result = result:gsub("^@manual", "@" .. bibtype) print(result) diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 18eee0a1670..9906f8cfadc 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -3113,6 +3113,7 @@ $standardttf = '\.ttf|\.TTC'; 'axodraw2' => '\.1$', 'bundledoc' => '\.1$', 'crossrefware' => '\.1$', + 'ctanbib' => '\.1$', 'ctan-o-mat' => '\.1$', 'ctanify' => '\.1$', 'dosepsbin' => 'dosepsbin.man', |