ui: Add package-description-string.

Provide support for Texinfo's markup in package description.

* guix/ui.scm (%text-width): New parameter.
  (texi->plain-text): New variable.
  (package->recutils): Use them.
  (package-description-string): New variable.
* emacs/guix-main.scm (%package-param-alist): Use it.
* gnu/packages/perl.scm (perl-devel-globaldestruction)
  (perl-devel-lexalias, perl-exporter-lite): Adapt to Texinfo's markup.
* gnu/packages/python.scm (python2-empy): Likewise.
This commit is contained in:
Mathieu Lirzin 2015-08-07 00:10:43 +02:00
parent 8531b326f1
commit 1cd4027cfd
4 changed files with 42 additions and 18 deletions

View File

@ -293,7 +293,7 @@ Example:
(license . ,package-license-names) (license . ,package-license-names)
(source . ,package-source-names) (source . ,package-source-names)
(synopsis . ,package-synopsis) (synopsis . ,package-synopsis)
(description . ,package-description) (description . ,package-description-string)
(home-url . ,package-home-page) (home-url . ,package-home-page)
(outputs . ,package-outputs) (outputs . ,package-outputs)
(non-unique . ,(negate package-unique?)) (non-unique . ,(negate package-unique?))

View File

@ -1705,7 +1705,7 @@ particular command is available.")
(home-page "http://search.cpan.org/dist/Devel-GlobalDestruction") (home-page "http://search.cpan.org/dist/Devel-GlobalDestruction")
(synopsis "Provides equivalent of ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls") (synopsis "Provides equivalent of ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls")
(description "Devel::GlobalDestruction provides a function returning the (description "Devel::GlobalDestruction provides a function returning the
equivalent of \"${^GLOBAL_PHASE} eq 'DESTRUCT'\" for older perls.") equivalent of \"$@{^GLOBAL_PHASE@} eq 'DESTRUCT'\" for older perls.")
(license (package-license perl)))) (license (package-license perl))))
(define-public perl-devel-lexalias (define-public perl-devel-lexalias
@ -1949,7 +1949,7 @@ constructors, which speeds code up at runtime by a significant amount. String
eval is not without its issues however - it's difficult to control the scope eval is not without its issues however - it's difficult to control the scope
it's used in (which determines which variables are in scope inside the eval), it's used in (which determines which variables are in scope inside the eval),
and it's easy to miss compilation errors, since eval catches them and sticks and it's easy to miss compilation errors, since eval catches them and sticks
them in $@ instead. This module attempts to solve these problems. It them in $@@ instead. This module attempts to solve these problems. It
provides an eval_closure function, which evals a string in a clean provides an eval_closure function, which evals a string in a clean
environment, other than a fixed list of specified variables. Compilation environment, other than a fixed list of specified variables. Compilation
errors are rethrown automatically.") errors are rethrown automatically.")
@ -1993,7 +1993,7 @@ in your modules in a \"Java-esque\" manner.")
(description (description
"Exporter::Lite is an alternative to Exporter, intended to provide a "Exporter::Lite is an alternative to Exporter, intended to provide a
lightweight subset of the most commonly-used functionality. It supports lightweight subset of the most commonly-used functionality. It supports
import(), @EXPORT and @EXPORT_OK and not a whole lot else.") import(), @@EXPORT and @@EXPORT_OK and not a whole lot else.")
(home-page (string-append "http://search.cpan.org/~neilb/" (home-page (string-append "http://search.cpan.org/~neilb/"
"Exporter-Lite-" version)) "Exporter-Lite-" version))
(license (package-license perl)))) (license (package-license perl))))

View File

@ -1174,7 +1174,7 @@ other Python program.")
"EmPy is a system for embedding Python expressions and statements in "EmPy is a system for embedding Python expressions and statements in
template text; it takes an EmPy source file, processes it, and produces template text; it takes an EmPy source file, processes it, and produces
output. This is accomplished via expansions, which are special signals to the output. This is accomplished via expansions, which are special signals to the
EmPy system and are set off by a special prefix (by default the at sign, @). EmPy system and are set off by a special prefix (by default the at sign, @@).
EmPy can expand arbitrary Python expressions and statements in this way, as EmPy can expand arbitrary Python expressions and statements in this way, as
well as a variety of special forms. Textual data not explicitly delimited in well as a variety of special forms. Textual data not explicitly delimited in
this way is sent unaffected to the output, allowing Python to be used in this way is sent unaffected to the output, allowing Python to be used in

View File

@ -3,6 +3,7 @@
;;; Copyright © 2013 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com> ;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
;;; Copyright © 2014 Deck Pickard <deck.r.pickard@gmail.com> ;;; Copyright © 2014 Deck Pickard <deck.r.pickard@gmail.com>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
@ -45,6 +46,9 @@
#:use-module (ice-9 regex) #:use-module (ice-9 regex)
#:autoload (system repl repl) (start-repl) #:autoload (system repl repl) (start-repl)
#:autoload (system repl debug) (make-debug stack->vector) #:autoload (system repl debug) (make-debug stack->vector)
#:use-module (texinfo)
#:use-module (texinfo plain-text)
#:use-module (texinfo string-utils)
#:export (_ #:export (_
N_ N_
P_ P_
@ -69,6 +73,7 @@
switch-symlinks switch-symlinks
config-directory config-directory
fill-paragraph fill-paragraph
package-description-string
string->recutils string->recutils
package->recutils package->recutils
package-specification->name+version+output package-specification->name+version+output
@ -775,6 +780,28 @@ converted to a space; sequences of more than one line break are preserved."
;;; Packages. ;;; Packages.
;;; ;;;
(define %text-width
(make-parameter (or (and=> (getenv "WIDTH") string->number)
80)))
(set! (@@ (texinfo plain-text) wrap*)
;; XXX: Monkey patch this private procedure to let 'package->recutils'
;; parameterize the fill of description field correctly.
(lambda strings
(let ((indent (fluid-ref (@@ (texinfo plain-text) *indent*))))
(fill-string (string-concatenate strings)
#:line-width (%text-width) #:initial-indent indent
#:subsequent-indent indent))))
(define (texi->plain-text str)
"Return a plain-text representation of texinfo fragment STR."
(stexi->plain-text (texi-fragment->stexi str)))
(define (package-description-string package)
"Return a plain-text representation of PACKAGE description field."
(and=> (package-description package)
(compose texi->plain-text P_)))
(define (string->recutils str) (define (string->recutils str)
"Return a version of STR where newlines have been replaced by newlines "Return a version of STR where newlines have been replaced by newlines
followed by \"+ \", which makes for a valid multi-line field value in the followed by \"+ \", which makes for a valid multi-line field value in the
@ -787,18 +814,9 @@ followed by \"+ \", which makes for a valid multi-line field value in the
'() '()
str))) str)))
(define* (package->recutils p port (define* (package->recutils p port #:optional (width (%text-width)))
#:optional (width (or (and=> (getenv "WIDTH")
string->number)
80)))
"Write to PORT a `recutils' record of package P, arranging to fit within "Write to PORT a `recutils' record of package P, arranging to fit within
WIDTH columns." WIDTH columns."
(define (description->recutils str)
(let ((str (P_ str)))
(string->recutils
(fill-paragraph str width
(string-length "description: ")))))
(define (dependencies->recutils packages) (define (dependencies->recutils packages)
(let ((list (string-join (map package-full-name (let ((list (string-join (map package-full-name
(sort packages package<?)) " "))) (sort packages package<?)) " ")))
@ -842,9 +860,15 @@ WIDTH columns."
(chr chr)) (chr chr))
(or (and=> (package-synopsis p) P_) (or (and=> (package-synopsis p) P_)
""))) "")))
(format port "description: ~a~%" (format port "~a~2%"
(and=> (package-description p) description->recutils)) (string->recutils
(newline port)) (string-trim-right
(parameterize ((%text-width width))
(texi->plain-text
(string-append "description: "
(or (and=> (package-description p) P_)
""))))
#\newline))))
(define (string->generations str) (define (string->generations str)
"Return the list of generations matching a pattern in STR. This function "Return the list of generations matching a pattern in STR. This function