[PATCH 00/20] gnu: Add AnyStyle.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Philip McGrath
Owner
unassigned
Submitted by
Philip McGrath
Severity
normal
P
P
Philip McGrath wrote on 25 Jul 2022 14:13
(address . guix-patches@gnu.org)
cover.1658750358.git.philip@philipmcgrath.com
Hi,

This patch series adds AnyStyle, a Ruby library and command-line tool
for parsing academic reference lists and bibliographies. (There as also
an AGPL web application that runs at https://anystyle.io, but I
haven't packaged that in this series.)

-Philip

Philip McGrath (20):
gnu: Add ruby-wapiti.
gnu: Add ruby-namae.
gnu: Add itex2mml.
gnu: Add ruby-ritex.
gnu: Add ruby-latex-decode.
gnu: Add ruby-link-header.
gnu: Add ruby-rdf.
gnu: Add ruby-rdf-vocab.
gnu: Add ruby-bibtex-ruby.
gnu: Add ruby-unicode-scripts.
gnu: Add ruby-citeproc.
gnu: Add ruby-edtf.
gnu: Add ruby-gli.
gnu: Add ruby-anystyle-data.
gnu: Add ruby-anystyle.
gnu: Add anystyle.
gnu: ruby-anystyle-data: Don't write to installed gem.
gnu: ruby-anystyle: Initialize dictionary files.
gnu: anystyle: Add tests for dictionary adapters.
gnu: anystyle: Use GDBM by default.

gnu/local.mk | 3 +
gnu/packages/maths.scm | 53 ++
...ruby-anystyle-data-immutable-install.patch | 40 +
...uby-anystyle-fix-dictionary-populate.patch | 94 +++
.../patches/ruby-latex-decode-fix-test.patch | 66 ++
gnu/packages/ruby.scm | 751 ++++++++++++++++++
6 files changed, 1007 insertions(+)
create mode 100644 gnu/packages/patches/ruby-anystyle-data-immutable-install.patch
create mode 100644 gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch
create mode 100644 gnu/packages/patches/ruby-latex-decode-fix-test.patch


base-commit: 212ca81895b2baa819ea11a308ad21880b84a546
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 01/20] gnu: Add ruby-wapiti.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
666dd566788cc1eda22fc49bcee8a32f17f26627.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-wapiti): New variable.
---
gnu/packages/ruby.scm | 46 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

Toggle diff (63 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index c1e3dca807..9a75118946 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -28,6 +28,7 @@
;;; Copyright © 2021 EuAndreh <eu@euandre.org>
;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
;;; Copyright © 2021 Giovanni Biscuolo <g@xelera.eu>
+;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -12984,3 +12985,48 @@ (define-public ruby-blather
(description "Blather is a XMPP DSL for Ruby written on top of EventMachine
and Nokogiri.")
(license license:expat)))
+
+(define-public ruby-wapiti
+ (package
+ (name "ruby-wapiti")
+ (version "2.0.0")
+ ;; the gem archive lacks tests
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/wapiti-ruby")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1kawqw45j7mqk5zmwbn67x1vxiapdgm2ypqqz2bs9l5s7nglzr5b"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-builder
+ ruby-rexml))
+ (native-inputs
+ (list ruby-byebug
+ ruby-pry
+ ruby-rake-compiler
+ ruby-rspec
+ ruby-simplecov))
+ (arguments
+ (list
+ #:test-target "spec"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+ (lambda args
+ (substitute* "wapiti.gemspec"
+ (("`git ls-files spec`")
+ "`find spec -type f | sort`"))))
+ (add-before 'build 'compile
+ (lambda args
+ (invoke "rake" "compile"))))))
+ (home-page "https://github.com/inukshuk/wapiti-ruby")
+ (synopsis "Wicked fast Conditional Random Fields for Ruby")
+ (description
+ "The Wapiti-Ruby gem provides a wicked fast linear-chain @acronym{CRF,
+Conditional Random Fields} API for sequence segmentation and labelling. It is
+based on the codebase of @url{https://wapiti.limsi.fr, Wapiti}.")
+ (license license:bsd-2)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 02/20] gnu: Add ruby-namae.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
ac337fd68e84c0d8309f9fed027ab088f203b73a.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-namae): New variable.
---
gnu/packages/ruby.scm | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

Toggle diff (49 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 9a75118946..2f47d898db 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13030,3 +13030,42 @@ (define-public ruby-wapiti
Conditional Random Fields} API for sequence segmentation and labelling. It is
based on the codebase of @url{https://wapiti.limsi.fr, Wapiti}.")
(license license:bsd-2)))
+
+(define-public ruby-namae
+ (package
+ (name "ruby-namae")
+ (version "1.1.1")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "namae" version))
+ (sha256
+ (base32
+ "1j3nl1klkx3gymrdxfc1hlq4a8qlvhhl9aj5v1v08b9fz27sky0l"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ (list ruby-cucumber
+ ruby-rspec
+ ruby-simplecov))
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'allow-newer-cucumber
+ (lambda args
+ (substitute* "Gemfile"
+ (("'cucumber', '[^']*'")
+ "'cucumber'"))))
+ (replace 'check
+ ;; Avoid 'rake' so we don't need jeweler.
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (apply invoke
+ "rspec"
+ (find-files "spec" "_spec\\.rb$"))))))))
+ (home-page "https://github.com/berkmancenter/namae")
+ (synopsis "Parser for human names")
+ (description
+ "Namae (??) is a parser for human names. It recognizes personal names
+of various cultural backgrounds and tries to split them into their component
+parts (e.g., given and family names, honorifics etc.).")
+ (license (list license:bsd-2 license:agpl3+))))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 03/20] gnu: Add itex2mml.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
107638742c25f67113b279b72cfda6d70d09032e.1658750358.git.philip@philipmcgrath.com
* gnu/packages/maths.scm (itex2mml): New variable.
---
gnu/packages/maths.scm | 53 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)

Toggle diff (73 lines)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 6a84f47468..648358c681 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -52,6 +52,7 @@
;;; Copyright © 2021 Pierre-Antoine Bouttier <pierre-antoine.bouttier@univ-grenoble-alpes.fr>
;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1738,6 +1739,58 @@ (define-public h5check
HDF5 file is encoded according to the HDF File Format Specification.")
(license (license:x11-style "file://COPYING"))))
+(define-public itex2mml
+ (package
+ (name "itex2mml")
+ (version "1.6.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://golem.ph.utexas.edu"
+ "/~distler/blog/files/itexToMML-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "0pz51c0hfh2mg8xli0wj7hf92s3b7yf5r4114g8z8722lcm5gwiy"))
+ (snippet
+ #~(begin
+ (use-modules (guix build utils))
+ (delete-file-recursively "itex-binaries")))))
+ (build-system gnu-build-system)
+ (native-inputs
+ (list bison
+ flex))
+ (arguments
+ (list
+ #:make-flags #~(list (string-append "BINDIR=" #$output "/bin/")
+ (string-append "CC=" #$(cc-for-target)))
+ #:tests? #f ;; there are none
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (add-before 'build 'chdir
+ (lambda args
+ (chdir "itex-src")))
+ (add-before 'install 'make-bindir
+ (lambda args
+ (mkdir-p (string-append #$output "/bin"))))
+ (add-after 'install 'install-doc
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((doc-prefix (or (assoc-ref outputs "doc")
+ #$output))
+ (itex2mml+version (strip-store-file-name #$output))
+ (doc-dir (string-append doc-prefix
+ "/share/doc/"
+ itex2mml+version)))
+ (install-file "../README" doc-dir)))))))
+ (home-page "https://golem.ph.utexas.edu/~distler/blog/itex2MML.html")
+ (synopsis "LaTeX to XHTML/MathML converter")
+ (description
+ "The @command{itex2MML} utility is a stream filter. It takes text with
+embedded itex equations, converts the itex equations to MathML, and outputs
+the resulting text.")
+ (license (list license:lgpl2.0+ license:gpl2+ license:mpl1.1))))
+
(define-public itpp
(package
(name "itpp")
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 04/20] gnu: Add ruby-ritex.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
c781cb3a5fd7e2724d8c2612a71aea52d2a618a3.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-ritex): New variable.
---
gnu/packages/ruby.scm | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)

Toggle diff (52 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 2f47d898db..746bb9b6ce 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13069,3 +13069,45 @@ (define-public ruby-namae
of various cultural backgrounds and tries to split them into their component
parts (e.g., given and family names, honorifics etc.).")
(license (list license:bsd-2 license:agpl3+))))
+
+(define-public ruby-ritex
+ (package
+ (name "ruby-ritex")
+ (version "1.0.1")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ritex" version))
+ (sha256
+ (base32
+ "07rlm3nyz9sxzy1srxs6a31hw81r6w7swrb85fiwi393z8npwc3a"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ (list itex2mml))
+ (arguments
+ ;; thanks to the Gentoo packagers for figuring this out
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'fix-tests
+ (lambda* (#:key native-inputs inputs #:allow-other-keys)
+ (substitute* "test/mathml.rb"
+ (("\\./itex2MML")
+ ;; don't use the absolute path to avoid keeping a reference
+ "itex2MML")
+ (("cmp ',\\\\,\\\\,,,\\\\,'" orig)
+ (string-append "# " orig " # patched for Guix")))
+ (substitute* "test/answer-key.yaml"
+ (("- ,\\\\,\\\\,,,\\\\," orig)
+ (string-append "# " orig " # patched for Guix")))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "ruby" "-Ilib:." "test/all.rb")))))))
+ (home-page "https://rubygems.org/gems/ritex")
+ (synopsis "Convert expressions from WebTeX into MathML")
+ (description
+ "Ritex converts expressions from WebTeX into MathML. WebTeX is an
+adaptation of TeX math syntax for web display. Ritex makes inserting math
+into HTML pages easy. It supports most TeX math syntax as well as macros.")
+ ;; doesn't clearly state -only vs -or-later
+ (license license:gpl2)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 05/20] gnu: Add ruby-latex-decode.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
b23aaa64fa7586994943bbe6eded580e5313a0f0.1658750358.git.philip@philipmcgrath.com
* gnu/packages/patches/ruby-latex-decode-fix-test.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/ruby.scm (ruby-latex-decode): New variable.
---
gnu/local.mk | 1 +
.../patches/ruby-latex-decode-fix-test.patch | 66 +++++++++++++++++++
gnu/packages/ruby.scm | 50 ++++++++++++++
3 files changed, 117 insertions(+)
create mode 100644 gnu/packages/patches/ruby-latex-decode-fix-test.patch

Toggle diff (144 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 0c4edf6e56..3bc947f30c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1774,6 +1774,7 @@ dist_patch_DATA = \
%D%/packages/patches/rocm-comgr-3.1.0-dependencies.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
+ %D%/packages/patches/ruby-latex-decode-fix-test.patch \
%D%/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch \
%D%/packages/patches/ruby-sanitize-system-libxml.patch \
%D%/packages/patches/rustc-1.39.0-src.patch \
diff --git a/gnu/packages/patches/ruby-latex-decode-fix-test.patch b/gnu/packages/patches/ruby-latex-decode-fix-test.patch
new file mode 100644
index 0000000000..58d7d16258
--- /dev/null
+++ b/gnu/packages/patches/ruby-latex-decode-fix-test.patch
@@ -0,0 +1,66 @@
+From 698e39a251d433e2cd2934586a2dfc5e6582c4f9 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Sun, 24 Jul 2022 09:12:55 -0400
+Subject: [PATCH] Improve readability of whitespace tests
+
+This change fixes the test for `~x` in some environments in which it
+was previously failing.
+
+Related to https://github.com/inukshuk/latex-decode/issues/13
+---
+ features/step_definitions/latex.rb | 5 +++++
+ features/symbols.feature | 7 -------
+ features/whitespace.feature | 13 +++++++++++++
+ 3 files changed, 18 insertions(+), 7 deletions(-)
+ create mode 100644 features/whitespace.feature
+
+diff --git a/features/step_definitions/latex.rb b/features/step_definitions/latex.rb
+index 4b1b595..fca63c0 100644
+--- a/features/step_definitions/latex.rb
++++ b/features/step_definitions/latex.rb
+@@ -5,3 +5,8 @@ end
+ Then /^the result should be ('|")(.*)\1$/ do |quote,value|
+ expect(@result).to eq(value)
+ end
++
++# For whitespace or other characters that are hard to read in source code:
++Then /^I should get '([^']*)' \+ U\+(\h{4,}) \+ '([^']*)'$/ do |pre,code,post|
++ expect(@result).to eq(pre + code.hex.chr(Encoding::UTF_8) + post)
++end
+diff --git a/features/symbols.feature b/features/symbols.feature
+index 46d9a51..f8a5e84 100644
+--- a/features/symbols.feature
++++ b/features/symbols.feature
+@@ -12,10 +12,3 @@ Feature: Decode LaTeX symbol directives
+ | \\uparrow | ↑ |
+ | \\downarrow | ↓ |
+ | \\rightarrow | → |
+-
+- Scenarios: Whitespace
+- | latex | unicode | description |
+- | x\\,x | x x | small space |
+- | x~x | x x | non-breaking space |
+- | ~x |  x | non-breaking space |
+-
+diff --git a/features/whitespace.feature b/features/whitespace.feature
+new file mode 100644
+index 0000000..fe5b208
+--- /dev/null
++++ b/features/whitespace.feature
+@@ -0,0 +1,13 @@
++Feature: Decode LaTeX whitespace directives
++ As a hacker who works with LaTeX
++ I want to be able to decode LaTeX whitespace
++
++ Scenario Outline: LaTeX to Unicode transformation
++ When I decode the string '<latex>'
++ Then I should get <pre> + U+<code> + <post>
++
++ Scenarios: Whitespace
++ | latex | pre | code | post | description |
++ | x~x | 'x' | 00A0 | 'x' | non-breaking space |
++ | ~y | '' | 00A0 | 'y' | leading non-breaking space |
++ | z\\,z | 'z' | 2009 | 'z' | small space |
+--
+2.32.0
+
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 746bb9b6ce..fb9d5c53b9 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13111,3 +13111,53 @@ (define-public ruby-ritex
into HTML pages easy. It supports most TeX math syntax as well as macros.")
;; doesn't clearly state -only vs -or-later
(license license:gpl2)))
+
+(define-public ruby-latex-decode
+ (let ((commit "08cc2d4a2c1359abaeb2f1e1a9d78e16a546cf7c")
+ (revision "1"))
+ ;; The commit is a released version, but doesn't have a Git tag.
+ ;; Using Git rather than the gem makes it easier to patch.
+ (package
+ (name "ruby-latex-decode")
+ (version (git-version "0.3.2" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/latex-decode")
+ (commit commit)))
+ (sha256
+ (base32
+ "0clvnqms81i33iff3pr3zz8sbyknvg704zghd62ysqrlbi4jpcpk"))
+ (patches
+ ;; see https://github.com/inukshuk/latex-decode/issues/13
+ (search-patches "ruby-latex-decode-fix-test.patch"))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (native-inputs
+ (list ruby-byebug
+ ruby-cucumber
+ ruby-ritex
+ ruby-rspec))
+ (arguments
+ (list
+ #:test-target "cucumber"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'less-strict-dependencies
+ (lambda args
+ (substitute* "Gemfile"
+ (("'cucumber', '[^']*'")
+ "'cucumber'"))))
+ (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+ (lambda args
+ (substitute* "latex-decode.gemspec"
+ (("`git ls-files -- [{]test,spec,features[}]/\\*`")
+ "`find {test,spec,features} -type f | sort`")))))))
+ (home-page "https://github.com/inukshuk/latex-decode")
+ (synopsis "Convert LaTeX to Unicode")
+ (description
+ "This package provides a gem to convert LaTeX input to Unicode. Its
+original use was as an input filter for BibTeX-Ruby, but it can be used
+independently to decode LaTeX. Many of the patterns used by this Ruby gem are
+based on François Charette's equivalent Perl module @code{LaTeX::Decode}.")
+ (license license:gpl3+))))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 06/20] gnu: Add ruby-link-header.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
4de278fe252f3b20e37a852ca4fcd6980c5ae77e.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-link-header): New variable.
---
gnu/packages/ruby.scm | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

Toggle diff (31 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index fb9d5c53b9..d03d13371c 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13161,3 +13161,24 @@ (define-public ruby-latex-decode
independently to decode LaTeX. Many of the patterns used by this Ruby gem are
based on François Charette's equivalent Perl module @code{LaTeX::Decode}.")
(license license:gpl3+))))
+
+(define-public ruby-link-header
+ (package
+ (name "ruby-link-header")
+ (version "0.0.8")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "link_header" version))
+ (sha256
+ (base32
+ "1yamrdq4rywmnpdhbygnkkl9fdy249fg5r851nrkkxr97gj5rihm"))))
+ (build-system ruby-build-system)
+ (home-page "https://github.com/asplake/link_header")
+ (synopsis "Parse and format HTTP @code{Link} headers")
+ (description
+ "This gem provides the classes @code{LinkHeader} and
+@code{LinkHeader::Link}, which represent HTTP @code{Link} headers conforming
+to RFC 5988. Objects can be constructed from and converted to text or a
+JSON-friendly @code{Array} representation. They can also be used to generate
+corresponding HTML @code{link} elements.")
+ (license license:expat)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 07/20] gnu: Add ruby-rdf.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
bef1293a01e4b64ee40ffe98d9e11bb2ccd70ac7.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-rdf): New variable.
---
gnu/packages/ruby.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

Toggle diff (32 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index d03d13371c..d3b50f3202 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13182,3 +13182,25 @@ (define-public ruby-link-header
JSON-friendly @code{Array} representation. They can also be used to generate
corresponding HTML @code{link} elements.")
(license license:expat)))
+
+(define-public ruby-rdf
+ (package
+ (name "ruby-rdf")
+ (version "3.2.8")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rdf" version))
+ (sha256
+ (base32
+ "1cj0k8ryd8hgbkgqb5swvy6fiygxny3y5bln0my5gv6dbfv3gm20"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list ruby-link-header))
+ (arguments
+ (list #:tests? #f)) ;; tests have many cyclic dependencies
+ (home-page "https://ruby-rdf.github.io/")
+ (synopsis "Linked Data for Ruby")
+ (description
+ "This gem contains the core algorithms and classes used for doing basic
+programming with @acronym{RDF, Resource Description Framework} data,
+implemented in pure Ruby.")
+ (license license:unlicense)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 08/20] gnu: Add ruby-rdf-vocab.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
a7e12c0f54a5497ec3b0e58cd4052acdc5fef2b4.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-rdf-vocab): New variable.
---
gnu/packages/ruby.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

Toggle diff (32 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index d3b50f3202..9cf5b531fb 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13204,3 +13204,25 @@ (define-public ruby-rdf
programming with @acronym{RDF, Resource Description Framework} data,
implemented in pure Ruby.")
(license license:unlicense)))
+
+(define-public ruby-rdf-vocab
+ (package
+ (name "ruby-rdf-vocab")
+ (version "3.2.1")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rdf-vocab" version))
+ (sha256
+ (base32
+ "1bqmp9rfjvd56ajjz68ij6jla1wjf1fqg7bi4dpnjrsmn4pwaq7l"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-rdf))
+ (arguments
+ (list #:tests? #f)) ;; tests have many cyclic dependencies
+ (home-page "https://github.com/ruby-rdf/rdf-vocab")
+ (synopsis "Common RDF vocabularies")
+ (description
+ "This gem extends @code{ruby-rdf} with several common @acronym{RDF,
+Resource Description Framework} vocabularies.")
+ (license license:unlicense)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 09/20] gnu: Add ruby-bibtex-ruby.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
9dec20822de0192c8add11fbd619261f6db71172.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-bibtex-ruby): New variable.
---
gnu/packages/ruby.scm | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)

Toggle diff (53 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 9cf5b531fb..f0f7703b32 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13226,3 +13226,46 @@ (define-public ruby-rdf-vocab
"This gem extends @code{ruby-rdf} with several common @acronym{RDF,
Resource Description Framework} vocabularies.")
(license license:unlicense)))
+
+(define-public ruby-bibtex-ruby
+ (package
+ (name "ruby-bibtex-ruby")
+ (version "6.0.0")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "bibtex-ruby" version))
+ (sha256
+ (base32
+ "0vynqa8q9hwghw6sdljr304b5gh11nqzy5nwqqwxmgy7pqyf7qw5"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-latex-decode
+ ruby-rdf
+ ruby-rdf-vocab))
+ (native-inputs
+ (list ruby-byebug
+ ruby-cucumber
+ ruby-minitest
+ ruby-yard))
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'avoid-bundler
+ (lambda args
+ (substitute* "Rakefile"
+ (("require 'bundler" orig)
+ (string-append "# " orig " # patched for Guix"))
+ (("Bundler\\.setup" orig)
+ (string-append "true # " orig " # patched for Guix"))))))))
+ (home-page "https://github.com/inukshuk/bibtex-ruby")
+ (synopsis "Rubyist's Swiss Army knife for all things BibTeX")
+ (description
+ "BibTeX-Ruby is the Rubyist's Swiss Army knife for all things BibTeX.
+It includes a parser for all common BibTeX objects and a sophisticated name
+parser that tokenizes correctly formatted names. BibTeX-Ruby recognizes
+BibTeX string replacements, joins values containing multiple strings or
+variables, supports cross-references, and decodes common LaTeX formatting
+instructions to unicode. If you are in a hurry, it also allows for easy
+export/conversion to formats such as YAML, JSON, CSL, and XML (BibTeXML).")
+ (license license:gpl3+)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 10/20] gnu: Add ruby-unicode-scripts.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
b650aa4a972dcefc2fe5f355a7d0394527ab53ed.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-unicode-scripts): New variable.
---
gnu/packages/ruby.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

Toggle diff (32 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index f0f7703b32..99380739c0 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13269,3 +13269,25 @@ (define-public ruby-bibtex-ruby
instructions to unicode. If you are in a hurry, it also allows for easy
export/conversion to formats such as YAML, JSON, CSL, and XML (BibTeXML).")
(license license:gpl3+)))
+
+(define-public ruby-unicode-scripts
+ (package
+ (name "ruby-unicode-scripts")
+ (version "1.7.0")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "unicode-scripts" version))
+ (sha256
+ (base32
+ "1k7kbfk806zam129bp7pdiqkfb5hn51x149irzvjhs4xf22m4yvi"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ (list ruby-minitest))
+ (arguments
+ (list #:test-target "spec"))
+ (home-page "https://github.com/janlelis/unicode-scripts")
+ (synopsis "Unicode script classification library")
+ (description
+ "This gem provides a simple interface for classifying Ruby strings using
+the Unicode @code{Script} and @code{Script_Extensions} properties.")
+ (license license:expat)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 11/20] gnu: Add ruby-citeproc.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
93b10df99a5686fd904d5626da703a1ec865a031.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-citeproc): New variable.
---
gnu/packages/ruby.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (34 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 99380739c0..2cc83d2f82 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13291,3 +13291,27 @@ (define-public ruby-unicode-scripts
"This gem provides a simple interface for classifying Ruby strings using
the Unicode @code{Script} and @code{Script_Extensions} properties.")
(license license:expat)))
+
+(define-public ruby-citeproc
+ (package
+ (name "ruby-citeproc")
+ (version "1.0.10")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "citeproc" version))
+ (sha256
+ (base32
+ "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-namae))
+ (arguments
+ (list #:tests? #f)) ;; tests have a cyclic dependency
+ (home-page "https://github.com/inukshuk/citeproc")
+ (synopsis "Interface for Ruby citation processors")
+ (description
+ "CiteProc is a citation processor interface and citation data API based
+on the @acronym{CSL, Citation Style Language} specifications. To actually
+process citations, a dedicated processor engine is required: a pure Ruby
+engine is available in the @code{citeproc-ruby} gem.")
+ (license (list license:agpl3+ license:bsd-2))))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 12/20] gnu: Add ruby-edtf.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
b47856a395ca71fa441029b6f90f30c1d667c251.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-edtf): New variable.
---
gnu/packages/ruby.scm | 60 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)

Toggle diff (70 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 2cc83d2f82..32d5fe89ae 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13315,3 +13315,63 @@ (define-public ruby-citeproc
process citations, a dedicated processor engine is required: a pure Ruby
engine is available in the @code{citeproc-ruby} gem.")
(license (list license:agpl3+ license:bsd-2))))
+
+(define-public ruby-edtf
+ (package
+ (name "ruby-edtf")
+ (version "3.1.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/edtf-ruby")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "18j8xq8zmrn41cs2gpd1i87agi9905asvnjqndky2cqb5zg3q14g"))
+ (snippet
+ ;; remove generated file
+ #~(delete-file "lib/edtf/parser.rb"))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-activesupport))
+ (native-inputs
+ (list ruby-cucumber
+ ruby-rspec))
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'avoid-bundler
+ (lambda args
+ (substitute* "Rakefile"
+ (("require 'bundler" orig)
+ (string-append "# " orig " # patched for Guix"))
+ (("bundle exec racc")
+ "racc")
+ (("Cucumber::Rake::Task\\.new[(]:cucumber[)]" orig)
+ (string-append orig " do |c|\n"
+ " c.bundler = false # patched for Guix\n"
+ "end"))
+ (("Bundler\\.setup" orig)
+ (string-append "true # " orig " # patched for Guix")))))
+ (add-after 'avoid-bundler 'patch-cucumber-options
+ (lambda args
+ (substitute* "cucumber.yml"
+ ;; this option is not supported, at least in our configuration
+ ((" --publish-quiet")
+ ""))))
+ (add-before 'build 'compile
+ (lambda args
+ (invoke "rake" "racc")))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "rake")))))))
+ (home-page "https://github.com/inukshuk/edtf-ruby")
+ (synopsis "Ruby implementation of Extended Date/Time Format")
+ (description
+ "EDTF-Ruby provides a parser and an API for the @acronym{EDTF, Extended
+Date/Time Format} standard, implemented as an extension to Ruby's @code{Date}
+class.")
+ (license license:bsd-2)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 13/20] gnu: Add ruby-gli.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
a5d49ed40b7a97f569240e983dc83184e45a2c53.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-gli): New variable.
---
gnu/packages/ruby.scm | 52 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)

Toggle diff (62 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 32d5fe89ae..53269423e3 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13375,3 +13375,55 @@ (define-public ruby-edtf
Date/Time Format} standard, implemented as an extension to Ruby's @code{Date}
class.")
(license license:bsd-2)))
+
+(define-public ruby-gli
+ (package
+ (name "ruby-gli")
+ (version "2.21.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/davetron5000/gli")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "09b1r9hlx4dy2yq036nk7hc2nbswhia6q3na9v11z94yibc8mgja"))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (native-inputs
+ (list ruby-minitest
+ ruby-rainbow
+ ruby-rdoc
+ ruby-sdoc))
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'patch-gemspec-version
+ (lambda args
+ (substitute* "gli.gemspec"
+ ;; this trick fails in our build environment
+ (("require File\\.join[(]\\[" orig)
+ (string-append "# patched for Guix # " orig))
+ (("s\\.version = GLI::VERSION")
+ #$(string-append "s.version = '"
+ (package-version this-package)
+ "' # patched for Guix")))))
+ (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+ (lambda args
+ (substitute* "gli.gemspec"
+ (("`git ls-files -- [{]test,spec,features[}]/\\*`")
+ "`find {test,spec,features} -type f | sort`"))))
+ (add-after 'replace-another-git-ls-files 'fix-rubyopt
+ (lambda args
+ (substitute* "Rakefile"
+ (("ENV\\[\"RUBYOPT\"]")
+ "(ENV['RUBYOPT'] || '')")))))))
+ (home-page "https://davetron5000.github.io/gli/")
+ (synopsis "Git-Like Interface command-line parser")
+ (description
+ "GLI allows you to create command-line applications in Ruby with Git-Like
+Interfaces: that is, they take subcommands in the style of @command{git} and
+@command{gem}. GLI uses a simple domain-specific language, but retains all
+the power of the built-in @code{OptionParser}.")
+ (license license:asl2.0)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 14/20] gnu: Add ruby-anystyle-data.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
75161133584c76216f23a28fe9f461ca596d3cc5.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-anystyle-data): New variable.
---
gnu/packages/ruby.scm | 51 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)

Toggle diff (61 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 53269423e3..4efc3d5a41 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13427,3 +13427,54 @@ (define-public ruby-gli
@command{gem}. GLI uses a simple domain-specific language, but retains all
the power of the built-in @code{OptionParser}.")
(license license:asl2.0)))
+
+(define-public ruby-anystyle-data
+ (package
+ (name "ruby-anystyle-data")
+ (version "1.2.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/anystyle-data")
+ (commit version)))
+ (sha256
+ (base32
+ "025mxa7r9d7izqn6bc1wr40ijp64da0jh211prlpjl6svilgd6rm"))
+ (snippet
+ ;; remove pre-built file
+ #~(delete-file "lib/anystyle/data/dict.txt.gz"))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (arguments
+ (list
+ #:tests? #f ;; there are none
+ #:modules
+ `((guix build ruby-build-system)
+ (guix build utils)
+ (srfi srfi-26))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+ (lambda args
+ (substitute* "anystyle-data.gemspec"
+ (("`git ls-files lib README\\.md LICENSE`\\.split[(][^)]*[)]")
+ (string-append
+ "["
+ (string-join
+ (map (cut string-append "\"" <> "\"")
+ `("README.md"
+ "LICENSE"
+ "lib/anystyle/data.rb"
+ "lib/anystyle/data/dict.txt.gz"
+ "lib/anystyle/data/setup.rb"
+ "lib/anystyle/data/version.rb"))
+ ", ")
+ "]")))))
+ (add-before 'build 'compile-dict
+ (lambda args
+ (invoke "rake" "compile"))))))
+ (home-page "https://anystyle.io")
+ (synopsis "AnyStyle parser dictionary data")
+ (description
+ "This gem provides parser dictionary data for AnyStyle.")
+ (license license:bsd-2)))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 15/20] gnu: Add ruby-anystyle.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
6dea4f2c9c4e4cf182f48bac204e3f4c8a10967b.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-anystyle): New variable.
---
gnu/packages/ruby.scm | 71 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)

Toggle diff (81 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 4efc3d5a41..90f269e247 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13478,3 +13478,74 @@ (define-public ruby-anystyle-data
(description
"This gem provides parser dictionary data for AnyStyle.")
(license license:bsd-2)))
+
+(define-public ruby-anystyle
+ (let ((commit "50f1dd547d28ab4b830e45d70e840cb1898a37b0")
+ (revision "1"))
+ ;; Releases point to specific commits, but recent releases haven't been
+ ;; tagged in Git. Meanwhile, the rubygems archive lacks tests.
+ (package
+ (name "ruby-anystyle")
+ (version (git-version "1.3.14" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/anystyle")
+ (commit commit)))
+ (sha256
+ (base32
+ "0f4qcrywl1kl6qysn24lj3yp85ln4i7za7b7ld2fglyzwcggxwb0"))
+ (snippet
+ ;; There is an optional dependency on
+ ;; <https://github.com/feedbackmine/language_detector>, which
+ ;; seems like it was intended to be free software, but
+ ;; doesn't have a clear license statement. Maybe someone can
+ ;; do more sleuthing, or else find a replacement? See also
+ ;; <https://github.com/inukshuk/anystyle/issues/186>. For
+ ;; now, patch it out, but leave a pointer to follow up.
+ #~(begin
+ (use-modules (guix build utils))
+ (substitute* "Gemfile"
+ (("gem 'language_detector', github: '[^']*'" orig)
+ (string-append "# " orig " # unclear license")))
+ (substitute* "spec/anystyle/parser_spec.rb"
+ (("language: 'en'," orig)
+ (string-append "# " orig " # no lanugage_detector")))))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-anystyle-data
+ ruby-bibtex-ruby
+ ruby-namae
+ ruby-wapiti))
+ (native-inputs
+ (list ruby-byebug
+ ruby-citeproc
+ ruby-edtf
+ ruby-rspec
+ ruby-unicode-scripts))
+ (arguments
+ (list
+ #:test-target "spec"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'avoid-bundler
+ (lambda args
+ (substitute* "Rakefile"
+ (("require 'bundler" orig)
+ (string-append "# " orig " # patched for Guix"))
+ (("Bundler\\.setup" orig)
+ (string-append "true # " orig " # patched for Guix")))))
+ (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+ (lambda args
+ (substitute* "anystyle.gemspec"
+ (("`git ls-files spec`")
+ "`find spec -type f | sort`")))))))
+ (home-page "https://anystyle.io")
+ (synopsis "Fast and smart citation reference parsing (Ruby library)")
+ (description
+ "AnyStyle is a very fast and smart parser for academic reference lists
+and bibliographies. AnyStyle uses powerful machine learning heuristics based
+on Conditional Random Fields and aims to make it easy to train the model with
+data that is relevant to your parsing needs.")
+ (license license:bsd-2))))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 16/20] gnu: Add anystyle.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
272fe1f23b2adaf54276b105268ca7179e00dcd5.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (anystyle): New variable.
(ruby-anystyle)[description]: Mention it.
---
gnu/packages/ruby.scm | 125 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 124 insertions(+), 1 deletion(-)

Toggle diff (143 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 90f269e247..3feb07dcdc 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -66,6 +66,7 @@ (define-module (gnu packages ruby)
#:use-module (gnu packages libidn)
#:use-module (gnu packages linux)
#:use-module (gnu packages lsof)
+ #:use-module (gnu packages man)
#:use-module (gnu packages maths)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages networking)
@@ -13547,5 +13548,127 @@ (define-public ruby-anystyle
"AnyStyle is a very fast and smart parser for academic reference lists
and bibliographies. AnyStyle uses powerful machine learning heuristics based
on Conditional Random Fields and aims to make it easy to train the model with
-data that is relevant to your parsing needs.")
+data that is relevant to your parsing needs.
+
+This package provides the Ruby module @code{AnyStyle}. AnyStyle can also be
+used via the @command{anystyle} command-line utility or a web application,
+though the later has not yet been packaged for Guix.")
(license license:bsd-2))))
+
+(define-public anystyle
+ (package
+ (name "anystyle")
+ (version "1.3.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/anystyle-cli")
+ (commit version)))
+ (sha256
+ (base32
+ "1bazzms04cra8516q7vydmcm31yd0a7si1pxk4waffqy7lh0pksg"))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ (list ruby-anystyle
+ ruby-bibtex-ruby
+ ruby-gli))
+ (native-inputs
+ (list txt2man))
+ (arguments
+ (list
+ #:modules
+ `((guix build ruby-build-system)
+ (ice-9 popen)
+ (guix build utils))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'less-strict-dependencies
+ (lambda args
+ (substitute* "anystyle-cli.gemspec"
+ (("'bibtex-ruby', '[^']*'")
+ "'bibtex-ruby'"))))
+ (delete 'check) ;; there are no upstream tests
+ (add-after 'wrap 'check-cli
+ (lambda* (#:key tests? outputs #:allow-other-keys)
+ (when tests?
+ (with-output-to-file "check-cli.in"
+ (lambda ()
+ (for-each
+ display
+ '("Derrida, J. (1967). L’écriture et la différence "
+ "(1 éd.). Paris: Éditions du Seuil.\n"))))
+ (invoke (search-input-file outputs "/bin/anystyle")
+ "parse"
+ "check-cli.in"))))
+ (add-after 'wrap 'generate-man-page
+ ;; generating a man page also tests that the command actually runs
+ (lambda args
+ (define (run-with-output-file file command . args)
+ (format (current-output-port)
+ "running: ~s\nwith output to: ~s\n"
+ (cons command args)
+ file)
+ (unless (zero?
+ (with-output-to-file file
+ (lambda ()
+ (status:exit-val
+ (close-pipe
+ (apply open-pipe* OPEN_WRITE command args))))))
+ (error "command failed")))
+ (let ((anystyle (string-append #$output "/bin/anystyle")))
+ (run-with-output-file "intro.txt"
+ anystyle "--help")
+ (for-each (lambda (cmd)
+ (let ((file (string-append cmd ".txt")))
+ (run-with-output-file file
+ anystyle cmd "--help")
+ ;; indent headings to create subsections
+ (substitute* file
+ (("^[A-Z]" orig)
+ (string-append " " orig)))
+ ;; generate a section heading
+ (call-with-output-file
+ (string-append "section-" file)
+ (lambda (out)
+ (format out "\n\n~a COMMAND\n\n"
+ (string-upcase cmd))))))
+ '("check" "find" "parse" "train"))
+ (substitute* `("intro.txt"
+ "check.txt" "find.txt" "parse.txt" "train.txt")
+ ;; format "tag list" for txt2man"
+ ((" - ")
+ " ")
+ ;; restore formatting of the "name" sections
+ (("(anystyle|check|find|parse|train) ([A-Z])" _ cmd post)
+ (string-append cmd " - " post)))
+ (run-with-output-file "anystyle.txt"
+ "cat"
+ "intro.txt"
+ "section-check.txt" "check.txt"
+ "section-find.txt" "find.txt"
+ "section-parse.txt" "parse.txt"
+ "section-train.txt" "train.txt")
+ (run-with-output-file
+ "anystyle.1"
+ "txt2man"
+ "-v" "General Commands Manual" "-t" "anystyle" "-s" "1"
+ "-r" #$(string-append "anystyle-cli "
+ (package-version this-package))
+ "-B" "check" "-B" "find" "-B" "parse" "-B" "train"
+ "anystyle.txt")
+ (install-file "anystyle.1"
+ (string-append #$output "/share/man/man1"))))))))
+ (home-page "https://anystyle.io")
+ (synopsis "Fast and smart citation reference parsing")
+ (description
+ "AnyStyle is a very fast and smart parser for academic reference lists
+and bibliographies. AnyStyle uses powerful machine learning heuristics based
+on Conditional Random Fields and aims to make it easy to train the model with
+data that is relevant to your parsing needs.
+
+This package provides the @command{anystyle} command-line utility. AnyStyle
+can also be used as a Ruby library or as a web application, though the later
+has not yet been packaged for Guix.")
+ (license license:bsd-2)
+ (properties `((upstream-name . "anystyle-cli")))))
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 17/20] gnu: ruby-anystyle-data: Don't write to installed gem.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
850eda181196962254ba2bb516a8233216d18b42.1658750358.git.philip@philipmcgrath.com
* gnu/packages/patches/ruby-anystyle-data-immutable-install.patch: New
patch.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/ruby.scm (ruby-anystyle-data)[patches]: Use it.
---
gnu/local.mk | 1 +
...ruby-anystyle-data-immutable-install.patch | 40 +++++++++++++++++++
gnu/packages/ruby.scm | 2 +
3 files changed, 43 insertions(+)
create mode 100644 gnu/packages/patches/ruby-anystyle-data-immutable-install.patch

Toggle diff (73 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 3bc947f30c..54ac9f2f9f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1774,6 +1774,7 @@ dist_patch_DATA = \
%D%/packages/patches/rocm-comgr-3.1.0-dependencies.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
+ %D%/packages/patches/ruby-anystyle-data-immutable-install.patch \
%D%/packages/patches/ruby-latex-decode-fix-test.patch \
%D%/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch \
%D%/packages/patches/ruby-sanitize-system-libxml.patch \
diff --git a/gnu/packages/patches/ruby-anystyle-data-immutable-install.patch b/gnu/packages/patches/ruby-anystyle-data-immutable-install.patch
new file mode 100644
index 0000000000..d5d7149a67
--- /dev/null
+++ b/gnu/packages/patches/ruby-anystyle-data-immutable-install.patch
@@ -0,0 +1,40 @@
+From a6f5b37cd22daa6069d8fbef8cba9dc60a6731f6 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Sun, 24 Jul 2022 23:54:19 -0400
+Subject: [PATCH] `AnyStyle::Data.setup()`: adjust for immutable install
+
+Don't override the default paths for `Dictionary::Marshal`,
+`Dictionary::GDBM`, and `Dictionary:LDBM` to point to this gem: we can't
+populate such files without the 'anystyle' gem (which depends on this
+one), and we won't be able to write to the directory where this gem is
+installed later, so the files will never exist at those locations.
+---
+ lib/anystyle/data/setup.rb | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+diff --git a/lib/anystyle/data/setup.rb b/lib/anystyle/data/setup.rb
+index 17efdf8..08246fa 100644
+--- a/lib/anystyle/data/setup.rb
++++ b/lib/anystyle/data/setup.rb
+@@ -4,18 +4,6 @@ module AnyStyle
+
+ def self.setup
+ Dictionary.defaults[:source] = File.join(ROOT, 'dict.txt.gz')
+-
+- if defined? Dictionary::Marshal
+- Dictionary::Marshal.defaults[:path] = File.join(ROOT, 'dict.marshal')
+- end
+-
+- if defined? Dictionary::GDBM
+- Dictionary::GDBM.defaults[:path] = File.join(ROOT, 'dict.db')
+- end
+-
+- if defined? Dictionary::LDBM
+- Dictionary::LDBM.defaults[:path] = ROOT
+- end
+ end
+ end
+ end
+--
+2.32.0
+
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 3feb07dcdc..32ba09d283 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13444,6 +13444,8 @@ (define-public ruby-anystyle-data
(snippet
;; remove pre-built file
#~(delete-file "lib/anystyle/data/dict.txt.gz"))
+ (patches
+ (search-patches "ruby-anystyle-data-immutable-install.patch"))
(file-name (git-file-name name version))))
(build-system ruby-build-system)
(arguments
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 18/20] gnu: ruby-anystyle: Initialize dictionary files.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
04d6abe5dd2afb63a531c749104b7f6a84f21e38.1658750358.git.philip@philipmcgrath.com
For the GDBM and Marshal dictionary adapters to be useful with their
default settings, we must initialize their data files during the package
build: upstream would initialize them lazily, but that doesn't work with
an immutable installation directory (at least, not without more complex
patches). Otherwise, we would always end up rebuilding the dictionary at
startup, which is “slow” and “not recommended”.

* gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch: New
patch.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/ruby.scm (ruby-anystyle)[patches]: Use it.
[arguments]<#:phases>: Add 'populate-dictionaries' phase.
---
gnu/local.mk | 1 +
...uby-anystyle-fix-dictionary-populate.patch | 94 +++++++++++++++++++
gnu/packages/ruby.scm | 31 +++++-
3 files changed, 125 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch

Toggle diff (163 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 54ac9f2f9f..cb7bd1dc23 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1775,6 +1775,7 @@ dist_patch_DATA = \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
%D%/packages/patches/ruby-anystyle-data-immutable-install.patch \
+ %D%/packages/patches/ruby-anystyle-fix-dictionary-populate.patch \
%D%/packages/patches/ruby-latex-decode-fix-test.patch \
%D%/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch \
%D%/packages/patches/ruby-sanitize-system-libxml.patch \
diff --git a/gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch b/gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch
new file mode 100644
index 0000000000..b2e0498e8d
--- /dev/null
+++ b/gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch
@@ -0,0 +1,94 @@
+From fae622c8b77feebac66a538d76e4211de8bd8eb3 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Sun, 24 Jul 2022 21:50:44 -0400
+Subject: [PATCH] fix saving `AnyStyle::Dictionary` after `populate!`
+
+Some of these fixes are more generally applicable.
+
+A more robust solution might find data files using
+e.g. `Gem.find_files()`.
+---
+ lib/anystyle/dictionary/gdbm.rb | 6 ++++++
+ lib/anystyle/dictionary/marshal.rb | 31 ++++++++++++++++++++++++------
+ 2 files changed, 31 insertions(+), 6 deletions(-)
+
+diff --git a/lib/anystyle/dictionary/gdbm.rb b/lib/anystyle/dictionary/gdbm.rb
+index 754903c..c814df2 100644
+--- a/lib/anystyle/dictionary/gdbm.rb
++++ b/lib/anystyle/dictionary/gdbm.rb
+@@ -1,5 +1,6 @@
+ module AnyStyle
+ require 'gdbm'
++ require 'fileutils'
+
+ class Dictionary
+ class GDBM < Dictionary
+@@ -17,8 +18,13 @@ module AnyStyle
+
+ def open
+ close
++ FileUtils.mkdir_p(File.dirname(options[:path]))
+ @db = ::GDBM.new(*options.values_at(:path, :mode, :flags))
+ self
++ rescue Errno::EACCES
++ # GDBM.new tries this if :flags is nil, but not necessarily otherwise
++ @db = ::GDBM.new(options[:path],options[:mode],::GDBM::READER)
++ self
+ ensure
+ populate! if empty?
+ end
+diff --git a/lib/anystyle/dictionary/marshal.rb b/lib/anystyle/dictionary/marshal.rb
+index 761ca36..b9529d0 100644
+--- a/lib/anystyle/dictionary/marshal.rb
++++ b/lib/anystyle/dictionary/marshal.rb
+@@ -1,4 +1,6 @@
+ module AnyStyle
++ require 'fileutils'
++ require 'tempfile'
+ class Dictionary
+ class Marshal < Dictionary
+ @defaults = {
+@@ -10,17 +12,34 @@ module AnyStyle
+ end
+
+ def open
+- if File.exists?(options[:path])
+- @db = ::Marshal.load(File.open(options[:path]))
+- else
+- @db = {}
++ File.open(options[:path]) do |file|
++ @db = ::Marshal.load(file)
+ end
+ self
++ rescue Errno::ENOENT
++ @db = {}
++ self
+ ensure
+ if empty?
+ populate!
+- if File.writable?(options[:path])
+- ::Marshal.dump(db, File.open(options[:path], 'wb'))
++ tmp = nil
++ begin
++ FileUtils.mkdir_p(File.dirname(options[:path]))
++ tmp = Tempfile.create(File.basename(options[:path]),
++ File.dirname(options[:path]),
++ mode: File::Constants::BINARY)
++ pth = tmp.path()
++ ::Marshal.dump(db, tmp)
++ tmp.close()
++ File.rename(tmp.path, options[:path]) # will overwrite if exists
++ tmp = nil
++ rescue SystemCallError => e
++ warn(e.message)
++ ensure
++ if tmp then
++ tmp.close()
++ tmp.unlink()
++ end
+ end
+ end
+ end
+--
+2.32.0
+
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 32ba09d283..608b1ebe89 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13514,6 +13514,9 @@ (define-public ruby-anystyle
(substitute* "spec/anystyle/parser_spec.rb"
(("language: 'en'," orig)
(string-append "# " orig " # no lanugage_detector")))))
+ (patches
+ (search-patches
+ "ruby-anystyle-fix-dictionary-populate.patch"))
(file-name (git-file-name name version))))
(build-system ruby-build-system)
(propagated-inputs
@@ -13543,7 +13546,33 @@ (define-public ruby-anystyle
(lambda args
(substitute* "anystyle.gemspec"
(("`git ls-files spec`")
- "`find spec -type f | sort`")))))))
+ "`find spec -type f | sort`"))))
+ (add-after 'wrap 'populate-dictionaries
+ (lambda args
+ ;; We must initiallize these files here, or they will never be
+ ;; usable with the default settings. A more flexible approach
+ ;; might use something like `Gem.find_files()` or
+ ;; XDG_DATA_DIRS.
+ (with-output-to-file "initialize-dictionaries.rb"
+ (lambda ()
+ (display "
+require 'anystyle/dictionary' # must come before 'anystyle/data'
+require 'anystyle/data'
+[:marshal, :gdbm].each do |adapter|
+ AnyStyle::Dictionary.create({adapter: adapter}).open().close()
+end
+")))
+ (let* ((old-gems (getenv "GEM_PATH"))
+ (new-gems (string-append #$output
+ "/lib/ruby/vendor_ruby:"
+ old-gems)))
+ (dynamic-wind
+ (lambda ()
+ (setenv "GEM_PATH" new-gems))
+ (lambda ()
+ (invoke "ruby" "initialize-dictionaries.rb"))
+ (lambda ()
+ (setenv "GEM_PATH" old-gems)))))))))
(home-page "https://anystyle.io")
(synopsis "Fast and smart citation reference parsing (Ruby library)")
(description
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 20/20] gnu: anystyle: Use GDBM by default.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
00b611997823e6108278d44565bd0287f4fe7ebb.1658750358.git.philip@philipmcgrath.com
Since we have GDBM available, it offers a smaller memory footprint
and faster start-up.

* gnu/packages/ruby.scm (anystyle)[arguments]<#:phases>: Add phase
'change-default-dictionary-adapter'.
---
gnu/packages/ruby.scm | 8 ++++++++
1 file changed, 8 insertions(+)

Toggle diff (21 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 8991eb0927..655f49e725 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13620,6 +13620,14 @@ (define-public anystyle
(substitute* "anystyle-cli.gemspec"
(("'bibtex-ruby', '[^']*'")
"'bibtex-ruby'"))))
+ (add-before 'build 'change-default-dictionary-adapter
+ (lambda args
+ ;; Since we always have gdbm available, using it will give a
+ ;; faster startup time, which is particularly worth-while for
+ ;; a command-line tool.
+ (substitute* "bin/anystyle"
+ (("default_value: 'ruby',")
+ "default_value: 'gdbm', # patched for Guix"))))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
;; There are no tests, but let's use this opportunity to do a
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 14:16
[PATCH 19/20] gnu: anystyle: Add tests for dictionary adapters.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
398759e4792d0e3fe644d188eadf96976479eeb5.1658750358.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (anystyle)[arguments]: Instead of deleting the
'check' phase, replace it with a few tests. Add SRFI 1 to '#:modules'.
---
gnu/packages/ruby.scm | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)

Toggle diff (46 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 608b1ebe89..8991eb0927 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13611,6 +13611,7 @@ (define-public anystyle
#:modules
`((guix build ruby-build-system)
(ice-9 popen)
+ (srfi srfi-1)
(guix build utils))
#:phases
#~(modify-phases %standard-phases
@@ -13619,7 +13620,30 @@ (define-public anystyle
(substitute* "anystyle-cli.gemspec"
(("'bibtex-ruby', '[^']*'")
"'bibtex-ruby'"))))
- (delete 'check) ;; there are no upstream tests
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ ;; There are no tests, but let's use this opportunity to do a
+ ;; basic test of our own that things run ok. It works especially
+ ;; well to test this here since we know the 'ruby-anystile'
+ ;; package is in its final, immutable installed form.
+ (when tests?
+ (let ((common
+ `("require 'anystyle'"
+ ,(string-append
+ "pp AnyStyle.parse 'Derrida, J. (1967). L’écriture"
+ " et la différence (1 éd.). Paris: Éditions du"
+ " Seuil.'"))))
+ (for-each
+ (lambda (lines)
+ (apply invoke "ruby"
+ (fold-right (lambda (line lst)
+ (cons* "-e" line lst))
+ '()
+ lines)))
+ `(,common
+ ("require 'anystyle/dictionary'"
+ "AnyStyle::Dictionary.defaults[:adapter] = :gdbm"
+ ,@common)))))))
(add-after 'wrap 'check-cli
(lambda* (#:key tests? outputs #:allow-other-keys)
(when tests?
--
2.32.0
P
P
Philip McGrath wrote on 25 Jul 2022 17:10
[PATCH v2 05/20] gnu: Add ruby-latex-decode.
(address . 56759@debbugs.gnu.org)(name . Philip McGrath)(address . philip@philipmcgrath.com)
155f467d6ce99079effa0ddb6a1e486cda71e47d.1658761097.git.philip@philipmcgrath.com
* gnu/packages/ruby.scm (ruby-latex-decode): New variable.
---
Just about an hour after I sent this patch series, the upstream
maintainer of 'ruby-latex-decode' released a v0.4.0 incorporating the
patches I'd sent---so, here is a v2 of just this patch! I can re-send
the rest of the series if you want, but it seemed like that would be
more confusing.

-Philip

gnu/packages/ruby.scm | 52 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)

Toggle diff (62 lines)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 746bb9b6ce..5111b9ae2b 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13111,3 +13111,55 @@ (define-public ruby-ritex
into HTML pages easy. It supports most TeX math syntax as well as macros.")
;; doesn't clearly state -only vs -or-later
(license license:gpl2)))
+
+(define-public ruby-latex-decode
+ (package
+ (name "ruby-latex-decode")
+ (version "0.4.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/inukshuk/latex-decode")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "1f5j67ayd04pjkmzvn0hk7cr8yqvn0gyg9ns6a0vhzj2gwna9ihy"))
+ (file-name (git-file-name name version))))
+ (build-system ruby-build-system)
+ (native-inputs
+ (list ruby-cucumber
+ ruby-ritex
+ ruby-rspec))
+ (arguments
+ (list
+ #:test-target "cucumber"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'extract-gemspec 'avoid-bundler
+ (lambda args
+ (substitute* "Rakefile"
+ (("require 'bundler" orig)
+ (string-append "# " orig " # patched for Guix"))
+ (("Cucumber::Rake::Task\\.new[(]:cucumber[)]" orig)
+ (string-append orig " do |c|\n"
+ " c.bundler = false # patched for Guix\n"
+ "end"))
+ (("Bundler\\.setup" orig)
+ (string-append "true # " orig " # patched for Guix")))
+ (substitute* "cucumber.yml"
+ ;; thanks to avoiding bundler, we can't use this option
+ ((" --publish-quiet")
+ ""))))
+ (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+ (lambda args
+ (substitute* "latex-decode.gemspec"
+ (("`git ls-files -- [{]test,spec,features[}]/\\*`")
+ "`find {test,spec,features} -type f | sort`")))))))
+ (home-page "https://github.com/inukshuk/latex-decode")
+ (synopsis "Convert LaTeX to Unicode")
+ (description
+ "This package provides a gem to convert LaTeX input to Unicode. Its
+original use was as an input filter for BibTeX-Ruby, but it can be used
+independently to decode LaTeX. Many of the patterns used by this Ruby gem are
+based on François Charette's equivalent Perl module @code{LaTeX::Decode}.")
+ (license license:gpl3+)))
--
2.32.0
L
L
Ludovic Courtès wrote on 4 Aug 2022 11:57
Re: bug#56759: [PATCH 00/20] gnu: Add AnyStyle.
(name . Philip McGrath)(address . philip@philipmcgrath.com)(address . 56759-done@debbugs.gnu.org)
87czdgnxfk.fsf@gnu.org
Hi,

Philip McGrath <philip@philipmcgrath.com> skribis:

Toggle quote (5 lines)
> This patch series adds AnyStyle, a Ruby library and command-line tool
> for parsing academic reference lists and bibliographies. (There as also
> an AGPL web application that runs at <https://anystyle.io>, but I
> haven't packaged that in this series.)

The tool looks quite impressive.

Toggle quote (21 lines)
> gnu: Add ruby-wapiti.
> gnu: Add ruby-namae.
> gnu: Add itex2mml.
> gnu: Add ruby-ritex.
> gnu: Add ruby-latex-decode.
> gnu: Add ruby-link-header.
> gnu: Add ruby-rdf.
> gnu: Add ruby-rdf-vocab.
> gnu: Add ruby-bibtex-ruby.
> gnu: Add ruby-unicode-scripts.
> gnu: Add ruby-citeproc.
> gnu: Add ruby-edtf.
> gnu: Add ruby-gli.
> gnu: Add ruby-anystyle-data.
> gnu: Add ruby-anystyle.
> gnu: Add anystyle.
> gnu: ruby-anystyle-data: Don't write to installed gem.
> gnu: ruby-anystyle: Initialize dictionary files.
> gnu: anystyle: Add tests for dictionary adapters.
> gnu: anystyle: Use GDBM by default.

Applied, thanks!

Ludo’.
Closed
?