summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-03-11 22:03:21 +0000
committerKarl Berry <karl@freefriends.org>2019-03-11 22:03:21 +0000
commit0b7ad48e8649c8021bce33948002008e76165b88 (patch)
treeeae0b29bac4f27307aa3b08ce8d0036e3593e6ad
parent73fc8f1428dc92eee4f0fc4f3f8b8b5f163be79d (diff)
ctanbib (11mar19)
git-svn-id: svn://tug.org/texlive/trunk@50340 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/ctanbib/ctanbib57
-rw-r--r--Master/texmf-dist/doc/man/man1/ctanbib.172
-rw-r--r--Master/texmf-dist/doc/man/man1/ctanbib.man1.pdfbin0 -> 20182 bytes
-rw-r--r--Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdfbin30489 -> 33837 bytes
-rw-r--r--Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex48
-rwxr-xr-xMaster/texmf-dist/scripts/ctanbib/ctanbib57
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds1
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
new file mode 100644
index 00000000000..2a48c8545c0
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf b/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf
index 74fa918fa00..9128765bd12 100644
--- a/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf
+++ b/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf
Binary files differ
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',