summary refs log tree commit diff
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@openmailbox.org>2015-08-07 00:10:43 +0200
committerMathieu Lirzin <mthl@openmailbox.org>2015-09-08 07:44:53 +0200
commit1cd4027cfdb82d43321c9c20f8bfad97cbd74413 (patch)
tree9478ade3acc5752db11d7b3dc47f8490449bda21
parent8531b326f166403298f238817db728c2d8df6bb9 (diff)
downloadguix-1cd4027cfdb82d43321c9c20f8bfad97cbd74413.tar.gz
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.
-rw-r--r--emacs/guix-main.scm2
-rw-r--r--gnu/packages/perl.scm6
-rw-r--r--gnu/packages/python.scm2
-rw-r--r--guix/ui.scm50
4 files changed, 42 insertions, 18 deletions
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 623da884f6..c9b84d36d9 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -293,7 +293,7 @@ Example:
     (license           . ,package-license-names)
     (source            . ,package-source-names)
     (synopsis          . ,package-synopsis)
-    (description       . ,package-description)
+    (description       . ,package-description-string)
     (home-url          . ,package-home-page)
     (outputs           . ,package-outputs)
     (non-unique        . ,(negate package-unique?))
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index c528516c15..12fed2b870 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1705,7 +1705,7 @@ particular command is available.")
     (home-page "http://search.cpan.org/dist/Devel-GlobalDestruction")
     (synopsis "Provides equivalent of ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls")
     (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))))
 
 (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
 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
-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
 environment, other than a fixed list of specified variables.  Compilation
 errors are rethrown automatically.")
@@ -1993,7 +1993,7 @@ in your modules in a \"Java-esque\" manner.")
     (description
      "Exporter::Lite is an alternative to Exporter, intended to provide a
 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/"
                               "Exporter-Lite-" version))
     (license (package-license perl))))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index f9ad95118b..feddd1a46a 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1174,7 +1174,7 @@ other Python program.")
      "EmPy is a system for embedding Python expressions and statements in
 template text; it takes an EmPy source file, processes it, and produces
 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
 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
diff --git a/guix/ui.scm b/guix/ui.scm
index 2f757547cf..ca5b844a43 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014 Deck Pickard <deck.r.pickard@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -45,6 +46,9 @@
   #:use-module (ice-9 regex)
   #:autoload   (system repl repl)  (start-repl)
   #:autoload   (system repl debug) (make-debug stack->vector)
+  #:use-module (texinfo)
+  #:use-module (texinfo plain-text)
+  #:use-module (texinfo string-utils)
   #:export (_
             N_
             P_
@@ -69,6 +73,7 @@
             switch-symlinks
             config-directory
             fill-paragraph
+            package-description-string
             string->recutils
             package->recutils
             package-specification->name+version+output
@@ -775,6 +780,28 @@ converted to a space; sequences of more than one line break are preserved."
 ;;; 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)
   "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
@@ -787,18 +814,9 @@ followed by \"+ \", which makes for a valid multi-line field value in the
                       '()
                       str)))
 
-(define* (package->recutils p port
-                            #:optional (width (or (and=> (getenv "WIDTH")
-                                                         string->number)
-                                                  80)))
+(define* (package->recutils p port #:optional (width (%text-width)))
   "Write to PORT a `recutils' record of package P, arranging to fit within
 WIDTH columns."
-  (define (description->recutils str)
-    (let ((str (P_ str)))
-      (string->recutils
-       (fill-paragraph str width
-                       (string-length "description: ")))))
-
   (define (dependencies->recutils packages)
     (let ((list (string-join (map package-full-name
                                   (sort packages package<?)) " ")))
@@ -842,9 +860,15 @@ WIDTH columns."
                        (chr       chr))
                       (or (and=> (package-synopsis p) P_)
                           "")))
-  (format port "description: ~a~%"
-          (and=> (package-description p) description->recutils))
-  (newline port))
+  (format port "~a~2%"
+          (string->recutils
+           (string-trim-right
+            (parameterize ((%text-width width))
+              (texi->plain-text
+               (string-append "description: "
+                              (or (and=> (package-description p) P_)
+                                  ""))))
+            #\newline))))
 
 (define (string->generations str)
   "Return the list of generations matching a pattern in STR.  This function