texlive[50340] trunk: ctanbib (11mar19)

commits+karl at tug.org commits+karl at tug.org
Mon Mar 11 23:03:21 CET 2019


Revision: 50340
          http://tug.org/svn/texlive?view=revision&revision=50340
Author:   karl
Date:     2019-03-11 23:03:21 +0100 (Mon, 11 Mar 2019)
Log Message:
-----------
ctanbib (11mar19)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib
    trunk/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf
    trunk/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex
    trunk/Master/texmf-dist/scripts/ctanbib/ctanbib
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/man/man1/ctanbib.1
    trunk/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf

Modified: trunk/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib	2019-03-11 22:01:59 UTC (rev 50339)
+++ trunk/Build/source/texk/texlive/linked_scripts/ctanbib/ctanbib	2019-03-11 22:03:21 UTC (rev 50340)
@@ -15,17 +15,23 @@
 -- 
 -- 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,6 +67,14 @@
   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
@@ -67,7 +81,12 @@
     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 @@
   else
     title = pkgname
   end
-  return string.format(titleformat, title)
+  return string.format(titleformat, bibtex_escape(title))
 end
 
 
@@ -92,7 +111,7 @@
 
 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 @@
   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.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)

Added: trunk/Master/texmf-dist/doc/man/man1/ctanbib.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/ctanbib.1	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/man/man1/ctanbib.1	2019-03-11 22:03:21 UTC (rev 50340)
@@ -0,0 +1,72 @@
+.\" Manpage for ctanbib.
+.\" Contact michal.h21 at 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
+ at 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
+ at 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 at 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.
+


Property changes on: trunk/Master/texmf-dist/doc/man/man1/ctanbib.1
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf	2019-03-11 22:01:59 UTC (rev 50339)
+++ trunk/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf	2019-03-11 22:03:21 UTC (rev 50340)

Property changes on: trunk/Master/texmf-dist/doc/man/man1/ctanbib.man1.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex	2019-03-11 22:01:59 UTC (rev 50339)
+++ trunk/Master/texmf-dist/doc/support/ctanbib/ctanbib-doc.tex	2019-03-11 22:03:21 UTC (rev 50340)
@@ -24,14 +24,27 @@
 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 @@
 }
 \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}
+ at 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.}

Modified: trunk/Master/texmf-dist/scripts/ctanbib/ctanbib
===================================================================
--- trunk/Master/texmf-dist/scripts/ctanbib/ctanbib	2019-03-11 22:01:59 UTC (rev 50339)
+++ trunk/Master/texmf-dist/scripts/ctanbib/ctanbib	2019-03-11 22:03:21 UTC (rev 50340)
@@ -15,17 +15,23 @@
 -- 
 -- 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,6 +67,14 @@
   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
@@ -67,7 +81,12 @@
     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 @@
   else
     title = pkgname
   end
-  return string.format(titleformat, title)
+  return string.format(titleformat, bibtex_escape(title))
 end
 
 
@@ -92,7 +111,7 @@
 
 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 @@
   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.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)

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2019-03-11 22:01:59 UTC (rev 50339)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2019-03-11 22:03:21 UTC (rev 50340)
@@ -3113,6 +3113,7 @@
  'axodraw2'		=> '\.1$',
  'bundledoc'            => '\.1$',
  'crossrefware'		=> '\.1$',
+ 'ctanbib'              => '\.1$',
  'ctan-o-mat'           => '\.1$',
  'ctanify'              => '\.1$',
  'dosepsbin'            => 'dosepsbin.man',



More information about the tex-live-commits mailing list